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/bk/__backup/api/Banners.php
<?php

require_once('Mgc.php');

class Banners extends Mgc {

    /*Выбираем все слайды*/
    public function get_banners_images($filter = array()) {
        $limit = 100;  // По умолчанию
        $page = 1;
        $banner_id_filter = '';
        $banners_images_id_filter = '';
        $visible_filter = '';
        $group_by = '';
        $order = 'bi.position DESC';
        
        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);
        
        if(!empty($filter['id'])) {
            $banners_images_id_filter = $this->db->placehold('AND bi.id in(?@)', (array)$filter['id']);
        }
        
        if(!empty($filter['banner_id'])) {
            $banner_id_filter = $this->db->placehold('AND bi.banner_id in(?@)', (array)$filter['banner_id']);
        }
        
        if(isset($filter['visible'])) {
            $visible_filter = $this->db->placehold('AND bi.visible=?', intval($filter['visible']));
        }
        
        if(!empty($filter['sort'])) {
            switch ($filter['sort']) {
                case 'position':
                    $order = 'bi.position DESC';
                    break;
            }
        }
        
        $lang_sql = $this->languages->get_query(array('object'=>'banner_image', 'px'=>'bi'));
        $query = "SELECT 
                bi.id, 
                bi.banner_id, 
                bi.image, 
                bi.position, 
                bi.visible, 
                $lang_sql->fields 
            FROM __banners_images bi
            $lang_sql->join
            WHERE 
                1 
                $banners_images_id_filter 
                $banner_id_filter 
                $visible_filter 
            $group_by
            ORDER BY $order 
            $sql_limit
        ";
        
