set_table( $MAIN_DB -> prefix('system_stat_pages') ); $this -> set_alias($alias); } public function include_tmpl($alias,$cols=''){ $this -> include_table(MAIN_TMPL_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.'.p_id',$v); } public function where_url($v){ if ( empty($v) ){ return false; } if ( preg_match('#[^a-z0-9./\-_\#&%]#i',$v) ){ return false; } return $this -> set_where( $this -> alias.'.p_url',$v); } public function orderby_id($v){ return $this -> set_orderby( $this -> alias.'.p_id',$v); } /**************************** * * функции-обработчики алиасов при выборе из таблицы * ***************************/ protected function type_content_php($v){ if ( $v=='PHP'){ return true; }else{ return false; } } protected function type_content_html($v){ if ( $v=='HTML'){ return true; }else{ return false; } } protected function type_content_tmpl($v){ if ( $v=='TMPL'){ return true; }else{ return false; } } // возвращаем список групп допущенных к просмотру страницы static function groups($v){ global $MAIN_DB; // группы $sql = "SELECT g_id,g_name FROM ".$MAIN_DB -> prefix("system_groups")." WHERE hidden='0'"; $res = $MAIN_DB -> query($sql); $groups = array(); while( $row = $MAIN_DB -> fetch_array($res) ) { $groups[$row['g_id']]=$row; } if ( empty($v) ){ return $groups; } // допущенные $sql = "SELECT g_id FROM ".$MAIN_DB -> prefix("system_stat_pages_groups_link")." WHERE p_id='$v'"; $res = $MAIN_DB -> query($sql); while(list($g_id) = $MAIN_DB -> fetch_array($res) ){ $groups[$g_id]['checked']=true; } var_dump($groups); return $groups; } // проверяем доступ группы к странице v static function check_access($v){ global $MAIN_DB,$MAIN_USER; $g_id = $MAIN_USER -> group(); $sql = " SELECT count(*) FROM ".$MAIN_DB -> prefix("system_stat_pages_groups_link")." WHERE p_id='$v' AND g_id='$g_id'"; list($count) = $MAIN_DB -> fetch_array( $MAIN_DB -> query($sql) ); if ( $count>0 ){ return true; }else{ return false; } } static function lang_list($v){ if ( !defined('MAIN_LANGS') ){ return false; } $langs = explode(',',MAIN_LANGS); $s = new select_box(); $s -> selected_id($v); $s -> empty_record(false); foreach( $langs as $lng ) { $s -> set($lng,$lng); } return $s -> get(); } } // класс для управления записями таблицы system_stat_pages class stat_pages{ // отладка запросов 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['p_id']; } // обновляем запись $this -> main_key в таблице system_stat_pages public function update(){ global $MAIN_DB; // ну мало-ли, бывает и такое if ( false===$this -> main_key ){ sys_error(ERROR_500,A_EMPTY_ID); } // если при установки столбцов для обновления произошла ошибка, то запрос выполнять не будем if ( false!==$this -> error() ){ return false; } // обновлять нечего, даже без mysql-я я вам скажу что будет хуйня if ( sizeof($this -> set_info)==0 ){ sys_error(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_DB -> prefix("system_stat_pages")." SET ".implode(',',$sql)." WHERE p_id='".$this -> main_key."'"; if ( !empty($this -> debug) ){ die($sql); } $MAIN_DB -> query($sql); return $this -> main_key; } // добавление новой записи public function insert(){ global $MAIN_DB; // если при установки столбцов для обновления произошла ошибка, то запрос выполнять не будем if ( false!==$this -> error() ){ return $this -> error(); } // обновлять нечего, даже без mysql-я я вам скажу что будет хуйня if ( sizeof($this -> set_info)==0 ){ sys_error(ERROR_500,A_EMPTY_ARRAY); } // формируем и выполняем запрос $sql = array(); foreach( $this -> set_info as $k=>$v ){ $sql[]="`$k`='".sys_in_sql($v)."'"; } $sql = "INSERT INTO ".$MAIN_DB -> prefix("system_stat_pages")." SET ".implode(',',$sql).""; if ( !empty($this -> debug) ){ die($sql); } $MAIN_DB -> query($sql); return $MAIN_DB -> insert_id(); } // удаляем запись public function delete(){ global $MAIN_DB; // получаем запись $id = $this -> id(); // бывает же такая хуйня! if ( empty($id) ){ sys_error(ERROR_500,A_EMPTY_ID); } // чистим обе таблицы $sql = "DELETE FROM ".$MAIN_DB -> prefix("system_stat_pages")." WHERE p_id='$id'"; $MAIN_DB -> query($sql); $sql = "DELETE FROM ".$MAIN_DB -> prefix("system_stat_pages_groups_link")." WHERE p_id='$id'"; $MAIN_DB -> query($sql); /*include_once(MAIN_SOURCE_PATH.'/modules/admin/inc/class.modules.php'); $m = modules::load_path(MAIN_MODULE); $sql = "DELETE FROM ".$MAIN_DB -> prefix("tags_link")." WHERE key_id='".$m -> id()."0".$id."'"; $MAIN_DB -> query($sql);*/ return true; } private function set_p_type_content($v){ // если тип контента не установлен, то динамим запрос if ( empty($v) ){ return true; } $values = array('HTML','PHP','TMPL'); if ( !in_array($v,$values) ){ $this -> make_error( M_ADMIN_BLOCKS_FALSE_TYPE_CONTENT ); return false; } $this -> set_info['p_type_content']=$v; return true; } static function set_groups($id,$groups){ global $MAIN_DB; if ( empty($id) ){ sys_error(ERROR_500); } $sql = "DELETE FROM ".$MAIN_DB -> prefix("system_stat_pages_groups_link")." WHERE p_id='$id'"; $MAIN_DB -> query($sql); if ( !is_array($groups) ){ return false; } foreach( $groups as $g_id ){ $sql = " INSERT INTO ".$MAIN_DB -> prefix("system_stat_pages_groups_link")." SET p_id='$id', g_id='$g_id'"; $MAIN_DB -> query($sql); } return true; } // выдаёт значение столбца $k в обрабатываемой строке public function get($k){ if ( isset($this -> info[$k]) ){ return $this -> info[$k]; } sys_error(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; } /******************************** SET - функции. Это уникальные обработчики для значений заносимых в базу данных. ********************************/ public function set_p_url($v){ if ( empty($v) ){ $this -> make_error(M_ADMIN_SP_EMPTY_URL); return false; } if ( preg_match('#[^a-z0-9./\-_\#&%]#i',$v) ){ $this -> make_error(M_ADMIN_SP_FALSE_URL); return false; } $this -> set_info['p_url']=$v; return true; } public function set_t_id($v){ $v = intval($v); if ( empty($v) ){ $this -> make_error(M_ADMIN_SP_EMPTY_TMPL); return false; } $this -> set_info['t_id']=$v; return true; } /********************* * * GET - функции * *****************/ public function id(){ return $this -> info['p_id']; } public function meta_title(){ return $this -> info['p_meta_title']; } public function content(){ return $this -> info['p_content']; } /******************** * * СТАТИЧНЫЕ ФУНКЦИИ * ********************/ // загрузка модуля по его id static function load_id($id){ $m = new stat_pages_q('m'); if ( !$m -> where_id($id) ){ return false; } $m -> get('*'); if ( $m -> get_count_rows()==0 ){ return FALSE; } return new stat_pages($m -> row()); } static function load_url($v){ $m = new stat_pages_q('m'); if ( !$m -> where_url($v) ){ return false; } $m -> get('*'); if ( $m -> get_count_rows()==0 ){ return FALSE; } return new stat_pages($m -> row()); } static function create(){ return new stat_pages( array('p_id'=>0)); } /** * генерируем список действующих страниц * */ static function list_pages(){ $s = new stat_pages_q('s'); $s -> orderby_id('DESC'); $s -> get('*'); $rows = array(); while( $row = $s -> row() ){ $rows[]=$row; } return $rows; } /***************** * * Обработка ошибок * ******************/ private function make_error($msg){ $this -> last_error = $msg; } // возвращаем последнюю ошибку public function error(){ return $this -> last_error; } } ?>