<? 
class zip
{//DigiHex Systems\\


	function zip($archiwum, $sciezka, $exclude=false, $remove_all_path=false) {
		if(!is_dir($sciezka) && !is_file($sciezka)) return false;
		if(!is_array($exclude)) $exclude=array();

		require_once(LIBS_PATH.'/system/pear.php');
		require_once($this->PATH.'/zip.lib.php');
		$files=$this->zip_file_list($sciezka, $archiwum, $exclude);

		$params=array(
//			'add_path'=>'',
			'remove_path' => str_replace('\\','/',ROOT_PATH),
			'remove_all_path' => $remove_all_path,
//			'no_compression'=>true,
		);

		$zipfile=new Archive_Zip($archiwum);
		$zipfile->create($files, $params, $archiwum);
		if(@file_exists($archiwum) && filesize($archiwum)>0) {
			return true;
		} else {
			@unlink($archiwum);
		}
	}


	function zip_file_list($dirname, $archive, $exclude) {
		if(!is_dir($dirname) && !is_file($dirname)) return false;
		$dscan=array(realpath($dirname));
		$darr=array();
		while(!empty($dscan)) {
			$dcur=array_pop($dscan);
			$darr[]=$dcur;

			$skipped=false;
			if(count($exclude)>0) foreach($exclude as $ex_dir) { if(stristr($darr[$i], $ex_dir)) { $skipped=true; break; } }
			if(is_file($dcur) && $skipped==false) {
				if($dcur!=$archive) $lista[]=$dcur;
			} else {
				if($d=opendir($dcur)) {
					while($f=readdir($d)) {
						if($f=='.' || $f=='..') continue;
						$f=$dcur.'/'.$f;
						if(is_dir($f)) {
							$dscan[]=$f; 
						} else {
							$skipped=false;
							if(count($exclude)>0) foreach($exclude as $ex_dir) { if(stristr($f, $ex_dir)) { $skipped=true; break; } }
							if($skipped==false) $lista[]=$f;
						}
					}
					closedir($d);
				}
			}
		}

		for($i=count($darr)-1; $i>=1; $i--) {
			$skipped=false;
			if(count($exclude)>0) foreach($exclude as $ex_dir) { if(stristr($darr[$i], $ex_dir)) { $skipped=true; break; } }
			if($skipped==false) $lista[]=$darr[$i];
		}

		return $lista;
	}


	function unzip($archiwum, $cel=false, $remove_all_path=false) {
		if(!file_exists($archiwum) || filesize($archiwum)==0) return false;
		require_once(LIBS.'/system/pear.php');
		require_once($this->DIR.'/zip.lib.php');

		if(!empty($cel)) {
			if(!is_dir($cel)) mkdir($cel);
		} else {
			$cel = dirname($archiwum);
		}

		$params=array(
			'add_path' => $cel,
			'remove_all_path' => $remove_all_path
		);

		$zipfile=new Archive_Zip($archiwum);
		$zipfile->extract($params);
	}


}//DigiHex Systems\\
?>