<?php
/**
* MobileCMS
* Content Management System for creation of mobile sites.
* @package MobileCMS
* @author http://mobilecms.ru/mobilecms/authors.php
* @copyright Copyright (c) 2006-2011, MobileCMS
* @license http://mobilecms.ru/mobilecms/license.php
* @link http://mobilecms.ru/
*/
defined('IN_SYSTEM') or die('<b>403<br />Запрет доступа!</b>');
/**
* Контроллер пользовательской части модуля комментариев
*/
class Comments_Controller extends Controller {
/**
* Уровень пользовательского доступа
*/
public $access_level = 0;
/**
* Метод по умолчанию
*/
public function action_index() {
$this->action_list_comments();
}
/**
* Список комментариев
*/
public function action_list_comments() {
if (empty($_GET['module']) || empty($_GET['item_id'])) a_error('Не указан модуль либо деталь');
if (!modules::is_active_module($_GET['module'])) a_error('Модуль не установлен либо не активен');
if (file_exists(ROOT . 'modules/' . $_GET['module'] . '/comments.dat')) $comments_data = file(ROOT . 'modules/' . $_GET['module'] . '/comments.dat');
else a_error('Комментарии для данного модуля не предназначены');
if (!$this->db->get_one("SELECT " . a_safe($comments_data[1]) . " FROM " . a_safe($comments_data[0]) . " WHERE " . a_safe($comments_data[1]) . " = " . intval($_GET['item_id']))) a_error('Не найден обсуждаемый объект');
# Листинг комментариев
$sql = "SELECT SQL_CALC_FOUND_ROWS cp.*, cp.username, u.status AS user_status, up.avatar AS avatar_exists, u.last_visit
FROM #__comments_posts AS cp
LEFT JOIN #__users AS u USING(user_id)
LEFT JOIN #__users_profiles AS up USING(user_id)
WHERE
cp.module = '" . a_safe(@$_GET['module']) . "' AND
cp.item_id = " . intval($_GET['item_id']);
$sql .= " ORDER BY cp.comment_id ASC LIMIT $this->start, $this->per_page";
$result = $this->db->query($sql);
if (!class_exists('smiles')) a_import('modules/smiles/helpers/smiles');
$comments = array();
while ($comment = $this->db->fetch_array($result)) {
# Форматируем текст комментария
$comment['text'] = smiles::smiles_replace($comment['text']);
$comment['text'] = main::bbcode($comment['text']);
$comment['text'] = nl2br($comment['text']);
$comments[] = $comment;
}
$total = $this->db->get_one("SELECT FOUND_ROWS()");
# Пагинация
$pg_conf['base_url'] = a_url('comments', 'module=' . $_GET['module'] . '&item_id=' . $_GET['item_id'] . '&return=' . urlencode($_GET['return']) . '&start=');
$pg_conf['total_rows'] = $total;
$pg_conf['per_page'] = $this->per_page;
a_import('libraries/pagination');
$pg = new CI_Pagination($pg_conf);
$_SESSION['captcha_code'] = main::get_unique_code(4);
$_config = $this->config['system'];
$this->tpl->assign(array(
'error' => $this->error,
'comments' => $comments,
'total' => $total,
'_config' => $_config,
'start' => $this->start,
'pagination' => $pg->create_links()
));
$this->tpl->display('list_comments');
}
/**
* Добавление комментария
*/
public function action_say() {
if (isset($_POST['submit'])) {
if (empty($_POST['username'])) $this->error.= 'Укажите ваше имя<br />';
if ($check_user_id = $this->db->get_one("SELECT user_id FROM #__users WHERE username = '" . a_safe($_POST['username']) . "'")) {
if (USER_ID != $check_user_id) $this->error.= 'Данное имя занято на сайте, укажите другое или авторизуйтесь<br />';
}
$_config = $this->config['system'];
if ($_config['comment_posting'] == 'users' && USER_ID == - 1) {
$this->error.= 'Для написания сообщений вам необходимо авторизироваться на сайте<br />';
}
if (!main::check_input($_POST['username'], 'LOGIN')) $this->error.= 'Неверно указано имя пользователя, формат правильного: ' . main::check_input('', 'LOGIN', 'format') . '<br />';
$_POST['message'] = trim($_POST['message']);
if (empty($_POST['message'])) $this->error.= 'Укажите сообщение<br />';
# Проверка кода с картинки
if (USER_ID == - 1) {
if ($_POST['captcha_code'] != $_SESSION['captcha_code']) $this->error.= 'Неверно указан код с картинки<br />';
}
if (!$this->error) {
a_antiflud();
setcookie('username', $_POST['username'], time() + 999999999, '/');
$this->db->query("INSERT INTO #__comments_posts SET
item_id = '" . intval($_GET['item_id']) . "',
module = '" . a_safe($_GET['module']) . "',
username = '" . a_safe($_POST['username']) . "',
user_id = '" . USER_ID . "',
`text` = '" . a_safe($_POST['message']) . "',
time = UNIX_TIMESTAMP()
");
$_SESSION['captcha_code'] = main::get_unique_code(4);
user::rating_update();
# Считаем на какую страницу переходить
$total = $this->db->get_one("SELECT COUNT(*) FROM #__comments_posts WHERE item_id = '" . intval($_GET['item_id']) . "' AND module = '" . a_safe($_GET['module']) . "'");
$start = floor($total / $this->per_page) * $this->per_page;
if ($total == $start) $start = $start - $this->per_page;
header('Location: ' . a_url('comments', 'item_id=' . $_GET['item_id'] . '&module=' . $_GET['module'] . '&return=' . urlencode($_GET['return']) . '&start=' . $start, true));
exit;
}
}
if (!isset($_POST['submit']) OR $this->error) {
# Считаем на какую страницу переходить
if (isset($_GET['start'])) $_GET['start'] = $this->start;
$this->action_list_comments();
}
}
/**
* Удаление комментария
*/
public function action_comment_delete() {
if (!$comment = $this->db->get_row("SELECT *, (SELECT status FROM #__users WHERE user_id = cp.user_id) AS user_status FROM #__comments_posts AS cp WHERE comment_id = '" . intval($_GET['comment_id']) . "'")) a_error('Комментарий не найден');
if (!a_check_rights($comment['user_id'], $comment['user_status'])) a_error('У вас нет права удалять данное сообщение');
if (!empty($_GET['confirm'])) {
$this->db->query("DELETE FROM #__comments_posts WHERE comment_id = '" . intval($_GET['comment_id']) . "'");
user::rating_update(-1, $comment['user_id']);
a_notice('Комментарий успешно удален!', a_url('comments', 'module=' . $_GET['module'] . '&item_id=' . $_GET['item_id'] . '&return=' . urlencode($_GET['return']) . '&start=' . $_GET['start']));
} else {
a_confirm('Подтверждаете удаление данного комментария?', a_url('comments/comment_delete', 'comment_id=' . $_GET['comment_id'] . '&confirm=ok&module=' . $_GET['module'] . '&item_id=' . $_GET['item_id'] . '&return=' . urlencode($_GET['return']) . '&start=' . $_GET['start']), a_url('comments', 'module=' . $_GET['module'] . '&item_id=' . $_GET['item_id'] . '&return=' . urlencode($_GET['return']) . '&start=' . $_GET['start']));
}
}
/**
* Изменение комментария
*/
public function action_comment_edit() {
if (!$comment = $this->db->get_row("SELECT *, (SELECT status FROM #__users WHERE user_id = cp.user_id) AS user_status FROM #__comments_posts AS cp WHERE comment_id = '" . intval($_GET['comment_id']) . "'")) a_error('Комментарий не найден');
if (!a_check_rights($comment['user_id'], $comment['user_status'])) a_error('У вас нет права удалять данное сообщение');
if (isset($_POST['message'])) {
$_POST['message'] = trim($_POST['message']);
if (empty($_POST['message'])) $this->error.= 'Укажите сообщение<br />';
if (!$this->error) {
a_antiflud();
$this->db->query("UPDATE #__comments_posts SET
text = '" . a_safe($_POST['message']) . "'
WHERE comment_id = '" . intval($_GET['comment_id']) . "'
");
a_notice('Сообщение успешно изменено!', urldecode($_GET['return_url']));
}
}
$this->tpl->assign(array('error' => $this->error, 'comment' => $comment));
$this->tpl->display('comment_edit');
}
}
?>