%PDF- %PDF- 403WebShell
403Webshell
Server IP : 37.220.80.31  /  Your IP : 18.117.185.12
Web Server : Apache/2.4.52 (Ubuntu)
System : Linux 3051455-guretool.twc1.net 5.15.0-107-generic #117-Ubuntu SMP Fri Apr 26 12:26:49 UTC 2024 x86_64
User : www-root ( 1010)
PHP Version : 7.4.33
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,
MySQL : OFF  |  cURL : ON  |  WGET : OFF  |  Perl : OFF  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /var/www/www-root/data/www/dev.artlot24.ru/bitrix/modules/codeblogpro.sortpanel/install/components/codeblogpro/sort.panel/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/www/www-root/data/www/dev.artlot24.ru/bitrix/modules/codeblogpro.sortpanel/install/components/codeblogpro/sort.panel/class.php
<?
/**
 * Created by Alexey Panov.
 * Date: 24.12.2016
 * Time: 11:00
 *
 * @author    Alexey Panov <panov@codeblog.pro>
 * @copyright Copyright 2016, Alexey Panov
 * @git repository https://github.com/PanovAlexey/sort.panel
 */

if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) {
    die();
}

use \Bitrix\Main\Loader;
use \Bitrix\Main\Localization\Loc;
use \Bitrix\Main\SystemException;
use \Bitrix\Main\Application;


class CCodeblogProSortPanelComponent extends \CBitrixComponent
{

    const DEFAULT_ORDER_VALUE = 'asc';

    protected $requiredModules = ['iblock'];

    /**
     * @return array
     */
    public static function getSortOrderList() {

        Loc::loadMessages(__FILE__);

        $sortingParams = [];

        $sortingParams['ORDERS_LIST'] = ['asc'        => Loc::getMessage('COMPONENT_SORT_PANEL_COMPONENT_SORT_ORDER_ASC_VALUE'),
                                         'nulls,asc'  => Loc::getMessage('COMPONENT_SORT_PANEL_COMPONENT_SORT_ORDER_NULL_ASC_VALUE'),
                                         'asc,nulls'  => Loc::getMessage('COMPONENT_SORT_PANEL_COMPONENT_SORT_ORDER_ASC_NULLS_VALUE'),
                                         'desc'       => Loc::getMessage('COMPONENT_SORT_PANEL_COMPONENT_SORT_ORDER_DESC_VALUE'),
                                         'nulls,desc' => Loc::getMessage('COMPONENT_SORT_PANEL_COMPONENT_SORT_ORDER_NULLS_DESC_VALUE'),

                                         'desc,nulls' => Loc::getMessage('COMPONENT_SORT_PANEL_COMPONENT_SORT_ORDER_DESC_NULLS_VALUE')];

        $sortingParams['ORDERS_DEFAULT_LIST'] = ['asc', 'desc'];

        $sortingParams['TYPES_LIST'] = [['NAME' => Loc::getMessage('COMPONENT_SORT_PANEL_COMPONENT_SORT_TYPES_NAME_VALUE'),
                                         'CODE' => 'name'],
                                        ['NAME' => Loc::getMessage('COMPONENT_SORT_PANEL_COMPONENT_SORT_TYPES_RAND_VALUE'),
                                         'CODE' => 'rand'],
                                        ['NAME' => Loc::getMessage('COMPONENT_SORT_PANEL_COMPONENT_SORT_TYPES_ACTIVE_VALUE'),
                                         'CODE' => 'active'],
                                        ['NAME' => Loc::getMessage('COMPONENT_SORT_PANEL_COMPONENT_SORT_TYPES_SORT_VALUE'),
                                         'CODE' => 'sort'],
                                        ['NAME' => Loc::getMessage('COMPONENT_SORT_PANEL_COMPONENT_SORT_TYPES_POPULAR_VALUE'),
                                         'CODE' => 'show_counter'],
                                        ['NAME' => Loc::getMessage('COMPONENT_SORT_PANEL_COMPONENT_SORT_TYPES_DATE_VALUE'),
                                         'CODE' => 'created']];

        $sortingParams['FIELDS_DEFAULT_LIST'] = ['name', 'sort', 'created'];

        return $sortingParams;
    }

    /**
     * @return array
     */
    public function getSortOrderListByCurrentFields() {

        $allFieldsList = self::getSortOrderList()['TYPES_LIST'];
        $fieldsList = array();

        foreach ($allFieldsList as $field) {
            if (in_array($field['CODE'], $this->arParams['FIELDS_CODE'])) {
                $fieldsList[$field['CODE']] = $field;
            }
        }

        return $fieldsList;
    }

    /**
     * @return array
     */
    public function getSortOrderListByCurrentProperties() {

        $propertyList = [];

        $propertiesCollection = \Bitrix\Iblock\PropertyTable::getList(['select' => ['NAME',
                                                                                    'CODE'],
                                                                       'filter' => ['IBLOCK_ID' => (int)$this->arParams['IBLOCK_ID'],
                                                                                    'CODE'      => $this->arParams['PROPERTY_CODE'],],]);
        while ($property = $propertiesCollection->fetch()) {
            $property['CODE'] = 'property_' . $property['CODE'];
            $propertyList[$property['CODE']]   = $property;
        }

        return $propertyList;
    }

