432 Zeilen
		
	
	
		
			Kein EOL
		
	
	
		
			10 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			432 Zeilen
		
	
	
		
			Kein EOL
		
	
	
		
			10 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
/**
 | 
						|
 * Description: 
 | 
						|
 * Contenido Purge class to reset some datas and files.
 | 
						|
 *
 | 
						|
 * @package    Contenido Backend classes
 | 
						|
 * @version    1.0.0
 | 
						|
 * @author     Munkh-Ulzii Balidar
 | 
						|
 * @copyright  four for business AG <www.4fb.de>
 | 
						|
 * @license    http://www.contenido.org/license/LIZENZ.txt
 | 
						|
 * @link       http://www.4fb.de
 | 
						|
 * @link       http://www.contenido.org
 | 
						|
 * @since      file available since contenido release <= 4.8.12
 | 
						|
 *
 | 
						|
 * $Id: 
 | 
						|
 */
 | 
						|
 | 
						|
if(!defined('CON_FRAMEWORK')) {
 | 
						|
	die('Illegal call');
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * class Purge
 | 
						|
 *
 | 
						|
 */
 | 
						|
 | 
						|
class Purge {
 | 
						|
 | 
						|
	/**
 | 
						|
	* @var DB_ConLite $oDb
 | 
						|
	*/
 | 
						|
	private $oDb;
 | 
						|
	
 | 
						|
	/**
 | 
						|
	* @var $cfg
 | 
						|
	*/
 | 
						|
	private $cfg;
 | 
						|
	
 | 
						|
	/**
 | 
						|
	* @var $cfgClient
 | 
						|
	*/
 | 
						|
	private $cfgClient;
 | 
						|
	
 | 
						|
	/**
 | 
						|
	* @var string $sDefaultCacheDir
 | 
						|
	*/
 | 
						|
	private $sDefaultCacheDir = 'cache/';
 | 
						|
	
 | 
						|
	
 | 
						|
	/**
 | 
						|
	* @var string $sDefaultLogDir
 | 
						|
	*/
 | 
						|
	private $sDefaultLogDir = 'logs/';
 | 
						|
	
 | 
						|
	/**
 | 
						|
	* @var string $sDefaultVersionDir
 | 
						|
	*/
 | 
						|
	private $sDefaultVersionDir = 'version/';
 | 
						|
	
 | 
						|
	/**
 | 
						|
	* @var string $sDefaultCronjobDir
 | 
						|
	*/
 | 
						|
	private $sDefaultCronjobDir = 'cronjobs/';
 | 
						|
	
 | 
						|
	/**
 | 
						|
	 * @var array $aLogFileTypes
 | 
						|
	 */
 | 
						|
	private $aLogFileTypes;
 | 
						|
	
 | 
						|
	/**
 | 
						|
	 * @var array $aCronjobFileTypes
 | 
						|
	 */
 | 
						|
	private $aCronjobFileTypes;
 | 
						|
	
 | 
						|
	/**
 | 
						|
	 * Constructor of class
 | 
						|
	 * 
 | 
						|
	 * @param object $db
 | 
						|
	 * @param array $cfg
 | 
						|
	 * @param array $cfgClient
 | 
						|
	 */
 | 
						|
	public function __construct(&$db, $cfg, $cfgClient) {
 | 
						|
		$this->oDb = $db;
 | 
						|
		$this->cfg = $cfg;
 | 
						|
		$this->cfgClient = $cfgClient;
 | 
						|
		
 | 
						|
		$this->setLogFileTypes(array('txt'));
 | 
						|
		$this->setCronjobFileTypes(array('job'));
 | 
						|
	}
 | 
						|
	
 | 
						|
	/**
 | 
						|
	 * Reset the table con_code for a client
 | 
						|
	 * 
 | 
						|
	 * @param int $iClientId
 | 
						|
	 * @return boolean
 | 
						|
	 */
 | 
						|
	public function resetClientConCode($iClientId) {
 | 
						|
		$sSql = "DELETE FROM " . $this->cfg['tab']['code'] . 
 | 
						|
				   " WHERE idclient = " . $iClientId; 
 | 
						|
		
 | 
						|
		$this->oDb->query($sSql);
 | 
						|
		
 | 
						|
		return ($this->oDb->Error == '') ? true : false;
 | 
						|
	}
 | 
						|
	
 | 
						|
	/**
 | 
						|
	 * Reset the table con_cat_art for a client
 | 
						|
	 * 
 | 
						|
	 * @param int $iClientId
 | 
						|
	 * @return boolean
 | 
						|
	 */
 | 
						|
	public function resetClientConCatArt ($iClientId) {
 | 
						|
		$sSql = " UPDATE " . $this->cfg['tab']['cat_art'] . " cca, " . 
 | 
						|
						    $this->cfg['tab']['cat'] . " cc, " . 
 | 
						|
						    $this->cfg['tab']['art'] . " ca " . 
 | 
						|
			   " SET cca.createcode=1 " . 			    
 | 
						|
			   " WHERE cc.idcat = cca.idcat " . 
 | 
						|
			   " AND ca.idart = cca.idart " . 
 | 
						|
			   " AND cc.idclient = " . $iClientId .  
 | 
						|
			   " AND ca.idclient =" . $iClientId; 
 | 
						|
		$this->oDb->query($sSql);
 | 
						|
		
 | 
						|
		return ($this->oDb->Error == '') ? true : false;
 | 
						|
	}
 | 
						|
	
 | 
						|
	/**
 | 
						|
	 * Reset the table con_inuse
 | 
						|
	 *
 | 
						|
	 * @return boolean
 | 
						|
	 */
 | 
						|
	public function resetConInuse () {
 | 
						|
		$sSql = "DELETE FROM " . $this->cfg['tab']['inuse'];
 | 
						|
		$this->oDb->query($sSql);
 | 
						|
		
 | 
						|
		return ($this->oDb->Error == '') ? true : false;
 | 
						|
	}
 | 
						|
	
 | 
						|
	/**
 | 
						|
	 * Reset the table con_phplib_active_sessions
 | 
						|
	 *
 | 
						|
	 * @return boolean
 | 
						|
	 */
 | 
						|
	public function resetPHPLibActiveSession () {
 | 
						|
		$sSql = "DELETE FROM " . $this->cfg['tab']['phplib_active_sessions'];
 | 
						|
		$this->oDb->query($sSql);
 | 
						|
		return ($this->oDb->Error == '') ? true : false;
 | 
						|
	}
 | 
						|
	
 | 
						|
	/**
 | 
						|
	 * Reset the table con_inuse
 | 
						|
	 *
 | 
						|
	 * @return boolean
 | 
						|
	 */
 | 
						|
	public function resetUnusedSession () {
 | 
						|
		$sSql = "DELETE FROM " . $this->cfg['tab']['inuse'];
 | 
						|
		$this->oDb->query($sSql);
 | 
						|
		
 | 
						|
		return ($this->oDb->Error == '') ? true : false;
 | 
						|
	}
 | 
						|
	
 | 
						|
	/**
 | 
						|
	 * Clear the cache directory for a client
 | 
						|
	 * 
 | 
						|
	 * @param int $sClientName
 | 
						|
	 * @return boolean
 | 
						|
	 */
 | 
						|
	public function clearClientCache ($iClientId, $sCacheDir = 'cache/') {
 | 
						|
		$sClientDir = $this->getClientDir($iClientId);
 | 
						|
		
 | 
						|
		$sCacheDir = (trim($sCacheDir) == '' || trim($sCacheDir) == '/') ? $this->sDefaultCacheDir : $sCacheDir;
 | 
						|
		
 | 
						|
		if (is_dir($sClientDir . $sCacheDir)) {
 | 
						|
			$sCachePath = $sClientDir . $sCacheDir;
 | 
						|
			return ($this->clearDir($sCachePath, $sCachePath) ? true : false);	
 | 
						|
		} 
 | 
						|
		
 | 
						|
		return false;
 | 
						|
	} 
 | 
						|
	
 | 
						|
	/**
 | 
						|
	 * Clear the cache directory for a client
 | 
						|
	 * 
 | 
						|
	 * @param int $sClientName
 | 
						|
	 * @return boolean
 | 
						|
	 */
 | 
						|
	public function clearClientHistory ($iClientId, $bKeep, $iFileNumber, $sVersionDir = 'version/') {
 | 
						|
		$sClientDir = $this->getClientDir($iClientId);
 | 
						|
		
 | 
						|
		$sCacheDir = (trim($sVersionDir) == '' || trim($sVersionDir) == '/') ? $this->sDefaultVersionDir : $sVersionDir;
 | 
						|
		
 | 
						|
		if (is_dir($sClientDir . $sVersionDir)) {
 | 
						|
			$sVersionPath = $sClientDir . $sVersionDir;
 | 
						|
			$aTmpFile = array();
 | 
						|
			$this->clearDir($sVersionPath, $sVersionPath, $bKeep, $aTmpFile);
 | 
						|
		    if (count($aTmpFile) > 0 )
 | 
						|
		    foreach ($aTmpFile as $sKey => $aFiles) {
 | 
						|
		    	// sort the history files with filename
 | 
						|
		    	array_multisort($aTmpFile[$sKey]);
 | 
						|
 | 
						|
		    	$iCount = count($aTmpFile[$sKey]);
 | 
						|
		    	// find the total number to delete
 | 
						|
		    	$iCountDelete = ($iCount <= $iFileNumber) ? 0 : ($iCount - $iFileNumber); 
 | 
						|
		    	// delete the files
 | 
						|
		    	for ($i = 0; $i < $iCountDelete; $i++) {
 | 
						|
		    		if (file_exists($aTmpFile[$sKey][$i]) && is_writable($aTmpFile[$sKey][$i])) {
 | 
						|
		    			unlink($aTmpFile[$sKey][$i]);
 | 
						|
		    		} 
 | 
						|
		    	}
 | 
						|
		    }
 | 
						|
		    
 | 
						|
		    return true;
 | 
						|
		} 
 | 
						|
		
 | 
						|
		return false;
 | 
						|
	} 
 | 
						|
	
 | 
						|
	/**
 | 
						|
	 * Clear client log file
 | 
						|
	 * 
 | 
						|
	 * @param int $iClientId
 | 
						|
	 * @param string $sLogDir
 | 
						|
	 * @return boolean
 | 
						|
	 */
 | 
						|
	public function clearClientLog ($iClientId, $sLogDir = 'logs/') {
 | 
						|
		$sClientDir = $this->getClientDir($iClientId);
 | 
						|
		
 | 
						|
		$sLogDir = (trim($sLogDir) == '' || trim($sLogDir) == '/') ? $this->sDefaultLogDir : $sLogDir;
 | 
						|
 | 
						|
		if (is_dir($sClientDir . $sLogDir)) { 
 | 
						|
			return $this->emptyFile($sClientDir . $sLogDir, $this->aLogFileTypes);
 | 
						|
		} 
 | 
						|
		
 | 
						|
		return false;
 | 
						|
	}
 | 
						|
	
 | 
						|
	/**
 | 
						|
	 * Clear contenido log files
 | 
						|
	 * 
 | 
						|
	 * @param string $sLogDir
 | 
						|
	 * @return boolean
 | 
						|
	 */
 | 
						|
	public function clearConLog ($sLogDir = 'logs/') {
 | 
						|
		$sLogDir = (trim($sLogDir) == '' || trim($sLogDir) == '/') ? $this->sDefaultLogDir : $sLogDir;
 | 
						|
		
 | 
						|
		if (is_dir($sLogDir)) {
 | 
						|
			return $this->emptyFile($sLogDir, $this->aLogFileTypes);
 | 
						|
		} 
 | 
						|
		
 | 
						|
		return false;
 | 
						|
	}
 | 
						|
	
 | 
						|
	/**
 | 
						|
	 * Clear contenido log files
 | 
						|
	 * 
 | 
						|
	 * @param string $sLogDir
 | 
						|
	 * @return boolean
 | 
						|
	 */
 | 
						|
	public function clearConCronjob ($sCronjobDir = 'cronjobs/') {
 | 
						|
		$sCronjobDir = (trim($sCronjobDir) == '' || trim($sCronjobDir) == '/') ? $this->sDefaultCronjobDir : $sCronjobDir;
 | 
						|
		
 | 
						|
		if (is_dir($sCronjobDir)) { 
 | 
						|
			return $this->emptyFile($sCronjobDir, $this->aCronjobFileTypes);
 | 
						|
		} 
 | 
						|
		
 | 
						|
		return false;
 | 
						|
	}
 | 
						|
	
 | 
						|
	/**
 | 
						|
	 * Clear the cache directory for a client
 | 
						|
	 * 
 | 
						|
	 * @param int $sClientName
 | 
						|
	 * @return boolean
 | 
						|
	 */
 | 
						|
	public function clearConCache ($sCacheDir = 'cache/') {
 | 
						|
		
 | 
						|
		$sCacheDir = (trim($sCacheDir) == '' || trim($sCacheDir) == '/') ? $this->sDefaultCacheDir : $sCacheDir;
 | 
						|
		
 | 
						|
		if (is_dir($sCacheDir)) {
 | 
						|
			return ($this->clearDir($sCacheDir, $sCacheDir) ? true : false);	
 | 
						|
		} 
 | 
						|
		
 | 
						|
		return false;
 | 
						|
	} 
 | 
						|
	
 | 
						|
	/**
 | 
						|
	 * Delete all files and sub directories in a directory
 | 
						|
	 * 
 | 
						|
	 * @param string $sDirPath
 | 
						|
	 * @param string $sTmpDirPath - root directory not deleted
 | 
						|
	 * @param boolean $bKeep
 | 
						|
	 * @param array $aTmpFileList - files are temporarily saved
 | 
						|
	 * @return boolean 
 | 
						|
	 */
 | 
						|
	public function clearDir ($sDirPath, $sTmpDirPath, $bKeep = false, &$aTmpFileList = array()) {
 | 
						|
		if (is_dir($sDirPath) && ($handle = opendir($sDirPath))) {
 | 
						|
			$sTmp = str_replace(array('/', '..'), '', $sDirPath);
 | 
						|
		    while (false !== ($file = readdir($handle))) {
 | 
						|
		        if ($file != "." && $file != "..") {
 | 
						|
					$sFilePath = $sDirPath . '/' . $file;	
 | 
						|
					$sFilePath = str_replace('//', '/', $sFilePath);
 | 
						|
		            if (is_dir($sFilePath)) {
 | 
						|
		            	$this->clearDir($sFilePath, $sTmpDirPath, $bKeep, $aTmpFileList);
 | 
						|
		            } else {
 | 
						|
		            	if ($bKeep === false ) {
 | 
						|
		            		unlink($sFilePath);	
 | 
						|
		            	} else {
 | 
						|
		            		$aTmpFileList[$sTmp][] = $sFilePath;
 | 
						|
		            	}
 | 
						|
		            	
 | 
						|
		            } 
 | 
						|
		        }
 | 
						|
		    }
 | 
						|
		    if (str_replace(array('/', '..'), '', $sDirPath) !=  str_replace(array('/', '..'), '', $sTmpDirPath) && $bKeep === false) 
 | 
						|
		    	rmdir($sDirPath);
 | 
						|
	        
 | 
						|
	        closedir($handle);
 | 
						|
	        
 | 
						|
	        return true;
 | 
						|
		} else {
 | 
						|
			return false;
 | 
						|
		}	
 | 
						|
	}
 | 
						|
	
 | 
						|
	/**
 | 
						|
	 * Empty a file content
 | 
						|
	 * 
 | 
						|
	 * @param string $sFilePath
 | 
						|
	 * @return boolean
 | 
						|
	 */
 | 
						|
	public function emptyFile($sDirPath, $aTypes) {
 | 
						|
		$iCount = 0;
 | 
						|
		$iCountCleared = 0;
 | 
						|
		if (is_dir($sDirPath) && ($handle = opendir($sDirPath))) {
 | 
						|
		    while (false !== ($file = readdir($handle))) {
 | 
						|
		    	$sFileExt = trim(end(explode('.', $file)));
 | 
						|
 | 
						|
		    	if ($file != "." && $file != ".." &&  in_array($sFileExt, $aTypes)) {
 | 
						|
					$sFilePath = $sDirPath . '/' . $file;	
 | 
						|
					    	
 | 
						|
		        	if (file_exists($sFilePath) && is_writable($sFilePath)) {
 | 
						|
		        		$iCount++;
 | 
						|
		        		
 | 
						|
		        		//chmod($sFilePath, 0777);
 | 
						|
						if (fclose(fopen($sFilePath, 'w+'))) 
 | 
						|
							$iCountCleared++;	  	
 | 
						|
					} 
 | 
						|
		        }
 | 
						|
		    }
 | 
						|
		    
 | 
						|
		    // true if all files are cleaned 
 | 
						|
		    return ($iCount == $iCountCleared) ? true : false;
 | 
						|
		}   
 | 
						|
	 	
 | 
						|
		return false;
 | 
						|
	}
 | 
						|
	
 | 
						|
	/**
 | 
						|
	 * Get frontend directory name for a client
 | 
						|
	 * 
 | 
						|
	 * @param int $iClientId
 | 
						|
	 * @return string $sClientDir
 | 
						|
	 */
 | 
						|
	public function getClientDir($iClientId) {
 | 
						|
		$sClientDir = str_replace($this->cfg['path']['frontend'], '..', $this->cfgClient[$iClientId]['path']['frontend']);
 | 
						|
		
 | 
						|
		return $sClientDir;
 | 
						|
	}
 | 
						|
	
 | 
						|
	/**
 | 
						|
	 * Set log file types 
 | 
						|
	 * 
 | 
						|
	 * @param array $aTypes
 | 
						|
	 */
 | 
						|
	public function setLogFileTypes( $aTypes) {
 | 
						|
		if (count($aTypes) > 0) {
 | 
						|
			foreach($aTypes as $sType) {
 | 
						|
				$this->aLogFileTypes[] = $sType;
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
	
 | 
						|
	/**
 | 
						|
	 * Set cronjob file types 
 | 
						|
	 * 
 | 
						|
	 * @param array $aTypes
 | 
						|
	 */
 | 
						|
	public function setCronjobFileTypes($aTypes) {
 | 
						|
		if (count($aTypes) > 0) {
 | 
						|
			foreach($aTypes as $sType) {
 | 
						|
				$this->aCronjobFileTypes[] = $sType;
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
    /**
 | 
						|
     * updates con_sequence for all tables in db
 | 
						|
     * which are know in CL
 | 
						|
     * 
 | 
						|
     * @author Ortwin Pinke
 | 
						|
     * @since 4.8.17 CL
 | 
						|
     * 
 | 
						|
     * @return boolean 
 | 
						|
     */
 | 
						|
    public function updateConSequence() {
 | 
						|
 | 
						|
        $aDbTables = array();
 | 
						|
        $sSql = 'SHOW TABLES';
 | 
						|
        $this->oDb->query($sSql);
 | 
						|
 | 
						|
        while($this->oDb->next_record()) {
 | 
						|
            $aTmp = $this->oDb->toArray();
 | 
						|
            $aDbTables[] = $aTmp[0];
 | 
						|
        }    
 | 
						|
 | 
						|
        $iLoop = 0;
 | 
						|
        //only use tables which are listet in tab-cfg
 | 
						|
        foreach ($this->cfg['tab'] as $sTable) {
 | 
						|
            if(in_array($sTable, $aDbTables)) {
 | 
						|
                dbUpdateSequence($this->cfg['tab']['sequence'], $sTable, $this->oDb);
 | 
						|
                if($this->oDb->Errno > 0) {
 | 
						|
                    return false;
 | 
						|
                }
 | 
						|
                
 | 
						|
                $iLoop++;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        return true;
 | 
						|
        // not working with tables not listed in tab-cfg
 | 
						|
        // return ($iLoop == count($aDbTables))?true:false;
 | 
						|
    }
 | 
						|
}
 | 
						|
?>
 |