<?php
/**
 * Project: Contenido
 * 
 * Description: 
 * Contenido Purge include file to reset some datas(con_code, con_cat_art) and files (log, cache, history)
 *
 * @package    Contenido Backend includes
 * @version    $Rev$
 * @author     Munkh-Ulzii Balidar
 * @author     Ortwin Pinke
 * @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');
}

cInclude('includes', 'functions.database.php');

$tpl->reset();

$iClientSelectSize = 4;
$oClient = new Client();
$aAvailableClient = $oClient->getAvailableClients();

$sInfoMsg = '';

$action = 'do_purge';
if (($action == "do_purge") && (!$perm->have_perm_area_action_anyitem($area, $action))) {
    $notification->displayNotification("error", i18n("Permission denied"));
} else {
    if (isset($_POST['send']) && $_POST['send'] == 'store') {
        $aClientToClear = array();
        $aClientName = array();
        
        if (isset($_POST['selectClient']) && $_POST['selectClient'] == 'all') {
        	// selected all clients
            
            foreach ($aAvailableClient as $iClientId => $aClient) {
                $aClientToClear[] = $iClientId;
            }
            
        } else if (isset($_POST['purge_clients']) && is_array($_POST['purge_clients']) && count($_POST['purge_clients']) > 0) {
        	// selected multiple clients
        	foreach ($_POST['purge_clients'] as $iClientId) {
        		$aClientToClear[] = (int)$iClientId;
        	}
        	 
        } else if (isset($_POST['purge_clients']) && (int)$_POST['purge_clients'] > 0) {
        	// selected single client
        	$aClientToClear[] = (int)$_POST['purge_clients'];
        }
        
        $bError = false;
        $sErrorMsg = '';
        $oPurge = new Purge($db, $cfg, $cfgClient);
        
        if (count($aClientToClear) > 0) {
        	// execute the selected actions
        	
            foreach ($aAvailableClient as $iClientId => $aClient) {
                $aClientName[$iClientId] = $aClient['name'];
            }
        	
	        
	        foreach ($aClientToClear as $iClientId) {
	            $iClientId = (int) $iClientId;
	            if ($iClientId > 0) { 
	                if (isset($_POST['conCode']) && $_POST['conCode'] == 1) {
	                    if (!$oPurge->resetClientConCode($iClientId)) {
	                        $bError = true;
	                        $sErrorMsg .= i18n("Client ") . $aClientName[$iClientId] . ': ' . 
	                               sprintf(i18n("The entries of %s table are not deleted!"), $cfg['tab']['code']) . "<br />";
	                    }
	                } 
	                
	                if (isset($_POST['conCatArt']) && $_POST['conCatArt'] == 1) {
	                    if (!$oPurge->resetClientConCatArt($iClientId)) {
	                        $bError = true;
	                        $sErrorMsg .= i18n("Client ") . $aClientName[$iClientId] . ': ' . 
	                               sprintf(i18n("The %s is not updated!"), $cfg['tab']['cat_art']) . "<br />";
	                    }
	                }
	                
	                if (isset($_POST['clientCache']) && $_POST['clientCache'] == 1) {
	                    if (!$oPurge->clearClientCache($iClientId)) {
	                        $bError = true;
	                        $sErrorMsg .= i18n("Client ") . $aClientName[$iClientId] . ': ' . 
	                               i18n("The cache is not deleted!") . "<br />";
	                    }
	                }
	                
	                if (isset($_POST['clientLog']) && $_POST['clientLog'] == 1) {
	                    if (!$oPurge->clearClientLog($iClientId)) {
	                        $bError = true;
	                        $sErrorMsg .= i18n("Client ") . $aClientName[$iClientId] . ': ' . 
	                               i18n("The log is not deleted!") . "<br />";
	                    }
	                }
	                
	                if (isset($_POST['clientHistory']) && $_POST['clientHistory'] == 1) {
	                    $bKeep = ($_POST['keepHistory'] == 1 && (int) $_POST['keepHistoryNumber'] > 0) ? true : false;
	                    if (!$oPurge->clearClientHistory($iClientId, $bKeep, (int) $_POST['keepHistoryNumber'])) {
	                        $bError = true;
	                        $sErrorMsg .= i18n("Client ") . $aClientName[$iClientId] . ': ' . 
	                               i18n("The history is not deleted!") . "<br />";
	                    }
	                }
	                
	                if ($sErrorMsg != '') {
	                    $sErrorMsg .= "<br />";
	                }
	                
	            }
	        }
        }        
        
	        if (isset($_POST['conInuse']) && $_POST['conInuse'] == 1) {
	            if (!$oPurge->resetConInuse()) {
	                $bError = true;
	                $sErrorMsg .= sprintf(i18n("The entries of %s table are not deleted!"), $cfg['tab']['inuse']) . "<br />";
	            }
	        }
	        
	        if (isset($_POST['conPHPLibActiveSession']) && $_POST['conPHPLibActiveSession'] == 1) {
	            if (!$oPurge->resetPHPLibActiveSession()) {
	                $bError = true;
	                $sErrorMsg .= sprintf(i18n("The entries of %s table are not deleted!"), $cfg['tab']['phplib_active_sessions']) . 
	                     "<br />";
	            }
	        }
	        
	        if (isset($_POST['conLog']) && $_POST['conLog'] == 1) {
	            if (!$oPurge->clearConLog()) {
	                $bError = true;
	                $sErrorMsg .= i18n("The contenido log is not cleaned!") . "<br />";
	            }
	        }
	        
	        if (isset($_POST['conCache']) && $_POST['conCache'] == 1) {
	            if (!$oPurge->clearConCache()) {
	                $bError = true;
	                $sErrorMsg .= i18n("The contenido cache is not deleted!") . "<br />";
	            }
	        }
	        
	        if (isset($_POST['conCronjobs']) && $_POST['conCronjobs'] == 1) {
	            if (!$oPurge->clearConCronjob()) {
	                $bError = true;
	                $sErrorMsg .= i18n("The contenido cronjobs are not cleaned!") . "<br />";
	            }
	        }
         
         if (isset($_POST['conSequence']) && $_POST['conSequence'] == 1) {
	            if (!$oPurge->updateConSequence()) {
	                $bError = true;
	                $sErrorMsg .= i18n("Update of sequence table not completed!") . "<br />";
	            }
	        }
	        
	        if ($bError === false) {
	            $sInfoMsg = $notification->returnNotification("info", i18n("The changes were successfully executed."));
	        } else {
	            $sErrorComplete = i18n("The changes were not all successfully completed.") . "<br /><br />" . $sErrorMsg;
	            $sInfoMsg = $notification->returnNotification("error", $sErrorComplete);
	        } 
    	}
    
    $oHtmlSelectHour = new  cHTMLSelectElement ('purge_clients[]', '', 'client_select');
    
    $i = 0;
    foreach ($aAvailableClient as $iClientId => $aClient) {
        $oHtmlSelectOption = new cHTMLOptionElement($aClient['name'], $iClientId, false);
        $oHtmlSelectHour->addOptionElement($i, $oHtmlSelectOption);
        $i++;
    }
    
    $oHtmlSelectHour->setMultiselect();
    $oHtmlSelectHour->setSize($iClientSelectSize);
    $sSelectClient = $oHtmlSelectHour->toHtml();
    $tpl->set('s', 'SELECT_CLIENT', $sSelectClient);    
    
    $tpl->set('s', 'TITLE', i18n("System purge"));
    $tpl->set('s', 'ERR_MSG_SELECT_CLIENT', i18n("No Client selected!"));   
    
    $tpl->set('s', 'CONTENIDO', $contenido);    
    
    $tpl->set('s', 'GROUP_CLIENT', i18n("Client"));  
    $tpl->set('s', 'CLIENT_SELECT_ALL', i18n("all clients"));   
    $tpl->set('s', 'CLIENT_SELECT', i18n("from list")); 
    $tpl->set('s', 'CLIENT_CHOOSE', i18n("Select clients"));    
    $tpl->set('s', 'CON_CODE', sprintf(i18n("Reset the table %s"), $cfg['tab']['code']));   
    $tpl->set('s', 'CON_CAT_ART', sprintf(i18n("Activate the code generation in %s"), $cfg['tab']['code'], $cfg['tab']['cat_art']));    
    $tpl->set('s', 'CON_INUSE', sprintf(i18n("Reset the table %s"), $cfg['tab']['inuse']));
    $tpl->set('s', 'CLIENT_CACHE', i18n("Clear client cache")); 
    $tpl->set('s', 'CLIENT_LOG', i18n("Clear client log file"));    
    $tpl->set('s', 'CLIENT_HISTORY', i18n("Clear client history")); 
    $tpl->set('s', 'NUMBER_OF_HISTORY', i18n("Keep last histories"));   
    
    $tpl->set('s', 'GROUP_CONTENIDO', i18n("Contenido"));   
    $tpl->set('s', 'CON_LOG', i18n("Clear contenido log file"));    
    $tpl->set('s', 'CON_ACTIVE_SESSION', sprintf(i18n("Reset the table %s"), $cfg['tab']['phplib_active_sessions']));   
    $tpl->set('s', 'CON_CACHE', i18n("Clear contenido cache")); 
    $tpl->set('s', 'CON_CRONJOB', i18n("Reset cronjobs"));
    $tpl->set('s', 'CON_SEQUENCE', i18n("Update sequence table"));  
    
    $tpl->set('s', 'BOX_TITLE', i18n("System purge"));  
    $tpl->set('s', 'BOX_MESSAGE', i18n("These changes can not be cancelled.") . '<br /> <br />' . i18n("Do you really want to complete it?"));  
        
    $tpl->set('s', 'INFO_MSG_BOX', $sInfoMsg);
    $tpl->set('s', 'ERR_MSG_BOX', $notification->returnNotification("error", ''));
    
    $tpl->set('s', 'ERR_MSG_NO_ACTION', i18n("No action selected!"));
    
    $tpl->set('s', 'SUBMIT_TEXT', i18n("Send"));
    
    $tpl->generate($cfg['path']['templates'] . $cfg['templates']['system_purge']);        
}
?>