* @copyright: Copyright (c) 2010, Bunzia Alexander * @version: 1.0 * @license: http://www.gnu.org/copyleft/gpl.html GNU/GPL * @package: HiLo CMS */ include_once(MAIN_SOURCE_PATH.'/modules/admin/lang/'.MAIN_LANG.'/lang.php'); // класс для формирования зароса class m_query extends query{ public function __construct($alias){ $this -> set_table( MAIN_MODULES_TBL ); $this -> set_alias($alias); return true; } public function include_pages($alias,$cols=''){ $this -> include_table(MAIN_PAGES_TBL,$alias,'m_id',$cols ); return true; } public function where_id($id){ $id = intval($id); if ( empty($id) ){ return false; } return $this -> set_where( $this -> alias.'.m_id',$id); } public function where_active($id){ $id = intval($id); if ( empty($id) ){ return false; } return $this -> set_where( $this -> alias.'.m_status',$id); } public function where_path($path){ if ( !modules::is_path($path) ){ return false; } return $this -> set_where( $this -> alias.'.m_path',$path); } /** * Сортируем модули * * @var: str $v ASC/DESC * @return: bool */ public function orderby_pos($v){ return $this -> set_orderby($this -> alias.'.m_pos',$v); } /**************** * функции-обработчики алиасов при выборе из таблицы ******************/ /* public function count_blocks($id){ global $MAIN_DB; $sql = "SELECT COUNT(*) FROM ".MAIN_PLB_TBL." WHERE f_id='$id'"; list($count) = $MAIN_DB -> fetch_array( $MAIN_DB -> query($sql) ); return $count; } */ } class modules{ public $debug = false; private $info = array(); private $main_key = false; private $last_error=false; private $set_info = array(); private function __construct( $array ){ $this -> info = $array; $this -> main_key = $array['m_id']; } // загрузка модуля по его id static function load_id($id){ $m = new m_query('m'); if ( !$m -> where_id($id) ){ return false; } $m -> get('*'); if ( $m -> get_count_rows()==0 ){ return FALSE; } return new modules($m -> row()); } static function load_path($id){ $m = new m_query('m'); if ( !$m -> where_path($id) ){ return false; } $m -> get('*'); if ( $m -> get_count_rows()==0 ){ return FALSE; } return new modules($m -> row()); } static function create(){ return new modules( array('m_id'=>0) ); } public function update(){ global $MAIN_DB; if ( false===$this -> main_key ){ $this -> make_error(ERROR_500,A_EMPTY_ID); } if ( !empty($this -> error) ){ return $this -> error; } if ( sizeof($this -> set_info)==0 ){ $this -> make_error(ERROR_500,A_EMPTY_ARRAY); } $sql = array(); foreach( $this -> set_info as $k=>$v ){ $sql[]="`$k`='".sys_in_sql($v)."'"; } $sql = " UPDATE ".$MAIN_DB -> prefix("system_modules")." SET ".implode(',',$sql)." WHERE m_id='".$this -> main_key."'"; if ( !empty($this -> debug) ){ die($sql); } $MAIN_DB -> query($sql); return true; } public function insert(){ global $MAIN_DB; // при инициализации значений произошла ошибка if ( false!==$this -> error() ){ return $this -> error(); } if ( sizeof($this -> set_info)==0 ){ $this -> make_error(ERROR_500,A_EMPTY_ARRAY); } // так как запись новая, нужно проверить уникальные ключи на повторение if ( modules::exists_module($this -> set_info['m_path']) ){ $this -> make_error(ERROR_MESSAGE, sprintf(A_EXISTS_MODULE,$this -> set_info['m_path'])); return false; } $sql = array(); foreach( $this -> set_info as $k=>$v ){ $sql[]="`$k`='".sys_in_sql($v)."'"; } $sql = "INSERT INTO ".$MAIN_DB -> prefix("system_modules")." 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) ){ $this -> make_error(ERROR_500,A_EMPTY_ID); } include_once(MAIN_SOURCE_PATH.'/modules/admin/inc/class.pages.php'); $p = new pagesQuery('f'); $p -> where_mid($id); $p -> get('f.f_id'); while( list($f_id) = $p -> row() ){ $page = pages::load_id($f_id); if ( false===$page ){ die('continue'); } $page -> delete(); } $sql = "DELETE FROM ".$MAIN_DB -> prefix("system_modules")." WHERE m_id='$id'"; $MAIN_DB -> query($sql); return true; } public function get($k){ if ( isset($this -> info[$k]) ){ return $this -> info[$k]; } $this -> make_error(ERROR_500, sprintf(A_NOT_VAR,$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; } /*************************** * SET - функции. Это уникальные обработчики для значений заносимых в базу данных ***********************/ public function set_m_name($v){ if ( empty($v) ){ $this -> make_error(ERROR_MESSAGE,'Ошибка: название модуля не указано'); return false; } $this -> set_info['m_name']=$v; return true; } public function set_m_path($v){ if ( empty($v) ){ $this -> make_error(ERROR_MESSAGE,'Ошибка: адрес модуля не указан'); return false; } $this -> set_info['m_path']=$v; return true; } /*************************** * GET ****************************/ public function id(){ return $this -> info['m_id']; } public function path(){ return $this -> info['m_path']; } public function name(){ return $this -> info['m_name']; } /**************************** * СТАТИЧНЫЕ ФУНКЦИИ ОТНОСЯЩИЕСЯ К МОДУЛЮ *******************************/ // проверяем название каталога для модуля static function is_path($p){ if ( empty($p) ){ return false; } if ( preg_match('#[^a-z_0-9]#i',$p) ){ return false; } return true; } static function exists_module($v){ $u = new m_query('m'); $u -> where_path($v); //$u -> set_debug(1); $u -> get('COUNT(*)'); list($count) = $u -> row(); if ( $count>0 ){ return true; } return false; } protected function make_error($type,$msg){ switch($type){ case(ERROR_MESSAGE): $this -> last_error = $msg; break; } } public function error(){ return $this -> last_error; } // модуль поддерживает или нет работу с комментариями public function exists_comments(){ $path = $this -> path(); if ( !file_exists(MAIN_SOURCE_PATH.'/modules/'.$path.'/inc/class.comments.php') ){ return false; } return true; } /************* * Это список модулей, которые будут пользоваться общей таблицей категорий * Какой-то механизм внедрять смысла нет, по-этому здесь просто централизованное хранилище * * @project poremontu * @return array * ***********/ static function use_category(){ return array('news','articles','blogs','faq','gallery'); } /** * получаем список модулей * */ static function list_active(){ $modules = array(); $m = new m_query('m'); $m -> where_active(1); $m -> get('m_path'); while( list($m_path) = $m -> row() ){ $modules[]=$m_path; } return $modules; } } ?>