callback.class.php 9.18 KB
<?php

include_once ($_SERVER['DOCUMENT_ROOT'] . "/account/func/func.php");

class Callback
{
    var $db = null;
    var $tpl = null;
    var $error = null;
    var $cache = null;

    var $lang = 'ru';

    public static $NEW = 1;
    public static $PROCESSING = 2;
    public static $DONE = 5;

    public function __construct (&$db, &$tpl, &$error, &$cache)
    {
        $this->db = &$db;
        $this->tpl = &$tpl;
        $this->error = &$error;
        $this->cache = &$cache;

        // язык по умолчанию
        // жестыкий кастыль
        if (isset ($_POST))
        {
            $parse = parse_url ($_SERVER['HTTP_REFERER']);
            $path = explode ("/", $parse['path']);
            if (isset ($path[1]) && $path[1] == 'ukr')
            {
                $this->lang = 'ua';
            }
        }
    }

    public function getTranslation ($key)
    {
        $lang = $this->lang;
        $array = $this->$lang();

        return isset ($array[$key]) ? $array[$key] : '#translation';
    }

    public function ru ()
    {
        return array (
            'callback' => 'Обратный звонок',
            'fio' => 'ФИО',
            'city' => 'Город',
            'tel' => 'Телефон',
            'text' => 'Вопрос',
            'send' => 'Отправить',
            'send_success' => 'Ваше запрос успешно отправлен! <p>В ближайшее время с Вами свяжеться наш консультант</p>',
            'other_menager' => 'Данная заявка закреплена за другим менеджером',
            'already_done' => 'Данная заявка уже завершена',
        );
    }

    public function ua ()
    {
        return array (
            'callback' => 'Зворотній зв`язок',
            'fio' => 'ПІБ',
            'city' => 'Місто',
            'tel' => 'Телефон',
            'text' => 'Запитання',
            'send' => 'Надіслати',
            'send_success' => 'Ваше запит успішно відправлений! <p>Найближчим часом з Вами звяжется наш консультант</p>',
            'other_menager' => 'Ця заявка закріплена за іншим менеджером',
            'already_done' => 'Ця заявка вже закінчена',
        );
    }

    public function trim ($data)
    {
        foreach ($data as $key => &$value)
        {
            if (! is_array ($value))
            {
                $value = iconv ('utf-8', 'windows-1251', urldecode ($value));
            }
        }

        return $data;
    }

    public function valid ($data, $upload = null)
    {
        return true;
    }

    public function init ()
    {
        $pager = $this->getAll();

        // assign var
        $this->tpl->assign('mass', array (
            'model'  => $this,
            'result' => $pager['result'],
            'pager'  => $pager['pager'],
            'status' => $this->getStatusAll(),
        ));

        // assign template
        $this->tpl->assign("tpl", "callback.tpl");
    }

    public function getAll ()
    {
        $pager = pagerGetRun (array (
            'sql' => '
                SELECT *
                FROM `callback`
                    INNER JOIN `callback_status` as `status` ON `status`.callback_status_id = `callback`.callback_status_id
                    LEFT JOIN `zlo_admin` ON `zlo_admin`.id = `callback`.manager_id
                ORDER BY callback_id DESC
            ',
            'PerPage' => 30,
            'Size' => 15,
        ));

        return array (
            'result' => $this->db->getAll($pager['sql'], array (), DB_FETCHMODE_ASSOC),
            'pager'  => $pager
        );
    }