    /**
     * @return array
     */
    public function getSortOrderListByCurrentPrices() {

        $propertyList = [];

        if (Loader::includeModule('catalog')) {
            $priceTypeCollection = \CCatalogGroup::GetList(['SORT' => 'ASC'], ['ID' => $this->arParams['PRICE_CODE']]);

            while ($priceType = $priceTypeCollection->Fetch()) {

                $property['NAME'] = $priceType['NAME_LANG'];
                $property['CODE'] = 'catalog_PRICE_' . $priceType['ID'];
                $propertyList[$property['CODE']]   = $property;
            }
        }

        return $propertyList;
    }

    protected function checkModules() {

        foreach ($this->requiredModules as $moduleName) {
            if (!Loader::includeModule($moduleName)) {
                throw new SystemException(Loc::getMessage('COMPONENT_SORT_PANEL_COMPONENT_NO_MODULE', ['#MODULE#',
                                                                                                       $moduleName]));
            }
        }

        return $this;
    }

    /**
     * Event called from includeComponent before component execution.
     * Takes component parameters as argument and should return it formatted as needed.
     *
     * @param  array [string]mixed $arParams
     *
     * @return array[string]mixed
     */
    public function onPrepareComponentParams($params) {

        global ${$params['SORT_NAME']};

        if (trim($params['SORT_NAME']) == '') {
            $params['SORT_NAME'] = 'SORT';
        }

        if (!(${$params['SORT_NAME']})) {
            ${$params['SORT_NAME']} = [];
        }

        global ${$params['ORDER_NAME']};

        if (trim($params['ORDER_NAME']) == '') {
            $params['ORDER_NAME'] = 'ORDER';
        }

        if (!(${$params['ORDER_NAME']})) {
            ${$params['ORDER_NAME']} = [];
        }

        if (!isset($params['CACHE_TIME'])) {
            $params['CACHE_TIME'] = 36000000;
        }

        return $params;
    }

    /**
     * Event called from includeComponent before component execution.
     * Includes component.php from within lang directory of the component.
     *
     * @return void
     */
    public function onIncludeComponentLang() {
        $this->includeComponentLang(basename(__FILE__));
        Loc::loadMessages(__FILE__);
    }

    /**
     * @param      $value
     * @param bool $isOrder
     *
     * @return bool
     */
    protected function isSortActive($value, $isOrder = false) {

        $request = Application::getInstance()->getContext()->getRequest();

        $isOrder = (bool)$isOrder;
        $value   = trim($value);

        $isActive = false;

        if ($isOrder) {

            if ($request->getQuery('order') == $value) {
                $isActive = true;
            }

            $order = $request->getQuery('order');

            if (empty($order) && ($_SESSION['order'] == $value)
                && ($this->arParams['INCLUDE_SORT_TO_SESSION'] == 'Y')
            ) {
                $isActive = true;
            }
        } else {
            if ($request->getQuery('sort') == $value) {
                $isActive = true;
            }

            $sort = $request->getQuery('sort');

            if (empty($sort) && ($_SESSION['sort'] == $value)
                && ($this->arParams['INCLUDE_SORT_TO_SESSION'] == 'Y')
            ) {
                $isActive = true;
            }
        }

        return $isActive;
    }

    /**
     * @param string $sortOrder
     *
     * @return string
     */
    protected function getInvertSortOrder($sortOrder) {

        $sortOrder = trim($sortOrder);
        $invertSortOrder = '';

        if (empty($sortOrder) || $sortOrder == 'asc') {
            $invertSortOrder = 'desc';
        }
        elseif ($sortOrder == 'desc') {
            $invertSortOrder = 'asc';
        }
        elseif ($sortOrder == 'nulls,asc') {
            $invertSortOrder = 'asc,nulls';
        }
        elseif ($sortOrder == 'asc,nulls') {
            $invertSortOrder = 'nulls,asc';
        }
        elseif ($sortOrder == 'nulls,desc') {
            $invertSortOrder = 'desc,nulls';
        }
        elseif ($sortOrder == 'desc,nulls') {
            $invertSortOrder = 'nulls,desc';
        }

        return $invertSortOrder;
    }

    /**
     * @param bool $isOrder
     *
     * @return string
     */
    protected function getCurrentSort( $isOrder = false) {

        $request = Application::getInstance()->getContext()->getRequest();

        $isOrder = (bool)$isOrder;
        $value = '';

        if ($isOrder) {

            $order = $request->getQuery('order');

            if (!empty($order)) {
                $value = $request->getQuery('order');
            }

            if ($this->arParams['INCLUDE_SORT_TO_SESSION'] == 'Y') {
                if ((empty($order)) && (isset($_SESSION['order']) && (!empty($_SESSION['order'])))) {
                    $value = $_SESSION['order'];
                }
            }

        } else {

            $sort = $request->getQuery('sort');

            if (!empty($sort)) {
                $value = $request->getQuery('sort');
            }

            if ($this->arParams['INCLUDE_SORT_TO_SESSION'] == 'Y') {
                if ((empty($sort))
                    && (isset($_SESSION['sort']) && (!empty($_SESSION['sort'])))) {
                    $value = $_SESSION['sort'];
                }
            }
        }

        return $value;
    }

