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/adminx/core/ImportLogAdmin.php
<?php

require_once('api/Mgc.php');

class ImportLogAdmin extends Mgc {

    /*Лог импорта товаров*/
    public function fetch() {
        $filter = array();
        $filter['page'] = max(1, $this->request->get('page', 'integer'));

        if ($filter['limit'] = $this->request->get('limit', 'integer')) {
            $filter['limit'] = max(25, $filter['limit']);
            $filter['limit'] = min(500, $filter['limit']);
            $_SESSION['import_log_num'] = $filter['limit'];
        } elseif (!empty($_SESSION['import_log_num'])) {
            $filter['limit'] = $_SESSION['import_log_num'];
        } else {
            $filter['limit'] = 100;
        }
        $this->design->assign('current_limit', $filter['limit']);

        // Текущий фильтр
        if($f = $this->request->get('filter', 'string')) {
            $filter['status'] = $f;
            $this->design->assign('filter', $f);
        }

        // Поиск
        $keyword = $this->request->get('keyword');
        if(!empty($keyword)) {
            $filter['keyword'] = $keyword;
            $this->design->assign('keyword', $keyword);
        }

        $logs_count = $this->get_logs($filter);
        // Показать все страницы сразу
        if($this->request->get('page') == 'all') {
            $filter['limit'] = $logs_count;
        }

        if($filter['limit']>0) {
            $pages_count = ceil($logs_count/$filter['limit']);
        } else {
            $pages_count = 0;
        }
        $filter['page'] = min($filter['page'], $pages_count);
        $this->design->assign('logs_count', $logs_count);
        $this->design->assign('pages_count', $pages_count);
        $this->design->assign('current_page', $filter['page']);

        $logs = $this->get_logs($filter, false);
        if(!empty($logs)) {
            $products_ids = array();
            foreach($logs as $l) {
                $products_ids[] = $l->product_id;
            }

            $products = array();
            foreach($this->products->get_products(array('id'=>array_unique($products_ids))) as $p) {
                $p->images = array();
                $products[$p->id] = $p;
            }

            $images = $this->products->get_images(array('product_id'=>array_unique($products_ids)));
            foreach($images as $image) {
                $products[$image->product_id]->images[$image->id] = $image;
            }

            foreach ($logs as $l) {
                if (isset($products[$l->product_id])) {
                    $l->product = $products[$l->product_id];
                }
            }
        }
        $this->design->assign('logs', $logs);

        return $this->design->fetch('import_log.tpl');
    }

    /*Выборка лога последнего успешного импорта*/
    private function get_logs($filter = array(), $is_count = true) {
        $keyword_filter = '';
        $status_filter = '';
        $sql_limit = '';

        if (isset($filter['keyword'])) {
            $keywords = explode(' ', $filter['keyword']);
            foreach ($keywords as $keyword) {
                $kw = $this->db->escape(trim($keyword));
                if ($kw !== '') {
                    $keyword_filter .= $this->db->placehold("AND (
                        il.product_name LIKE '%$kw%'
                        OR il.variant_name LIKE '%$kw%'
                    ) ");
                }
            }
        }
        if (isset($filter['status'])) {
            $status_filter = $this->db->placehold('AND il.status=?', $filter['status']);
        }

        if ($is_count) {
            $select = 'count(il.id) as cnt';
        } else {
            $select = 'il.*';
            $limit = 100;
            if(isset($filter['limit'])) {
                $limit = max(1, intval($filter['limit']));
            }
            if(isset($filter['page'])) {
                $page = max(1, intval($filter['page']));
            }
            $sql_limit = $this->db->placehold(' LIMIT ?, ? ', ($page-1)*$limit, $limit);
        }
        $query = "SELECT $select
            FROM __import_log AS il
            WHERE
                1
                $keyword_filter
                $status_filter
            ORDER BY id DESC
            $sql_limit
        ";
        $this->db->query($query);
        if ($is_count) {
            return $this->db->result('cnt');
        } else {
            return $this->db->results();
        }
    }

}