    public function getOne ($callback_id)
    {
        return $this->db->getRow('
            SELECT *
            FROM `callback`
                INNER JOIN `callback_status` as `status` ON `status`.callback_status_id = `callback`.callback_status_id
                LEFT JOIN `zlo_admin` ON `zlo_admin`.id = `callback`.manager_id
            WHERE callback_id = '.(int)$callback_id.'
        ', array (), DB_FETCHMODE_ASSOC);
    }

    public function add ($param)
    {
        $param = $this->trim ($param);

        return $this->db->query('
            INSERT INTO
            `callback`
            SET
                `date_add` = "'.date('Y-m-d H:i:s').'",
                `fio` = "'.$param['fio'].'",
                `city` = "'.$param['city'].'",
                `tel` = "'.$param['tel'].'",
                `text` = "'.nl2br (strip_tags($param['text'])).'",
                `callback_status_id` = "'.self::$NEW.'"
        ');
    }

    public function setStatus ($callback_id, $callback_status_id)
    {
        return $this->db->query('
            UPDATE `callback`
            SET
                `callback_status_id` = "'.$callback_status_id.'",
                `date_edit` = "'.date('Y-m-d H:i:s').'",
                `manager_id` = "'.(int)$_SESSION['admin']['id'].'"
            WHERE `callback_id` = "'.(int)$callback_id.'"
        ');
    }

    public function isDone (array $callback)
    {
        return $callback['is_done'] == 1 ? true : false;
    }

    // ==== STATUS ====

    public function getStatusAll ()
    {
        return $this->db->getAll('
            SELECT *
            FROM `callback_status`
            ORDER BY sortorder ASC
        ', array (), DB_FETCHMODE_ASSOC);
    }

    // ==== HTML ====
    /**
     * Зделал тут, чтобы по всему проекту не искать
     * @return string
     */
    public function buttonById ($callback_id)
    {
        $callback = $this->getOne($callback_id);
        $status   = $this->getStatusAll();

        return $this->button($status, $callback['callback_status_id']);
    }

    public function button ($status, $default_status_id)
    {
        // current
        $current = '';

        foreach ($status as $i => $row)
        {
            if ($row['callback_status_id'] == $default_status_id)
            {
                $current = $row;
                unset ($status[$i]);

                break;
            }
        }

        ob_start();

        echo '
        <div class="btn-group">
            <button class="btn btn-primary" type="button" style="background:'.$current['callback_status_color'].'">'.$current['callback_status_title'].'</button>
            <button aria-expanded="false" aria-haspopup="true" data-toggle="dropdown" class="btn btn-primary dropdown-toggle" type="button" style="background:'.$current['callback_status_color'].'">
                <span class="caret"></span>
            </button>
            <ul class="dropdown-menu">';

            foreach ($status as $row)
            {
                echo '<li><a value="'.$row['callback_status_id'].'">'.$row['callback_status_title'].'</a></li>';
            }

            echo '
            </ul>
        </div>';

        return ob_get_clean();
    }

    public function htmlForm ()
    {
        ob_start();

        echo '<form id="callback-form">';

            echo '<h2>'.$this->getTranslation ('callback').'</h2>';

            echo '<hr>';

            echo '
            <div class="optional">
                <label>'.$this->getTranslation ('fio').':</label>
                <div class="info tel">
                    <input type="text" name="fio" class="idle validate[required]" id="callback-fio">
                </div>
            </div>';

            echo '
            <div class="optional">
                <label>'.$this->getTranslation ('city').':</label>
                <div class="info tel">
                    <input type="text" name="city" class="idle validate[required]" id="callback-city">
                </div>
            </div>';

            echo '
            <div class="optional">
                <label>'.$this->getTranslation ('tel').':</label>
                <div class="info tel">
                    <input type="text" name="tel" class="idle validate[required]" id="callback-tel">
                </div>
            </div>';

            echo '
            <div class="optional">
                <label>'.$this->getTranslation ('text').':</label>
                <div class="info tel">
                    <textarea type="text" name="text" class="idle validate[maxSize[1000]]" id="callback-text"></textarea>
                </div>
            </div>';

            echo '
            <center>
                <input class="submit submit5" type="submit" value="'.$this->getTranslation ('send').'">
            </center>';

        echo '</form>';

        return ob_get_clean();
    }

    public function getProcessingMessage (array $param)
    {
        $param = $this->trim($param);

        return '<div class="alert warning"><div class="img"></div><div>'.$this->getTranslation ('other_menager').' '.$param['username'].'</div></div>';
    }

    public function getDoneMessage (array $param)
    {
        $param = $this->trim($param);

        return '<div class="alert done"><div class="img"></div><div>'.$this->getTranslation ('already_done').'</div></div>';
    }

    public function getSuccessMessage ()
    {
        return $this->getTranslation ('send_success') ;
    }
}