HEX
Server: Apache/2.4.6 (CentOS) mpm-itk/2.4.7-04 mod_fcgid/2.3.9 PHP/5.4.16
System: Linux dvm.vladweb.ru 3.10.0-1160.119.1.el7.x86_64 #1 SMP Tue Jun 4 14:43:51 UTC 2024 x86_64
User: region-gk.ru (1016)
PHP: 7.3.33
Disabled: NONE
Upload Files
File: //home/temp/yarusvl.ru/api/Comparison.php
<?php

require_once('Mgc.php');

class Comparison extends Mgc {

    /*Выборка списка товаров в сравнении*/
    public function get_comparison() {
        $comparison = new stdClass();
        $comparison->products = array();
        $comparison->features = array();
        $comparison->ids = array();

        $items = !empty($_COOKIE['comparison']) ? unserialize($_COOKIE['comparison']) : array();
        if(!empty($items) && is_array($items)) {
            $products = array();
            foreach ($this->products->get_products(array('id'=>$items, 'visible'=>1)) as $p) {
                $products[$p->id] = $p;
            }
            if(!empty($products)) {
                $products_ids = array_keys($products);
                $comparison->ids = $products_ids;
                foreach($products as $product) {
                    $product->variants = array();
                    $product->images = array();
                    $product->features = array();
                }
                
                $variants = $this->variants->get_variants(array('product_id'=>$products_ids));
                
                foreach($variants as $variant) {
                    $products[$variant->product_id]->variants[] = $variant;
                }
                
                $images = $this->products->get_images(array('product_id'=>$products_ids));
                foreach($images as $image) {
                    $products[$image->product_id]->images[] = $image;
                }
                
                $options = array();
                $features_ids = array();
                foreach($this->features->get_comparison_options($products_ids) as $o) {
                    $options[$o->feature_id][$o->product_id] = $o->value;
                    $features_ids[] = $o->feature_id;
                }
                $features = array();
                if (!empty($features_ids)) {
                    foreach ($this->features->get_features(array('id' => $features_ids)) as $f) {
                        $features[$f->id] = $f;
                        foreach ($products as $p) {
                            if(isset($options[$f->id][$p->id])){
                                $features[$f->id]->products[$p->id] = $options[$f->id][$p->id];
                            }
                            else{
                                $features[$f->id]->products[$p->id] = null;
                            }
                        }
                        $features[$f->id]->not_unique = (count(array_unique($features[$f->id]->products)) == 1) ? true : false;
                    }
                }
                if(!empty($features)) {
                    $comparison->features = $features;
                }
                
                foreach($products as $product) {
                    if(isset($product->variants[0])) {
                        $product->variant = $product->variants[0];
                    }
                    if(isset($product->images[0])) {
                        $product->image = $product->images[0];
                    }
                    foreach($features as $id=>$f) {
                        if(isset($options[$id][$product->id])){
                            $product->features[$id] = $options[$id][$product->id];
                        }
                        else{
                            $product->features[$id] = null;
                        }
                    }
                }
                $comparison->products = $products;
            }
        }
        return $comparison;
    }

    /*Добавление товара в список сравнения*/
    public function add_item($product_id) {
        $items = !empty($_COOKIE['comparison']) ? unserialize($_COOKIE['comparison']) : array();
        $items = $items && is_array($items) ? $items : array();
        if (!in_array($product_id, $items)) {
            $items[] = $product_id;
            if ($this->settings->comparison_count && $this->settings->comparison_count < count($items)) {
                array_shift($items);
            }
        }
        $_COOKIE['comparison'] = serialize($items);
        setcookie('comparison', $_COOKIE['comparison'], time()+30*24*3600, '/');
    }

    /*Удаление товара из списка сравнения*/
    public function delete_item($product_id) {
        $items = !empty($_COOKIE['comparison']) ? unserialize($_COOKIE['comparison']) : array();
        if (!is_array($items)) {
            return;
        }
        $i = array_search($product_id, $items);
        if ($i !== false) {
            unset($items[$i]);
        }
        $_COOKIE['comparison'] = serialize($items);
        setcookie('comparison', $_COOKIE['comparison'], time()+30*24*3600, '/');
    }

    /*Очистка списка сравнения*/
    public function empty_comparison() {
        unset($_COOKIE['comparison']);
        setcookie('comparison', '', time()-3600, '/');
    }
    
}