Вход Регистрация
Файл: IPBMafia.ru_IPB_3.4.6_Final_Rus _Nulled/board/upload/admin/sources/base/ipsController.php
Строк: 320
<?php

/**
 * <pre>
 * Invision Power Services
 * IP.Board v3.4.6
 * Primary controller
 * Last Updated: $LastChangedDate: 2012-05-10 16:10:13 -0400 (Thu, 10 May 2012) $
 * </pre>
 *
 * @author         $Author: bfarber $
 * @copyright    (c) 2001 - 2009 Invision Power Services, Inc.
 * @license        http://www.invisionpower.com/company/standards.php#license
 * @package        IP.Board
 * @link        http://www.invisionpower.com
 * @since        14th May 2003
 * @version        $Rev: 10721 $
 */

/**
* Class "Controller"
* A very simple public facing interface to resolve incoming data into
* a command class
*
* @author    Matt Mecham
* @since    Wednesday 14th May 2008
* @package    IP.Board
*/
class ipsController
{
    
/**
     * Registry reference
     *
     * @access    protected
     * @var        object
     */
    
protected $registry;
    
    
/**
     * Command
     *
     * @access    public
     * @var        string
     */
    
static public $cmd;

    
/**
     * Constructor
     *
     * @access    private
     * @return    @e void
     */
    
private function __construct() { }

    
/**
     * Public facing function to run the controller
     *
     * @access    public
     * @return    @e void
     */
    
static public function run()
    {
        
$instance = new ipsController();
        
$instance->init();
        
$instance->handleRequest();
    }

    
/**
     * Initialize ipsRegistry and this class
     *
     * @access    protected
     * @return    @e void
     */
    
protected function init()
    {
        
$this->registry ipsRegistry::instance();
        
$this->registry->init();
    }

    
/**
     * Handle the incoming request using the command resolver
     *
     * @access    protected
     * @return    @e void
     */
    
protected function handleRequest()
    {
        
$cmd_r  = new ipsController_CommandResolver();
        
        try
        {
            
self::$cmd $cmd_r->getCommand$this->registry );
        }
        catch( 
Exception $e )
        {
            
$msg $e->getMessage();

            
/* An error occured, so throw a 404 */
            
try
            {
                
/* The following patch prevents links such as /admin/index.php?adsess=123&app=anyrandomnamehere&module=login&do=login-complete from loading 
                    an ACP error screen complete with wrapper, which may expose the applications that are installed to an end user.
                    This issue was reported by Christopher Truncer via the IPS ticket system. */
                
if( IN_ACP AND !$this->registry->member()->getProperty('member_id') )
                {
                    
$this->registry->getClass('output')->silentRedirectipsRegistry::$settings['base_url'] );
                }

                
$this->registry->getClass('output')->showError'incorrect_furl'404nullnull404 );
            }
            catch( 
Exception $e )
            {
                print 
$msg;
                exit();
            }
        }
                        
        
IPSDebug::setMemoryDebugFlag"Everything up until execute call");
        
        
self::$cmd->execute$this->registry );
    }
}

/**
* Class "Command Resolver"
* Resolves the incoming data
*
* @author    Matt Mecham
* @since    Wednesday 14th May 2008
* @package    IP.Board
*/
class ipsController_CommandResolver
{
    
/**#@+
     * Internal strings to remember
     *
     * @access    protected
     * @var        string
     */
    
protected static $base_cmd;
    protected static 
$default_cmd;
    protected static 
$modules_dir  'modules_public';
    protected static 
$class_dir    'public';
    
/**#@-*/
    
    /**
     * Constructor
     *
     * @access    public
     * @return    @e void
     */
    
public function __construct()
    {
        if ( ! 
self::$base_cmd )
        {
            
self::$base_cmd    ipsRegistry::$current_module == 'ajax' ? new ReflectionClass'ipsAjaxCommand' ) : new ReflectionClass'ipsCommand' );
            
self::$default_cmd = new ipsCommand_default();
            
self::$modules_dir = ( IPS_AREA != 'admin' ) ? 'modules_public' 'modules_admin';
            
self::$class_dir   = ( IPS_AREA != 'admin' ) ? 'public'         'admin';
        }
    }

    
/**
     * Retreive the command
     *
     * @access    public
     * @param    object        ipsRegistry reference
     * @return    object
     */
    
