<?php
/*
*	управление комментариями на сайте
*	
*/

class admin_comments{
	private $error = false;
	private $act = 'index';
	private $JsHttpRequest = false;
	
	public function __construct(){
	global $MAIN_PAGE;
		define('M_PATH',MAIN_SOURCE_PATH.'/modules/'.$MAIN_PAGE -> dirname() );
		define('M_URL',MAIN_SOURCE_URL.'/modules/'.$MAIN_PAGE -> dirname() );
		define('A_CHARSET', $MAIN_PAGE -> charset() );
		include_once(M_PATH.'/inc/url.php');
		include_once(MAIN_SOURCE_PATH.'/modules/admin/inc/class.modules.php');
		include_once(MAIN_SOURCE_PATH.'/inc/class.comments.php');
		//include_once(M_PATH.'/inc/class.modules.php');
		//include_once(MAIN_SOURCE_PATH.'/modules/admin/lang/'.MAIN_LANG.'/lang.php');
		include_once(MAIN_SOURCE_PATH.'/inc/class.html.php');
		include(MAIN_SOURCE_PATH.'/ext/ajax/JsHttpRequest.php');
		$this -> JsHttpRequest = new JsHttpRequest( A_CHARSET );
		$this -> act = !empty($_REQUEST['act']) ? $_REQUEST['act'] : $this -> act;
		$GLOBALS['_RESULT']['id_request'] = $_REQUEST['id_request'];
			
	}
	
	public function get(){
		//sleep(2);
		$func = $this -> act;
		if ( !method_exists($this ,$func) ){
			sys_error(ERROR_404);
		}
		return $this -> $func();
	}
	
	
	
		//	главная, формирует список шаблонов
	private function index(){
		$t = new PHPTAL( M_PATH.'/tmpl/control_comments/main.html' );
		$t -> URL_ADMIN_COMMENTS = sys_url(URL_ADMIN_COMMENTS);
		$t -> ADMIN_URL = sys_url(URL_ADMIN);
		$t -> id = $_REQUEST['filter_id'];
		$t -> filter_module = !empty($_REQUEST['filter_module']) ? $_REQUEST['filter_module'] : false;
		$t -> filter_object = !empty($_REQUEST['filter_object']) ? $_REQUEST['filter_object'] : false;
		
		$c_modules = array();
	  	$m = new modulesQuery('m');
	  	$m -> get('m.m_path,m.m_name',false);
	  	while( $row = $m -> row() ){
	  		$c_modules[]=$row['m_path'];
	  	}
		$sql = array();
		$first = true;
		$end = false;
		$sb = new select_box();
		$sb -> empty_record(true,0,SHOW_ALL);
		$sb -> selected_id( $_REQUEST['filter_module'] );
		foreach( $c_modules as $m ){
			$mod = modules::load_path($m);
				//	модуль загрузить не удалось
			if (false===$mod){
				continue;
			}
				//	модуль не поддерживает работу с комментариями
			if ( false===$mod -> exists_comments() ){
				continue;
			}
				//	заносим имя в выпадающий список
			$sb -> set($m,$mod -> name());
			
				//	фильтр по модулю
			if (  !empty($_REQUEST['filter_module']) && $_REQUEST['filter_module']!=$m ){
				continue;	
			}
				//	подключаем класс модуля
			include_once(MAIN_SOURCE_PATH.'/modules/'.$m.'/inc/class.comments.php');
			eval( '$s = '.$m.'_comments_q::create();' );
				//	фильтр по id
			$s -> where_id( $_REQUEST['filter_id'] );
				//	фильтр по активности
			if ( !empty($_REQUEST['filter_active']) ){
				$s -> where_active( 0 );
			}
				//	фильтр объекта
			$s -> where_obj( $_REQUEST['filter_object'] );
				
			$s -> where_login( $_REQUEST['filter_login'] );
			
			
				//	сортировка и постраничка
			if ( end($c_modules)==$m ){
			
				$s -> orderby_time_add('DESC',false);
				$s -> set_page(1);
				$s -> set_count_rows(10);
			}
				//	генерируем sql
			$sql[] = $s -> make_sql('
				n_id, c_id,c_comment, c_active,c_time_add,u_login,
				c_time_add AS time_add,
				u_login AS profile_url, 
				c_active AS row_class, 
			
				"'.$mod -> name().'" as module_name ,
				"'.$m.'" as module ,
				c_id AS comment_url
				 ',
			$first );
		
			if ( true===$first ){
				$first = false;
			}
			
			unset($s);
		}
			//	отправляем в шаблон список модулей работающих с комментариями
		$t -> modules_box = $sb -> get(); 
	  	unset($sb);
	  	
		$sql =  implode(' UNION ALL ',$sql);
		$s = new comments_q('comments','c');
		$s -> set_sql($sql);
		//$s -> set_debug(1);
		$s -> get(false,true);
		$count = $s -> get_count_rows();
		$rows= array();
		while( $row = $s -> row() ){
			$rows[] = arr_to_obj($row);
		}		
			//	постраничка
		if ( !empty($count) ){
			include_once(MAIN_SOURCE_PATH.'/inc/class.pagenav.php');
			$pn = new page_nav( $count);
			$pn -> set_limit(10);
			$pn -> set_url_tmpl(URL_PAGE_NAV);
			$t -> page_nav = $pn -> get(1);
		}
		$t -> rows = $rows;
		return $t -> execute();
	}
	
	
	
	
	
