<?php
if ( defined("inc_stat_pages_class") ){
	return FALSE;
}
define("inc_stat_page_class", 1);
include_once(MAIN_SOURCE_PATH.'/modules/admin/lang/'.MAIN_LANG.'/lang.php');

	//	класс для формирования запроса
class stat_pages_q extends query{


	
	public function __construct($alias){
	global $MAIN_DB;
		$this -> 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;
	}
	
	
	
		
	
	
	
}

?>
