Класс Feedbacks.php

 

Класс Feedbacks

Предназначен для работы модуля "обратная связь" (страница контакты)

Функция get_feedback()

Код функции (спойлер)
 
  /*Выборка конкретной заявки с формы обратной связи*/
    public function get_feedback($id) {
        if (empty($id)) {
            return false;
        }
        $feedback_id_filter = $this->db->placehold('AND f.id=?', intval($id));
        $query = $this->db->placehold("SELECT
                f.id,
                f.name,
                f.email,
                f.ip,
                f.message,
                f.is_admin,
                f.parent_id,
                f.processed,
                f.date,
                f.lang_id
            FROM __feedbacks f
            WHERE
                1
                $feedback_id_filter
            LIMIT 1
        ");
        if($this->db->query($query)) {
            return $this->db->result();
        } else {
            return false;
        }
    }

Фукнция выбирает заявку, оставленную в форме обратной связи

Функция принимает один аргумент $id

Параметры которые содержит функция:

  • $id - $id заявки, которую необходимо выбрать

Функция возвращает объект с данными о заявке


Функция get_feedbacks()

Код функции (спойлер)
    /*Выборка всех заявок с формы обратной связи*/
    public function get_feedbacks($filter = array(), $new_on_top = false) {
        // По умолчанию
        $limit = 100;
        $page = 1;
        $keyword_filter = '';
        $processed = '';
        $has_parent_filter = '';
        if(isset($filter['limit'])) {
            $limit = max(1, intval($filter['limit']));
        }

        if(isset($filter['processed'])) {
            $processed = $this->db->placehold('AND f.processed=?',$filter['processed']);
        }

        if(isset($filter['page'])) {
            $page = max(1, intval($filter['page']));
        }
        $sql_limit = $this->db->placehold(' LIMIT ?, ? ', ($page-1)*$limit, $limit);

        if(!empty($filter['keyword'])) {
            $keywords = explode(' ', $filter['keyword']);
            foreach($keywords as $keyword) {
                $keyword_filter .= $this->db->placehold('AND (
                    f.name LIKE "%'.$this->db->escape(trim($keyword)).'%"
                    OR f.message LIKE "%'.$this->db->escape(trim($keyword)).'%"
                    OR f.email LIKE "%'.$this->db->escape(trim($keyword)).'%"
                ) ');
            }
        }
        if (isset($filter['has_parent'])) {
            $has_parent_filter = 'and f.parent_id'.($filter['has_parent'] ? '>0' : '=0');
        }

        if($new_on_top) {
            $sort='DESC';
        } else {
            $sort='ASC';
        }
        $query = $this->db->placehold("SELECT
                f.id,
                f.name,
                f.email,
                f.ip,
                f.message,
                f.is_admin,
                f.parent_id,
                f.processed,
                f.date,
                f.lang_id
            FROM __feedbacks f
            WHERE
                1
                $keyword_filter
                $processed
                $has_parent_filter
            ORDER BY f.id
            $sort $sql_limit
        ");
        $this->db->query($query);
        return $this->db->results();
    }

Функция выборки заявок, оставленных в форме контактов

Функция принимает аргументы $filter = array(), $new_on_top = false

Параметры которые содержит функция:

  • $filter['limit'] - количество записей, которое нужно выбрать
  • $filter['processed'] - состояние заявки (обработана/ не обработана)
  • $filter['page'] - страница (позиция) с которой нужно выбирать записи
  • $filter['keyword'] - ключевой запрос для поиска заявок (поиск происходит в имени, сообщениии или же емейле в заявке)
  • $filter['has_parent'] - фильтр для определения заявок с отзывом администратора
  • $new_on_top - параметр для определения сортировки заявок

Функция возвращает массив объектов с данными заявок


Функция count_feedbacks()

Код функции (спойлер)
    /*Подсчет количества заявок с формы обратной связи*/
    public function count_feedbacks($filter = array()) {
        $keyword_filter = '';
        $processed_filter = '';
        $has_parent_filter = '';

        if(isset($filter['processed'])) {
            $processed_filter = $this->db->placehold('AND f.processed = ?', intval($filter['processed']));
        }

        if (isset($filter['has_parent'])) {
            $has_parent_filter = 'and f.parent_id'.($filter['has_parent'] ? '>0' : '=0');
        }


        if(!empty($filter['keyword'])) {
            $keywords = explode(' ', $filter['keyword']);
            foreach($keywords as $keyword) {
                $keyword_filter .= $this->db->placehold('AND (
                    f.name LIKE "%'.$this->db->escape(trim($keyword)).'%"
                    OR f.message LIKE "%'.$this->db->escape(trim($keyword)).'%"
                    OR f.email LIKE "%'.$this->db->escape(trim($keyword)).'%"
                ) ');
            }
        }

        $query = $this->db->placehold("SELECT count(distinct f.id) as count
            FROM __feedbacks f
            WHERE
                1
                $keyword_filter
                $processed_filter
                $has_parent_filter
            ");

        $this->db->query($query);
        return $this->db->result('count');
    }

Функция подсчета количества заявок

Функция принимает один аргумент $filter

Параметры которые содержит функция:

  • $filter['processed'] - состояние заявки (обработана/ не обработана)
  • $filter['keyword'] - ключевой запрос для поиска заявок (поиск происходит в имени, сообщениии или же емейле в заявке)
  • $filter['has_parent'] - фильтр для определения заявок с отзывом администратора

Функция возвращает количество(число) найденных записей


Функция add_feedback()

Код функции (спойлер)
    /*Добавление заявки с формы обратной связи*/
    public function add_feedback($feedback) {
        $query = $this->db->placehold('INSERT INTO __feedbacks SET ?%, date = NOW()', $feedback);

        if(!$this->db->query($query)) {
            return false;
        }
        $id = $this->db->insert_id();
        return $id;
    }

Функция добавление заявки с формы контактов

Функция принимает один аргумент $feedback

Параметры которые содержит функция:

  • $feedback - объект с данными о заявке (имя клиента, текст сообщения и т.д)

Функция возвращает id добавленной записи


Функция update_feedback()

Код функции (спойлер)
    /*Обновление заявки с формы обратной связи*/
    public function update_feedback($id, $feedback) {
        $date_query = '';
        if(isset($feedback->date)) {
            $date = $feedback->date;
            unset($feedback->date);
            $date_query = $this->db->placehold(', date=STR_TO_DATE(?, ?)', $date, $this->settings->date_format);
        }
        $query = $this->db->placehold("UPDATE __feedbacks SET ?% $date_query WHERE id in(?@) LIMIT 1", $feedback, (array)$id);
        $this->db->query($query);
        return $id;
    }

Функция обновления заявки с формы обратной связи

Функция принимает два аргумента $id, $feedback

Параметры которые содержит функция:

  • $id- $id заявки, которую нужно обновить
  • $feedback- объект с данными о заявке (имя клиента, текст сообщения и т.д)

Функция возвращает id обновленной записи


Функция delete_feedback()

Код функции (спойлер)
    /*Удаление заявки с формы обратной связи*/
    public function delete_feedback($id) {
        if(!empty($id)) {
            $query = $this->db->placehold("DELETE FROM __feedbacks WHERE id=? LIMIT 1", intval($id));
            $this->db->query($query);

            $this->db->query('SELECT id from __feedbacks where parent_id=?', intval($id));
            $children = $this->db->results('id');
            foreach($children as $child_id) {
                $this->delete_feedback($child_id);
            }
        }
    }

Функция удаления заявки с формы обратной связи

Функция принимает один аргумент $id

Параметры которые содержит функция:

  • $id- id удаляемой записи