<?php
include_once(MAIN_SOURCE_PATH.'/modules/admin/lang/'.MAIN_LANG.'/lang.php');
/**
* класс для формирования запроса
*
*/	
class mail_tmpl_q extends query{

	public function __construct($alias){
		$this -> set_table( MAIN_MAIL_TMPL_TBL );
		$this -> set_alias($alias);
	}
	
	/***
  * функции формирвования запроса
  *
  *
  */
	public function where_id($v){
		$v = intval($v);
		if ( empty($v) ){
			return false;
		}
		return $this -> set_where( $this -> alias.'.m_id',$v);
	}
	
	public function orderby_id($v){
		return $this -> set_orderby( $this -> alias.'.m_id',$v);
	}
	
	
  /***
  * функции-обработчики алиасов при выборе из таблицы
  *
  *
  */

	/**
	* Формирование получателя 
	*
	*/
	protected function from($v,$row){
		return (!empty($row['m_from_email']) ? ($v.'('.$row['m_from_email'].')') : $v);
	}
	
	
	
}


	
class mail_tmpl{
		//	отладка запросов
	public $debug = false;
		//	массив в котором хранятся данные о текущей записе, __construct
	private $info = array();
		//	первичный ключ таблицы, __construct
	private $main_key = false;
		//	массив изменённых данных о текущей записи
	private $set_info = array();
		//	последняя  ошибка
	private $last_error=false;
	  //  форматы писем
	static $formats = 	array('text','html');

		//	вызвается только внутри класса
		//	для создания объекта используются публичные статичные методы load_id / create
	private function __construct( $array=array() ){
		$this -> info = $array;
		$this -> main_key = $array['m_id'];
	}
	

  /**
	* обновляем запись
	*
	*/
	public function update(){
	global $MAIN_DB;
	
		if ( false===$this -> main_key ){
			sys_error(ERROR_500,A_EMPTY_ID);
		}
		if ( false!==$this -> error() ){
			return false;
		}
		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 = "
			UPDATE ".MAIN_MAIL_TMPL_TBL." 
			SET ".implode(',',$sql)." 
			WHERE m_id='".$this -> main_key."'";
		if ( !empty($this -> debug) ){
			die($sql);
		}
		$MAIN_DB -> query($sql);
		return $this -> main_key;
	}
	

  /**
  * добавление новой записи в таблицу  system_tmpl
  *
  */
	public function insert(){
	global $MAIN_DB;
		if ( false!==$this -> error() ){
			return false;
		}
		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_MAIL_TMPL_TBL." SET ".implode(',',$sql)."";
		if ( !empty($this -> debug) ){
			die($sql);
		}
		$MAIN_DB -> query($sql);
		return $MAIN_DB -> insert_id();
	}
	
	
	public function delete(){
	global $MAIN_DB;
		$sql = "DELETE FROM  ".MAIN_MAIL_TMPL_TBL." WHERE  ".implode(',',$sql)."  m_id='".$this -> main_key."'";
		$MAIN_DB -> query($sql);
		return true;
	}
	
		
	public function get($k){
		if ( isset($this -> info[$k]) ){
			return $this -> info[$k];
		} 
		sys_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;
	}
		//	отладка запросов insert/update
	public function set_debug($flag){
		$this -> debug = $flag;
	}
	

	/**
	* SET - функции. Это уникальные обработчики для значений заносимых в базу данных.
	*
	**/

	
	public function set_name($v){
		if ( empty($v) ){
			$this -> make_error(M_ADMIN_M_NAME_EMPTY);
			return false;
		}
		$this -> set_info['m_name']=$v;
		return true;
	}
	
	public function set_subject($v){
		if ( empty($v) ){
			$this -> make_error(M_ADMIN_M_SUBJECT_EMPTY);
			return false;
		}
		$this -> set_info['m_subject']=$v;
		return true;
	}
	
	public function set_body($v){
		if ( empty($v) ){
			$this -> make_error(M_ADMIN_M_BODY_EMPTY);
			return false;
		}
		$this -> set_info['m_body']=$v;
		return true;
	}
	
	public function set_from_name($v){
	  if ( empty($v) ){
			$this -> make_error(M_ADMIN_M_FROMNAME_EMPTY);
			return false;
		}
		$this -> set_info['m_from_name']=$v;
		return true;
	}
	
	public function set_content_type($v){
    if ( empty($v) ){
			$this -> make_error(M_ADMIN_M_CONTENT_TYPE_EMPTY);
			return false;
		}
	  if ( !in_array($v,mail_tmpl::$formats) ){
			$this -> make_error(M_ADMIN_M_CONTENT_TYPE_FALSE);
			return false;
		}
		$this -> set_info['m_content_type']=$v;
		return true;
	}
	
	public function set_key($v){
    if ( empty($v) ){
			$this -> make_error(M_ADMIN_M_KEY_EMPTY);
			return false;
		}
	  if ( !mail_tmpl::check_type($v) ){
			$this -> make_error(M_ADMIN_M_KEY_FALSE);
			return false;
		}
		$this -> set_info['m_key']=$v;
		return true;
	}
	


/**
*	GET	- функции
*	
*
*/
	
	public function id(){
		return $this -> info['m_id']; 
	}


  /**
  *	СТАТИЧНЫЕ ФУНКЦИИ
  *
  *		
  */
	
	
	/**
	* загрузка модуля по его id
	*
	*/
	static function load_id($id){
		$m = new mail_tmpl_q('m');
		if ( !$m -> where_id($id) ){
			return false;
		}
		$m -> get('*');
		if (  $m -> get_count_rows()==0 ){
			return FALSE;
		}
		return new mail_tmpl($m -> row());
	}
	

	static function create(){
		return new mail_tmpl( array('m_id'=>0));
	}
	
	static function check_type($v){
	  if ( preg_match('#[^a-z0-9_]#i',$v) ){
	    return false;
	  }
		return true;
	}	
	
  /**
  * Обработка ошибок
  *	
  *
  */	

	private function make_error($msg){
	  if (false===$this -> last_error){
		  $this -> last_error = $msg;
		}
	}
	
			//	возвращаем последнюю ошибку
	public function error(){
  		return $this -> last_error;
	}
	
	
	
		
	
	
	
}

?>
