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

Размер файла: 12.75Kb
<?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 LIMIT $this->start, $this->per_page";

        		$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;
		}
	}
}
?>