Вход Регистрация
Файл: contao-3.5.8/system/modules/core/classes/PurgeData.php
Строк: 121
<?php

/**
 * Contao Open Source CMS
 *
 * Copyright (c) 2005-2016 Leo Feyer
 *
 * @license LGPL-3.0+
 */

namespace Contao;


/**
 * Maintenance module "purge data".
 *
 * @author Leo Feyer <https://github.com/leofeyer>
 */
class PurgeData extends Backend implements executable
{

    
/**
     * Return true if the module is active
     *
     * @return boolean
     */
    
public function isActive()
    {
        return (
Input::post('FORM_SUBMIT') == 'tl_purge');
    }


    
/**
     * Generate the module
     *
     * @return string
     */
    
public function run()
    {
        
$arrJobs = array();

        
/** @var BackendTemplate|object $objTemplate */
        
$objTemplate = new BackendTemplate('be_purge_data');
        
$objTemplate->isActive $this->isActive();

        
// Confirmation message
        
if ($_SESSION['CLEAR_CACHE_CONFIRM'] != '')
        {
            
$objTemplate->message sprintf('<p class="tl_confirm">%s</p>' "n"$_SESSION['CLEAR_CACHE_CONFIRM']);
            
$_SESSION['CLEAR_CACHE_CONFIRM'] = '';
        }

        
// Add potential error messages
        
if (!empty($_SESSION['TL_ERROR']) && is_array($_SESSION['TL_ERROR']))
        {
            foreach (
$_SESSION['TL_ERROR'] as $message)
            {
                
$objTemplate->message .= sprintf('<p class="tl_error">%s</p>' "n"$message);
            }

            
$_SESSION['TL_ERROR'] = array();
        }

        
// Run the jobs
        
if (Input::post('FORM_SUBMIT') == 'tl_purge')
        {
            
$purge Input::post('purge');

            if (!empty(
$purge) && is_array($purge))
            {
                foreach (
$purge as $group=>$jobs)
                {
                    foreach (
$jobs as $job)
                    {
                        list(
$class$method) = $GLOBALS['TL_PURGE'][$group][$job]['callback'];
                        
$this->import($class);
                        
$this->$class->$method();
                    }
                }
            }

            
$_SESSION['CLEAR_CACHE_CONFIRM'] = $GLOBALS['TL_LANG']['tl_maintenance']['cacheCleared'];
            
$this->reload();
        }

        
// Tables
        
foreach ($GLOBALS['TL_PURGE']['tables'] as $key=>$config)
        {
            
$arrJobs[$key] = array
            (
                
'id' => 'purge_' $key,
                
'title' => $GLOBALS['TL_LANG']['tl_maintenance_jobs'][$key][0],
                
'description' => $GLOBALS['TL_LANG']['tl_maintenance_jobs'][$key][1],
                
'group' => 'tables',
                
'affected' => ''
            
);

            
// Get the current table size
            
foreach ($config['affected'] as $table)
            {
                
$objCount $this->Database->execute("SELECT COUNT(*) AS count FROM " $table);
                
$arrJobs[$key]['affected'] .= '<br>' $table ': <span>' sprintf($GLOBALS['TL_LANG']['MSC']['entries'], $objCount->count) . ', ' $this->getReadableSize($this->Database->getSizeOf($table), 0) . '</span>';
            }
        }

        
// Folders
        
foreach ($GLOBALS['TL_PURGE']['folders'] as $key=>$config)
        {
            
$arrJobs[$key] = array
            (
                
'id' => 'purge_' $key,
                
'title' => $GLOBALS['TL_LANG']['tl_maintenance_jobs'][$key][0],
                
'description' => $GLOBALS['TL_LANG']['tl_maintenance_jobs'][$key][1],
                
'group' => 'folders',
                
'affected' => ''
            
);

            
// Get the current folder size
            
foreach ($config['affected'] as $folder)
            {
                
$total 0;

                
// Only check existing folders
                
if (is_dir(TL_ROOT '/' $folder))
                {
                    
/** @var SplFileInfo[] $objFiles */
                    
$objFiles = new RecursiveIteratorIterator(
                        new 
RecursiveDirectoryIterator(
                            
TL_ROOT '/' $folder,
                            
FilesystemIterator::UNIX_PATHS|FilesystemIterator::FOLLOW_SYMLINKS|FilesystemIterator::SKIP_DOTS
                        
)
                    );

                    
// Ignore .gitignore and index.html files
                    
foreach ($objFiles as $objFile)
                    {
                        if (
$objFile->getFilename() != '.gitignore' && $objFile->getFilename() != 'index.html')
                        {
                            ++
$total;
                        }
                    }
                }

                
$arrJobs[$key]['affected'] .= '<br>' $folder ': <span>' sprintf($GLOBALS['TL_LANG']['MSC']['files'], $total) . '</span>';
            }
        }

        
// Custom
        
foreach ($GLOBALS['TL_PURGE']['custom'] as $key=>$job)
        {
            
$arrJobs[$key] = array
            (
                
'id' => 'purge_' $key,
                
'title' => $GLOBALS['TL_LANG']['tl_maintenance_jobs'][$key][0],
                
'description' => $GLOBALS['TL_LANG']['tl_maintenance_jobs'][$key][1],
                
'group' => 'custom'
            
);
        }

        
$objTemplate->jobs $arrJobs;
        
$objTemplate->action ampersand(Environment::get('request'));
        
$objTemplate->headline $GLOBALS['TL_LANG']['tl_maintenance']['clearCache'];
        
$objTemplate->job $GLOBALS['TL_LANG']['tl_maintenance']['job'];
        
$objTemplate->description $GLOBALS['TL_LANG']['tl_maintenance']['description'];
        
$objTemplate->submit specialchars($GLOBALS['TL_LANG']['tl_maintenance']['clearCache']);
        
$objTemplate->help = (Config::get('showHelp') && ($GLOBALS['TL_LANG']['tl_maintenance']['cacheTables'][1] != '')) ? $GLOBALS['TL_LANG']['tl_maintenance']['cacheTables'][1] : '';

        return 
$objTemplate->parse();
    }
}
Онлайн: 1
Реклама