* @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(); } } ?>