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

/**
 * <pre>
 * Invision Power Services
 * IP.Board v3.4.6
 * Simple caching class
 * Last Updated: $Date: 2012-05-10 16:10:13 -0400 (Thu, 10 May 2012) $
 * </pre>
 *
 * Original Author: Matt Mecham
 * @author         $Author: bfarber $
 * @copyright    (c) 2001 - 2011 Invision Power Services, Inc.
 * @license        http://www.invisionpower.com/company/standards.php#license
 * @package        IP.Board
 * @link        http://www.invisionpower.com
 * @version        $Rev: 10721 $
 *
 */

if ( ! defined'IN_IPB' ) )
{
    print 
"<h1>Incorrect access</h1>You cannot access this file directly.";
    exit();
}


class 
classes_cache_simple
{
    
/**#@+
     * Registry objects
     *
     * @access    protected
     * @var        object
     */
    
public $registry;
    public 
$DB;
    public 
$settings;
    public 
$request;
    public 
$lang;
    public 
$member;
    public 
$memberData    = array( 'member_id' => );
    
/**#@-*/
    
    
protected $app          '';
    protected 
$me           = array();
    protected 
$meCache      = array();
    protected 
$cacheForMins = array();
    
    
    
/**
     * Constructer
     *
     * @access    public
     * @param    object         ipsRegistry $registry
     * @return    @e void
     */
    
public function __construct()
    {
        
$this->registry   =  ipsRegistry::instance();
        
$this->DB         =  $this->registry->DB();
        
$this->settings   =& $this->registry->fetchSettings();
        
$this->request    =& $this->registry->fetchRequest();
        
$this->member     =  $this->registry->member();
        
$this->memberData =& $this->registry->member()->fetchMemberData();    
        
$this->cache      =  $this->registry->cache();
        
$this->caches     =& $this->registry->cache()->fetchCaches();
        
        
/* Set the default */
        
$this->setAppIPS_APP_COMPONENT );
        
        
/* Set ME */
        
$this->setMe$this->memberData );
        
        
/* Set default cache for mins */
        
$this->setCacheForMins);
    }    

    
/**
     * @return the $app
     */
    
public function getApp()
    {
        return 
$this->app;
    }

    
/**
     * @param field_type $app
     */
    
public function setApp$app )
    {
        
$this->app $app;
    }

    
/**
     * @return the $me
     */
    
public function getMe()
    {
        return 
$this->me;
    }

    
/**
     * @param array $me
     */
    
public function setMe( array $me )
    {
        
$this->me $me;
    }

    
/**
     * @return the $meCache
     */
    
public function getMeCache$id )
    {
        return ( ! empty( 
$this->meCache$id ] ) ) ? $this->meCache$id ] : null;
    }

    
/**
     * @param string $meCache
     */
    
public function setMeCache$meCache )
    {
        
$me $this->getMe();
        
$this->meCache$me['member_id'] ] = $meCache;
    }
    
    
/**
     * @return the $cacheForMins
     */
    
public function getCacheForMins()
    {
        return 
$this->cacheForMins;
    }

    
/**
     * @param field_type $cacheForMins
     */
    
public function setCacheForMins$cacheForMins )
    {
        
$this->cacheForMins intval$cacheForMins );
    }
    
    
/**
     * Return a cached item
     * @param string $key
     */
    
public function get$key )
    {
        
$data $this->DB->buildAndFetch( array( 'select' => '*',
                                                 
'from'   => 'cache_simple',
                                                 
'where'  => 'cache_id='' . $this->DB->addSlashes( $this->_makeId( $key ) ) . '' AND cache_perm_key='' . $this->DB->addSlashes( $this->_makePermKey() ) . ''' ) );
        
        if ( ! empty( 
$data['cache_id'] ) )
        {
            if ( ! 
$this->_isStale$data ) )
            {
                
/* Do we need to unserialize this? */
                
$data['cache_data'] = ( IPSLib::isSerialized$data['cache_data'] ) ) ? unserialize$data['cache_data'] ) : $data['cache_data'];
                
                return array( 
'data' => $data['cache_data'],
                              
'time' => $data['cache_time'] );
            }
        }
        
        return 
null;
    }
    
    
/**
     * Set a cached item
     * @param string $key
     * @param mixed  $data If array, it will be serialized
     */
    
public function set$key$data )
    {
        
$this->DB->replace'cache_simple', array( 'cache_id'         => $this->_makeId$key ),
                                                   
'cache_perm_key' => $this->_makePermKey(),
                                                   
'cache_time'        => IPS_UNIX_TIME_NOW,
                                                   
'cache_data'        => is_array$data ) ? serialize$data ) : $data ), array( 'cache_id' ) );
        
        return 
true;
    }
    
    
/**
     * Tests to see if a cached item is stale
     * @param array $data
     * @return boolean
     */
    
private function _isStale( array $data )
    {
        if ( empty( 
$data['cache_time'] ) )
        {
            return 
true;
        }    
        else if ( ( 
IPS_UNIX_TIME_NOW $data['cache_time'] ) > ( $this->getCacheForMins() * 60 ) )
        {
            return 
true;
        }
        
        return 
false;
    }
    
    
/**
     * Make an ID key for the DeeBee
     * @param string $key
     */
    
private function _makeId$key )
    {
        return 
md5$this->getApp() . '-' $key );
    }
    
    
/**
     * Make a perm key for the DeeBee
     * @param string $key
     */
    
private function _makePermKey()
    {
        
$me     $this->getMe();
        
$cached $this->getMeCache$me['member_id'] );
        
$key    = ( $cached !== null ) ? $cached $this->_makePermOrdered$me );
        
        if ( 
$cached === null && $key )
        {
            
$this->setMeCache$key );
        }
        
        return 
md5$key );
    }
    
    
/**
     * Fetch all relevant Perm IDs and make them ordered
     * @param array $member
     */
    
private function _makePermOrdered$member )
    {
        
$perms = array();
        
        if ( ! empty( 
$member['org_perm_id'] ) )
        {
            
$perms explode','IPSText::cleanPermString$member['org_perm_id'] ) );
        }
        
        if ( ! 
count$perms ) )
        {
            
$groups = array( $member['member_group_id'] );
            
            if ( ! empty( 
$member['mgroup_others'] ) )
            {
                
$others explode','IPSText::cleanPermString$member['mgroup_others'] ) );
                
                if ( 
is_array$others ) )
                {
                    
$groups array_merge$groups$others );
                }
            }
            
            foreach( 
$groups as $gid )
            {
                
$_perms IPSText::cleanPermString$this->caches['group_cache'][ $gid ]['g_perm_id'] );
                
                if ( ! empty( 
$_perms ) )
                {
                    
$__perms explode','$_perms );
                    
                    if ( 
is_array$__perms ) )
                    {
                        
$perms array_merge$perms$__perms );
                    }
                }
            }
            
        }
        
        if ( 
is_array$perms ) AND count$perms ) )
        {
            
sort$permsSORT_NUMERIC );
            
$perms array_unique$perms );
        
            return 
implode','$perms );
        }
        else
        {
            return 
'';
        }
        
    }
    
}
Онлайн: 0
Реклама