View file modules/private/controllers/private.php

File size: 6.93Kb
<?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 Private_Controller extends Controller {
	/**
	* Уровень пользовательского доступа
	*/
	public $access_level = 5;
	/**
	* Папки
	*/
	public $folders = array(
		'new' => 'Новые',
		'inbox' => 'Входящие',
		'outbox' => 'Исходящие',
		'saved' => 'Сохраненные'
	);

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

	/**
	* Список папок
	*/
	public function action_folders() {
    	$result = $this->db->query("SELECT COUNT(*) AS count, folder FROM #__private_messages WHERE user_id = '". USER_ID ."' GROUP BY folder");
    	$folders = array();
    	while($folder = $this->db->fetch_array($result)) {
    		$folders[$folder['folder']] = $folder['count'];
    	}

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

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

	/**
	* Отправить сообщение
	*/
	public function action_send() {
    	if(isset($_POST['submit'])) {
    		if(!$user_to_id = $this->db->get_one("SELECT user_id FROM #__users WHERE username = '". a_safe($_POST['username']) ."' AND user_id != -1")) {
    			$this->error .= 'Получаетель не найден!<br />';
    		}
    		if($user_to_id == USER_ID) {
    			$this->error .= 'Отправлять сообщения самому себе запрещено!<br />';
    		}
    		if(empty($_POST['message'])) {
            	$this->error .= 'Укажите текст сообщения.<br />';
            }
            if($_POST['captcha_code'] != $_SESSION['captcha_code']) {
				$this->error .= 'Неверно указан код с картинки<br />';
			}

			$_SESSION['captcha_code'] = main::get_unique_code(4);

    		if(!$this->error) {
    			# Отправляем сообщение адресату
            	$this->db->query("INSERT INTO #__private_messages SET
            		user_id = '$user_to_id',
            		user_to_id = '$user_to_id',
            		user_from_id = '". USER_ID ."',
            		message = '". a_safe($_POST['message']) ."',
            		folder = 'new',
            		time = UNIX_TIMESTAMP()
            	");
            	# Копируем сообщение в исходящие отправителя
            	$this->db->query("INSERT INTO #__private_messages SET
            		user_id = '". USER_ID ."',
            		user_to_id = '$user_to_id',
            		user_from_id = '". USER_ID ."',
            		message = '". a_safe($_POST['message']) ."',
            		folder = 'outbox',
            		time = UNIX_TIMESTAMP()
            	");

            	a_notice('Сообщение отправлено!', a_url('private'));
    		}
	    }
	    if(!isset($_POST['submit']) OR $this->error) {
	    	$_SESSION['captcha_code'] = main::get_unique_code(4);

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

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

	/**
	* Просмотр папки
	*/
	public function action_list_messages() {
    	if(!array_key_exists($_GET['folder'], $this->folders))
    		a_error("Папка не найдена!");

        $messages = $this->db->get_array("SELECT pm.*, u_to.username AS username_to, u_from.username AS username_from
        	FROM #__private_messages AS pm
        	LEFT JOIN #__users AS u_to ON u_to.user_id = pm.user_to_id
        	LEFT JOIN #__users AS u_from ON u_from.user_id = pm.user_from_id
        	WHERE pm.folder = '". a_safe($_GET['folder']) ."' AND pm.user_id = '". USER_ID ."'
        	ORDER BY message_id DESC
        	LIMIT $this->start, $this->per_page
        ");
		$total = $this->db->get_one("SELECT FOUND_ROWS()");

		# Если папка "новые", метим сообщения прочитанными
    	$this->db->query("UPDATE #__private_messages SET folder = 'inbox' WHERE user_id = '". USER_ID ."' AND folder = 'new'");

      	# Пагинация
        $pg_conf['base_url'] = a_url('private/list_messages', 'folder='. $_GET['folder'] .'&amp;start=');
		$pg_conf['total_rows'] = $total;
		$pg_conf['per_page'] = $this->per_page;

		a_import('libraries/pagination');
		$pg = new CI_Pagination($pg_conf);

      	$this->tpl->assign(array(
      		'messages' => $messages,
      		'folder_name' => $this->folders[$_GET['folder']],
      		'pagination' => $pg->create_links()
      	));

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

	/**
	* Просмотр сообщения
	*/
    public function view_message() {
    	$message = $this->db->get_row("SELECT * FROM #__private_messages
    		WHERE message_id = '". intval($_GET['message_id']) ."' AND user_id = '". USER_ID ."'
    	");

    	if(!$message) a_error("Сообщение не найдено!");

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

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

    /**
    * Удаление сообщения
    */
    public function action_delete_message() {
    	$message = $this->db->get_row("SELECT * FROM #__private_messages
    		WHERE message_id = '". intval($_GET['message_id']) ."' AND user_id = '". USER_ID ."'
    	");

    	if(!$message) a_error("Сообщение не найдено!");

    	if(!empty($_GET['confirm'])) {
            $this->db->query("DELETE FROM #__private_messages WHERE message_id = '". intval($_GET['message_id']) ."' AND user_id = '". USER_ID ."'");
            a_notice('Сообщение удалено!', a_url('private/list_messages', 'folder='. $_GET['folder']));
		}
		else {
			a_confirm('Подтверждаете удаление данного сообщения?', a_url('private/delete_message', 'message_id='. $_GET['message_id'] .'&amp;folder='. $_GET['folder'] .'&amp;confirm=ok'), a_url('private/list_messages', 'folder='. $_GET['folder']));
		}
    }

    /**
    * Сохранение сообщения
    */
    public function action_save_message() {
    	$message = $this->db->get_row("SELECT * FROM #__private_messages
    		WHERE message_id = '". intval($_GET['message_id']) ."' AND user_id = '". USER_ID ."'
    	");

    	if(!$message) a_error("Сообщение не найдено!");

    	$this->db->query("UPDATE #__private_messages SET folder = 'saved' WHERE message_id = '". intval($_GET['message_id']) ."' AND user_id = '". USER_ID ."'");
     	a_notice('Сообщение сохранено!', a_url('private/list_messages', 'folder=saved'));
    }
}
?>