<?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 Ads_Manager_Admin_Controller extends Controller {
 	/**
 	 * Уровень пользовательского доступа
 	 */
	public $access_level = 10;
	/**
	 * Тема
	 */
	public $template_theme = 'admin';

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

	/**
	 * Конфигурация модуля
	 */
	public function action_config() {
		$_config = $this->config['ads_manager'];

		if (isset($_POST['submit'])) {
			main::is_demo();
			$_config = $_POST;

			main::config($_config, 'ads_manager', $this->db);

			a_notice('Данные успешно изменены!', a_url('ads_manager/admin/config'));
		}

		if (!isset($_POST['submit']) || $this->error) {
			$this->tpl->assign(array(
				'_config' => $_config
			));

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

	/**
	 * Добавление / редактирование площадки
	 */
	public function action_area_edit() {
		if (is_numeric($_GET['area_id'])) {
			if (!$area = $this->db->get_row("SELECT * FROM #__ads_manager_areas WHERE area_id = '".intval($_GET['area_id'])."'"))
				a_error('Редактируемая площадка не найдена!');
			$action = 'edit';
		}
		else {
			$area = array();
			$action = 'add';
		}

		if (isset($_POST['submit'])) {
			if (empty($_POST['title'])) {
				$this->error .= 'Укажите название площадки<br />';
			}
			if (!main::check_input($_POST['ident'], 'WORD')) {
				$this->error .= 'Неверный формат идентификатора площадки (только латинские буквы и цифры)<br />';
			}
			if ($action == 'add') {
				if (empty($_POST['ident'])) {
					$this->error .= 'Укажите идентификатор площадки<br />';
				}
				if ($this->db->get_one("SELECT area_id FROM #__ads_manager_areas WHERE title = '".a_safe($_POST['title'])."'")) {
					$this->error .= 'Площадка с таким названием уже имеется, введите другое!<br />';
				}
				if ($this->db->get_one("SELECT area_id FROM #__ads_manager_areas WHERE ident = '".a_safe($_POST['ident'])."'")) {
					$this->error .= 'Площадка с таким идентификатором уже имеется, введите другой!<br />';
				}
			}
	
			if (!$this->error) {
				if ($action == 'add') {
					$this->db->query("INSERT INTO #__ads_manager_areas SET
						title = '". a_safe($_POST['title'])."',
						ident = '". a_safe($_POST['ident'])."'
					");
					$message = 'Площадка успешно добавлена!';
				}
				if ($action == 'edit') {
					$this->db->query("UPDATE #__ads_manager_areas SET
						title = '". a_safe($_POST['title'])."'
						WHERE area_id = '". $area['area_id']."'"
					);
					$message = 'Площадка успешно изменена!';
				}
		
				a_notice($message, a_url('ads_manager/admin'));
			}
		}
		if (!isset($_POST['submit']) || $this->error) {
			$this->tpl->assign(array(
			'error' => $this->error,
			'area' => $area,
			'action' => $action
			));
	
			$this->tpl->display('area_edit');
		}
	}

	/**
	 * Добавление / редактирование ссылки
	 */
	public function action_link_edit() {
		if (is_numeric($_GET['link_id'])) {
			if (!$link = $this->db->get_row("SELECT * FROM #__ads_manager_links WHERE link_id = '".intval($_GET['link_id'])."'"))
				a_error('Редактируемая ссылка не найдена!');
			$action = 'edit';
		}
		else {
			$link = array();
			$action = 'add';
		}

		if (isset($_POST['submit'])) {
			if (empty($_POST['title'])) {
				$this->error .= 'Укажите заголовок ссылки<br />';
			}
			if (empty($_POST['url'])) {
				$this->error .= 'Укажите URL ссылки<br />';
			}
			if (empty($_POST['names'])) {
				$this->error .= 'Укажите текст ссылки<br />';
			}
			if (!$area = $this->db->get_row("SELECT * FROM #__ads_manager_areas WHERE area_id = '".a_safe($_POST['area_id'])."'")) {
				$this->error .= 'Площадка с данным идентификатором не найдена!<br />';
			}

			if (!$this->error) {
				if ($action == 'add') {
					$position = $this->db->get_one("SELECT MAX(position) FROM #__ads_manager_links WHERE area_id = '".$area['area_id']."'") + 1;
	
					$this->db->query("INSERT INTO #__ads_manager_links SET
						title = '". a_safe($_POST['title'])."',
						url = '". a_safe($_POST['url'])."',
						names = '". mysqli_real_escape_string($this->db_link, $_POST['names'])."',
						area_id = '". $area['area_id']."',
						area_ident = '". $area['ident']."',
						position = '". $position."'
					");
					$message = 'Ссылка успешно добавлена!';
				}
				if ($action == 'edit') {
					$this->db->query("UPDATE #__ads_manager_links SET
						title = '". a_safe($_POST['title'])."',
						url = '". a_safe($_POST['url'])."',
						names = '". mysqli_real_escape_string($this->db_link, $_POST['names'])."',
						area_id = '". $area['area_id']."',
						area_ident = '". $area['ident']."'
						WHERE link_id = '". $link['link_id']."'"
					);
					$message = 'Ссылка успешно изменена!';
				}
	
				a_notice($message, a_url('ads_manager/admin'));
			}
		}
		if (!isset($_POST['submit']) || $this->error) {
			$areas = $this->db->get_array("SELECT * FROM #__ads_manager_areas");
	
			$this->tpl->assign(array(
			'error' => $this->error,
			'link' => $link,
			'action' => $action,
			'areas' => $areas
			));
	
			$this->tpl->display('link_edit');
		}
	}

	/**
	 * Удаление площадки
	 */
	public function action_area_delete() {
		if (!$area = $this->db->query("DELETE FROM #__ads_manager_areas WHERE area_id = '".intval($_GET['area_id'])."'"))
			a_error('Площадка не найдена!');

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

		a_notice('Площадка успешно удалена!', a_url('ads_manager/admin'));
	}

	/**
	 * Удаление ссылки
	 */
	public function action_link_delete() {
		if (!$link = $this->db->query("DELETE FROM #__ads_manager_links WHERE link_id = '".intval($_GET['link_id'])."'"))
			a_error('Рекламная ссылка не найдена!');

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

		# Меняем позиции
		$this->db->query("UPDATE #__ads_manager_links SET position = position - 1 WHERE area_id = '".$link['area_id']."' AND position > '".$link['position']."'");

		a_notice('Ссылка успешно удалена!', a_url('ads_manager/admin'));
	}

 	/**
 	 * Листинг площадок и ссылок
 	 */
	public function action_list_links() {
		$areas = array();
		$result = $this->db->query("SELECT * FROM #__ads_manager_areas");
		while ($area = $this->db->fetch_array($result)) {
			$area['links'] = array();

			$min_p = $this->db->get_one("SELECT MIN(position) FROM #__ads_manager_links WHERE area_id = '".$area['area_id']."'");
 			$max_p = $this->db->get_one("SELECT MAX(position) FROM #__ads_manager_links WHERE area_id = '".$area['area_id']."'");

			$result1 = $this->db->query("SELECT * FROM #__ads_manager_links WHERE area_id = '".$area['area_id']."' ORDER BY position ASC");
			while ($link = $this->db->fetch_array($result1)) {
				if ($link['position'] != $min_p) $link['up'] = '<a href="'.a_url('ads_manager/admin/link_up', 'link_id='.$link['link_id']).'">up</a>';
				else $link['up'] = 'up';

				if ($link['position'] != $max_p) $link['down'] = '<a href="'.a_url('ads_manager/admin/link_down', 'link_id='.$link['link_id']).'">down</a>';
				else $link['down'] = 'down';

				$ex = explode(PHP_EOL, $link['names']);
				$names = '';
				foreach ($ex as $name) $names .= stripslashes(main::bbcode($name)).PHP_EOL;
				$link['names'] = $names;

				$area['links'][] = $link;
			}

			$areas[] = $area;
		}

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

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

	/**
	 * Поднятие ссылки
	 */
	public function action_link_up() {
		if(!$link = $this->db->get_row("SELECT * FROM #__ads_manager_links WHERE link_id = ". intval($_GET['link_id'])))
			a_error('Ссылка не найдена!');

		// Меняем позиции
		$this->db->query("UPDATE #__ads_manager_links SET position = ". $link['position'] ." WHERE area_id = '". $link['area_id'] ."' AND position = ". ($link['position'] - 1));
		$this->db->query("UPDATE #__ads_manager_links SET position = ". ($link['position'] - 1) ." WHERE area_id = '". $link['area_id'] ."' AND link_id = ". intval($_GET['link_id']));
	
		header("Location: ". a_url('ads_manager/admin'));
		exit;
	}

	/**
	 * Опускание ссылки
	 */
	public function action_link_down() {
		if (!$link = $this->db->get_row("SELECT * FROM #__ads_manager_links WHERE link_id = ".intval($_GET['link_id'])))
			a_error('Ссылка не найдена!');
	
		// Меняем позиции
		$this->db->query("UPDATE #__ads_manager_links SET position = ".$link['position']." WHERE area_id = '".$link['area_id']."' AND position = ".($link['position'] + 1));
		$this->db->query("UPDATE #__ads_manager_links SET position = ".($link['position'] + 1)." WHERE area_id = '".$link['area_id']."' AND link_id = ".intval($_GET['link_id']));
	
		header("Location: ".a_url('ads_manager/admin'));
		exit;
	}
}
?>