    /**
     * @return $this
     */
    protected function prepareResult() {

        global $USER;

        $request = Application::getInstance()->getContext()->getRequest();

        $cacheId = $request->getQuery('sort') . $request->getQuery('order');
        $cacheId .= serialize($this->arParams);

        if ($this->arParams['INCLUDE_SORT_TO_SESSION'] == 'Y') {
            $cacheId .= $_SESSION['sort'] . $_SESSION['order'];
        }

        $cacheId .= $USER->GetGroups();

        $cache = new CPHPCache();

        if ($cache->InitCache($this->arParams['CACHE_TIME'], $cacheId, '/sort.panel/')) {
            $result = $cache->GetVars();
        } elseif ($cache->StartDataCache()) {

            $result['SORT']['PROPERTIES'] = array();

            if ($this->arParams['FIELDS_CODE']) {
                $result['SORT']['PROPERTIES'] = array_merge(
                    $result['SORT']['PROPERTIES'], $this->getSortOrderListByCurrentFields()
                );
            }

            if ($this->arParams['PROPERTY_CODE']) {
                $result['SORT']['PROPERTIES'] = array_merge(
                    $result['SORT']['PROPERTIES'], $this->getSortOrderListByCurrentProperties()
                );
            }

            if ($this->arParams['PRICE_CODE']) {
                $result['SORT']['PROPERTIES'] = array_merge(
                    $result['SORT']['PROPERTIES'], $this->getSortOrderListByCurrentPrices()
                );
            }

            $cache->EndDataCache($result);
        }

        global $APPLICATION;

        foreach ($result['SORT']['PROPERTIES'] as &$prop) {

            $prop['ACTIVE'] = $this->isSortActive($prop['CODE']);

            if ($prop['CODE'] == 'rand') {
                $prop['URL'] = $APPLICATION->GetCurPageParam(
                    'sort=' . $prop['CODE'],
                    ['sort', 'order']
                );
            }
            elseif ($prop['ACTIVE']) {
                $invertCurrentSortOrder = $this->getInvertSortOrder( $this->getCurrentSort($isOrder = true));
                $prop['ORDER'] = $invertCurrentSortOrder;
                $prop['URL'] = $APPLICATION->GetCurPageParam(
                    'sort=' . $prop['CODE'] . '&order=' . $invertCurrentSortOrder,
                    ['sort', 'order']
                );

            }
            else {
                $prop['ORDER'] = $this->getCurrentSort(true);
                $prop['URL'] = $APPLICATION->GetCurPageParam('sort=' . $prop['CODE'], ['sort']);
            }
        }

        if (!empty($this->arParams['SORT_ORDER'])) {

            foreach ($this->arParams['SORT_ORDER'] as $sortOrder) {

                $result['SORT']['ORDERS'][] = ['ACTIVE' => $this->isSortActive($sortOrder, $isOrder = true),
                                               'CODE'   => $sortOrder,
                                               'URL'    => $APPLICATION->GetCurPageParam('order='
                                                                                         . $sortOrder, ['order'])];
            }

        }

        $this->arResult = $result;

        return $this;
    }

    /**
     * @return void
     */
    protected function outputtingSortingParameters() {

        global ${$this->arParams['SORT_NAME']};
        global ${$this->arParams['ORDER_NAME']};

        $request = Application::getInstance()->getContext()->getRequest();

        if ($this->arParams['INCLUDE_SORT_TO_SESSION'] == 'Y') {

            $sort = $request->getQuery('sort');

            if (empty($sort)) {
                ${$this->arParams['SORT_NAME']} = $_SESSION['sort'];
            } else {
                $_SESSION['sort']               = $request->getQuery('sort');
                ${$this->arParams['SORT_NAME']} = $request->getQuery('sort');
            }

            $order = $request->getQuery('order');

            if (empty($order)) {
                ${$this->arParams['ORDER_NAME']} = $_SESSION['order'];
            } else {
                $_SESSION['order']               = $request->getQuery('order');
                ${$this->arParams['ORDER_NAME']} = $request->getQuery('order');
            }
        } else {
            ${$this->arParams['SORT_NAME']}  = $request->getQuery('sort');
            ${$this->arParams['ORDER_NAME']} = $request->getQuery('order');
        }

    }

    public function executeComponent() {
        try {
            $this->checkModules()->prepareResult();
            $this->outputtingSortingParameters();
            $this->includeComponentTemplate();
        } catch (SystemException $e) {
            self::__showError($e->getMessage());
        }
    }
}

Youez - 2016 - github.com/yon3zu
LinuXploit