* @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.'/inc/class.query.php'); include_once(MAIN_SOURCE_PATH.'/inc/class.objects.php'); include_once(MAIN_SOURCE_PATH.'/modules/snippets/cache/config.php'); include_once(MAIN_SOURCE_PATH.'/modules/snippets/inc/url.php'); include_once(MAIN_SOURCE_PATH.'/modules/snippets/lang/'.MAIN_LANG.'/lang.php'); class filedsSetSnippets { //static $id = false; // адрес новости /* static function title($v){ if ( empty($v) ){ throw new Exception('Ошибка: нужно заполнить поле "Заголовок"!'); } return $v; } static function n_alias($v,$id){ if ( empty($v) ){ throw new Exception('Ошибка: нужно заполнить поле "Адрес"!'); } if ( !sys_is_alias($v) ){ throw new Exception('Ошибка: адрес содержит запрещённые символы"!'); } if ( snippets::is_exists($v,$id) ){ throw new Exception('Ошибка: материал с таким адресом уже существует"!'); } return $v; } static function desc($v){ if ( empty($v) ){ throw new Exception('Ошибка: нужно заполнить поле "Содержимое"!'); } return $v; } static function short_desc($v){ if ( empty($v) ){ throw new Exception('Ошибка: нужно заполнить поле "Содержимое"!'); } return sys_short_text($v); } static function images($v){ return str_replace('245x120_','',$v); } static function main_image($v){ $v = str_replace('245x120_','',$v); $v = explode('|',$v); if ( !empty($v[0]) ){ return $v[0]; } return false; } /*static function set_n_time_add($v){ if ( empty($v) ){ //throw new Exception('Ошибка: нужно заполнить поле "Содержимое"!'); return FALSE; } preg_match('#^([0-9]{2,2})\.([0-9]{2,2})\.([0-9]{4,4}) ([0-9]{1,2}):([0-9]{1,2})$#',$v,$res); $v = mktime($res[4],$res[5],0,$res[2],$res[1],$res[3]); return $v; }*/ } class filedsGetSnippets { static $__var = array(); // для хранения временных переменных static function lang_links($v){ if ( MAIN_MULTILANG===false ){ return false; } $langs = explode(',',MAIN_LANGS); $result = array(); foreach( $langs as $l ){ $q = new snippetsQuery('q'); //$q -> set_debug(1); $q -> where_link($v); $q -> where_lang($l); $q -> get('COUNT(*)'); list($count) = $q -> row(); $result[] = array('lang'=>$l,'exists'=> (( $count ) ? 1 : 0) ); } return $result; } static function lang_list($v){ if ( MAIN_MULTILANG===false ){ 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(); } } class snippetsQuery extends query{ var $fields_get = 'filedsGetSnippets'; /** * @var string $alias Алиас для исплользования в mysql запросе */ public function __construct($alias){ $this -> set_table(MAIN_SNIPPETS_TBL ); $this -> set_alias($alias); } /** * Подключаем таблицу категорий * * @var: string $alias Алиас для исплользования в mysql запросе * @var: string $cols нужные столбцы public function include_category($alias,$cols=false){ global $MAIN_DB; $this -> include_table( $MAIN_DB -> prefix("snippets_category") ,$alias,'category_id',$cols ); }*/ public function where_id($v){ $v = intval($v); if ( empty($v) ){ return FALSE; } return $this -> set_where( $this -> alias.'.snippet_id',$v); } public function where_func($v){ return $this -> set_where( $this -> alias.'.f_func',$v); } public function where_module($v){ if ( empty($v) ){ return false; } return $this -> set_where( $this -> alias.'.m_path',$v); } public function orderby_id($v){ return $this -> set_orderby($this -> alias.'.snippet_id',$v); } public function where_link($v){ $v = intval($v); if ( empty($v) ){ return false; } return $this -> set_where( $this -> alias.'.link_id',$v); } public function where_lang($v){ if ( MAIN_MULTILANG===false ){ return false; } $langs = explode(',',MAIN_LANGS); if ( !in_array($v,$langs) ){ return false; } return $this -> set_where( $this -> alias.'.lang',$v); } public function where_main_rows(){ if ( MAIN_MULTILANG===false ){ return false; } return $this -> set_anothe_where( $this -> alias.'.snippet_id='.$this -> alias.'.link_id'); } /** * Произвольная сортировка */ public function orderby_rand(){ return $this -> set_orderby('RAND()'); } } // end class snippetsQuery class snippets extends objects{ public $table = "system_snippets"; public $key = "snippet_id"; public $fields = 'filedsSetSnippets'; //STATIC static function load_id($id){ $m = new snippetsQuery('m'); if ( !$m -> where_id($id) ){ return FALSE; } $m -> get('*'); if ( !$m -> get_count_rows() ){ return FALSE; } return new snippets($id,$m -> row()); } static function create(){ //global $MAIN_DB; //$sql = "INSERT INTO ".$MAIN_DB -> prefix( self::$table)." (".self::$key.") VALUES(0)"; //$MAIN_DB -> query($sql); //$id = $MAIN_DB -> insert_id(); return new snippets(0,array() ); } /* public function update(){ global $MAIN_DB; if ( sizeof($this -> set_info)==0 ){ sys_error(500,E_EMPTY_ARRAY); } $sql = array(); foreach( $this -> set_info as $k=>$v ){ $sql[]="`$k`='".sys_in_sql($v)."'"; } $sql = " UPDATE ".MAIN_SNIPPETS_TBL." SET ".implode(',',$sql)." WHERE ".$this -> key."='".$this -> key_value."'"; if ( !empty($this -> debug) ){ throw new Exception($sql); } $MAIN_DB -> query($sql); //snippets::search_index($this -> key_value); // формируем новую запись в таблицу поиска return $this -> key_value; }*/ /* public function insert(){ global $MAIN_DB; if ( sizeof($this -> set_info)==0 ){ sys_error(500,E_EMPTY_ARRAY); } $sql = array(); foreach( $this -> set_info as $k=>$v ){ $sql[]="`$k`='".sys_in_sql($v)."'"; } $sql = "INSERT INTO ".MAIN_SNIPPETS_TBL." SET ".implode(',',$sql).""; if ( !empty($this -> debug) ){ throw new Exception($sql); } $MAIN_DB -> query($sql); $id = $MAIN_DB -> insert_id(); // snippets::search_index($id); // формируем новую запись в таблицу поиска return $id; } */ /*public function delete(){ global $MAIN_DB; $sql = "DELETE FROM ".MAIN_SNIPPETS_TBL." WHERE ".$this -> key."='".$this -> key_value."'"; $MAIN_DB -> query($sql); //snippets::build_rss();// обновляем rss return TRUE; } */ // проверяем существование новость по траснлит адресу static function is_exists($v,$id=0){ $n = new snippetsQuery('n'); $n -> where_not_id($id); $n -> where_alias($v); $n -> get('COUNT(*)'); list($count) = $n -> row(); if ( $count >0 ){ return TRUE; } return FALSE; } // генерируем уникальный транслит адрес static function make_alias($v){ $v = sys_translit($v); if ( !snippets::is_exists($v) ){ return $v; } return snippets::make_alias($v.'-'.time() ); } /*static function search_index($id){ global $MAIN_DB; $sql = "DELETE FROM ".$MAIN_DB -> prefix("snippets_search")." WHERE n_id = '$id'"; $MAIN_DB -> query($sql); $n = new snippetsQuery('b'); if (!$n -> where_id($id) ){ return FALSE; } $n -> get('n_title,n_desc'); list($n_title,$n_desc) = $n -> row(); $sql = " INSERT INTO ".$MAIN_DB -> prefix("snippets_search")." SET n_id = '$id', n_title = '".sys_in_sql(sys_clear_text($n_title))."', n_desc = '".sys_in_sql(sys_clear_text($n_desc))."'"; $MAIN_DB -> query($sql); return TRUE; }*/ /** * Ищем похожие материалы * * @var: $title str искомая фраза * @var: $exseption int номер материала, который не нужен * @var: $limit int ограничения на количество материалов * @return: array массив найденных материалов */ /*static function search_copy($title,$exseption=0,$limit=1){ global $MAIN_DB; $sql_exseption = !empty($exseption) ? " AND n.n_id!='$exseption'" : ''; $sql = " SELECT SQL_CALC_FOUND_ROWS n.n_id as snippets_url, n.n_title, MATCH(s.n_title) AGAINST('$title') AS rel_1, MATCH(s.n_desc) AGAINST('$title') AS rel_2 FROM ".$MAIN_DB -> prefix("snippets")." n LEFT JOIN ".$MAIN_DB -> prefix("snippets_search")." s USING(n_id) WHERE n.n_active='1' $sql_exseption ORDER BY (rel_1+rel_2) DESC LIMIT 0,$limit"; $n = new snippets_q('n'); $n -> set_sql($sql); $n -> get(false); if ( $n -> get_count_rows()==0 ){ return false; } $rows = array(); while( $row = $n -> row() ){ $row['url']=$row['snippets_url']; $row['title']=$row['n_title']; $rows[]=$row; } return $rows; }*/ /*static function build_rss(){ global $MAIN_PAGE; $n = new snippets_q('b'); $n -> where_active(1); //$n -> where_time_limit(1); $n -> where_time_begin( mktime(0,0,0,date('m',MAIN_TIME),(date('d',MAIN_TIME)-8), MAIN_YEAR) ); $n -> orderby_time_add('DESC'); //$n -> set_page(1); //$n -> set_debug(1); //$n -> set_count_rows($MAIN_PAGE -> config('snippets_pub_on_rss') ); $n -> get( 'n_desc,n_id as snippets_url,n_title as title,u_login,n_short_desc as short_desc,n_time_add AS rss_time,n_author', false ); $rows = array(); while( $row = $n -> row() ){ $row['url'] = $row['snippets_url']; $row['desc'] = $row['n_desc']; $row['category'] = false; $row['author'] = $row['n_author']; $rows[] = ($row); } $t = new PHPTAL( MAIN_SOURCE_PATH.'/tmpl/xml/rss.xml' ); $t -> setOutputMode(PHPTAL::XML); $t -> site_name = $MAIN_PAGE -> config('sys_site_name'); $t -> site_desc = $MAIN_PAGE -> config('sys_site_desc'); $t -> date = date('r',MAIN_TIME); $t -> category_url = sys_url(URL_NEWS_MAIN); $t -> site_url = MAIN_URL; $t -> rows = $rows; $result = $t -> execute(); file_put_contents(MAIN_PATH.'/tmp/snippets_rss.xml',$result); //chmod(MAIN_PATH.'/tmp/snippets_rss.xml',0666); }*/ // плагин комментариев /*function plugin_comments($plugin,$id){ //прослойка между плагином и объектом switch( $plugin -> event ){ case('on_create_snippets'): // создадим новую ветку комментариев, для новости id $plugin -> create($id); break; case('on_delete_snippets'): // удалим ветку комментариев, для новости id $plugin -> delete($id); break; case('on_update_snippets'): // а тут делать нам нечего..., по этому можно это событие не объявлять break; case('on_show_snippets'): // если новости открыта для просмотра, то сформируем для неё комментарии $plugin -> view($id); break; case('on_listing_snippets'): // если открыт список новостей, //то сформируем не дерево комментариев, а только переменную с количеством $plugin -> listing($id); break; } }*/ /* // вызывается системой function plugin_search($event,$id){ //прослойка между плагином и объектом switch( $event ){ case('on_delete_snippets'): // загрузим плагин $p = cms::plugin('search'); // настроим его на работу с модулем $p -> module('snippets'); // укажим что делать $p -> delete($id); //cms::plugin('search')::delete($id); break; } }*/ /*function plugin_rss($id){ //прослойка между плагином и объектом $n = snippets::load_id($id); if ( false===$n ){ throw new Exception(); } $sql = "SELECT ... "; // плагин выполнит запрос и обновит файл с rss лентой cms::plugin('rss')::update($sql); }*/ } // end class ?>