Вход Регистрация
Файл: system/core/request.php
Строк: 151
<?php
/**
 * Класс для работы с запросами/параметрами,
 * передаваемыеми в контроллеры
 */
class cmsRequest {

    
/**
     * Константы контекста запроса
     * @var integer
     */
    
const CTX_AUTO_DETECT 0;
    const 
CTX_STANDARD    1;
    const 
CTX_INTERNAL    2;
    const 
CTX_AJAX        3;

    
/**
     * Константы типа контекста запроса
     * @var integer
     */
    
const CTX_TYPE_STANDARD 0;
    const 
CTX_TYPE_MODAL    1;

    
/**
     * Массив данных запроса
     * @var array
     */
    
private $data = [];

    
/**
     * Текущий контекст запроса
     * @var integer
     */
    
private $context 0;

    
/**
     * Общесистемное определение типа устройства,
     * с которого зашли на сайт
     * @var string
     */
    
private static $device_type null;

    
/**
     * Возможные типы устройств
     * @var array
     */
    
public static $device_types = ['desktop''mobile''tablet'];

    
/**
     * Создает объект запроса
     * @param array $data Параметры для контроллера
     * @param integer $context Контекст (если не указан, определяется автоматически)
     */
    
public function __construct($data$context cmsRequest::CTX_AUTO_DETECT){

        
$this->setData($data);

        if (
$context == cmsRequest::CTX_AUTO_DETECT){
            
$this->context $this->detectContext();
        } else {
            
$this->context $context;
        }
    }

//============================================================================//
//============================================================================//

    /**
     * Определяет контекст текущего запроса (стандартный или ajax)
     * @return integer
     */
    
private function detectContext(){
        if(isset(
$_SERVER['HTTP_X_REQUESTED_WITH']) &&
            
$_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') {
            return 
cmsRequest::CTX_AJAX;
        } else {
            return 
cmsRequest::CTX_STANDARD;
        }
    }

    
/**
     * Возвращает текущий контекст использования
     * @return integer
     */
    
public function getContext(){
        return 
$this->context;
    }

    
/**
     * Устанавливает текущий контекст использования
     * @param integer $context
     * @return $this
     */
    
public function setContext($context){
        
$this->context $context; return $this;
    }

    
/**
     * Возвращает true, если запрос вызван через URL
     * @return boolean
     */
    
public function isStandard(){
        return (
$this->context == cmsRequest::CTX_STANDARD);
    }

    
/**
     * Возвращает true, если запрос вызван другим контроллером
     * @return boolean
     */
    
public function isInternal(){
        return (
$this->context == cmsRequest::CTX_INTERNAL);
    }

    
/**
     * Возвращает true, если запрос вызван через AJAX
     * @return boolean
     */
    
public function isAjax(){
        return (
$this->context == cmsRequest::CTX_AJAX);
    }

    
/**
     * Возвращает тип контекста запроса
     * @return integer
     */
    
public function getType(){
        if(isset(
$_SERVER['HTTP_ICMS_REQUEST_TYPE']) && is_numeric($_SERVER['HTTP_ICMS_REQUEST_TYPE'])) {
            return 
$_SERVER['HTTP_ICMS_REQUEST_TYPE'];
        } else {
            return 
self::CTX_TYPE_STANDARD;
        }
    }

    
/**
     * Возвращает true, если тип контекста запроса для модального окна
     * @return boolean
     */
    
public function isTypeModal(){
        return 
$this->getType() == self::CTX_TYPE_MODAL;
    }

//============================================================================//
//============================================================================//

    /**
     * Проверяет наличие переменной запроса
     * @param string $var Название переменной
     * @return boolean
     */
    
public function has($var){
        return isset(
$this->data[$var]);
    }

    
/**
     * Проверяет наличие переменной по переданной вложенности
     * @return boolean
     */
    
public function hasInArray(){
        
$keys func_get_args(); if(count($keys) === 1){ $keys $keys[0]; }
        return (bool)
array_value_recursive($keys$this->data);
    }

    
/**
     * Проверяет наличие переменной в GET запросе
     * @param string $var Название переменной
     * @return boolean
     */
    
public function hasInQuery($var){
        
$query cmsCore::getInstance()->uri_query;
        if (!
$query){ return false; }
        return isset(
$query[$var]);
    }

    
/**
     * Возвращает параметр из запроса
     * @param string $var Название переменной
     * @param mixed $default Значение по умолчанию, если в запросе переменной нет
     * @param string $var_type Тип переменной
     * @return mixed
     */
    
public function get($var$default false$var_type null){

        
//если значение не определено, возвращаем умолчание

        
if (strpos($var':') === false){
            if (!
$this->has($var)) { return $default; }
            
$value $this->data[$var];
        } else {
            
$value array_value_recursive($var$this->data);
            if (
$value === null) { return $default; }
        }

        if(
$var_type === null){

            
// типизируем, основываясь на значении по умолчанию
            // берем во внимание не все типы
            
$default_type gettype($default);

            if(
in_array($default_type, array('integer','string','double','array'))){
                
$var_type $default_type;
            }

        }

        if(
$var_type !== null){

            if(
is_array($value) && $var_type !== 'array'){
                
$value '';
            } else {
                
settype($value$var_type);
            }

        }

        return 
$value;

    }

    
/**
     * Возвращает все имеющиеся параметры
     * @return array
     */
    
public function getAll(){ return $this->data; }
    public function 
getData(){ return $this->getAll(); }

    
/**
     * Устанавливает параметры текущего запроса
     * @param array $data
     */
    
public function setData($data){ $this->data $data; }

    
/**
     * Устанавливает значение параметра текущего запроса
     * @param string $name Название параметра
     * @param mixed $value Значение параметра
     * @return $this
     */
    
public function set($name$value){

        
$this->data[$name] = $value;

        return 
$this;

    }

//============================================================================//
//============================================================================//

    
private static function loadDeviceType() {

        
$device_type  cmsUser::getCookie('device_type''string', function ($cookie){ return trim(strip_tags($cookie)); });

        if(!
$device_type || !in_array($device_typeself::$device_typestrue)){

            
cmsCore::loadLib('mobile_detect.class');

            
$detect = new Mobile_Detect();

            
$device_type = ($detect->isMobile() ? ($detect->isTablet() ? 'tablet' 'mobile') : 'desktop');

            
cmsUser::setCookie('device_type'$device_type31536000); // на 1 год

        
}

        
self::$device_type $device_type;

    }

    
/**
     * Возвращает тип устройства, используемое в текущем запросе
     * @return string
     */
    
public static function getDeviceType() {

        if(
self::$device_type === null){
            
self::loadDeviceType();
        }

        return 
self::$device_type;

    }

}
Онлайн: 0
Реклама