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/Pages.php
<?php

require_once('Mgc.php');

class Pages extends Mgc {

    // Системные url
    public $system_pages = array('catalog', 'products', 'all-products', 'discounted', 'bestsellers', 'brands', 'blog', 'news', 'wishlist', 'comparison', 'cart', 'order', 'contact', 'user', '404', '');
    
    /*Выборка конкрентной страницы*/
    public function get_page($id) {
        if(gettype($id) == 'string') {
            $where = $this->db->placehold('AND p.url=? ', $id);
        } else {
            $where = $this->db->placehold('AND p.id=? ', intval($id));
        }
        
        $lang_sql = $this->languages->get_query(array('object'=>'page'));
        
        $query = "SELECT 
                p.id, 
                p.url, 
                p.position, 
                p.visible, 
                p.last_modify, 
                $lang_sql->fields
            FROM __pages p 
            $lang_sql->join 
            WHERE 
                1 
                $where 
            LIMIT 1
        ";
        
        $this->db->query($query);
        return $this->db->result();
    }

    /*Выборка всех страниц*/
    public function get_pages($filter = array()) {
        $visible_filter = '';
        $pages = array();
        
        if(isset($filter['visible'])) {
            $visible_filter = $this->db->placehold('AND p.visible = ?', intval($filter['visible']));
        }
        
        $lang_sql = $this->languages->get_query(array('object'=>'page'));
        $query = "SELECT 
                p.id, 
                p.url, 
                p.position, 
                p.visible, 
                p.last_modify, 
                $lang_sql->fields
            FROM __pages p 
            $lang_sql->join 
            WHERE 
                1 
                $visible_filter 
            ORDER BY p.position
        ";
        $this->db->query($query);
        foreach($this->db->results() as $page) {
            $pages[$page->id] = $page;
        }
        return $pages;
    }

    /*Добавление страницы*/
    public function add_page($page) {
        $page = (object)$page;
        // Проверяем есть ли мультиязычность и забираем описания для перевода
        $result = $this->languages->get_description($page, 'page');
        
        $page->last_modify = date("Y-m-d H:i:s");
        $query = $this->db->placehold('INSERT INTO __pages SET ?%', $page);
        if(!$this->db->query($query)) {
            return false;
        }
        
        $id = $this->db->insert_id();
        
        // Если есть описание для перевода. Указываем язык для обновления
        if(!empty($result->description)) {
            $this->languages->action_description($id, $result->description, 'page');
        }
        
        $this->db->query("UPDATE __pages SET position=id WHERE id=?", $id);
        return $id;
    }

    /*Обновление страницы*/
    public function update_page($id, $page) {
        $page = (object)$page;
        // Проверяем есть ли мультиязычность и забираем описания для перевода
        $result = $this->languages->get_description($page, 'page');
        
        $page->last_modify = date("Y-m-d H:i:s");
        $query = $this->db->placehold('UPDATE __pages SET ?% WHERE id in (?@)', $page, (array)$id);
        if(!$this->db->query($query)) {
            return false;
        }
        
        // Если есть описание для перевода. Указываем язык для обновления
        if(!empty($result->description)) {
            $this->languages->action_description($id, $result->description, 'page', $this->languages->lang_id());
        }
        
        return $id;
    }

    /*Удаление страницы*/
    public function delete_page($id) {
        if(!empty($id)) {
            // Запретим удаление системных ссылок
            $page = $this->get_page(intval($id));
            if (in_array($page->url, $this->system_pages)) {
                return false;
            }
            $query = $this->db->placehold("DELETE FROM __pages WHERE id=? LIMIT 1", intval($id));
            if($this->db->query($query)) {
                $this->db->query("DELETE FROM __lang_pages WHERE page_id=?", intval($id));
                return true;
            }
        }
        return false;
    }

}