View file modules/chat/controllers/chat_admin.php

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

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

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

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

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

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

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

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

	/**
	* Управление комнатами
	*/
	public function action_rooms() {
		switch(@$_GET['a']) {
			# Удаление комнатаа
  			case 'delete':
  				main::is_demo();
				$room = $this->db->get_row("SELECT * FROM #__chat_rooms WHERE room_id = ". intval($_GET['room_id']));
				$this->db->query("DELETE FROM #__chat_rooms WHERE room_id = ". intval($_GET['room_id']));

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

    			# Удаляем все сообщения из данной комнаты
    			$this->db->query("DELETE FROM #__chat_messages WHERE room_id = '". $room['room_id'] ."'");

    			a_notice('Комната успешно удалена!', a_url('chat/admin'));
			break;

  			# Создание / Редактирование комнаты
  			case 'edit':
  				if(is_numeric(@$_GET['room_id'])) {
					if(!$room = $this->db->get_row("SELECT * FROM #__chat_rooms WHERE room_id = '". intval($_GET['room_id']) ."'"))
  						a_error('комната не найден!');
  					$action = 'edit';
  				}
  				else {
  					$room = 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 #__chat_rooms") + 1;
		                    $this->db->query("INSERT INTO #__chat_rooms SET
		                    	name = '". a_safe($_POST['name']) ."',
		                    	position = '". $position ."'
		                    ");
		                    $message = "Комната успешно создана!";
    					}
    					if($action == 'edit') {
    						$this->db->query("UPDATE #__chat_rooms SET
    							name = '". a_safe($_POST['name']) ."'
    							WHERE room_id='". intval($_GET['room_id']) ."'
    						");
    						$message = "Комната успешно изменена!";
    					}
    					a_notice($message, a_url('chat/admin'));
    				}
				}
				if(!isset($_POST['submit']) || $this->error) {
                	$this->tpl->assign(array(
                		'action' => $action,
                		'error' => $this->error,
                		'room' => $room
                	));

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

  			# Увеличение позиции
		    case 'up':
				if(!$room = $this->db->get_row("SELECT * FROM #__chat_rooms WHERE room_id = ". intval($_GET['room_id'])))
		    		a_error('Комната не найдена!');

		    	// Меняем позиции
		    	$this->db->query("UPDATE #__chat_rooms SET position = ". $room['position'] ." WHERE position = ". ($room['position'] - 1));
		    	$this->db->query("UPDATE #__chat_rooms SET position = ". ($room['position'] - 1) ." WHERE room_id = ". intval($_GET['room_id']));

		    	header("Location: ". a_url('chat/admin'));
		    	exit;
			break;

		    # Уменьшение позиции
		    case 'down':
				if(!$room = $this->db->get_row("SELECT * FROM #__chat_rooms WHERE room_id = ". intval($_GET['room_id'])))
		    		a_error('комната не найден!');

		    	// Меняем позиции
		    	$this->db->query("UPDATE #__chat_rooms SET position = ". $room['position'] ." WHERE position = ". ($room['position'] + 1));
		    	$this->db->query("UPDATE #__chat_rooms SET position = ". ($room['position'] + 1) ." WHERE room_id = ". intval($_GET['room_id']));

		    	header("Location: ". a_url('chat/admin'));
		    	exit;
			break;

  			# Список комнат
  			default:
				$sql = "SELECT SQL_CALC_FOUND_ROWS *
					FROM #__chat_rooms";

				$sql .= " ORDER BY position ASC";

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

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

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

        			if($room['position'] != $max_p) $room['down'] = '<a href="'. a_url('chat/admin/rooms', 'a=down&amp;room_id='. $room['room_id']) .'">down</a>';
                    else $room['down'] = 'down';

          			$rooms[] = $room;
        		}

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

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