<?php
/**
	 * MobileCMS
	 *
	 * Open source content management system for mobile sites
	 *
	 * @author MobileCMS Team <support@mobilecms.ru>
	 * @copyright Copyright (c) 2011, MobileCMS Team
	 * @link http://mobilecms.ru Official site
	 * @license http://opensource.org/licenses/gpl-license.php GNU Public License
	 */

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');

		# Чистка кэша главной страницы
		if (ROUTE_ACTION != '') {
			main::is_demo();
			if (!class_exists('File_Cache')) a_import('libraries/file_cache'); ;
			$file_cache = new File_Cache(ROOT.'cache/file_cache');
			$file_cache->clear('index_page');
		}
	}

	/**
	 * Метод по умолчанию
	 */
	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_cache_clear() {
		a_notice('Кэш главной очищен!', a_url('index_page/admin'));
	}

	/**
	 * Добавление виджета
	 */
	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');
		}
	}
}
?>