Вход Регистрация
Файл: upload/include/library/phpfox/phpfox/phpfox.class.php
Строк: 956
<?php
/**
 * [PHPFOX_HEADER]
 */

defined('PHPFOX') or exit('NO DICE!');

/**
 * phpFox Engine
 * All interactions with anything phpFox related is executed via this class.
 * It is the engine that runs phpFox and all of the other libraries and modules.
 * All methods, variables and constants are static.
 * 
 * All libraries are located within the folder: include/library/phpfox/
 * Example of connect to request library:
 * <code>
 * $oObject = Phpfox::getLib('request');
 * </code>
 * 
 * @copyright        [PHPFOX_COPYRIGHT]
 * @author            Raymond Benc
 * @package         Phpfox
 * @version         $Id: phpfox.class.php 4519 2012-07-18 14:01:51Z Raymond_Benc $
 */
final class Phpfox
{    
    
/**
     * Product Version : major.minor.maintenance [alphaX, betaX or rcX]
     */
    
const VERSION '3.3.0';
    
    
/**
     * Product Code Name
     * 
     */    
    
const CODE_NAME 'Nebula';
    
    
/**
     * Browser agent used with API curl requests.
     *
     */
    
const BROWSER_AGENT 'phpFox';
    
    
/**
     * Product build number.
     *
     */
    
const PRODUCT_BUILD '1';
    
    
/**
     * phpFox API server.
     *
     */
    
const PHPFOX_API '';
    
    
/**
     * phpFox package ID.
     *
     */
    
const PHPFOX_PACKAGE '3';
    
    
/**
     * ARRAY of objects initiated. Used to keep a static history
     * so we don't call the same class more then once.
     *
     * @var unknown_type
     */
    
private static $_aObject = array();
    
    
/**
     * ARRAY of libraries being loaded.
     *
     * @var array
     */
    
private static $_aLibs = array();
    
    
/**
     * ARRAY of custom pages the site admins have created.
     *
     * @var array
     */
    
private static $_aPages = array();
    
    
/**
     * Used to keep a static variable to see if we are within the AdminCP.
     *
     * @var bool
     */
    
private static $_bIsAdminCp false;    
    
    
/**
     * History of any logs we save for debug purposes.
     *
     * @var array
     */
    
private static $_aLogs = array();    
    
    
/**
     * Get the current phpFox version.
     *
     * @return string
     */
    
public static function getVersion()
    {
        if (
defined('PHPFOX_INSTALLER'))
        {
            return 
self::VERSION;
        }
        
        return 
Phpfox::getParam('core.phpfox_version');
    }
    
    
/**
     * Get the current phpFox version ID.
     *
     * @return int
     */
    
public static function getId()
    {
        return 
self::getVersion();
    }
    
    
/**
     * Get the products code name.
     *
     * @return string
     */
    
public static function getCodeName()
    {
        return 
self::CODE_NAME;
    }
    
    
/**
     * Get the products build number.
     *
     * @return int
     */
    
public static function getBuild()
    {
        return 
self::PRODUCT_BUILD;
    }
    
    
/**
     * Get the clean numerical value of the phpFox version.
     *
     * @return int
     */
    
public static function getCleanVersion()
    {
        return 
str_replace('.'''self::VERSION);
    }
    
    
/**
     * Check if a feature can be used based on the package the client
     * has installed.
     * 
     * Example (STRING):
     * <code>
     * if (Phpfox::isPackage('1') { }
     * </code>
     * 
     * Example (ARRAY):
     * <code>
     * if (Phpfox::isPackage(array('1', '2')) { }
     * </code>
     *
     * @param mixed $mPackage STRING can be used to pass the package ID, or an ARRAY to pass multipl packages.
     * @return unknown
     */
    
public static function isPackage($mPackage)
    {
        if (
self::PHPFOX_PACKAGE == '[PHPFOX_PACKAGE_NAME]')
        {
            return 
false;
        }
        
        if (!
is_array($mPackage))
        {
            
$mPackage = array($mPackage);
        }
        
        return (
in_array(self::PHPFOX_PACKAGE$mPackage) ? true false);
    }
    
    
/**
     * Provide "powered by" link.
     *
     * @param bool $bLink TRUE to include a link to phpFox.
     * @param bool $bVersion TRUE to include the version being used.
     * @return string Powered by phpFox string returned.
     */
    
public static function link($bLink true$bVersion true)
    {
        if (
Phpfox::getParam('core.branding'))
        {
            return 
'';
        }
        
        return 
'Powered By ' . ($bLink '' '') . 'phpFox' . ($bLink '' '') . ($bVersion ' Version ' PhpFox::getVersion() : '');
    }
    
    
/**
     * Gets and creates an object for a class.
     *
     * @param string $sClass Class name.
     * @param array $aParams Params to pass to the class.
     * @return object Object created will be returned.
     */
    
public static function &getObject($sClass$aParams = array())
    {        
        
$sHash md5($sClass serialize($aParams));
        
        if (isset(
self::$_aObject[$sHash]))
        {
            return 
self::$_aObject[$sHash];
        }    

        (
PHPFOX_DEBUG Phpfox_Debug::start('object') : false);
        
        
$sClass str_replace(array('.''-'), '_'$sClass);        
        
        if (!
class_exists($sClass))
        {
            
Phpfox_Error::trigger('Unable to call class: ' $sClassE_USER_ERROR);
        }        

        if (
$aParams)
        {
            
self::$_aObject[$sHash] = new $sClass($aParams);
        }
        else 
        {        
            
self::$_aObject[$sHash] = new $sClass();
        }

        (
PHPFOX_DEBUG Phpfox_Debug::end('object', array('name' => $sClass)) : false);
        
        if (
method_exists(self::$_aObject[$sHash], 'getInstance'))
        {
            return 
self::$_aObject[$sHash]->getInstance();
        }                
        
        return 
self::$_aObject[$sHash];
    }
    
    
/**
     * @see Phpfox_Setting::getParam()
     * @param string $sVar
     * @return mixed
     */
    
public static function getParam($sVar)
    {
        return 
Phpfox::getLib('setting')->getParam($sVar);
    }
    
    
/**
     * Fine and load a library class and make sure it exists.
     *
     * @param string $sClass Library class name.
     * @return bool TRUE if library has loaded, FALSE if not.
     */
    
public static function getLibClass($sClass)
    {
        if (isset(
self::$_aLibs[$sClass]))
        {
            return 
true;
        }

        
self::$_aLibs[$sClass] = md5($sClass);        
        
        
$sClass str_replace('.'PHPFOX_DS$sClass);
        
$sFile PHPFOX_DIR_LIB $sClass '.class.php';
        
        if (
file_exists($sFile))
        {            
            require(
$sFile);
            return 
true;
        }        
        
        
$aParts explode(PHPFOX_DS$sClass);        
        if (isset(
$aParts[1]))
        {
            
$sSubClassFile PHPFOX_DIR_LIB $sClass PHPFOX_DS $aParts[1] . '.class.php';            
            if (
file_exists($sSubClassFile))
            {
                require(
$sSubClassFile);
                return 
true;
            }
        }        
    
        
Phpfox_Error::trigger('Unable to load class: ' $sClassE_USER_ERROR);
        
        return 
false;
    }
    
    
/**
     * Get a phpFox library. This includes the class file and creates the object for you.
     * 
     * Example usage:
     * <code>
     * Phpfox::getLib('url')->makeUrl('test');
     * </code>
     * In the example we called the URL library found in the folder: include/library/phpfox/url/url.class.php
     * then created an object for it so we could directly call the method "makeUrl".
     *
     * @param string $sClass Library class name.
     * @param array $aParams ARRAY of params you can pass to the library.
     * @return object Object of the library class is returned.
     */
    
public static function &getLib($sClass$aParams = array())
    {        
        if ((
substr($sClass07) != 'phpfox.') || ($sClass == 'phpfox.api' || $sClass == 'phpfox.process'))
        {
            
$sClass 'phpfox.' $sClass;
        }
        
        
$sHash md5($sClass serialize($aParams));
        
        if (isset(
self::$_aObject[$sHash]))
        {    
            return 
self::$_aObject[$sHash];
        }        
        
        
Phpfox::getLibClass($sClass);        

        
$sClass str_replace('phpfox.phpfox.''phpfox.'$sClass);        

        
self::$_aObject[$sHash] = Phpfox::getObject($sClass$aParams);
        
        return 
self::$_aObject[$sHash];
    }
    
    
/**
     * @see Phpfox_Module::isModule()
     * @param string $sModule
     * @return bool
     */
    
public static function isModule($sModule)
    {
        return 
Phpfox::getLib('module')->isModule($sModule);
    }
    
    
/**
     * @see Phpfox_Module::getComponent()
     * @param string $sClass
     * @param array $aParams
     * @return object
     */
    
public static function getBlock($sClass$aParams = array(), $bTemplateParams false)
    {        
        return 
Phpfox::getLib('module')->getComponent($sClass$aParams'block'$bTemplateParams);
    }    
    
    
/**
     * @see Phpfox_Module::callback()
     * @param string $sCall
     * @return mixed
     */
    
public static function callback($sCall)
    {
        if (
func_num_args() > 1)
        {
            
$aParams func_get_args();            
            
            return 
Phpfox::getLib('module')->callback($sCall$aParams);
        }
        
        return 
Phpfox::getLib('module')->callback($sCall);
    }
    
    
/**
     * @see Phpfox_Module::massCallback()
     * @param string $sMethod
     * @return mixed
     */
    
public static function massCallback($sMethod)
    {
        if (
func_num_args() > 1)
        {
            
$aParams func_get_args();            
            
            return 
Phpfox::getLib('module')->massCallback($sMethod$aParams);
        }
        
        return 
Phpfox::getLib('module')->massCallback($sMethod);        
    }
    
    
/**
     * @see Phpfox_Module::hasCallback()
     * @param string $sModule
     * @param string $sMethod
     * @return bool
     */
    
public static function hasCallback($sModule$sMethod)
    {
        return 
Phpfox::getLib('module')->hasCallback($sModule$sMethod);
    }
    
    
/**
     * @see Phpfox_Module::getComponent()
     * @param string $sClass Class name.
     * @param array $aParams ARRAY of params you can pass to the component.
     * @param string $sType Type of component (block or controller).
     * @return object We return the object of the component class.
     */
    
public static function getComponent($sClass$aParams = array(), $sType 'block'$bTemplateParams false)
    {        
        return 
Phpfox::getLib('module')->getComponent($sClass$aParams$sType$bTemplateParams);
    }
    
    
/**
     * @see Phpfox_Module::getComponentSetting()
     * @param int $iUserId
     * @param string $sVarName
     * @param mixed $mDefaultValue
     * @return mixed
     */
    
public static function getComponentSetting($iUserId$sVarName$mDefaultValue)
    {
        return 
Phpfox::getLib('module')->getComponentSetting($iUserId$sVarName$mDefaultValue);
    }
    
    
/**
     * Returns the token name for forms
     */
    
public static function getTokenName()
    {
        return 
'core';    
    }
    
    
/**
     * @see Phpfox_Module::getService()
     * @param string $sClass
     * @param array $aParams
     * @return object
     */
    
public static function getService($sClass$aParams = array())
    {
        return 
Phpfox::getLib('module')->getService($sClass$aParams);
    }
    
    
/**
     * Builds a database table prefix.
     *
     * @param string $sTable Database table name.
     * @return string Returns the table name with the clients prefix.
     */
    
public static function getT($sTable)
    {
        return 
Phpfox::getParam(array('db''prefix')) . $sTable;
    }
    
    
/**
     * @see User_Service_Auth::getUserId()
     * @return int
     */
    
public static function getUserId()
    {
        if (isset(
$_REQUEST['custom_pages_post_as_page']) && (int) $_REQUEST['custom_pages_post_as_page'] > 0)
        {
            
$aPage Phpfox::getLib('database')->getRow('
                SELECT p.page_id, p.user_id AS owner_user_id, u.user_id
                FROM ' 
Phpfox::getT('pages') . ' AS p
                JOIN ' 
Phpfox::getT('user') . ' AS u ON(u.profile_page_id = p.page_id)
                WHERE p.page_id = ' 
. (int) $_REQUEST['custom_pages_post_as_page'] . '
            '
);
            
            
$iActualUserId Phpfox::getService('user.auth')->getUserId();
            
            if (isset(
$aPage['page_id']))
            {
                
$bPass false;
                if (
$aPage['owner_user_id'] == $iActualUserId)
                {
                    
$bPass true;
                }
                
                if (!
$bPass)
                {
                    
$aAdmin Phpfox::getLib('database')->getRow('
                        SELECT page_id
                        FROM ' 
Phpfox::getT('pages_admin') . '
                        WHERE page_id = ' 
. (int) $aPage['page_id'] . ' AND user_id = ' . (int) $iActualUserId '
                    '
);
                    
                    if (isset(
$aAdmin['page_id']))
                    {
                        
$bPass true;
                    }
                }
                
                if (
$bPass)
                {
                    return 
$aPage['user_id'];
                }
            }
        }
        
        if (
defined('PHPFOX_APP_USER_ID'))
        {            
            return 
PHPFOX_APP_USER_ID;
        }
        
        return 
Phpfox::getService('user.auth')->getUserId();
    }
    
    
/**
     * @see User_Service_Auth::getUserBy()
     * @return string
     */    
    
public static function getUserBy($sVar null)
    {        
        return 
Phpfox::getService('user.auth')->getUserBy($sVar);
    }
    
    
/**
     * @see Phpfox_Request::isMobile()
     * @return bool
     */
    
public static function isMobile()
    {
        return 
Phpfox::getLib('request')->isMobile();
    }
    
    
/**
     * @see Phpfox_Request::getIp()
     * @return string
     */
    
public static function getIp($bReturnNum false)
    {
        return 
Phpfox::getLib('request')->getIp($bReturnNum);
    }
    
    
/**
     * Checks to see if the user that is logged in has been marked as a spammer.
     *
     * @return bool TRUE is a spammer, FALSE if not a spammer.
     */
    
public static function isSpammer()
    {
        if (
Phpfox::getUserParam('core.is_spam_free'))
        {
            return 
false;
        }
        
        if (!
Phpfox::getParam('core.enable_spam_check'))
        {
            return 
false;
        }
        
        if (
Phpfox::isUser() && Phpfox::getUserBy('total_spam') > Phpfox::getParam('core.auto_deny_items'))
        {            
            return 
true;
        }

        return 
false;    
    }
    
    
/**
     * Get all the user fields when joining with the user database table.
     *
     * @param string $sAlias Table alias. User table alias by default is "u".
     * @param string $sPrefix Prefix for each of the fields.
     * @return string Returns SQL SELECT for user fields.
     */
    
public static function getUserField($sAlias 'u'$sPrefix '')
    {
        static 
$aValues = array();
        
        
// Create hash
        
$sHash md5($sAlias $sPrefix);
        
        
// Have we already cached it? We do not want to run an extra foreach() for nothing.
        
if (isset($aValues[$sHash]))
        {
            return 
$aValues[$sHash];
        }
        
        
$aFields Phpfox::getService('user')->getUserFields();
        
        
$aValues[$sHash] = '';
        foreach (
$aFields as $sField)
        {
            
$aValues[$sHash] .= ", {$sAlias}.{$sField}";    
            
            if (
$sAlias == 'u' && $sField == 'server_id')
            {
                
// $sPrefix = 'user_' . (empty($sPrefix) ? '' : $sPrefix);
                
                
$aValues[$sHash] .= " AS user_{$sPrefix}{$sField}";    
                
                
// unset($sPrefix);
                
                
continue;
            }
            
            if (!empty(
$sPrefix))
            {
                
$aValues[$sHash] .= " AS {$sPrefix}{$sField}";    
            }
        }
        
$aValues[$sHash] = ltrim($aValues[$sHash], ',');
        
        return 
$aValues[$sHash];
    }
    
    
/**
     * @see Phpfox_Date::getTimeZone()
     * @param bool $bDst
     * @return string
     */
    
public static function getTimeZone($bDst true)
    {        
        return 
Phpfox::getLib('date')->getTimeZone($bDst);    
    }
    
    
/**
     * Gets a time stamp, Works similar to PHP date() function.
     * We also take into account locale and time zone settings.
     *
     * @see date()
     * @param string $sStamp Time stamp format.
     * @param int $iTime UNIX epoch time stamp.
     * @return string Time stamp value based on locale.
     */
    
public static function getTime($sStamp null$iTime PHPFOX_TIME$bTimeZone true)
    {
        static 
$sUserOffSet;
        
        if (
$bTimeZone)
        {
            if (!
$sUserOffSet)
            {
                
$sUserOffSet Phpfox::getTimeZone();
            }
            if (!
preg_match('/z[0-9]+/i'$sUserOffSet$aMatch))
            {
                
// try to find it in the cache
                
$aTZ Phpfox::getService('core')->getTimeZones();
                
$sTz array_search($sUserOffSet$aTZ);
                if (
$sTz !== false)
                {
                    
$sUserOffSet $sTz;
                }
            }
            if (
substr($sUserOffSet,0,1) == 'z' && PHPFOX_USE_DATE_TIME)
            {
                
// we are using DateTime
                // get the offset to use based on the time zone index code
                
if (!isset($aTZ))
                {
                    
$aTZ Phpfox::getService('core')->getTimeZones();
                }
                if (isset(
$aTZ[$sUserOffSet]))
                {
                    
$oTZ = new DateTimeZone($aTZ[$sUserOffSet]);
                    
$oDateTime = new DateTime(null$oTZ);
                    
$oDateTime->setTimestamp($iTime);
                    
$sUserOffSet $aTZ[$sUserOffSet];
                    if (
$sStamp !== null)
                    {
                        
$iNewTime $oDateTime->format($sStamp);
                        
$bSet true;
                    }
                }
            }    

            if (
$sStamp === null)
            {
                return  (!empty(
$sUserOffSet) ? (substr($sUserOffSet01) == '-' ? ($iTime - (substr($sUserOffSet1) * 3600)) : ($sUserOffSet 3600) + $iTime) : $iTime);
            }
            elseif (!isset(
$bSet))
            {
                
$iNewTime = (!empty($sUserOffSet) ? date($sStamp, (substr($sUserOffSet01) == '-' ? ($iTime - (substr($sUserOffSet1) * 3600)) : ($sUserOffSet 3600) + $iTime)) : date($sStamp$iTime));

            }
        }
        else
        {
            
$iNewTime date($sStamp$iTime);
        }
        
        
$aFind = array(
            
'Monday',
            
'Tuesday',
            
'Wednesday',
            
'Thursday',
            
'Friday',
            
'Saturday',
            
'Sunday',
            
'January',
            
'February',
            
'March',
            
'April',
            
'May',
            
'June',
            
'July',
            
'August',
            
'September',
            
'October',
            
'November',
            
'December'
        
);
        
        
$aReplace = array(            
            
Phpfox::getPhrase('core.monday'),
            
Phpfox::getPhrase('core.tuesday'),
            
Phpfox::getPhrase('core.wednesday'),
            
Phpfox::getPhrase('core.thursday'),
            
Phpfox::getPhrase('core.friday'),
            
Phpfox::getPhrase('core.saturday'),
            
Phpfox::getPhrase('core.sunday'),
            
Phpfox::getPhrase('core.january'),
            
Phpfox::getPhrase('core.february'),
            
Phpfox::getPhrase('core.march'),
            
Phpfox::getPhrase('core.april'),
            
Phpfox::getPhrase('core.may'),
            
Phpfox::getPhrase('core.june'),
            
Phpfox::getPhrase('core.july'),
            
Phpfox::getPhrase('core.august'),
            
Phpfox::getPhrase('core.september'),
            
Phpfox::getPhrase('core.october'),
            
Phpfox::getPhrase('core.november'),
            
Phpfox::getPhrase('core.december')
        );        
        
        
$iNewTime str_replace('Mon''Monday'$iNewTime);
        
$iNewTime str_replace('Tue''Tuesday'$iNewTime);
        
$iNewTime str_replace('Wed''Wednesday'$iNewTime);
        
$iNewTime str_replace('Thu''Thursday'$iNewTime);
        
$iNewTime str_replace('Fri''Friday'$iNewTime);
        
$iNewTime str_replace('Sat''Saturday'$iNewTime);
        
$iNewTime str_replace('Sun''Sunday'$iNewTime);
        
$iNewTime str_replace('Jan''January',$iNewTime);
        
$iNewTime str_replace('Feb''February',$iNewTime);
        
$iNewTime str_replace('Mar''March',$iNewTime);
        
$iNewTime str_replace('Apr''April',$iNewTime);
        
$iNewTime str_replace('May''May',$iNewTime);
        
$iNewTime str_replace('Jun''June',$iNewTime);
        
$iNewTime str_replace('Jul''July',$iNewTime);
        
$iNewTime str_replace('Aug''August',$iNewTime);
        
$iNewTime str_replace('Sep''September',$iNewTime);
        
$iNewTime str_replace('Oct''October',$iNewTime);
        
$iNewTime str_replace('Nov''November',$iNewTime);
        
$iNewTime str_replace('Dec''December',$iNewTime);
        
        
$iNewTime str_replace('Mondayday''Monday'$iNewTime);
        
$iNewTime str_replace('Tuesdaysday''Tuesday'$iNewTime);        
        
$iNewTime str_replace('Wednesdaynesday''Wednesday'$iNewTime);
        
$iNewTime str_replace('Thursdayrsday''Thursday'$iNewTime);
        
$iNewTime str_replace('Fridayday''Friday'$iNewTime);
        
$iNewTime str_replace('Saturdayurday''Saturday'$iNewTime);
        
$iNewTime str_replace('Sundayday''Sunday'$iNewTime);
        
$iNewTime str_replace('Januaryuary''January',$iNewTime);
        
$iNewTime str_replace('Februaryruary''February',$iNewTime);
        
$iNewTime str_replace('Marchch''March',$iNewTime);
        
$iNewTime str_replace('Aprilil''April',$iNewTime);
        
$iNewTime str_replace('Junee''June',$iNewTime);
        
$iNewTime str_replace('Julyy''July',$iNewTime);
        
$iNewTime str_replace('Augustust''August',$iNewTime);
        
$iNewTime str_replace('Septembertember''September',$iNewTime);
        
$iNewTime str_replace('Octoberober''October',$iNewTime);
        
$iNewTime str_replace('Novemberember''November',$iNewTime);
        
$iNewTime str_replace('Decemberember''December',$iNewTime);        
        
        
$iNewTime str_replace($aFind$aReplace$iNewTime);
        
$iNewTime str_replace('PM'Phpfox::getPhrase('core.pm'), $iNewTime);
        
$iNewTime str_replace('AM'Phpfox::getPhrase('core.am'), $iNewTime);
        
        return 
$iNewTime;
    }
    
    
/**
     * Used to see if a user is logged in or not. By passing the first argument as TRUE
     * we can also do an auto redirect to guide the user to login first before using a 
     * feature.
     *
     * @param bool $bRedirect User will be redirected to the login page if they are not logged int.
     * @return bool If the 1st argument is FALSE, it will return a BOOL TRUE if the user is logged in, otherwise FALSE.
     */
    
public static function isUser($bRedirect false)
    {
        if (
defined('PHPFOX_APP_USER_ID'))
        {
            return 
true;
        }
        
$bIsUser =  Phpfox::getService('user.auth')->isUser();
        
        if (
$bRedirect && !$bIsUser)
        {
            if (
PHPFOX_IS_AJAX || PHPFOX_IS_AJAX_PAGE)
            {
                return 
Phpfox::getLib('ajax')->isUser();
            }
            else 
            {
                
// Create a session so we know where we plan to redirect the user after they login
                
Phpfox::getLib('session')->set('redirect'Phpfox::getLib('url')->getFullUrl(true));
                
                
Phpfox::getLib('url')->send('user.login');
            }
        }
        
        return 
$bIsUser;
    }
    
    
/**
     * Used to see if a user is an Admin. By passing the first argument as TRUE
     * we can also do an auto redirect to guide the user to login first before using a 
     * feature in the AdminCP.
     *
     * @param bool $bRedirect User will be redirected to the AdminCP login page if they are not logged int.
     * @return bool If the 1st argument is FALSE, it will return a BOOL TRUE if the user is logged in, otherwise FALSE.
     */    
    
public static function isAdmin($bRedirect false)
    {    
        if (!
Phpfox::isUser($bRedirect))
        {
            return 
false;
        }
        
        if (!
Phpfox::getUserParam('admincp.has_admin_access'$bRedirect))
        {
            return 
false;
        }
        
        return 
true;
    }
    
    
/**
     * Creates a URL for an item that is connected with a users profile.
     *
     * @deprecated 2.0.0beta1
     * @param string $sUrl URL
     * @param array $mParams URL params.
     * @param string $sUserName Users vanity user name.
     * @return string Items URL now connected with a persons profile.
     */
    
public static function itemUrl($sUrl$mParams$sUserName)
    {
        
$bUserProfileUrl true;    
        
        if (
$bUserProfileUrl)
        {
            return 
self::getLib('phpfox.url')->makeUrl($sUserNamearray_merge(array($sUrl), (is_array($mParams) ? $mParams : array($mParams))));
        }
        
        return 
self::getLib('phpfox.url')->makeUrl($sUrl$mParams);
    }
    
    
/**
     * @see User_Service_Group_Setting_Setting::getGroupParam()
     * @param int $iGroupId
     * @param string $sName
     * @return mixed
     */
    
public static function getUserGroupParam($iGroupId$sName)
    {
        return 
Phpfox::getService('user.group.setting')->getGroupParam($iGroupId$sName);
    }
    
    
/**
     * Get a user group setting.
     *
     * @see User_Service_Group_Setting_Setting::getParam()
     * @param string $sName User group param name.
     * @param bool $bRedirect TRUE will redirect the user to a subscribtion page if they do not have access to the param.
     * @param mixed $sJsCall NULL will do nothing, however a STRING JavaScript code will run the code instead of a redirection.
     * @return unknown
     */
    
public static function getUserParam($sName$bRedirect false$sJsCall null)
    {        
        if (
defined('PHPFOX_INSTALLER'))
        {
            return 
true;
        }
        
        
// Is this an array
        
if (is_array($sName))
        {
            
// Get the array key
            
$sKey array_keys($sName);
            
            
// Get the setting value
            
$sValue Phpfox::getService('user.group.setting')->getParam($sKey[0]);

            
// Do the evil eval to get our new value
            
eval('$bPass = (' $sValue ' ' $sName[$sKey[0]][0] . ' ' $sName[$sKey[0]][1] . ');');    
        }
        else 
        {
            
$bPass = (Phpfox::getService('user.group.setting')->getParam($sName) ? true false);
        }
        
        if (
$bRedirect)
        {
            if (
PHPFOX_IS_AJAX && !$bPass)
            {
                if (!
Phpfox::isUser())
                {
                    
// Are we using thickbox?
                    
if (Phpfox::getLib('request')->get('tb'))
                    {
                        
Phpfox::getBlock('user.login-ajax');    
                    }
                    else 
                    {                
                        
// If we passed an AJAX call we execute it
                        
if ($sJsCall !== null)
                        {
                            echo 
$sJsCall;
                        }
                        echo 
"tb_show('" Phpfox::getPhrase('user.login_title') . "', $.ajaxBox('user.login', 'height=250&width=400'));";
                    }                
                }
                else 
                {
                    
// Are we using thickbox?
                    
if (Phpfox::getLib('request')->get('tb'))
                    {
                        
Phpfox::getBlock('subscribe.message');
                    }
                    else 
                    {
                        
// If we passed an AJAX call we execute it
                        
if ($sJsCall !== null)
                        {
                            
// echo $sJsCall;
                        
}                        
                         echo 
"<script type='text/javascript'>window.location.href = '" Phpfox::getLib('url')->makeUrl('subscribe.message') . "';</script>";
                    }
                }
                exit;                
            }
            else 
            {
                if (!
$bPass)
                {
                    if (!
Phpfox::isUser())
                    {
                        
// Create a session so we know where we plan to redirect the user after they login
                        
Phpfox::getLib('session')->set('redirect'Phpfox::getLib('url')->getFullUrl(true));
            
                        
// Okay thats it lets send them away so they can login
                        
Phpfox::getLib('url')->send('user.login');
                    }    
                    else 
                    {                
                        
Phpfox::getLib('url')->send('subscribe');
                    }
                }
                return 
true;
            }
        }
        else 
        {
            if (
is_array($sName))
            {
                return 
$bPass;    
            }
            else
            {            
                return 
Phpfox::getService('user.group.setting')->getParam($sName);
            }            
        }
    }    

    
/**
     * Check to see if we are in the AdminCP or not.
     *
     * @return TRUE if we are, FALSE if we are not.
     */
    
public static function isAdminPanel()
    {
        return (
self::$_bIsAdminCp true false);
    }
    
    
/**
     * Check to see if items are to be displayed in a public manner or within a persons profile.
     *
     * @return bool TRUE will display items in public and FALSE will display on a users profile.
     * @deprecated 3.0.0Beta1
     */
    
public static function isPublicView()
    {
        return (
Phpfox::getParam('core.item_view_area') == 'public' true false);
    }
    
    
/**
     * Starts the phpFox engine. Used to get and display the pages controller.
     *
     */
    
public static function run()
    {        
        
$oTpl Phpfox::getLib('template');
        
$aLocale Phpfox::getLib('locale')->getLang();
        
$oReq Phpfox::getLib('request');
        
$oModule Phpfox::getLib('module');        
        
        ((
$sPlugin Phpfox_Plugin::get('run_start')) ? eval($sPlugin) : false);
        
        
// Load module blocks
        
$oModule->loadBlocks();
        
        if (
Phpfox::isMobile() && $oReq->get('req1') == 'go-to-full-site')
        {
            
Phpfox::getLib('session')->set('mobilestatus''true');
            
Phpfox::getLib('url')->send('phpfox_full_site');
        }
        
        if (!
Phpfox::getParam('core.branding'))
        {
            
$oTpl->setHeader(array('<meta name="author" content="phpFox" />'));
        }
        
        if (
strtolower(Phpfox::getLib('request')->get('req1')) == Phpfox::getParam('admincp.admin_cp'))
        {
            
self::$_bIsAdminCp true;
        }                
        
        
$sImage Phpfox::getUserBy('user_image');        
        
        if (!
Phpfox::getService('ban')->check('ip'Phpfox::getIp()))
        {
            
$oModule->setController('ban.message');
        }
        else 
        {        
            if (!
self::$_bIsAdminCp 
                
&& Phpfox::getParam('core.site_is_offline'
                && !
Phpfox::getUserParam('core.can_view_site_offline')
            )
            {
                if ((
Phpfox::getLib('request')->get('req1') == 'user' 
                    
&& 
                    (
                        
Phpfox::getLib('request')->get('req2') == 'login' ||
                        
Phpfox::getLib('request')->get('req2') == 'logout'
                    
))
                    || 
Phpfox::getLib('request')->get('req1') == 'contact'                
                    
|| Phpfox::getLib('request')->get('req1') == 'captcha'                
                
)
                {
                    
$oModule->setController();
                }
                else 
                {
                    
$oModule->setController('core.offline');
                }
            }
            else 
            {
                
$oModule->setController();
            }        
        }
    
        if (!
PHPFOX_IS_AJAX_PAGE)
        {
                if (
Phpfox::isMobile())
                {
                    
$oTpl->setMobileHeader(array(
                            
'<meta name="viewport" content="width=320; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;" />'                        
                        
)
                    );    
                }
            
                
$oTpl->setImage(array(
                        
'ajax_small' => 'ajax/small.gif',
                        
'ajax_large' => 'ajax/large.gif',
                        
'loading_animation' => 'misc/loading_animation.gif',
                        
'close' => 'misc/close.gif',
                        
'move' => 'misc/move.png',
                        
'calendar' => 'jquery/calendar.gif'
                    
)
                );            
                
                
$oTpl->setHeader(array(
                            
'<meta http-equiv="Content-Type" content="text/html; charset=' $aLocale['charset'] . '" />',
                            
'<meta name="keywords" content="' Phpfox::getLib('locale')->convert(Phpfox::getParam('core.keywords')) . '" />',                
                            
'<meta name="description" content="' Phpfox::getLib('locale')->convert(Phpfox::getParam('core.description')) . '" />',                                
                            
'<meta name="robots" content="index,follow" />',                
                            
'<meta http-equiv="imagetoolbar" content="no" />',                        
                            
'<meta http-equiv="cache-control" content="no-cache" />',
                            
'<meta http-equiv="expires" content="-1" />',
                            
'<meta http-equiv="pragma" content="no-cache" />',                        
                            
'<link rel="shortcut icon" type="image/x-icon" href="' Phpfox::getParam('core.path') . 'favicon.ico" />'                        
                        
)
                    )
                    ->
setHeader('cache', array(
                            
'layout.css' => 'style_css',
                            
'common.css' => 'style_css',
                            
'thickbox.css' => 'style_css',
                            
'jquery.css' => 'style_css',
                            
'pager.css' => 'style_css',
                            
'jquery/jquery.js' => 'static_script'                            
                        
)
                    );
                
                    
//if (!Phpfox::isMobile())
                    
{
                        
$oTpl->setHeader('cache', array('jquery/ui.js' => 'static_script'));
                    }
                
                    if (!
defined('PHPFOX_IS_AD_PREVIEW') && !defined('PHPFOX_IN_DESIGN_MODE') && !defined('PHPFOX_INSTALLER') && Phpfox::getParam('core.site_wide_ajax_browsing'))
                    {
                        
$oTpl->setHeader('cache', array('jquery/plugin/jquery.address.js' => 'static_script'));
                    }                
                
                    
$oTpl->setHeader('cache', array(
                            
'common.js' => 'static_script',
                            
'main.js' => 'static_script',
                            
'ajax.js' => 'static_script',
                            
'thickbox/thickbox.js' => 'static_script',
                            
'search.js' => 'module_friend'                    
                        
)
                    );
                    
                    if (
Phpfox::isModule('friend'))
                    {
                        
$oTpl->setPhrase(array('friend.show_more_results_for_search_term'));        
                    }
        
                if (
PHPFOX_DEBUG)
                {
                    
$oTpl->setHeader('cache', array('debug.css' => 'style_css'));
                }        
                
                if (!
Phpfox::isMobile() && Phpfox::isUser() && Phpfox::getParam('user.enable_user_tooltip'))
                {
                    
$oTpl->setHeader('cache', array(
                            
'user_info.js' => 'static_script'
                        
)
                    );            
                }
                
                if (
$aLocale['direction'] == 'rtl')
                {
                    
$oTpl->setHeader('cache', array(
                            
'rtl.css' => 'style_css'
                        
)
                    );
                }
                
                if (
Phpfox::getParam('captcha.recaptcha'))
                {
                    
$oTpl->setHeader('<script type="text/javascript" src="http://www.google.com/recaptcha/api/js/recaptcha_ajax.js"></script>');
                }
        }
            
        
        ((
$sPlugin Phpfox_Plugin::get('get_controller')) ? eval($sPlugin) : false);

        
$oModule->getController();
        
        
Phpfox::getService('admincp.seo')->setHeaders();
        
        if (!
defined('PHPFOX_DONT_SAVE_PAGE'))
        {
            
Phpfox::getLib('session')->set('redirect'Phpfox::getLib('url')->getFullUrl(true));
        }
    
        if (!
defined('PHPFOX_NO_CSRF'))
        {            
            
Phpfox::getService('log.session')->verifyToken();    
        }
        
        ((
$sPlugin Phpfox_Plugin::get('run')) ? eval($sPlugin) : false);
    
        if (!
self::isAdminPanel())
        {            
                if (!
Phpfox::isMobile() && !PHPFOX_IS_AJAX_PAGE && Phpfox::isModule('rss') && !defined('PHPFOX_IS_USER_PROFILE'))
                {
                    
$aFeeds Phpfox::getService('rss')->getLinks();
                    if (
is_array($aFeeds) && count($aFeeds))
                    {
                        foreach (
$aFeeds as $sLink => $sPhrase)
                        {
                            
$oTpl->setHeader('<link rel="alternate" type="application/rss+xml" title="' $sPhrase '" href="' $sLink '" />');
                        }
                    }
                }
                
                
$aPageLastLogin = ((Phpfox::isModule('pages') && Phpfox::getUserBy('profile_page_id')) ? Phpfox::getService('pages')->getLastLogin() : false);
                
                
$oTpl->assign(array(
                        
'aMenus' => $oTpl->getMenu('main'),
                        
'aRightMenus' => $oTpl->getMenu('main_right'),
                        
'aAppMenus' => $oTpl->getMenu('explore'),
                        
'aSubMenus' => $oTpl->getMenu(),
                        
'aFooterMenu' => $oTpl->getMenu('footer'),
                        
'aBlocks1' => ($oTpl->bIsSample true Phpfox::getLib('module')->getModuleBlocks(1)),
                        
'aBlocks3' => ($oTpl->bIsSample true Phpfox::getLib('module')->getModuleBlocks(3)),                                
                        
'aAdBlocks1' => ($oTpl->bIsSample true : (Phpfox::isModule('ad') ? Phpfox::getService('ad')->getForBlock(1falsefalse) : null)),
                        
'aAdBlocks3' => ($oTpl->bIsSample true : (Phpfox::isModule('ad') ? Phpfox::getService('ad')->getForBlock(3falsefalse) : null)),                                
                        
'bIsUsersProfilePage' => (defined('PHPFOX_IS_USER_PROFILE') ? true false),
                        
'sStyleLogo' => $oTpl->getStyleLogo(),
                        
'aStyleInUse' => $oTpl->getStyleInUse(),
                        
'sGlobalUserFullName' => (Phpfox::isUser() ? Phpfox::getUserBy('full_name') : null),
                        
'aGlobalUser' => (Phpfox::isUser() ? Phpfox::getUserBy(null) : array()),
                        
'sFullControllerName' => str_replace(array('.''/'), '_'Phpfox::getLib('module')->getFullControllerName()),
                        
'iGlobalProfilePageId' => Phpfox::getUserBy('profile_page_id'),
                        
'aGlobalProfilePageLogin' => $aPageLastLogin,
                        
'aInstalledApps' => ((Phpfox::isUser() && Phpfox::isModule('apps')) ? Phpfox::getService('apps')->getInstalledApps() : array()),
                        
'sSiteTitle' => Phpfox::getParam('core.site_title')
                    )
                );            
                
                
$oTpl->setEditor();
                
                if (isset(
$aPageLastLogin['style_id']) && $aPageLastLogin['style_id'] > 0)
                {
                    
Phpfox::getLib('template')->testStyle($aPageLastLogin['style_id']);
                }
                
                if (
Phpfox::isModule('captcha'))
                {
                    
$sCaptchaHeader Phpfox::getParam('captcha.recaptcha_header');
                
                    if (
strlen(preg_replace('/ss+/'''$sCaptchaHeader)) > 0)
                    {
                        
$oTpl->setHeader(array($sCaptchaHeader));
                    }
                }
                
                if (!
PHPFOX_IS_AJAX_PAGE && !defined('PHPFOX_SKIP_IM'))
                {
                    if (!
defined('PHPFOX_IN_DESIGN_MODE'))
                    {
                        if (
Phpfox::isUser() 
                            && 
Phpfox::isModule('subscribe')
                            && 
Phpfox::getParam('subscribe.subscribe_is_required_on_sign_up'
                            && 
Phpfox::getUserBy('user_group_id') == '2' 
                            
&& (int) Phpfox::getUserBy('subscribe_id') > 0
                        
)
                        {
                
                        }
                        else 
                        {
                            if (
Phpfox::isModule('notification') && Phpfox::isUser() && Phpfox::getParam('notification.notify_on_new_request'))
                            {
                                
$oTpl->setHeader('cache', array('update.js' => 'module_notification'));
                            }
                            
                            if (!
Phpfox::isMobile() && Phpfox::isModule('im') && Phpfox::isUser() && Phpfox::getUserBy('profile_page_id') <= && Phpfox::getParam('im.enable_im_in_footer_bar') && !$oTpl->bIsSample)
                            {
                                
$oTpl->setPhrase(array(
                                            
'im.conversations',
                                            
'im.more_conversations',
                                            
'im.are_you_sure'
                                        
)
                                    )
                                    ->
setImage(array(
                                            
'misc_minimize' => 'misc/minimize.gif'
                                        
)
                                    )
                                    ->
setHeader('cache', array(
                                        
'im.js' => 'module_im',
                                        
'im.css' => 'style_css',                                
                                        
'player/' Phpfox::getParam('core.default_music_player') . '/core.js' => 'static_script',
                                    )
                                )
                                ->
setHeader(array(
                                        
'<script type="text/javascript">oCore['im.is_hidden'] = '' . Phpfox::getUserBy('im_hide') . '';</script>',
                                         
'<script type="text/javascript">$Behavior.loadMusicPlayer = function() { $Core.player.load({id: 'js_im_player', type: 'music'}); }</script>'
                                    
)
                                );
                            }
                        }
                    }                                        
                }
            
        }
        
        if (!
PHPFOX_IS_AJAX_PAGE && ($sHeaderFile $oTpl->getHeaderFile()))
        {
            require_once(
$sHeaderFile);
        }
        
        list(
$aBreadCrumbs$aBreadCrumbTitle) = $oTpl->getBreadCrumb();

        
$oTpl->assign(array(
                
'aErrors' => (Phpfox_Error::getDisplay() ? Phpfox_Error::get() : array()),
                
'sPublicMessage' => Phpfox::getMessage(),
                
'sLocaleDirection' => $aLocale['direction'],
                
'sLocaleCode' => $aLocale['language_code'],
                
'sLocaleFlagId' => $aLocale['image'],
                
'sLocaleName' => $aLocale['title'],
                
'aRequests' => Phpfox::getLib('request')->getRequests(),
                
'aBreadCrumbs' => $aBreadCrumbs,
                
'aBreadCrumbTitle' => $aBreadCrumbTitle,
                
'sCopyright' => '&copy; ' Phpfox::getPhrase('core.copyright') . ' ' Phpfox::getParam('core.site_copyright')
            )
        );        

        
Phpfox::clearMessage();        
        
        unset(
$_SESSION['phpfox']['image']);        
    
        if (
Phpfox::getParam('core.cron'))
        {
            require_once(
PHPFOX_DIR_CRON 'exec.php');
        }

        if (!
PHPFOX_IS_AJAX_PAGE && $oTpl->sDisplayLayout)
        {            
            
$oTpl->getLayout($oTpl->sDisplayLayout);
        }

        if (
Phpfox::getParam('language.cache_phrases'))
        {
            
Phpfox::getLib('locale')->cache();
        }        
        
        if (!
PHPFOX_IS_AJAX_PAGE && Phpfox::getParam('core.phpfox_is_hosted'))
        {
            
$iTotalMembersOnline Phpfox::getService('log.session')->getOnlineMembers();
            if (
$iTotalMembersOnline Phpfox::getParam('core.phpfox_max_users_online') && $iTotalMembersOnline > (int) Phpfox::getParam('core.phpfox_total_users_online_mark'))
            {
                
$oDb Phpfox::getLib('database');
                
$oDb->update(Phpfox::getT('setting'), array('value_actual' => (int) $iTotalMembersOnline), 'var_name = 'phpfox_total_users_online_mark'');
                
                
$sPastHistory Phpfox::getParam('core.phpfox_total_users_online_history');
                
$aPastHistory = array();
                if (!empty(
$sPastHistory) && Phpfox::getLib('parse.format')->isSerialized($sPastHistory))
                {
                    
$aPastHistory unserialize($sPastHistory);    
                }
                
$oDb->update(Phpfox::getT('setting'), array('value_actual' => serialize(array_merge($aPastHistory, array(array('time_stamp' => PHPFOX_TIME'total' => (int) $iTotalMembersOnline))))), 'var_name = 'phpfox_total_users_online_history'');
                
                
Phpfox::getLib('cache')->remove('setting');
                
                
ob_clean();                
            }
        }        
        
        
// Use GZIP to output the data if we can        
        
if (Phpfox::getParam('core.use_gzip') && !PHPFOX_IS_AJAX_PAGE)
        {                        
            
$sContent ob_get_contents();
            
            
ob_clean();
    
            if (
function_exists('gzencode'))
            {            
                
$sGzipContent gzencode($sContentPhpfox::getParam('core.gzip_level'), FORCE_GZIP);
            }
            else
            {
                if (
function_exists('gzcompress') && function_exists('crc32'))
                {        
                    
$iSize strlen($sContent);
                    
$iCrc crc32($sContent);
                    
$sGzipContent "x1fx8bx08x00x00x00x00x00x00xff";
                    
$sGzipContent .= substr(gzcompress($sContentPhpfox::getParam('core.gzip_level')), 2, -4);
                    
$sGzipContent .= pack('V'$iCrc);
                    
$sGzipContent .= pack('V'$iSize);        
                }        
            }

            if (isset(
$sGzipContent))
            {                
                
header("Content-Encoding: " . (in_array('x-gzip'Phpfox::getParam('core.gzip_encodings')) ? "x-gzip" "gzip"));
            }            
            
            echo (isset(
$sGzipContent) ? $sGzipContent $sContent);            
        }    
    }
    
    
/**
     * @see Phpfox_Local::getPhrase()
     * @param string $sParam
     * @param array $aParams
     * @param bool $bNoDebug
     * @param string $sDefault
     * @param string $sLang
     * @return string
     */
    
public static function getPhrase($sParam$aParams = array(), $bNoDebug false$sDefault null$sLang '')
    {
        return 
Phpfox::getLib('locale')->getPhrase($sParam$aParams$bNoDebug$sDefault$sLang);
    }
    
    
/**
     * @see Phpfox_Locale::translate()
     * @param string $sParam
     * @param string $sPrefix
     * @return string
     */    
    
public static function getPhraseT($sParam$sPrefix)
    {
        return 
Phpfox::getLib('locale')->translate($sParam$sPrefix);
    }    
    
    
/**
     * Add a public message which can be used later on to display information to a user.
     * Message gets stored in a $_SESSION so the message can be viewed after page reload in case
     * it is used with a HTML form.
     *
     * @see Phpfox_Session::set()
     * @param string $sMsg Message we plan to display to the user
     */
    
public static function addMessage($sMsg)
    {
        
Phpfox::getLib('session')->set('message'$sMsg);
    }

    
/**
     * Get the public message we setup earlier
     *
     * @see Phpfox_Session::get()
     * @return string|void Return the public message, or return nothing if no public message is set
     */
    
public static function getMessage()
    {
        return 
Phpfox::getLib('session')->get('message');        
    }
    
    
/**
     * Clear the public message we set earlier
     *
     * @see Phpfox_Session::remove()
     */
    
public static function clearMessage()
    {
        
Phpfox::getLib('session')->remove('message');
    }    
    
    
/**
     * Set a cookie with PHP setcookie()
     *
     * @see setcookie()
     * @param string $sName The name of the cookie. 
     * @param string $sValue The value of the cookie.
     * @param int $iExpire The time the cookie expires. This is a Unix timestamp so is in number of seconds since the epoch.
     */
    
public static function setCookie($sName$sValue$iExpire 0)
    {
        
$sName Phpfox::getParam('core.session_prefix') . $sName;

        
setcookie($sName$sValue, (($iExpire != || $iExpire != -1) ? $iExpire : (PHPFOX_TIME + (60*60*24*$iExpire))), Phpfox::getParam('core.cookie_path'), Phpfox::getParam('core.cookie_domain'));
    }
    
    
/**
     * Gets a cookie set by the method self::setCookie().
     *
     * @param string $sName Name of the cookie.
     * @return string Value of the cookie.
     */
    
public static function getCookie($sName)
    {
        
$sName Phpfox::getParam('core.session_prefix') . $sName;

        return (isset(
$_COOKIE[$sName]) ? $_COOKIE[$sName] : '');
    }
    
    
/**
     * Start a new log.
     *
     * @param string $sLog Message to the log.
     */
    
public static function startLog($sLog null)
    {
        
self::$_aLogs[] = array();
        
        if (
$sLog !== null)
        {
            
self::log($sLog);
        }
    }
    
    
/**
     * Log a message.
     *
     * @param string $sLog Message to the log.
     */
    
public static function log($sLog)
    {
        
self::$_aLogs[] = $sLog;
    }
    
    
/**
     * End the log and get it.
     *
     * @return array Returns the log.
     */
    
public static function endLog()
    {
        return 
self::$_aLogs;
    }
    
    
/**
     * Permalink for items.
     *
     * @return    string    Returns the full URL of the link.
     */
    
public static function permalink($sLink$iId$sTitle null$bRedirect false$sMessage null$aExtra = array())
    {        
        return 
Phpfox::getLib('url')->permalink($sLink$iId$sTitle$bRedirect$sMessage$aExtra);
    }
}

?>
Онлайн: 0
Реклама