admin_blocks.php 8.2 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
*/

		
class admin_blocks{
	private $error = false;
	private $act = 'index';
	private $JsHttpRequest = false;
	
	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(M_PATH.'/inc/class.blocks.php');

		include_once(M_PATH.'/inc/class.modules.php');
		include_once(MAIN_SOURCE_PATH.'/ext/ajax/JsHttpRequest.php');
		include_once(MAIN_SOURCE_PATH.'/inc/class.html.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(){
		$func = $this -> act;
		
		if ( !method_exists($this ,$func) ){
			sys_error(ERROR_404);
		}
		return $this -> $func();
	}
	
		//	отображаем список блоков в виде таблицы
	function index(){

		$b = new b_query('b');
		$b -> include_modules('m','m.m_name');
		$b -> set_orderby('b.m_path','ASC');
		$b -> set_orderby('b.b_name','ASC');
		//$p -> set_debug(1);
		$b -> get('
			b.*,
			b.b_type_content AS type,
			b.b_access as access_checked
			'
		,false);
		$t = new PHPTAL( M_PATH.'/tmpl/control_blocks/main.html' );
		$t ->rows = $b -> rows();

			  //  список модулей
		$s = new select_box();
	  $s -> empty_record(true,0);
	  $m = new modulesQuery('m');
	  $m -> where_active(1);
	  $m -> get('m_path,m_name');
	  while( $row = $m -> row() ){
		  $s -> set($row['m_path'],$row['m_name']);
		}		
		$t -> module_list = $s -> get();
		return $t -> execute();
	}
	
	/*		AJAX	*/
	
	