public function getCommandipsRegistry $registry )
    {
        
$_NOW IPSDebug::getMemoryDebugFlag();
        
        
$module    ipsRegistry::$current_module;
        
$section   ipsRegistry::$current_section;
        
$filepath  IPSLib::getAppDirIPS_APP_COMPONENT ) . '/' self::$modules_dir '/' $module '/';

        
/* Bug Fix #21009 */
        
if ( ! ipsRegistry::$applicationsIPS_APP_COMPONENT ]['app_enabled'] )
        {
            throw new 
Exception"The specified application has been disabled" );
        }
        if ( !
IN_ACP and !IPSLib::moduleIsEnabled$moduleIPS_APP_COMPONENT ) and $module != 'ajax' )
        {
            throw new 
Exception"The specified module has been disabled" );
        }
                
        
/* Got a section? */
        
if ( ! $section )
        {
            if ( 
is_file$filepath 'defaultSection.php' ) )
            {
                
$DEFAULT_SECTION '';
                include( 
$filepath 'defaultSection.php' );/*noLibHook*/

                
if ( $DEFAULT_SECTION )
                {
                    
$section $DEFAULT_SECTION;
                    
                    
ipsRegistry::$current_section    $section;
                }
            }
        }

        
$_classname self::$class_dir '_' .  IPS_APP_COMPONENT '_' $module '_';
        
        
/* Rarely used, let's leave file_exists which is faster for non-existent files */
        
if ( file_exists$filepath 'manualResolver.php' ) )
        {
            
$classname IPSLib::loadActionOverloader$filepath 'manualResolver.php'    $_classname 'manualResolver' );
        }
        else if ( 
is_file$filepath $section '.php' ) )
        {
            
$classname IPSLib::loadActionOverloader$filepath $section '.php'    $_classname $section );
        }

        
IPSDebug::setMemoryDebugFlag"Controller getCommand executed" );

        if ( 
class_exists$classname ) )
        {
            
$cmd_class = new ReflectionClass$classname );

            if ( 
$cmd_class->isSubClassOfself::$base_cmd ) )
            {
                return 
$cmd_class->newInstance();
            }
            else
            {
                throw new 
Exception"$section в $module не существует!" );
            }
        }
        else
        {
            throw new 
Exception"$classname does not exist!" );
        }

        
# Fudge it to return just the default object
        
return clone self::$default_cmd;
    }
}


abstract class 
ipsCommand
{
    
/**#@+
     * Registry Object Shortcuts
     *
     * @access    protected
     * @var        object
     */
    
protected $registry;
    protected 
$DB;
    protected 
$settings;
    protected 
$request;
    protected 
$lang;
    protected 
$member;
    protected 
$memberData;
    protected 
$cache;
    protected 
$caches;
    
/**#@-*/

    /**
     * Constructor
     *
     * @access    public
     * @return    @e void
     */
    
final public function __construct()
    {
    }

    
/**
     * Make the registry shortcuts
     *
     * @access    public
     * @param    object    ipsRegistry reference
     * @return    @e void
     */
    
public function makeRegistryShortcutsipsRegistry $registry )
    {
        
/* Make registry objects */
        
$this->registry   =  $registry;
        
$this->DB         =  $this->registry->DB();
        
$this->settings   =& $this->registry->fetchSettings();
        
$this->request    =& $this->registry->fetchRequest();
        
$this->lang       =  $this->registry->getClass('class_localization');
        
$this->member     =  $this->registry->member();
        
$this->memberData =& $this->registry->member()->fetchMemberData();
        
$this->cache      =  $this->registry->cache();
        
$this->caches     =& $this->registry->cache()->fetchCaches();
        
        
$this->memberData IPSMember::setUpModerator$this->memberData );
    }

    
/**
     * Execute the command (call doExecute)
     *
     * @access    public
     * @param    object    ipsRegistry reference
     * @return    @e void
     */
    
public function executeipsRegistry $registry )
    {
        
//$registry->getClass('class_permissions')
        
$this->makeRegistryShortcuts$registry );
        
$this->doExecute$registry );
    }

    
/**
     * Do execute method (must be overriden)
     *
     * @access    protected
     * @param    object    ipsRegistry reference
     * @return    @e void
     */
    
protected abstract function doExecuteipsRegistry $registry );
}

/**
 * Abstract class for handling ajax requests
 */


abstract class ipsAjaxCommand
{
    
/**#@+
     * Registry Object Shortcuts
     *
     * @access    protected
     * @var        object
     */
    
protected $registry;
    protected 
$DB;
    protected 
$settings;
    protected 
$request;
    protected 
$lang;
    protected 
$member;
    protected 
$memberData;
    protected 
$cache;
    protected 
$caches;
    protected 
$ajax;
    
/**#@-*/
    
