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

require_once('Mgc.php');

class OrderLabels extends Mgc {

    /*Выборка конкретной метки*/
    public function get_label($id) {
        $lang_sql = $this->languages->get_query(array('object'=>'order_labels', 'px'=>'lb'));
        $query = $this->db->placehold("SELECT lb.* ,
                            $lang_sql->fields 
                            FROM __labels lb
                            $lang_sql->join 
                            WHERE lb.id=? LIMIT 1", intval($id));
        $this->db->query($query);
        return $this->db->result();
    }

    /*Выборка всех меток*/
    public function get_labels() {
        $lang_sql = $this->languages->get_query(array('object'=>'order_labels', 'px'=>'lb'));
        $query = $this->db->placehold("SELECT lb.* ,
                $lang_sql->fields 
                FROM __labels lb
                $lang_sql->join 
                ORDER BY lb.position");
        $this->db->query($query);
        return $this->db->results();
    }

    /*Добавление метки*/
    public function add_label($label) {
        $label = (object)$label;
        // Проверяем есть ли мультиязычность и забираем описания для перевода
        $result = $this->languages->get_description($label, 'order_labels');

        $query = $this->db->placehold('INSERT INTO __labels SET ?%', $label);
        if(!$this->db->query($query)) {
            return false;
        }
        $id = $this->db->insert_id();
        $this->db->query("UPDATE __labels SET position=id WHERE id=?", $id);
        // Если есть описание для перевода. Указываем язык для обновления
        if(!empty($result->description)) {
            $this->languages->action_description($id, $result->description, 'order_labels');
        }
        return $id;
    }

    /*Обновление метки*/
    public function update_label($id, $label) {
        $label = (object)$label;
        // Проверяем есть ли мультиязычность и забираем описания для перевода
        $result = $this->languages->get_description($label, 'order_labels');

        $query = $this->db->placehold("UPDATE __labels SET ?% WHERE id = ? LIMIT 1", $label ,$id);
        $this->db->query($query);
        // Если есть описание для перевода. Указываем язык для обновления
        if(!empty($result->description)) {
            $this->languages->action_description($id, $result->description, 'order_labels', $this->languages->lang_id());
        }

        return $id;
    }

    /*Удаление метки*/
    public function delete_label($id) {
        if(!empty($id)) {
            $query = $this->db->placehold("DELETE FROM __orders_labels WHERE label_id=?", intval($id));
            if($this->db->query($query)) {
                $query = $this->db->placehold("DELETE FROM __labels WHERE id=? LIMIT 1", intval($id));
                $this->db->query($query);
                $query = $this->db->placehold("DELETE FROM __lang_orders_labels WHERE order_labels_id=?", intval($id));
                $this->db->query($query);
                return true;
            } else {
                return false;
            }
        }
    }

    /*Выборка меток конкретного заказа*/
    public function get_order_labels($order_id = array()) {
        if(empty($order_id)) {
            return array();
        }

        $label_id_filter = $this->db->placehold('AND ol.order_id in(?@)', (array)$order_id);
        $lang_sql = $this->languages->get_query(array('object'=>'order_labels', 'px'=>'lb'));
        $query = $this->db->placehold("SELECT
                    ol.order_id,
                    lb.id,
                    lb.color,
                    lb.position,
                    $lang_sql->fields
                    FROM __labels lb
                    LEFT JOIN __orders_labels ol ON ol.label_id = lb.id
                    $lang_sql->join 
                    WHERE 1
                    $label_id_filter
                    ORDER BY position
                    ");

        $this->db->query($query);

        $res = $this->db->results();
        if(!empty($res)){
            return $res;
        } else {
            return array();
        }
    }

    /*Обновление меток заказа*/
    public function update_order_labels($id, $labels_ids) {
        $labels_ids = (array)$labels_ids;
        $query = $this->db->placehold("DELETE FROM __orders_labels WHERE order_id=?", intval($id));
        $this->db->query($query);
        if(is_array($labels_ids)) {
            foreach($labels_ids as $l_id) {
                $this->db->query("INSERT INTO __orders_labels SET order_id=?, label_id=?", $id, $l_id);
            }
        }
    }

    /*Добавление меток к заказу*/
    public function add_order_labels($id, $labels_ids) {
        $labels_ids = (array)$labels_ids;
        if(is_array($labels_ids))
            foreach($labels_ids as $l_id) {
                $this->db->query("INSERT IGNORE INTO __orders_labels SET order_id=?, label_id=?", $id, $l_id);
            }
    }

    /*Удаление меток с заказа*/
    public function delete_order_labels($id, $labels_ids)
    {
        $labels_ids = (array)$labels_ids;
        if (is_array($labels_ids)) {
            foreach ($labels_ids as $l_id) {
                $this->db->query("DELETE FROM __orders_labels WHERE order_id=? AND label_id=?", $id, $l_id);
            }
        }
    }

}