        $this->db->query($query);
        return $this->db->results();
    }

    /*Подсчитываем количество найденных слайдов*/
    public function count_banners_images($filter = array()) {
        $banner_id_filter = '';
        $banners_images_id_filter = '';
        $visible_filter = '';
        
        if(!empty($filter['banner_id'])) {
            $banner_id_filter = $this->db->placehold('AND bi.banner_id in(?@)', (array)$filter['banner_id']);
        }
        
        if(!empty($filter['id'])) {
            $banners_images_id_filter = $this->db->placehold('AND bi.id in(?@)', (array)$filter['id']);
        }

        if(isset($filter['visible'])) {
            $visible_filter = $this->db->placehold('AND bi.visible=?', intval($filter['visible']));
        }
        
        $query = "SELECT count(distinct bi.id) as count 
            FROM __banners_images AS bi
            WHERE 
                1 
                $banner_id_filter 
                $banners_images_id_filter 
                $visible_filter 
        ";
        
        $this->db->query($query);
        return $this->db->result('count');
    }

    /*Выбираем конкретный слайд*/
    public function get_banners_image($id) {
        if(!is_int($id)) {
           return false;
        }
        $banner_id_filter = $this->db->placehold("AND bi.id=?", intval($id));
        
        $lang_sql = $this->languages->get_query(array('object'=>'banner_image', 'px'=>'bi'));
        $query = $this->db->placehold("SELECT 
                bi.id, 
                bi.banner_id, 
                bi.image, 
                bi.position, 
                bi.visible, 
                $lang_sql->fields 
            FROM __banners_images bi 
            $lang_sql->join
            WHERE 
                1 
                $banner_id_filter
            LIMIT 1
        ", $id);
        $this->db->query($query);
        $banners_image = $this->db->result();
        return $banners_image;
    }

    /*Добавление слайда*/
    public function add_banners_image($banners_image) {
        $banners_image = (object)$banners_image;
        // Проверяем есть ли мультиязычность и забираем описания для перевода
        $result = $this->languages->get_description($banners_image, 'banner_image');
        
        if($this->db->query("INSERT INTO __banners_images SET ?%", $banners_image)) {
            $id = $this->db->insert_id();
            $this->db->query("UPDATE __banners_images SET position=id WHERE id=?", $id);
            
            // Если есть описание для перевода. Указываем язык для обновления
            if(!empty($result->description)) {
                $this->languages->action_description($id, $result->description, 'banner_image');
            }
            return $id;
        } else {
            return false;
        }
    }

    /*Обновление слайда*/
    public function update_banners_image($id, $banners_image) {
        $banners_image = (object)$banners_image;
        // Проверяем есть ли мультиязычность и забираем описания для перевода
        $result = $this->languages->get_description($banners_image, 'banner_image');
        
        $query = $this->db->placehold("UPDATE __banners_images SET ?% WHERE id in (?@) LIMIT ?", $banners_image, (array)$id, count((array)$id));
        if($this->db->query($query)) {
            // Если есть описание для перевода. Указываем язык для обновления
            if(!empty($result->description)) {
                $this->languages->action_description($id, $result->description, 'banner_image', $this->languages->lang_id());
            }
            return $id;
        } else {
            return false;
        }
    }

    /*Удаление слайда*/
    public function delete_banners_image($id) {
        if(!empty($id)) {
            $this->image->delete_image((int)$id, 'image', 'banners_images', $this->config->banners_images_dir, $this->config->resized_banners_images_dir);
            $query = $this->db->placehold("DELETE FROM __banners_images WHERE id=? LIMIT 1", intval($id));
            if($this->db->query($query)) {
                $this->db->query("DELETE FROM __lang_banners_images where banner_image_id=?", intval($id));
                return true;
            }
        }
        return false;
    }

    /*Выбираем все группы баннеров*/
    public function get_banners($filter = array()) {
        $visible_filter = '';
        $banners = array();
        
        if(isset($filter['visible'])) {
            $visible_filter = $this->db->placehold('AND visible = ?', intval($filter['visible']));
        }
        
        $query = "SELECT * FROM __banners WHERE 1 $visible_filter ORDER BY position";
        
        $this->db->query($query);
        
        foreach($this->db->results() as $banner) {
            $banners[$banner->id] = $banner;
        }
        
        return $banners;
    }

    /*Выбираем определенную группу баннеров*/
    public function get_banner($id, $visible = false, $show_filter_array = array()) {
        if (empty($id)) {
            return false;
        }
        
        $is_visible = '';
        $show_filter = '';
        
        if($visible) {
            $is_visible = 'AND visible=1';
        }

        if(is_int($id)) {
            $banner_id_filter = $this->db->placehold('AND id=? ', intval($id));
        } else {
            $banner_id_filter = $this->db->placehold('AND group_id=? ', $id);
        }
        
        if(!empty($show_filter_array)) {
            foreach($show_filter_array as $k=>$sfa) {
                if(empty($sfa)) {
                    unset($show_filter_array[$k]);
                    continue;
                }
                $show_filter_array[$k] = $this->db->placehold($k." regexp '[[:<:]](?)[[:>:]]'", intval($show_filter_array[$k]));
            }
            $show_filter_array[] = "show_all_pages=1";
            $show_filter = 'AND (' . implode(' OR ',$show_filter_array) . ')';
        }
        
        $query = $this->db->placehold("SELECT * FROM __banners WHERE 1 $banner_id_filter $is_visible $show_filter LIMIT 1");
        $this->db->query($query);
        $banner = $this->db->result();
        return $banner;
    }

    /*Обновляем группу баннеров*/
    public function update_banner($id, $banner) {
        $query = $this->db->placehold("UPDATE __banners SET ?% WHERE id in (?@) LIMIT ?", $banner, (array)$id, count((array)$id));
        if($this->db->query($query)) {
            return $id;
        } else {
            return false;
        }
    }

    /*Добавляем группу баннеров*/
    public function add_banner($banner) {
        $banner = (array) $banner;
        
        if($this->db->query("INSERT INTO __banners SET ?%", $banner)) {
            $id = $this->db->insert_id();
            $this->db->query("UPDATE __banners SET position=id WHERE id=?", $id);
            return $id;
        } else {
            return false;
        }
    }

    /*Удаляем группу баннеров*/
    public function delete_banner($id) {
        if(!empty($id)) {
            $this->db->query("SELECT id FROM __banners_images where banner_id=?", intval($id));
            $banners_images_ids = $this->db->results('id');
            if (!empty($banners_images_ids)) {
                foreach ($banners_images_ids as $bi_id) {
                    $this->delete_banners_image($bi_id);
                }
            }
            
            $query = $this->db->placehold("DELETE FROM __banners WHERE id=? LIMIT 1", intval($id));
            if($this->db->query($query)) {
                return true;
            }
        }
        return false;
    }
    
}