View file mc-master/modules/chat/controllers/chat_admin.php

File size: 5.58Kb
<?php
/**
	 * MobileCMS
	 *
	 * Open source content management system for mobile sites
	 *
	 * @author MobileCMS Team <[email protected]>
	 * @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 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;
		}
	}
}
?>