		/*		AJAX	*/
		
	
	
		//	перезагружаем таблицу со списком шаблонов
	private function ajax_reload(){
		sys_block_disable();
		
				//	макрос таблицы
		$t = new PHPTAL( M_PATH.'/tmpl/control_comments/inc/row.html' );
			//	список модулей
		
		$c_modules = array();
	  	$m = new modulesQuery('m');
	  	$m -> get('m.m_path,m.m_name',false);
	  	while( $row = $m -> row() ){
	  		$c_modules[]=$row['m_path'];
	  	}
	  	unset($m);
	  	
		$sql = array();
		$first = true;
		$end = false;

		foreach( $c_modules as $m ){
			
				if (  !empty($_REQUEST['filter_module']) && $_REQUEST['filter_module']!=$m ){
					continue;	
				}
			
			
				$mod = modules::load_path($m);
			
					//	модуль загрузить не удалось
				if (false===$mod){
					continue;
					//$path = $mod -> path();
				}
					//	модуль не поддерживает работу с комментариями
				if ( false===$mod -> exists_comments() ){
					continue;
				}
				/*if ( !empty($_REQUEST['modules']) && $_REQUEST['modules']!=$m	){
					continue;
				}*/
			
					//	подключаем класс
				include_once(MAIN_SOURCE_PATH.'/modules/'.$m.'/inc/class.comments.php');
			  eval( '$s = '.$m.'_comments_q::create();' );
					//	фильтры
				$s -> where_id( $_REQUEST['filter_id'] );
			
				if ( !empty($_REQUEST['filter_active']) ){
					$s -> where_active( 0 );
				}
					//	фильтр объекта
			  $s -> where_obj( $_REQUEST['filter_object'] );
			 
					//	задаём сортировку только последнему классу
				if ( end($c_modules)==$m || !empty($_REQUEST['filter_module']) ){
				
						//	сортировка указанная пользователем
					if ( !empty($_REQUEST['orderby_key']) ){
						$s -> $_REQUEST['orderby_key']( $_REQUEST['orderby_value'],false);
					}else{
						$s -> orderby_time_add('DESC',false);
					}
					
					
				}
					//	задаём постраничку только последнему классу 
					
					//	получаем все запросы
				$sql[] = $s -> make_sql('
				n_id, c_id,c_comment, c_active,c_time_add,u_login,
				c_time_add AS time_add,
				u_login AS profile_url, 
				c_active AS row_class, 
			
				"'.$mod -> name().'" as module_name ,
				"'.$m.'" as module ,
				c_id AS comment_url
				 ',$first );
				if ( true===$first ){
					$first = false;
				}	
				unset($s);
			}
		
		
	  	
			//	объединяем и выполняем их
		$sql =  implode(' UNION ALL ',$sql)." LIMIT ".intval(($_REQUEST['page']-1)*10).',10';
		
		$s = new comments_q('comments','c');
		//$s -> set_debug(1);
		$s -> set_sql($sql);
		
		$s -> get(false,true);
		$count = $s -> get_count_rows();
		$rows= array();
		while( $row = $s -> row() ){
			$rows[] = ($row);
		}		
		
		
			//	постраничка
		if ( !empty($count) ){
			include_once(MAIN_SOURCE_PATH.'/inc/class.pagenav.php');
			$pn = new page_nav($count);
			$pn -> set_limit(10);
			$pn -> set_url_tmpl(URL_PAGE_NAV);
			$t -> page_nav = $pn -> get($_REQUEST['page']);
		}
			
		
			//	выполнять макрос
		$t -> execute = true;
		$t -> rows = $rows;
		$GLOBALS['_RESULT']['content'] =  $t -> execute();
		exit();
	}
	
		
	
		
	
			//	удаляем модуль $_REQUEST['id']
	private function ajax_delete(){
		
		sys_block_disable();
		
		$m = modules::load_path($_REQUEST['module']);
		
		if ( false===$m ){
			die( A_EMPTY_ID );
		}
		include_once(MAIN_SOURCE_PATH.'/modules/'.$_REQUEST['module'].'/inc/class.comments.php');
		eval( '$s = '.$_REQUEST['module'].'_comments::load_id('.$_REQUEST['id'].');' );
		if ( false===$s ){
			die( A_EMPTY_ID );
		}
		$s -> delete();
		exit();
	}
	
		//	форма редактирвоания  
	private function ajax_edit(){
		sys_block_disable();
			//	получаем из базы  $_REQUEST['id']
			
		$m = modules::load_path($_REQUEST['module']);
		if ( false===$m ){
			die( A_EMPTY_ID );
		}
		include_once(MAIN_SOURCE_PATH.'/modules/'.$_REQUEST['module'].'/inc/class.comments.php');
		eval( '$s = '.$_REQUEST['module'].'_comments_q::create();' );
		$s -> where_id($_REQUEST['id']);
		if ( !$s -> get('*,c_id AS id,"'.$_REQUEST['module'].'" AS module ') ){
			die( $s -> error() );
		}
		$row = $s ->  row();
			
			//	формируем страницу
		$t = new PHPTAL( M_PATH.'/tmpl/control_comments/form.html' );
		$t -> row = arr_to_obj($row );
		$t -> editor = '<textarea name="c_comment">'.$row['c_comment'].'</textarea>';
		$GLOBALS['_RESULT']['content'] =  $t -> execute();
		$GLOBALS['_RESULT']['title'] = EDIT;
		exit();
	}
	
		//	сохранение формы редактирования  $_REQUEST['id']
	private function ajax_save(){
		sys_block_disable();
			//	загружаем из базы страничку $_REQUEST['id']
		$m = modules::load_path($_REQUEST['module']);
		if ( false===$m ){
			die( A_EMPTY_ID );
		}
		include_once(MAIN_SOURCE_PATH.'/modules/'.$_REQUEST['module'].'/inc/class.comments.php');
		eval( '$s = '.$_REQUEST['module'].'_comments::load_id('.$_REQUEST['id'].');' );
		if ( false===$s ){
			die( A_EMPTY_ID );
		}
		
			//	обновляем 
		$s -> set('c_comment',$_REQUEST['c_comment']);
		$s -> set('c_active',$_REQUEST['c_active']);
		
		//$s -> set_debug(1);
		$id = $s -> update();
		if ( false===$id ){
			die( $s -> get_error() );
		}
		
			//	обновляем морду
		$GLOBALS['_RESULT']['msg'] = MOD_SAVE;
	
		exit();
	}
	
		
	
		
	
		
	


}

?>