	/**
	* Функция вывода формы редактирования/создания блока
	*
	*
	*/
	private function ajax_form(){
		sys_block_disable();
		$b = new b_query('b');
		//$b -> set_debug(1);
		if ( !$b -> where_id($_REQUEST['id']) ){
			$row = array('b_func' => false,'type_content_html' => 1,'b_id' =>false);
		}else{
			$b -> get('*, 
			  b_type_content AS type_content_tmpl,
			  b_type_content AS type_content_php,
			  b_type_content AS type_content_html,
			  b_id as groups',false);
			$row = $b -> row();
		}
	
			//	права доступа
		$groups = users::groups();
		$s = new select_box();
		$s -> selected_id($row['groups']);
		$s -> empty_record(false);
		foreach( $groups AS $g_id => $g_name ){
			$s -> set($g_id,$g_name );
		}
		$row['group_list']=$s -> get();
		unset($s);
		
			//	список оформлений блока
  	
  	$s = new select_box();
  	$s -> selected_id($row['b_tmpl']);
 		$s -> empty_record(true,false,'---');
 		$s -> opt_open('Стандартные');
 		if ( !is_dir(MAIN_PATH.'/source/tmpl/default/blocks') ){
 		  sys_error(ERROR_500,'Ошибка: нет каталога "'.MAIN_PATH.'/source/tmpl/default/blocks"');
 		}
 		$handle = opendir(MAIN_PATH.'/source/tmpl/default/blocks');
  	while (false !== ($file = readdir($handle))) { 
		 if ( preg_match('#\.html$#iUs',$file) ){
	     $s -> set('default/blocks/'.$file,$file );
			}
    }
    $s -> opt_close();
    if ( !is_dir(MAIN_PATH.'/source/tmpl/project/blocks') ){
 		  sys_error(ERROR_500,'Ошибка: нет каталога "'.MAIN_PATH.'/source/tmpl/default/blocks"');
 		}
 		
    $handle = opendir(MAIN_PATH.'/source/tmpl/project/blocks');
    
    $s -> opt_open('Пользовательские');
    while (false !== ($file = readdir($handle))) { 
		 if ( preg_match('#\.html$#iUs',$file) ){
	     $s -> set('project/blocks/'.$file,$file );
			}
    }
    $s -> opt_close();
 		$row['tmpl_list']=$s -> get();
 		unset($s);
 
      //  список шаблонных страниц
    include_once(MAIN_SOURCE_PATH.'/modules/admin/inc/class.tmpl.php');
    $s_tmpl_list = tmpl::get_list();
    $s = new select_box();
    if ( !empty($_REQUEST['id']) ){
  	  $s -> selected_id(tmpl::get_list_tmpl($_REQUEST['id'])  );
  	}
 		$s -> empty_record(false);
  	foreach( $s_tmpl_list as $k=>$v ) { 
	     $s -> set($v['t_id'],$v['t_name'] );
    }
 		$row['tmpl_set_list']=$s -> get();  
    unset($s);
    
			//	формируем страницу
		$t = new PHPTAL( M_PATH.'/tmpl/control_blocks/form.html' );
		$t -> row = arr_to_obj($row);
		$GLOBALS['_RESULT']['content'] =  $t -> execute();
		$GLOBALS['_RESULT']['title'] = M_ADMIN_BLOCKS_ADD;
		exit();
	}


  /**
  * Функция сохранения блока в базе данных
  *
  */
	private function ajax_save(){
		sys_block_disable();
			//	загружаем из базы страничку $_REQUEST['f_id']
		$p = blocks::load_id($_REQUEST['id']);
		  //  если загрузить блок не удалось, значит его нужно создать
		if ( false===$p ){
			$p = blocks::create();
		}
			//	устанавливаем значения
		$p -> set('b_name',$_REQUEST['b_name']);
		$p -> set('b_parser_name',$_REQUEST['b_parser_name']);
		$p -> set('b_title',$_REQUEST['b_title']);
		$p -> set('b_content',$_REQUEST['b_content']);
		$p -> set('b_type_content',$_REQUEST['b_type_content']);
		$p -> set('b_access',$_REQUEST['b_access']);
		$p -> set('b_tmpl',$_REQUEST['b_tmpl']);
		$p -> set('b_time_cache',$_REQUEST['b_time_cache']);
		//$p -> set_debug(1);
		if ( $p -> id()==0 ){
			$id = $p -> insert();
		}else{
			$id = $p -> update();
		}
		if ( false===$id ){
			sys_error( ERROR_501, $p -> error() );
		}
		
			//	обновляем права доступа к блоку
		blocks::set_groups($id,$_REQUEST['groups']);
		
		  //  удалим все упоминания о блоке в шаблонах системы
		if ( !$_REQUEST['id'] ){ 
		    //  только для новых блоков
		  include_once(MAIN_SOURCE_PATH.'/modules/admin/inc/class.tmpl.php');
		  tmpl::clear_tmpl($id);
		    //  добавляем блок в выбранные шаблоны оформления страниц
		  $set_tmpl = is_array($_REQUEST['set_tmpl']) ? $_REQUEST['set_tmpl'] : array();
		  foreach( $set_tmpl as $t_id ){
		    $tmpl = tmpl::load_id($t_id);
		    $tmpl -> add_block($id);
		    unset($tmpl);
		  }
		}
		  //  выводим результат
		$GLOBALS['_RESULT']['msg'] = M_ADMIN_TMPL_SAVE;
		exit();
	}
	
	
	
		//	перезагружаем таблицу
	private function ajax_reload(){
		
		sys_block_disable();
			//	макрос таблицы
		$t = new PHPTAL( M_PATH.'/tmpl/control_blocks/inc/row.html' );
			//	выполнять макрос
		$t -> execute = true;
			
			//	выбираем 
		$b = new b_query('b');
		$b -> include_modules('m','m.m_name');
		$b -> set_orderby('b.m_path','ASC');
		$b -> set_orderby('b.b_name','ASC');
		$b -> where_path($_POST['filter_module']);
		//$b -> set_debug(1);
		$b -> get('
			b.*,
			b.b_type_content AS type,
			b.b_access as access_checked
			'
		,false);
		$t -> rows = $b -> rows();
		$GLOBALS['_RESULT']['content'] = $t -> execute();
		exit();
	}
	
	
	private function ajax_access(){
		
		sys_block_disable();
		$m = blocks::load_id($_POST['id']);
		if ( false===$m ){
			die( A_EMPTY_ID );
		}
		$m -> set('b_access',$_POST['access']);
		$m -> update();
		
		exit();
	}

	private function ajax_delete(){
		
		sys_block_disable();
		$m = blocks::load_id($_REQUEST['id']);
		if ( false===$m ){
			die( A_EMPTY_ID );
		}
		$m -> delete();
		
		exit();
	}
	
		
	private function ajax_edit_short(){
		sys_block_disable();
		$p = new b_query('p');
		$p -> where_id($_REQUEST['block_id']);
		$p -> get('*');
		$row = $p ->  row();
		
		$t = new PHPTAL(  M_PATH.'/tmpl/control_blocks/edit_short.html' );
		$t -> row = $row ;
		$GLOBALS['_RESULT']['content'] =  $t -> execute();
		$GLOBALS['_RESULT']['title'] = 'редактировать';
		exit();
	}
	
	
	private function ajax_save_short_form(){
		sys_block_disable();
		$p = blocks::load_id($_POST['id']);
		//$p -> set_debug(1);
		$p -> set('b_content',$_POST['form']['b_content']);
		$id = $p -> update();

		$GLOBALS['_RESULT']['msg'] = M_ADMIN_TMPL_SAVE;
		exit();
	}
	
	
}


?>