<?php
/**
* @author:  Bunzia Alexander <nifus@mail.ru> <http://www.weblancer.net/users/nifus/>
* @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



	
?>
