Размер файла: 6.83Kb
<?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 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);
$this->tpl->assign(array(
'comments' => $comments,
'total' => $total,
'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 />';
}
}
if(!main::check_input($_POST['username'], 'LOGIN')) {
$this->error .= 'Неверно указано имя пользователя, формат правильного: '. main::check_input('', 'LOGIN', 'format') .'<br />';
}
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;
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) {
$_SESSION['captcha_code'] = main::get_unique_code(4);
$this->tpl->assign(array(
'error' => $this->error
));
$this->tpl->display('say');
}
}
/**
* Удаление комментария
*/
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'] .'&module_name='. @$_GET['module_name']));
}
else {
a_confirm('Подтверждаете удаление данного комментария?', a_url('comments/comment_delete', 'comment_id='. $_GET['comment_id'] .'&confirm=ok&module='. @$_GET['module'] .'&item_id='. @$_GET['item_id'] .'&module_name='. @$_GET['module_name']),
a_url('comments', 'module='. @$_GET['module'] .'&item_id='. @$_GET['item_id'] .'&module_name='. @$_GET['module_name'])
);
}
}
}
?>