class.meta.php 8.43 KB
<?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/admin/cache/config.php');
include_once(MAIN_SOURCE_PATH.'/modules/admin/inc/url.php');
include_once(MAIN_SOURCE_PATH.'/modules/admin/lang/'.MAIN_LANG.'/lang.php');


class filedsSetMeta
{
  //static $id = false; //  адрес новости
  
  
	static function p_name($v){
    include_once(MAIN_SOURCE_PATH.'/modules/admin/inc/class.pages.php');
    $p = pages::load_pname($v);
    if ( false===$p ){
       throw new Exception('Ошибка:  страницы "'.$v.'" не существует!');
    }
    return $v;
  }
  /* 
static function n_alias($v,$id){
    if ( empty($v) ){
      throw new Exception('Ошибка: нужно заполнить поле "Адрес"!');
    }
    if ( !sys_is_alias($v)  ){
      throw new Exception('Ошибка: адрес содержит запрещённые символы"!');
    }
    if ( metas::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 filedsGetMeta
{

  static $__var = array();  //  для хранения временных переменных
  
  static function type_list($v){
    $s = new select_box();
    $s -> selected_id($v);
    $s -> empty_record(false);
    
    
    foreach( meta::$types as $k =>$v ){
      $s -> set($k,$v);
    }
    return $s -> get();
  }
  

	static function lang_links($v){
    if ( !defined('MAIN_LANGS') ){
      return false;
    }
    $langs = explode(',',MAIN_LANGS);
    $result = array();
    foreach( $langs as $l ){
      $q = new metaQuery('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 ( !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();
  }
 
  

}



class metaQuery extends query{

	var $fields_get = 'filedsGetMeta';
	
  /**
  * @var string $alias Алиас для исплользования в mysql запросе
  */
  public function __construct($alias){
    $this -> set_table(MAIN_META_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("metas_category") ,$alias,'category_id',$cols );
	}*/
	
	

  public function where_id($v){
    $v = intval($v);
    if ( empty($v)  ){
      return FALSE;
    }
	  return $this -> set_where( $this -> alias.'.meta_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.'.module',$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 ( !defined('MAIN_LANGS') ){
      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(){
		
		return $this -> set_anothe_where( $this -> alias.'.meta_id='.$this -> alias.'.link_id');
	}

  public function orderby_id($v){
    return 	$this -> set_orderby($this -> alias.'.meta_id',$v);
  }
  
  public function orderby_module($v){
    return 	$this -> set_orderby($this -> alias.'.module',$v);
  }
  
	
  /**
  * Произвольная сортировка
  */	
  public function orderby_rand(){
    return 	$this -> set_orderby('RAND()');
  }
  
 
 
  
  
  

  

}	//	end class metasQuery



class meta extends objects{

  public $table = "system_meta";
  public $key = "meta_id";
	public $fields = 'filedsSetMeta';
  static $types = array('title' => 'Заголовок','desc' => 'Описание','keywords'=>'Ключевые слова');

  		//STATIC
  static function load_id($id){
   
    $m = new metaQuery('m');
    if ( !$m -> where_id($id) ){
      return FALSE;
    }
    $m -> get('*');
    if ( !$m -> get_count_rows() ){
      return FALSE;
    }
    return new meta($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 meta(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_DB -> prefix($this -> table)." 
      SET ".implode(',',$sql)." 
      WHERE ".$this -> key."='".$this -> key_value."'";
    
    if ( !empty($this -> debug) ){
      throw new Exception($sql);
    }
    $MAIN_DB -> query($sql);
    //metas::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_DB -> prefix($this -> table)." SET ".implode(',',$sql)."";
    if ( !empty($this -> debug) ){
     throw new Exception($sql);
    }
    $MAIN_DB -> query($sql);
    $id =  $MAIN_DB -> insert_id();
   // metas::search_index($id); // формируем новую запись в таблицу поиска
    return $id;
  }*/
  
  
  
 /* public function delete(){
  global $MAIN_DB;
    
    $sql = "DELETE FROM ".$MAIN_DB -> prefix($this -> table)." WHERE ".$this -> key."='".$this -> key_value."'";
    $MAIN_DB -> query($sql);
		
  
    
    //metas::build_rss();// обновляем rss
    return TRUE;
  }*/
	
	

  public function cache(){
  global $MAIN_DB;
    
   
		$p = new metaQuery('f');
		$p -> orderby_module('DESC');
		$p -> get('f.*',false);
		$rows = $p -> rows();
		$cache = array();
    foreach( $rows as $r ){
      $cache[$r['module']].='HL::set_meta("'.$r['type'].'","'.addslashes($r['value']).'","'.$r['key'].'","'.$r['p_name'].'","'.$r['lang'].'");'."\n\r";
    }
    
    foreach( $cache as $module=>$array ){
      file_put_contents(MAIN_PATH.'/tmp/meta/'.$module.'.php',"<?php \n\r ".$array."\n\r?>" );
    }
    return TRUE;
  } 

	

 	
 		
  	
  	
	
	
} //  end class



	
?>