* @copyright: Copyright (c) 2010, Bunzia Alexander * @version: 1.0 * @license: http://www.gnu.org/copyleft/gpl.html GNU/GPL * @package: HiLo CMS */ if ( defined("inc_tmpl_class") ){ return FALSE; } define("inc_tmpl_class", 1); include_once(MAIN_SOURCE_PATH.'/modules/admin/lang/'.MAIN_LANG.'/lang.php'); // класс для формирования запроса class tmpl_q extends query{ public function __construct($alias){ $this -> set_table( MAIN_TMPL_TBL ); $this -> set_alias($alias); } // связь между таблицами system_tmpl и system_tmpl_block_link public function include_plb($alias,$cols=''){ $this -> include_table( MAIN_PLB_TBL ,$alias,'t_id',$cols ); return true; } public function where_id($v){ $v = intval($v); if ( empty($v) ){ return false; } return $this -> set_where( $this -> alias.'.t_id',$v); } public function orderby_tid($v){ return $this -> set_orderby( $this -> alias.'.t_id',$v); } public function orderby_tname($v){ return $this -> set_orderby( $this -> alias.'.t_name',$v); } /**************************** * * функции-обработчики алиасов при выборе из таблицы * ***************************/ static function tmpl_ul($v){ $s = new select_box(); $s -> selected_id($v); $s -> empty_record(false); $s -> opt_open('Стандартные'); $handle = opendir(MAIN_SOURCE_PATH.'/tmpl/default/files'); while (false !== ($file = readdir($handle))) { if ( preg_match('#\.html$#iUs',$file) ){ $s -> set('default/files/'.$file,$file ); } } $s -> opt_close(); $s -> opt_open('Пользовательские'); $handle = opendir(MAIN_SOURCE_PATH.'/tmpl/project/html'); while (false !== ($file = readdir($handle))) { if ( preg_match('#\.html$#iUs',$file) ){ $s -> set('project/html/'.$file,$file ); } } $s -> opt_close(); return $s -> get(); } // считаем сколько блоков задействовано в шаблоне с номером id protected function count_blocks($id){ global $MAIN_DB; $sql = "SELECT COUNT(*) FROM ".$MAIN_DB -> prefix("system_tmpl_block_link")." WHERE t_id = '$id'"; list($count) = $MAIN_DB -> fetch_array( $MAIN_DB -> query($sql) ); return $count; } /** * Выпадающий список шаблонов * */ static function tmplSelect($v){ $s = new select_box(); $s -> selected_id($v); $s -> empty_record(false); $t = new tmpl_q('t'); $t -> get('t_id,t_name'); $rows = array(); while( $row = $t -> row() ){ $s -> set($row['t_id'],$row['t_name'] ); } return $s -> get(); } /** * Ссылка на блоки расположеные на странички v * * @var: int $v Номер страницы * @return: str Url-адрес */ protected function blocks_url($v){ $v = intval($v); if ( empty($v) ){ sys_error(ERROR_500); } return sys_url(URL_ADMIN_BLOCKS_FILTER,$v); } } // класс для управления записями таблицы system_tmpl class tmpl{ // отладка запросов public $debug = false; // массив в котором хранятся данные о текущей записе, __construct private $info = array(); // первичный ключ таблицы, __construct private $main_key = false; // массив изменённых данных о текущей записи private $set_info = array(); // последняя ошибка private $last_error=false; // вызвается только внутри класса // для создания объекта используются публичные статичные методы load_id / create private function __construct( $array=array() ){ $this -> info = $array; $this -> main_key = $array['t_id']; } // обновляем запись $this -> main_key в таблице system_tmpl public function update(){ global $MAIN_DB; // ну мало-ли, бывает и такое if ( false===$this -> main_key ){ sys_error('500',A_EMPTY_ID); } // если при установки столбцов для обновления произошла ошибка, то запрос выполнять не будем if ( false!==$this -> error() ){ return false; } // обновлять нечего, даже без mysql-я я вам скажу что будет хуйня if ( sizeof($this -> set_info)==0 ){ sys_error('500',A_EMPTY_ARRAY); } // формируем запрос $sql = array(); foreach( $this -> set_info as $k=>$v ){ $sql[]="`$k`='".sys_in_sql($v)."'"; } // выполняем запрос, отправляем ключ на родину // нет проверки нау спешность выполнения запроса потому-что это под контролем класса $MAIN_DB $sql = " UPDATE ".MAIN_TMPL_TBL." SET ".implode(',',$sql)." WHERE t_id='".$this -> main_key."'"; if ( !empty($this -> debug) ){ die($sql); } $MAIN_DB -> query($sql); return $this -> main_key; } // добавление новой записи в таблицу system_tmpl public function insert(){ global $MAIN_DB; // если при установки столбцов для обновления произошла ошибка, то запрос выполнять не будем if ( false!==$this -> error() ){ return $this -> error(); } // обновлять нечего, даже без mysql-я я вам скажу что будет хуйня if ( sizeof($this -> set_info)==0 ){ sys_error('500',A_EMPTY_ARRAY); } // формируем и выполняем запрос $sql = array(); foreach( $this -> set_info as $k=>$v ){ $sql[]="`$k`='".sys_in_sql($v)."'"; } $sql = "INSERT INTO ".MAIN_TMPL_TBL." SET ".implode(',',$sql).""; if ( !empty($this -> debug) ){ die($sql); } $MAIN_DB -> query($sql); return $MAIN_DB -> insert_id(); } // удаляем запись $this -> main_key в таблице system_tmpl public function delete(){ global $MAIN_DB; // получаем запись $id = $this -> id(); // бывает же такая хуйня! if ( empty($id) ){ sys_error('500',A_EMPTY_ID); } // чистим обе таблицы $sql = "DELETE FROM ".MAIN_TMPL_TBL." WHERE t_id='$id'"; $MAIN_DB -> query($sql); $sql = "DELETE FROM ".MAIN_PLB_TBL." WHERE t_id='$id'"; $MAIN_DB -> query($sql); return true; } // выдаёт значение столбца $k в обрабатываемой строке public function get($k){ if ( isset($this -> info[$k]) ){ return $this -> info[$k]; } sys_error('500', sprintf(A_NOT_VAR,$k) ); } // задаёт значение столбца $k в обрабатываемой строке public function set($k,$v){ if ( method_exists($this,'set_'.$k) ){ $f = 'set_'.$k; return $this -> $f($v); } $this -> set_info[$k] = $v; return true; } // отладка запросов insert/update public function set_debug($flag){ $this -> debug = $flag; } public function del_block($v){ global $MAIN_DB; $v = intval($v); if ( empty($v) ){ sys_error('500'); } $sql = "DELETE FROM ".MAIN_PLB_TBL." WHERE t_id='".$this -> id()."' AND id='".$v."'"; $MAIN_DB -> query($sql); return true; } public function add_block($b_id,$item){ global $MAIN_DB; include_once(MAIN_SOURCE_PATH.'/modules/admin/inc/class.blocks.php'); $b = blocks::load_id($b_id); if ( false===$b ){ sys_error('500'); } $sql = "INSERT INTO ".MAIN_PLB_TBL." SET t_id='".$this -> id()."', b_id='".$b_id."', var='".$item."', title='".sys_in_sql($b -> title() )."' "; return $MAIN_DB -> query($sql); } /******************************** SET - функции. Это уникальные обработчики для значений заносимых в базу данных. ********************************/ public function set_t_name($v){ if ( empty($v) ){ $this -> make_error(ERROR_MESSAGE,M_ADMIN_TMPL_NAME_EMPTY); return false; } $this -> set_info['t_name']=$v; return true; } public function set_t_path($v){ if ( empty($v) ){ $this -> make_error(ERROR_MESSAGE,M_ADMIN_TMPL_PATH_EMPTY); return false; } //echo MAIN_SOURCE_PATH.'/tmpl/'.$v; /*if ( !sys_is_file($v) ){ $this -> make_error(ERROR_MESSAGE,M_ADMIN_TMPL_PATH_FALSE); return false; }*/ if ( !file_exists(MAIN_SOURCE_PATH.'/tmpl/'.$v) ){ $this -> make_error(ERROR_MESSAGE,M_ADMIN_TMPL_PATH_FALSE); return false; } $this -> set_info['t_path']=$v; return true; } /********************* * * GET - функции * *****************/ public function id(){ return $this -> info['t_id']; } public function path(){ return $this -> info['t_path']; } /******************** * * СТАТИЧНЫЕ ФУНКЦИИ * ********************/ // загрузка модуля по его id static function load_id($id){ $m = new tmpl_q('m'); if ( !$m -> where_id($id) ){ return false; } $m -> get('*'); if ( $m -> get_count_rows()==0 ){ return FALSE; } return new tmpl($m -> row()); } // загрузка модуля по его id static function create(){ return new tmpl( array('t_id'=>0) ); } /** * Получаем все шаблоны зарегистрированные в системе * * @return: array Список шаблонов зарегистрированных в системе */ static function get_list(){ $t = new tmpl_q('t'); //$t -> set_debug(1); $t -> get('*'); $rows = array(); while( $row = $t -> row() ){ $rows[]=$row; } return $rows; } /** * Получаем список шаблонов в которох выводится указанный блок * * @var: $v int Уникальный номер блока в базе данных * @return: array Список шаблонов в которох выводится указанный блок */ static function get_list_tmpl($v){ global $MAIN_DB; $v = intval($v); if ( empty($v) ){ sys_error(ERROR_500); } $sql = "SELECT t_id FROM ".MAIN_PLB_TBL." WHERE b_id='$v'"; $res = $MAIN_DB -> query($sql); $rows = array(); while( list($t_id) = $MAIN_DB -> fetch_array($res) ){ $rows[]=$t_id; } return $rows; } /** * Удалим все упоминания о блоке из таблицы связей * * @var: $v int Уникальный номер блока в базе данных * @return: bool */ static function clear_tmpl($v){ global $MAIN_DB; $sql = "DELETE FROM ".MAIN_PLB_TBL." WHERE b_id='$v'"; $MAIN_DB -> query($sql); // очищаем кэш таблицы тут... return true; } /***************** * * Обработка ошибок * ******************/ private function make_error($type,$msg){ $info = debug_backtrace(); $line = $info[1]['line']; $file = $info[1]['file']; switch($type){ case(ERROR_MESSAGE): $this -> last_error = $msg; break; } } // возвращаем последнюю ошибку public function error(){ return $this -> last_error; } } ?>