Просмотр файла modules/forum/controllers/forum_admin.php

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

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

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

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

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

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

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

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

	/**
	* Управление разделами форума
	*/
	public function action_sections() {
		switch($_GET['a']) {
			# Создание раздела
  			case 'create':
				main::is_demo();
				if(!empty($_POST['new_section'])) {
					$position = $this->db->get_one("SELECT MAX(position) FROM #__forum_sections") + 1;
					$this->db->query("INSERT INTO #__forum_sections SET
						name = '". a_safe($_POST['new_section']) ."',
						position = '". $position ."'
					");

					a_notice('Раздел успешно создан!', a_url('forum/admin'));
				}
				else a_error('Укажите название раздела!');
				break;

  			# Удаление раздела
  			case 'delete':
				main::is_demo();
				$section = $this->db->get_row("SELECT * FROM #__forum_sections WHERE section_id = ". intval($_GET['section_id']));
				$this->db->query("DELETE FROM #__forum_sections WHERE section_id = ". intval($_GET['section_id']));

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

				a_notice('Раздел успешно удален!', a_url('forum/admin'));
				break;

  			# Редактирование раздела
  			case 'edit':
				if(is_numeric($_GET['section_id'])) {
					if(!$section = $this->db->get_row("SELECT * FROM #__forum_sections WHERE section_id = '". intval($_GET['section_id']) ."'"))
  						a_error('Раздел не найден!');
  					$action = 'edit';
  				}
  				else {
  					$section = array();
  					$action = 'add';
  				}

				if(isset($_POST['submit'])) {
					main::is_demo();
					if(empty($_POST['name'])) {
						$this->error .= 'Укажите название категории<br />';
					}

					if(!$this->error) {
						if($action == 'add') {
							$position = $this->db->get_one("SELECT MAX(position) FROM #__forum_sections") + 1;
							$this->db->query("INSERT INTO #__forum_sections SET
								name = '". a_safe($_POST['name']) ."',
								position = '". $position ."'
							");
							$message = 'Раздел успешно создан!';
						}
						if($action == 'edit') {
							$this->db->query("UPDATE #__forum_sections SET name = '". a_safe($_POST['name']) ."' WHERE section_id='". intval($_GET['section_id']) ."'");
							$message = 'Раздел успешно переименован!';
						}

						a_notice($message, a_url('forum/admin'));
					}
				}
				if(!isset($_POST['submit']) || $this->error) {
					$this->tpl->assign(array(
						'error' => $this->error,
						'section' => $section,
						'action' => $action
					));
					$this->tpl->display('sections_edit');
				}
				break;

  			# Увеличение позиции
			case 'up':
				if(!$section = $this->db->get_row("SELECT * FROM #__forum_sections WHERE section_id = ". intval($_GET['section_id'])))
					a_error('Раздел не найден!');
	
				# Меняем позиции
				$this->db->query("UPDATE #__forum_sections SET position = ". $section['position'] ." WHERE position = ". ($section['position'] - 1));
				$this->db->query("UPDATE #__forum_sections SET position = ". ($section['position'] - 1) ." WHERE section_id = ". intval($_GET['section_id']));
	
				header("Location: ". a_url('forum/admin'));
				exit;
			break;

		    # Уменьшение позиции
		    case 'down':
				if(!$section = $this->db->get_row("SELECT * FROM #__forum_sections WHERE section_id = ". intval($_GET['section_id'])))
					a_error('Раздел не найден!');
	
				# Меняем позиции
				$this->db->query("UPDATE #__forum_sections SET position = ". $section['position'] ." WHERE position = ". ($section['position'] + 1));
				$this->db->query("UPDATE #__forum_sections SET position = ". ($section['position'] + 1) ." WHERE section_id = ". intval($_GET['section_id']));
	
				header("Location: ". a_url('forum/admin'));
				exit;
			break;

  			# Список разделов
  			default:
				$sql = "SELECT SQL_CALC_FOUND_ROWS f_s.*
					FROM #__forum_sections AS f_s";

				$sql .= " ORDER BY f_s.position ASC";

				$result = $this->db->query($sql);

				$min_p = $this->db->get_one("SELECT MIN(position) FROM #__forum_sections");
 				$max_p = $this->db->get_one("SELECT MAX(position) FROM #__forum_sections");

				while($section = $this->db->fetch_array($result)) {
					if($section['position'] != $min_p) $section['up'] = '<a href="'. a_url('forum/admin/sections', 'a=up&amp;section_id='. $section['section_id']) .'">up</a>';
					else $section['up'] = 'up';

					if($section['position'] != $max_p) $section['down'] = '<a href="'. a_url('forum/admin/sections', 'a=down&amp;section_id='. $section['section_id']) .'">down</a>';
					else $section['down'] = 'down';

					$sections[] = $section;
				}

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

				$this->tpl->display('sections_list');
				break;
		}
	}

	/**
	* Управление форумами
	*/
	public function action_forums() {
		switch($_GET['a']) {
			# Редактирование форума
  			case 'edit':
				if(is_numeric($_GET['forum_id'])) {
  					if(!$forum = $this->db->get_row("SELECT * FROM #__forum_forums WHERE forum_id = '". intval($_GET['forum_id']) ."'"))
  						a_error('Форум не найден!');
  					$action = 'edit';
  				}
  				else {
  					$forum = array();
  					$action = 'add';
  				}

				if(isset($_POST['submit'])) {
					main::is_demo();
					if(empty($_POST['name'])) {
						$this->error .= 'Укажите название Форума<br />';
					}
					if(!$this->db->get_one("SELECT section_id FROM #__forum_sections WHERE section_id = '". intval($_POST['section_id']) ."'")) {
						$this->error .= 'Раздел не найден!<br />';
					}

					if(!$this->error) {
						if($action == 'add') {
							$position = $this->db->get_one("SELECT MAX(position) FROM #__forum_forums WHERE section_id = '". intval($_POST['section_id']) ."'") + 1;
							$this->db->query("INSERT INTO #__forum_forums SET
								section_id = '". intval($_POST['section_id']) ."',
								name = '". a_safe($_POST['name']) ."',
								position = '$position'
							");
							$message = 'Форум успешно создан!';
						}
						if($action == 'edit') {
							$this->db->query("UPDATE #__forum_forums SET
								section_id = '". intval($_POST['section_id']) ."',
								name = '". a_safe($_POST['name']) ."'
								WHERE forum_id='". intval($_GET['forum_id']) ."'
							");
							$message = 'Форум успешно изменён!';
						}
						a_notice($message, a_url('forum/admin/forums', 'a=list_forums&amp;section_id='. $_POST['section_id']));
					}
				}
				if(!isset($_POST['submit']) || $this->error) {
					$sections = $this->db->get_array("SELECT * FROM #__forum_sections ORDER BY position");
					$this->tpl->assign(array(
						'error' => $this->error,
						'sections' => $sections,
						'forum' => $forum,
						'action' => $action
					));
					$this->tpl->display('forums_edit');
				}
			break;

			# Удаление форума
  			case 'delete':
  				main::is_demo();
				if(!$forum = $this->db->get_row("SELECT * FROM #__forum_forums WHERE forum_id = '". intval($_GET['forum_id']) ."'"))
  					a_error('Форум не найден!');

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

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

				a_notice('Форум успешно удален!', a_url('forum/admin/forums', 'a=list_forums&amp;section_id='. $forum['section_id']));
				break;

  			# Увеличение позиции
			case 'up':
				if(!$forum = $this->db->get_row("SELECT * FROM #__forum_forums WHERE forum_id = ". intval($_GET['forum_id'])))
		    		a_error('Форум не найден!');

				# Меняем позиции
				$this->db->query("UPDATE #__forum_forums SET position = ". $forum['position'] ." WHERE section_id = '". $forum['section_id'] ."' AND position = ". ($forum['position'] - 1));
				$this->db->query("UPDATE #__forum_forums SET position = ". ($forum['position'] - 1) ." WHERE section_id = '". $forum['section_id'] ."' AND forum_id = ". intval($_GET['forum_id']));
	
				header("Location: ". a_url('forum/admin/forums', 'section_id='. $forum['section_id'], TRUE));
				exit;
				break;

			# Уменьшение позиции
			case 'down':
				if(!$forum = $this->db->get_row("SELECT * FROM #__forum_forums WHERE forum_id = ". intval($_GET['forum_id'])))
		    		a_error('Форум не найден!');

				# Меняем позиции
				$this->db->query("UPDATE #__forum_forums SET position = ". $forum['position'] ." WHERE section_id = '". $forum['section_id'] ."' AND position = ". ($forum['position'] + 1));
				$this->db->query("UPDATE #__forum_forums SET position = ". ($forum['position'] + 1) ." WHERE section_id = '". $forum['section_id'] ."' AND forum_id = ". intval($_GET['forum_id']));
	
				header("Location: ". a_url('forum/admin/forums', 'section_id='. $forum['section_id'], TRUE));
				exit;
				break;

  			# Список форумов
  			case 'forums_list':
  			case 'list_forums':
  			default:
				if(!$section = $this->db->get_row("SELECT * FROM #__forum_sections WHERE section_id = ". intval($_GET['section_id'])))
		    		a_error('Раздел не найден!');

  				$sql = "SELECT SQL_CALC_FOUND_ROWS ff.*
					FROM #__forum_forums AS ff";
				$sql .= " WHERE ff.section_id = '". intval($_GET['section_id']) ."'";
				$sql .= " ORDER BY ff.position ASC LIMIT $this->start, $this->per_page";

				$result = $this->db->query($sql);

				$min_p = $this->db->get_one("SELECT MIN(position) FROM #__forum_forums WHERE section_id = '". intval($_GET['section_id']) ."'");
 				$max_p = $this->db->get_one("SELECT MAX(position) FROM #__forum_forums WHERE section_id = '". intval($_GET['section_id']) ."'");

				while($forum = $this->db->fetch_array($result)) {
					if($forum['position'] != $min_p) $forum['up'] = '<a href="'. a_url('forum/admin/forums', 'a=up&amp;forum_id='. $forum['forum_id']) .'">up</a>';
					else $forum['up'] = 'up';

					if($forum['position'] != $max_p) $forum['down'] = '<a href="'. a_url('forum/admin/forums', 'a=down&amp;forum_id='. $forum['forum_id']) .'">down</a>';
					else $forum['down'] = 'down';

					$forums[] = $forum;
				}

				$this->tpl->assign(array(
					'section' => $section,
					'forums' => $forums
				));

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