View file modules/index_page/controllers/index_page_admin.php

File size: 10.1Kb
<?php
/**
 * Ant0ha's project
 *
 * @package
 * @author Anton Pisarenko <[email protected]>
 * @copyright Copyright (c) 2006 - 2010, Anton Pisarenko
 * @license http://ant0ha.ru/license.txt
 * @link http://ant0ha.ru
 */

defined('IN_SYSTEM') or die('<b>403<br />Запрет доступа!</b>');

//---------------------------------------------

/**
 * Контроллер управления главной страницей
 */
class Index_Page_Admin_Controller extends Controller {
	/**
	* Уровень пользовательского доступа
	*/
	public $access_level = 10;
	/**
	* Тема
	*/
	public $template_theme = 'admin';

	/**
	* Конструктор
	*/
	public function __construct() {
		parent::__construct();
		a_import('modules/index_page/helpers/index_page');

		# Чистка кэша главной страницы
		$cache_file = ROOT .'cache/file_cache/'. md5('index_page');
		if(file_exists($cache_file) && ROUTE_ACTION != '') {
			main::is_demo();
			unlink($cache_file);
		}
	}

	/**
	* Метод по умолчанию
	*/
	public function action_index() {
		$this->action_view_page();
	}

	/**
	* Просмотр главной страницы
	*/
	public function action_view_page() {
    	$result = $this->db->query("SELECT * FROM #__index_page_blocks ORDER BY position ASC");

    	$blocks = array();
    	while($block = $this->db->fetch_array($result)) {
    		# Получаем виджеты блока
    		$block['widgets'] = $this->db->get_array("SELECT * FROM #__index_page_widgets WHERE block_id = '". $block['block_id'] ."' ORDER BY position ASC");

        	$blocks[] = $block;
    	}

    	$this->tpl->assign(array(
    		'blocks' => $blocks
    	));

    	$this->tpl->display('view_page');
	}