    /**
     * Constructor
     *
     * @access    public
     * @return    @e void
     */
    
final public function __construct()
    {
    }
    
    
/**
     * Magic function to catch all the ajax methods
     *
     * @access    public
     * @param    string  $func       Function name being called
     * @param    array   $arguments  Array of parameters
     * @return    mixed
     */
    
public function __call$func$arguments )
    {
        if( 
method_exists$this->ajax$func ) )
        {
            return 
call_user_func_array( array( $this->ajax$func ), $arguments );
        }
    }

    
/**
     * Creates all the registry shorctus
     *
     * @access    public
     * @param    object    ipsRegistry reference
     * @return    @e void
     */
    
public function makeRegistryShortcutsipsRegistry $registry )
    {
        
/* Make registry objects */
        
$this->registry   =  $registry;
        
$this->DB         =  $this->registry->DB();
        
$this->settings   =& $this->registry->fetchSettings();
        
$this->request    =& $this->registry->fetchRequest();
        
$this->lang       =  $this->registry->getClass('class_localization');
        
$this->member     =  $this->registry->member();
        
$this->memberData =& $this->registry->member()->fetchMemberData();
        
$this->cache      =  $this->registry->cache();
        
$this->caches     =& $this->registry->cache()->fetchCaches();
        
        
$this->memberData IPSMember::setUpModerator$this->memberData );
        
        
$classToLoad IPSLib::loadLibraryIPS_KERNEL_PATH 'classAjax.php''classAjax' );
        
$this->ajax  = new $classToLoad();
        
        
IPSDebug::fireBug'registerExceptionHandler' );
        
IPSDebug::fireBug'registerErrorHandler' );
    }

    
/**
     * Executes the ajax request, checks secure key
     *
     * @access    public
     * @param    object    ipsRegistry reference
     * @return    @e void
     */
    
public function executeipsRegistry $registry )
    { 
        
/* Setup Shortcuts First */
        
$this->makeRegistryShortcuts$registry );
        
        
/* Check the secure key */
        
$this->request['secure_key'] = $this->request['secure_key'] ? $this->request['secure_key'] : $this->request['md5check'];

        if( 
$this->request['secure_key'] != $this->member->form_hash )
        {
            
IPSDebug::fireBug'error', array( "The security key did not match the member's form hash" ) );

            
$this->returnString'nopermission' );
        }
        
        
$this->doExecute$registry );
    }

    
/**
     * Do execute method (must be overriden)
     *
     * @access    protected
     * @param    object    ipsRegistry reference
     * @return    @e void
     */
    
protected abstract function doExecuteipsRegistry $registry );
}


class 
ipsCommand_default extends ipsCommand
{
    
/**
     * Do execute method
     *
     * @access    protected
     * @param    object    ipsRegistry reference
     * @return    @e void
     */
    
protected function doExecuteipsRegistry $registry )
    {
        
$modules_dir = ( IPS_AREA != 'admin' ) ? 'modules_public' 'modules_admin';
        
$filepath    IPSLib::getAppDir(  IPS_APP_COMPONENT ) . '/' $modules_dir '/' ipsRegistry::$current_module '/' ipsRegistry::$current_section '.php';
        
$filepath     str_replaceDOC_IPS_ROOT_PATH''$filepath );

        
//-----------------------------------------
        // Redirect to board index
        //-----------------------------------------

        
if ( ! (IPS_APP_COMPONENT == 'forums' AND ipsRegistry::$current_module == 'forums' AND ipsRegistry::$current_section == 'boards') )
        {
            if( 
IPB_THIS_SCRIPT == 'admin' )
            {
                
$registry->output->silentRedirectipsRegistry::$settings['_base_url'] );
            }
            else
            {
                
$registry->output->silentRedirectipsRegistry::$settings['_original_base_url'] );
            }
        }

        
//-----------------------------------------
        // Uh oh, this is a big one.. (no forums app)
        //-----------------------------------------

        
if ( ! is_file$filepath ) )
        {
            
$this->registry->getClass('output')->showError( array( 'command_file_missing'$filepath ), 401100nullnull404 );
        }
        else
        {
            
$this->registry->getClass('output')->showError( array( 'command_class_incorrect'$filepath ), 401200nullnull404 );
        }
    }
}
Онлайн: 0
Реклама