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

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

namespace Contao;


/**
 * Maintenance module "rebuild index".
 *
 * @author Leo Feyer <https://github.com/leofeyer>
 */
class RebuildIndex extends Backend implements executable
{

    
/**
     * Return true if the module is active
     *
     * @return boolean
     */
    
public function isActive()
    {
        return (
Config::get('enableSearch') && Input::get('act') == 'index');
    }


    
/**
     * Generate the module
     *
     * @return string
     */
    
public function run()
    {
        if (!
Config::get('enableSearch'))
        {
            return 
'';
        }

        
$time time();

        
/** @var BackendTemplate|object $objTemplate */
        
$objTemplate = new BackendTemplate('be_rebuild_index');
        
$objTemplate->action ampersand(Environment::get('request'));
        
$objTemplate->indexHeadline $GLOBALS['TL_LANG']['tl_maintenance']['searchIndex'];
        
$objTemplate->isActive $this->isActive();

        
// Add the error message
        
if ($_SESSION['REBUILD_INDEX_ERROR'] != '')
        {
            
$objTemplate->indexMessage $_SESSION['REBUILD_INDEX_ERROR'];
            
$_SESSION['REBUILD_INDEX_ERROR'] = '';
        }

        
// Rebuild the index
        
if (Input::get('act') == 'index')
        {
            
// Check the request token (see #4007)
            
if (!isset($_GET['rt']) || !RequestToken::validate(Input::get('rt')))
            {
                
$this->Session->set('INVALID_TOKEN_URL'Environment::get('request'));
                
$this->redirect('contao/confirm.php');
            }

            
$arrPages $this->findSearchablePages();

            
// HOOK: take additional pages
            
if (isset($GLOBALS['TL_HOOKS']['getSearchablePages']) && is_array($GLOBALS['TL_HOOKS']['getSearchablePages']))
            {
                foreach (
$GLOBALS['TL_HOOKS']['getSearchablePages'] as $callback)
                {
                    
$this->import($callback[0]);
                    
$arrPages $this->{$callback[0]}->{$callback[1]}($arrPages);
                }
            }

            
// Return if there are no pages
            
if (empty($arrPages))
            {
                
$_SESSION['REBUILD_INDEX_ERROR'] = $GLOBALS['TL_LANG']['tl_maintenance']['noSearchable'];
                
$this->redirect($this->getReferer());
            }

            
// Truncate the search tables
            
$this->import('Automator');
            
$this->Automator->purgeSearchTables();

            
// Hide unpublished elements
            
$this->setCookie('FE_PREVIEW'0, ($time 86400));

            
// Calculate the hash
            
$strHash sha1(session_id() . (!Config::get('disableIpCheck') ? Environment::get('ip') : '') . 'FE_USER_AUTH');

            
// Remove old sessions
            
$this->Database->prepare("DELETE FROM tl_session WHERE tstamp<? OR hash=?")
                           ->
execute(($time Config::get('sessionTimeout')), $strHash);

            
// Log in the front end user
            
if (is_numeric(Input::get('user')) && Input::get('user') > 0)
            {
                
// Insert a new session
                
$this->Database->prepare("INSERT INTO tl_session (pid, tstamp, name, sessionID, ip, hash) VALUES (?, ?, ?, ?, ?, ?)")
                               ->
execute(Input::get('user'), $time'FE_USER_AUTH'session_id(), Environment::get('ip'), $strHash);

                
// Set the cookie
                
$this->setCookie('FE_USER_AUTH'$strHash, ($time Config::get('sessionTimeout')), nullnullfalsetrue);
            }

            
// Log out the front end user
            
else
            {
                
// Unset the cookies
                
$this->setCookie('FE_USER_AUTH'$strHash, ($time 86400), nullnullfalsetrue);
                
$this->setCookie('FE_AUTO_LOGIN'Input::cookie('FE_AUTO_LOGIN'), ($time 86400), nullnullfalsetrue);
            }

            
$strBuffer '';
            
$rand rand();

            
// Display the pages
            
for ($i=0$c=count($arrPages); $i<$c$i++)
            {
                
$strBuffer .= '<span class="page_url" data-url="' $arrPages[$i] . '#' $rand $i '">' StringUtil::substr($arrPages[$i], 100) . '</span><br>';
                unset(
$arrPages[$i]); // see #5681
            
}

            
$objTemplate->content $strBuffer;
            
$objTemplate->note $GLOBALS['TL_LANG']['tl_maintenance']['indexNote'];
            
$objTemplate->loading $GLOBALS['TL_LANG']['tl_maintenance']['indexLoading'];
            
$objTemplate->complete $GLOBALS['TL_LANG']['tl_maintenance']['indexComplete'];
            
$objTemplate->indexContinue $GLOBALS['TL_LANG']['MSC']['continue'];
            
$objTemplate->theme Backend::getTheme();
            
$objTemplate->isRunning true;

            return 
$objTemplate->parse();
        }

        
$arrUser = array(''=>'-');

        
// Get active front end users
        
$objUser $this->Database->execute("SELECT id, username FROM tl_member WHERE disable!='1' AND (start='' OR start<='$time') AND (stop='' OR stop>'" . ($time 60) . "') ORDER BY username");

        while (
$objUser->next())
        {
            
$arrUser[$objUser->id] = $objUser->username ' (' $objUser->id ')';
        }

        
// Default variables
        
$objTemplate->user $arrUser;
        
$objTemplate->indexLabel $GLOBALS['TL_LANG']['tl_maintenance']['frontendUser'][0];
        
$objTemplate->indexHelp = (Config::get('showHelp') && strlen($GLOBALS['TL_LANG']['tl_maintenance']['frontendUser'][1])) ? $GLOBALS['TL_LANG']['tl_maintenance']['frontendUser'][1] : '';
        
$objTemplate->indexSubmit $GLOBALS['TL_LANG']['tl_maintenance']['indexSubmit'];

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