	/**
	* Добавление виджета
	*/
	public function action_widget_add() {
		if(!$block = $this->db->get_row("SELECT * FROM #__index_page_blocks WHERE block_id = '". intval($_GET['block_id']) ."'"))
			a_error("Блок не найден!");

		if(isset($_POST['submit'])) {
			if(!file_exists(ROOT .'modules/'. $_POST['module'] .'/helpers/'. $_POST['module'] .'_widget.php')) {
				$this->error .= 'Не найден вспомогательный файл виджета<br />';
			}
			if(empty($_POST['title'])) {
				$this->error .= 'Укажите заголовок виджета<br />';
			}

			if(!$this->error) {
				$position = $this->db->get_one("SELECT MAX(position) FROM #__index_page_widgets WHERE block_id = '". intval($_GET['block_id']) ."'") + 1;

            	$this->db->query("INSERT INTO #__index_page_widgets SET
            		block_id = '". intval($_GET['block_id']) ."',
            		title = '". a_safe($_POST['title']) ."',
            		module = '". a_safe($_POST['module']) ."',
            		position = '$position'
            	");

            	a_notice('Виджет успешно добавлен!', a_url('index_page/admin'));
			}
		}
		if(!isset($_POST['submit']) OR $this->error) {
			$widgets = index_page::get_widgets();

        	$this->tpl->assign(array(
        		'error' => $this->error,
        		'widgets' => $widgets
        	));

        	$this->tpl->display('widget_add');
		}
	}

	/**
	* Настройка виджета
	*/
	public function action_widget_setup() {
		if(!$widget = $this->db->get_row("SELECT * FROM #__index_page_widgets WHERE widget_id = '". intval($_GET['widget_id']) ."'"))
    		a_error('Виджет не найден!');

		# Подключаем класс виджета
  		if(!class_exists($widget['module'] .'_widget'))
    		a_import('modules/'. $widget['module'] .'/helpers/'. $widget['module'] .'_widget.php');
    	# Получаем setup виджета
     	call_user_func(array($widget['module'] .'_widget', 'setup'), $widget);
	}

	/**
	* Перемещение виджета вверх
	*/
	public function action_widget_up() {
    	if(!$widget = $this->db->get_row("SELECT * FROM #__index_page_widgets WHERE widget_id = '". intval($_GET['widget_id']) ."'"))
    		a_error('Виджет не найден!');

		$min_position = $this->db->get_one("SELECT MIN(position) FROM #__index_page_widgets WHERE block_id = '". $widget['block_id'] ."'");

        if($widget['position'] > $min_position) {
    		# Меняем позиции
    		$this->db->query("UPDATE #__index_page_widgets SET position = ". $widget['position'] ." WHERE block_id = '". $widget['block_id'] ."' AND position = ". ($widget['position'] - 1));
    		$this->db->query("UPDATE #__index_page_widgets SET position = ". ($widget['position'] - 1) ." WHERE block_id = '". $widget['block_id'] ."' AND widget_id = ". intval($_GET['widget_id']));
        }

    	header("Location: ". a_url('index_page/admin'));
    	exit;
	}

	/**
	* Перемещение виджета вниз
	*/
	public function action_widget_down() {
    	if(!$widget = $this->db->get_row("SELECT * FROM #__index_page_widgets WHERE widget_id = '". intval($_GET['widget_id']) ."'"))
    		a_error('Виджет не найден!');

		$max_position = $this->db->get_one("SELECT MAX(position) FROM #__index_page_widgets WHERE block_id = '". $widget['block_id'] ."'");

        if($widget['position'] < $max_position) {
    		# Меняем позиции
    		$this->db->query("UPDATE #__index_page_widgets SET position = ". $widget['position'] ." WHERE block_id = '". $widget['block_id'] ."' AND position = ". ($widget['position'] + 1));
    		$this->db->query("UPDATE #__index_page_widgets SET position = ". ($widget['position'] + 1) ." WHERE block_id = '". $widget['block_id'] ."' AND widget_id = ". intval($_GET['widget_id']));
        }

    	header("Location: ". a_url('index_page/admin'));
    	exit;
	}

	/**
	* Удаление виджета
	*/
	public function action_widget_delete() {
     	if(!$widget = $this->db->get_row("SELECT * FROM #__index_page_widgets WHERE widget_id = '". intval($_GET['widget_id']) ."'"))
    		a_error('Виджет не найден!');

    	$this->db->query("DELETE FROM #__index_page_widgets WHERE widget_id = '". intval($_GET['widget_id']) ."'");

    	a_notice('Виджет успешно удален', a_url('index_page/admin'));
	}

	/**
	* Перемещение блока вверх
	*/
	public function action_block_up() {
    	if(!$block = $this->db->get_row("SELECT * FROM #__index_page_blocks WHERE block_id = ". intval($_GET['block_id'])))
    		a_error('Блок не найден!');

		$min_position = $this->db->get_one("SELECT MIN(position) FROM #__index_page_blocks");

        if($block['position'] > $min_position) {
    		# Меняем позиции
    		$this->db->query("UPDATE #__index_page_blocks SET position = ". $block['position'] ." WHERE position = ". ($block['position'] - 1));
    		$this->db->query("UPDATE #__index_page_blocks SET position = ". ($block['position'] - 1) ." WHERE block_id = ". intval($_GET['block_id']));
        }

    	header("Location: ". a_url('index_page/admin'));
    	exit;
	}

	/**
	* Перемещение блока вниз
	*/
	public function action_block_down() {
    	if(!$block = $this->db->get_row("SELECT * FROM #__index_page_blocks WHERE block_id = ". intval($_GET['block_id'])))
    		a_error('Блок не найден!');

    	$max_position = $this->db->get_one("SELECT MAX(position) FROM #__index_page_blocks");

		if($block['position'] < $max_position) {
    		# Меняем позиции
    		$this->db->query("UPDATE #__index_page_blocks SET position = ". $block['position'] ." WHERE position = ". ($block['position'] + 1));
    		$this->db->query("UPDATE #__index_page_blocks SET position = ". ($block['position'] + 1) ." WHERE block_id = ". intval($_GET['block_id']));
        }

    	header("Location: ". a_url('index_page/admin'));
    	exit;
	}

	/**
	* Удаление блока
	*/
	public function action_block_delete() {
		if(!$block = $this->db->get_row("SELECT * FROM #__index_page_blocks WHERE block_id = ". intval($_GET['block_id'])))
    		a_error('Блок не найден!');

    	# Удаляем блок
    	$this->db->query("DELETE FROM #__index_page_blocks WHERE block_id = ". intval($_GET['block_id']));
    	# Удаляем все виджеты данного блока
    	$this->db->query("DELETE FROM #__index_page_widgets WHERE block_id = ". intval($_GET['block_id']));

    	header("Location: ". a_url('index_page/admin'));
    	exit;
	}

	/**
	* Добавление / Редактирование блока
	*/
	public function action_block_edit() {
    	if(is_numeric($_GET['block_id'])) {
        	if(!$block = $this->db->get_row("SELECT * FROM #__index_page_blocks WHERE block_id = '". intval($_GET['block_id']) ."'"))
        		a_error("Блок не найден!");
        	$action = 'edit';
    	}
    	else {
        	$block = array();
        	$action = 'add';
    	}

    	if(isset($_POST['submit'])) {
    		if(empty($_POST['title'])) {
    			$this->error .= 'Укажите заголовок блока<br />';
    		}

    		if(!$this->error) {
            	if($action == 'add') {
            		$position = $this->db->get_one("SELECT MAX(position) FROM #__index_page_blocks") + 1;

            		$this->db->query("INSERT INTO #__index_page_blocks SET
            			title = '". a_safe($_POST['title']) ."',
            			position = '$position'
            		");
            		$message = "Блок успешно добавлен!";
            	}
            	if($action == 'edit') {
            		$this->db->query("UPDATE #__index_page_blocks SET
            			title = '". a_safe($_POST['title']) ."'
            			WHERE block_id = '". intval($_GET['block_id']) ."'
            		");
            		$message = "Блок успешно изменен!";
            	}

            	a_notice($message, a_url('index_page/admin'));
    		}
	    }
	    if(!isset($_POST['submit']) OR $this->error) {
         	$this->tpl->assign(array(
         		'error' => $this->error,
         		'block' => $block,
         		'action' => $action
         	));

         	$this->tpl->display('block_edit');
	    }
	}
}
?>