View file modules/ads_manager/controllers/ads_manager_admin.php

File size: 10.36Kb
<?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 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_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 = '". a_safe($_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 = '". a_safe($_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 .= 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;
	}
}
?>