Сергей Варламов
9 years ago
commit
05b586c050
26 changed files with 2220 additions and 0 deletions
@ -0,0 +1,23 @@ |
|||||||
|
## comment |
||||||
|
|
||||||
|
# Модуль Комментарии v1.2.2a |
||||||
|
|
||||||
|
|
||||||
|
## Данный модуль предназначен для организации системы комментариев для документов на сайте. |
||||||
|
|
||||||
|
* Для того, чтобы использовать данный модуль, разместите системный тег <strong>[mod_comment]</strong> в нужном месте шаблона рубрики. |
||||||
|
* Назначение перемнных в шаблоне |
||||||
|
|
||||||
|
<script type="text/javascript"> |
||||||
|
var aveabspath = '[tag:path]'; |
||||||
|
var UGROUP = <?=UGROUP;?>; |
||||||
|
</script> |
||||||
|
|
||||||
|
* Нужен плагин для jQuery - jquery.form http://malsup.com/jquery/form/ |
||||||
|
|
||||||
|
|
||||||
|
## Перед копированием модуля в папку modules, удалите файл README.md, копируйте только корневую папку sitemap со всем ее содержимым внутри! |
||||||
|
|
||||||
|
## Changelog: |
||||||
|
|
||||||
|
28.05.2015 - версия 1.2.2a |
@ -0,0 +1,10 @@ |
|||||||
|
Шаг 1: Назначение перемнных в шаблоне |
||||||
|
|
||||||
|
<script type="text/javascript"> |
||||||
|
var aveabspath = '[tag:path]'; |
||||||
|
var UGROUP = <?=UGROUP;?>; |
||||||
|
</script> |
||||||
|
|
||||||
|
Шаг 2: Нужен плагин для jQuery - jquery.form |
||||||
|
http://malsup.com/jquery/form/ |
||||||
|
|
@ -0,0 +1,874 @@ |
|||||||
|
<?php |
||||||
|
/** |
||||||
|
* Класс, включающий все свойства и методы для управления комментариями как в |
||||||
|
* Публичной части сайта, так и в Панели управления. |
||||||
|
* |
||||||
|
* @package AVE.cms |
||||||
|
* @subpackage module_Comment |
||||||
|
* @since 1.4 |
||||||
|
* @filesource |
||||||
|
*/ |
||||||
|
class Comment |
||||||
|
{ |
||||||
|
|
||||||
|
/** |
||||||
|
* Свойства класса |
||||||
|
*/ |
||||||
|
|
||||||
|
/** |
||||||
|
* Идентификатор записи с настройками модуля Комментарии |
||||||
|
* |
||||||
|
* @var int |
||||||
|
*/ |
||||||
|
var $_config_id = 1; |
||||||
|
|
||||||
|
/** |
||||||
|
* Количество комментариев на странице в административной части |
||||||
|
* |
||||||
|
* @var int |
||||||
|
*/ |
||||||
|
var $_limit = 15; |
||||||
|
|
||||||
|
/** |
||||||
|
* Имя файла с шаблоном для вывода блока комментариев |
||||||
|
* |
||||||
|
* @var string |
||||||
|
*/ |
||||||
|
var $_comments_tree_tpl = 'comments_tree.tpl'; |
||||||
|
|
||||||
|
/** |
||||||
|
* Имя файла с шаблоном для рекурсивного вывода иерархии комментариев |
||||||
|
* |
||||||
|
* @var string |
||||||
|
*/ |
||||||
|
var $_comments_tree_sub_tpl = 'comments_tree_sub.tpl'; |
||||||
|
|
||||||
|
/** |
||||||
|
* Имя файла с шаблоном формы добавления комментария |
||||||
|
* |
||||||
|
* @var string |
||||||
|
*/ |
||||||
|
var $_comment_form_tpl = 'comment_form.tpl'; |
||||||
|
|
||||||
|
/** |
||||||
|
* Имя файла с шаблоном нового комментария |
||||||
|
* |
||||||
|
* @var string |
||||||
|
*/ |
||||||
|
var $_comment_new_tpl = 'comment_new.tpl'; |
||||||
|
|
||||||
|
/** |
||||||
|
* Имя файлаа с шаблоном уведомляющим о успешном выполнении операции |
||||||
|
* |
||||||
|
* @var string |
||||||
|
*/ |
||||||
|
var $_comment_thankyou_tpl = 'comment_thankyou.tpl'; |
||||||
|
|
||||||
|
/** |
||||||
|
* Имя файла с шаблоном редактирования шаблона в административной части |
||||||
|
* |
||||||
|
* @var string |
||||||
|
*/ |
||||||
|
var $_admin_edit_link_tpl = 'admin_edit.tpl'; |
||||||
|
|
||||||
|
/** |
||||||
|
* Имя файла с шаблоном списка комментариев в административной части |
||||||
|
* |
||||||
|
* @var string |
||||||
|
*/ |
||||||
|
var $_admin_comments_tpl = 'admin_comments.tpl'; |
||||||
|
|
||||||
|
/** |
||||||
|
* Имя файла с шаблоном редактирования настроек модуля в административной части |
||||||
|
* |
||||||
|
* @var string |
||||||
|
*/ |
||||||
|
var $_admin_settings_tpl = 'admin_settings.tpl'; |
||||||
|
|
||||||
|
/** |
||||||
|
* Имя файла с шаблоном редактирования шаблона в публичной части |
||||||
|
* |
||||||
|
* @var string |
||||||
|
*/ |
||||||
|
var $_edit_link_tpl = 'comment_edit.tpl'; |
||||||
|
|
||||||
|
/** |
||||||
|
* Имя файла с шаблоном для вывода информации об авторе комментария |
||||||
|
* |
||||||
|
* @var string |
||||||
|
*/ |
||||||
|
var $_postinfo_tpl = 'comment_info.tpl'; |
||||||
|
|
||||||
|
/** |
||||||
|
* Внутренние методы класса |
||||||
|
*/ |
||||||
|
|
||||||
|
/** |
||||||
|
* Метод, предназначенный для получения основных настроек модуля,которые задаются в Панели управления. |
||||||
|
* |
||||||
|
* @param string $param название параметра |
||||||
|
* @return mixed значение настройки |
||||||
|
*/ |
||||||
|
function _commentSettingsGet($param = '') |
||||||
|
{ |
||||||
|
global $AVE_DB; |
||||||
|
|
||||||
|
// Определяем статическую переменную, которая будет хранить полученные настройки на протяжении всего |
||||||
|
// срока жизни объекта. |
||||||
|
static $settings = null; |
||||||
|
|
||||||
|
// Если переменная $settings еще не имеет значений, тогда выполняем запрос к БД на получение данных |
||||||
|
if ($settings === null) |
||||||
|
{ |
||||||
|
$settings = $AVE_DB->Query(" |
||||||
|
SELECT * |
||||||
|
FROM " . PREFIX . "_module_comments |
||||||
|
WHERE Id = '" . $this->_config_id . "' |
||||||
|
")->FetchAssocArray(); |
||||||
|
} |
||||||
|
|
||||||
|
if ($param == '') |
||||||
|
return $settings; |
||||||
|
|
||||||
|
// В противном случае возвращаем уже имеющиеся значения |
||||||
|
return (isset($settings[$param]) |
||||||
|
? $settings[$param] |
||||||
|
: null); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Метод, предназначенный для получения количества комментариев для определенного документа. |
||||||
|
* |
||||||
|
* @param int $document_id - идентификатор документа |
||||||
|
* @return int - количество комментариев |
||||||
|
*/ |
||||||
|
function _commentPostCountGet($document_id) |
||||||
|
{ |
||||||
|
global $AVE_DB; |
||||||
|
|
||||||
|
// Определяем статический массив, который будет хранить количество комментариев для документов на |
||||||
|
// протяжении всего срока жизни объекта. |
||||||
|
static $comments = array(); |
||||||
|
|
||||||
|
// Если в массиве не найден ключ, который соответствует запрашиваемому документу, тогда выполняем |
||||||
|
// запрос к БД на получение количества комментариев |
||||||
|
if (! isset($comments[$document_id])) |
||||||
|
{ |
||||||
|
$comments[$document_id] = $AVE_DB->Query(" |
||||||
|
SELECT COUNT(*) |
||||||
|
FROM " . PREFIX . "_module_comment_info |
||||||
|
WHERE document_id = '" . $document_id . "' |
||||||
|
")->GetCell(); |
||||||
|
} |
||||||
|
|
||||||
|
// Возвращаем количество комментариев для запрашиваемого документа |
||||||
|
return $comments[$document_id]; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Внешние методы класса |
||||||
|
*/ |
||||||
|
|
||||||
|
/** |
||||||
|
* Следующие методы описывают работу модуля в Публичной части сайта. |
||||||
|
*/ |
||||||
|
|
||||||
|
/** |
||||||
|
* Метод, предназначенный для получения из БД всех комментариев, относящихся к указанному |
||||||
|
* документу с последующим выводом в Публичной части. |
||||||
|
* |
||||||
|
* @param string $tpl_dir - путь к шаблонам модуля |
||||||
|
* |
||||||
|
* @todo Вывод информации о авторе комментария |
||||||
|
*/ |
||||||
|
function commentListShow($tpl_dir) |
||||||
|
{ |
||||||
|
global $AVE_DB, $AVE_Template, $AVE_Core; |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Проверяем, что в настройках модуля разрешено комментирование документов |
||||||
|
if ($this->_commentSettingsGet('comment_active') == 1) |
||||||
|
{ |
||||||
|
$assign['display_comments'] = 1; |
||||||
|
|
||||||
|
// Если группа пользователя, который в текущий момент просматривает документ попадает в список |
||||||
|
// разрешенных (в настройках модуля), тогда создаем флаг, который будет разрешать к показу |
||||||
|
// форму для добавления нового комментария |
||||||
|
if (in_array(UGROUP, explode(',', $this->_commentSettingsGet('comment_user_groups')))) |
||||||
|
{ |
||||||
|
$assign['cancomment'] = 1; |
||||||
|
} |
||||||
|
|
||||||
|
$assign['comment_max_chars'] = $this->_commentSettingsGet('comment_max_chars'); |
||||||
|
$assign['im'] = $this->_commentSettingsGet('comment_use_antispam'); |
||||||
|
|
||||||
|
// Выполняем запрос к БД на получение количества комментариев для текущего документа |
||||||
|
$comments = array(); |
||||||
|
|
||||||
|
if ($this->_commentSettingsGet('comment_use_page_nav') == 1) |
||||||
|
{ |
||||||
|
$limit = $this->_commentSettingsGet('comment_page_nav_count'); |
||||||
|
$start = get_current_page() * $limit - $limit; |
||||||
|
|
||||||
|
$num = $AVE_DB->Query(" |
||||||
|
SELECT COUNT(*) |
||||||
|
FROM " . PREFIX . "_module_comment_info |
||||||
|
WHERE document_id = '" . (int)$_REQUEST['id'] . "' |
||||||
|
")->GetCell(); |
||||||
|
|
||||||
|
$sql = $AVE_DB->Query(" |
||||||
|
SELECT * |
||||||
|
FROM " . PREFIX . "_module_comment_info |
||||||
|
WHERE document_id = '" . (int)$_REQUEST['id'] . "' |
||||||
|
" . (UGROUP == 1 ? '' : "AND comment_status = '1'") . " |
||||||
|
ORDER BY comment_published ASC |
||||||
|
LIMIT " . $start . "," . $limit . " |
||||||
|
"); |
||||||
|
|
||||||
|
$pages = @ceil($num / $limit); |
||||||
|
|
||||||
|
if ($num > $limit) |
||||||
|
{ |
||||||
|
$page_nav = '<a class="page_nav" href="index.php?id=' . $AVE_Core->curentdoc->Id |
||||||
|
. '&doc=' . (empty($AVE_Core->curentdoc->document_alias) ? prepare_url($AVE_Core->curentdoc->document_title) : $AVE_Core->curentdoc->document_alias) |
||||||
|
. ((isset($_REQUEST['artpage']) && is_numeric($_REQUEST['artpage'])) ? '&artpage=' . $_REQUEST['artpage'] : '') |
||||||
|
. ((isset($_REQUEST['apage']) && is_numeric($_REQUEST['apage'])) ? '&apage=' . $_REQUEST['apage'] : '') |
||||||
|
. '&page={s}">{t}</a> '; |
||||||
|
$page_nav = get_pagination(ceil($num / $limit), 'page', $page_nav, get_settings('navi_box')); |
||||||
|
$page_nav = rewrite_link($page_nav); |
||||||
|
$GLOBALS['page_id'][$_REQUEST['id']]['page']=($GLOBALS['page_id'][$_REQUEST['id']]['page']>ceil($num / $limit) ? $GLOBALS['page_id'][$_REQUEST['id']]['page'] : ceil($num / $limit)); |
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
$page_nav = ''; |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
$sql = $AVE_DB->Query(" |
||||||
|
SELECT * |
||||||
|
FROM " . PREFIX . "_module_comment_info |
||||||
|
WHERE document_id = '" . (int)$_REQUEST['id'] . "' |
||||||
|
" . (UGROUP == 1 ? '' : "AND comment_status = '1'") . " |
||||||
|
ORDER BY comment_published ASC |
||||||
|
"); |
||||||
|
|
||||||
|
$page_nav = ''; |
||||||
|
} |
||||||
|
|
||||||
|
// Получаем формат даты, который указан в общих настройках системы и |
||||||
|
// приводим дату создания комментария и дату редактирования к этому формату |
||||||
|
$date_time_format = $AVE_Template->get_config_vars('COMMENT_DATE_TIME_FORMAT'); |
||||||
|
while ($row = $sql->FetchAssocArray()) |
||||||
|
{ |
||||||
|
$row['comment_published'] = strftime($date_time_format, $row['comment_published']); |
||||||
|
$row['comment_changed'] = strftime($date_time_format, $row['comment_changed']); |
||||||
|
// if ($row['parent_id'] == 0) |
||||||
|
// $row['comment_text'] = nl2br(wordwrap($row['comment_text'], 100, "\n", true)); |
||||||
|
// else |
||||||
|
// $row['comment_text'] = nl2br(wordwrap($row['comment_text'], 90, "\n", true)); |
||||||
|
// $row['comment_text'] = nl2br($row['comment_text']); |
||||||
|
|
||||||
|
$comments[$row['parent_id']][] = $row; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Формируем ряд переменных для использования в шаблоне |
||||||
|
$assign['closed'] = @$comments[0][0]['comments_close']; |
||||||
|
$assign['comments'] = $comments; |
||||||
|
$assign['theme'] = defined('THEME_FOLDER') ? THEME_FOLDER : DEFAULT_THEME_FOLDER; |
||||||
|
$assign['doc_id'] = (int)$_REQUEST['id']; |
||||||
|
$assign['page'] = base64_encode(get_redirect_link()); |
||||||
|
$assign['subtpl'] = $tpl_dir . $this->_comments_tree_sub_tpl; |
||||||
|
|
||||||
|
$AVE_Template->assign($assign); |
||||||
|
|
||||||
|
$AVE_Template->assign('page_nav', $page_nav); |
||||||
|
|
||||||
|
// Отображаем шаблон |
||||||
|
$AVE_Template->display($tpl_dir . $this->_comments_tree_tpl); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Метод, предназначенный для отображения формы при добавлении нового комментария. |
||||||
|
* |
||||||
|
* @param string $tpl_dir - путь к шаблонам модуля |
||||||
|
*/ |
||||||
|
function commentPostFormShow($tpl_dir) |
||||||
|
{ |
||||||
|
global $AVE_DB, $AVE_Template; |
||||||
|
|
||||||
|
// Получаем список комментариев на которые запрещены ответы |
||||||
|
$geschlossen = $AVE_DB->Query(" |
||||||
|
SELECT comments_close |
||||||
|
FROM " . PREFIX . "_module_comment_info |
||||||
|
WHERE document_id = '" . (int)$_REQUEST['docid'] . "' |
||||||
|
LIMIT 1 |
||||||
|
")->GetCell(); |
||||||
|
|
||||||
|
// Формируем ряд переменных для использования в шаблоне |
||||||
|
$AVE_Template->assign('closed', $geschlossen); |
||||||
|
$AVE_Template->assign('cancomment', ($this->_commentSettingsGet('comment_active') == 1 && in_array(UGROUP, explode(',', $this->_commentSettingsGet('comment_user_groups'))))); |
||||||
|
$AVE_Template->assign('comment_max_chars', $this->_commentSettingsGet('comment_max_chars')); |
||||||
|
$AVE_Template->assign('theme', defined('THEME_FOLDER') ? THEME_FOLDER : DEFAULT_THEME_FOLDER); |
||||||
|
|
||||||
|
// Отображаем форму для добавления комментария |
||||||
|
$AVE_Template->display($tpl_dir . $this->_comment_form_tpl); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Метод, предназначенный для записи в БД нового комментария. |
||||||
|
* |
||||||
|
* @param string $tpl_dir - путь к шаблонам модуля |
||||||
|
* |
||||||
|
* @todo Вывод сообщения о результате добавления комментария, а также |
||||||
|
* рассмотреть вопрос о добавлении еще одного параметра настройки модуля, который будет определять |
||||||
|
* необходимость отправки уведомления на e-mail о новом комментарии. Возможно не всем хочется получать |
||||||
|
* уведомления. |
||||||
|
* |
||||||
|
*/ |
||||||
|
function commentPostNew($tpl_dir) |
||||||
|
{ |
||||||
|
global $AVE_DB, $AVE_Template; |
||||||
|
// Если запрос пришел не ajax запросом, тогда формируем ссылку для последующего редиректа |
||||||
|
if (! $ajax = (isset($_REQUEST['ajax']) && $_REQUEST['ajax'] == 1)) |
||||||
|
{ |
||||||
|
$link = rewrite_link(base64_decode($_REQUEST['page'])); |
||||||
|
} |
||||||
|
|
||||||
|
// Если в настройках модуля включено использование защитного кода, тогда |
||||||
|
if ($this->_commentSettingsGet('comment_use_antispam') == 1) |
||||||
|
{ |
||||||
|
// Если введенный пользователем защитный код неверен, тогда выполняем обновление кода |
||||||
|
if (! (isset($_SESSION['captcha_keystring']) && isset($_POST['securecode']) |
||||||
|
&& $_SESSION['captcha_keystring'] == $_POST['securecode'])) |
||||||
|
{ |
||||||
|
unset($_SESSION['captcha_keystring']); |
||||||
|
|
||||||
|
if ($ajax) |
||||||
|
{ |
||||||
|
echo 'wrong_securecode'; |
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
if(isset($GLOBALS['tmpl']))$GLOBALS['tmpl']->assign("wrongSecureCode", 1); |
||||||
|
header('Location:' . $link . '#end'); |
||||||
|
} |
||||||
|
exit; |
||||||
|
} |
||||||
|
unset($_SESSION['captcha_keystring']); |
||||||
|
} |
||||||
|
|
||||||
|
// Определяем флаг модерации комментариев |
||||||
|
$comment_status = ($this->_commentSettingsGet('comment_need_approve') == 1) ? 0 : 1; |
||||||
|
|
||||||
|
// Если комментарии разрешены, тогда получаем все данные, который пользователь указал в форме |
||||||
|
if ($this->_commentSettingsGet('comment_active') == 1 |
||||||
|
&& !empty($_POST['comment_text']) |
||||||
|
&& !empty($_POST['comment_author_name']) |
||||||
|
&& in_array(UGROUP, explode(',', $this->_commentSettingsGet('comment_user_groups')))) |
||||||
|
{ |
||||||
|
$new_comment['parent_id'] = (int)$_POST['parent_id']; |
||||||
|
$new_comment['document_id'] = (int)$_POST['doc_id']; |
||||||
|
$new_comment['comment_author_name'] = $_POST['comment_author_name']; |
||||||
|
$new_comment['comment_author_id'] = empty($_SESSION['user_id']) ? '' : $_SESSION['user_id']; |
||||||
|
$new_comment['comment_author_email'] = $_POST['comment_author_email']; |
||||||
|
$new_comment['comment_author_city'] = $_POST['comment_author_city']; |
||||||
|
$new_comment['comment_author_website'] = $_POST['comment_author_website']; |
||||||
|
$new_comment['comment_author_ip'] = $_SERVER['REMOTE_ADDR']; |
||||||
|
$new_comment['comment_published'] = time(); |
||||||
|
$new_comment['comment_text'] = $_POST['comment_text']; |
||||||
|
$new_comment['comment_status'] = $comment_status; |
||||||
|
|
||||||
|
// Определяем максимальную длину символов для комментария |
||||||
|
$comment_max_chars = $this->_commentSettingsGet('comment_max_chars'); |
||||||
|
$comment_max_chars = (!empty($comment_max_chars) && $comment_max_chars > 10) ? $comment_max_chars : 200; |
||||||
|
|
||||||
|
// Если длина комментария превышает максимально допустимую, обрезаем текст, до максимального значения |
||||||
|
$new_comment['comment_text'] = mb_substr(stripslashes($new_comment['comment_text']), 0, $comment_max_chars); |
||||||
|
$new_comment['comment_text'] .= (mb_strlen($new_comment['comment_text']) > $comment_max_chars) ? '…' : ''; |
||||||
|
// $new_comment['comment_text'] = htmlspecialchars($new_comment['comment_text'], ENT_QUOTES); |
||||||
|
$new_comment['comment_text'] = pretty_chars($new_comment['comment_text']); |
||||||
|
|
||||||
|
// Выполняем запрос к БД на добавление комментария |
||||||
|
$AVE_DB->Query(" |
||||||
|
INSERT INTO " . PREFIX . "_module_comment_info |
||||||
|
(" . implode(',', array_keys($new_comment)) .") |
||||||
|
VALUES |
||||||
|
('" . implode("','", $new_comment) . "') |
||||||
|
"); |
||||||
|
$new_comment['Id'] = $AVE_DB->InsertId(); |
||||||
|
|
||||||
|
// Получаем e-mail адрес из Общих настроек системы и формируем ссылку на комментарий в Публичной части |
||||||
|
$mail_from = get_settings('mail_from'); |
||||||
|
$mail_from_name = get_settings('mail_from_name'); |
||||||
|
$page = get_home_link() . urldecode(base64_decode($_REQUEST['page'])) . '&subaction=showonly&comment_id=' . $new_comment['Id'] . '#' . $new_comment['Id']; |
||||||
|
|
||||||
|
// Формируем текст уведомления для отправки на e-mail |
||||||
|
$mail_text = $AVE_Template->get_config_vars('COMMENT_MESSAGE_ADMIN'); |
||||||
|
$mail_text = str_replace('%COMMENT%', stripslashes($new_comment['comment_text']), $mail_text); |
||||||
|
$mail_text = str_replace('%N%', "\n", $mail_text); |
||||||
|
$mail_text = str_replace('%PAGE%', $page, $mail_text); |
||||||
|
$mail_text = str_replace('&', '&', $mail_text); |
||||||
|
|
||||||
|
// Отправляем уведомление |
||||||
|
send_mail( |
||||||
|
$mail_from, |
||||||
|
$mail_text, |
||||||
|
$AVE_Template->get_config_vars('COMMENT_SUBJECT_MAIL'), |
||||||
|
$mail_from, |
||||||
|
$mail_from_name, |
||||||
|
'text' |
||||||
|
); |
||||||
|
|
||||||
|
// Если данные были отправлены ajax-запросом, тогда выполняем автоматический показ комментария |
||||||
|
// на странице. |
||||||
|
if ($ajax) |
||||||
|
{ |
||||||
|
$new_comment['comment_published'] = strftime($AVE_Template->get_config_vars('COMMENT_DATE_TIME_FORMAT'), $new_comment['comment_published']); |
||||||
|
$subcomments[] = $new_comment; |
||||||
|
$AVE_Template->assign('subcomments', $subcomments); |
||||||
|
$AVE_Template->assign('theme', defined('THEME_FOLDER') ? THEME_FOLDER : DEFAULT_THEME_FOLDER); |
||||||
|
$AVE_Template->display($tpl_dir . $this->_comments_tree_sub_tpl); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
// $JsAfter = ($comment_status == 0) ? $AVE_Template->get_config_vars('COMMENT_AFTER_MODER') : $AVE_Template->get_config_vars('COMMENT_THANKYOU_TEXT'); |
||||||
|
// $AVE_Template->assign('JsAfter', $JsAfter); |
||||||
|
// $AVE_Template->display($tpl_dir . $this->_comment_thankyou_tpl); |
||||||
|
|
||||||
|
// Если же данные пришли НЕ ajax-запросом, тогда полностью обновляем страницу. |
||||||
|
if (! $ajax) header('Location:' . $link . '#end'); |
||||||
|
exit; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Метод, предназначенный для редактирования комментария в Публичной части |
||||||
|
* |
||||||
|
* @param int $comment_id - идентификатор комментария |
||||||
|
*/ |
||||||
|
function commentPostEdit($comment_id) |
||||||
|
{ |
||||||
|
global $AVE_DB; |
||||||
|
|
||||||
|
if (empty($_SESSION['user_id'])) exit; |
||||||
|
|
||||||
|
$comment_id = intval(preg_replace('/\D/', '', $comment_id)); |
||||||
|
|
||||||
|
// Выполняем запрос к БД и получаем всю информацию о комментарии, а также ряд значений из настроек модуля |
||||||
|
$row = $AVE_DB->Query(" |
||||||
|
SELECT |
||||||
|
-- msg.Id, |
||||||
|
-- msg.document_id, |
||||||
|
-- msg.comment_author_name, |
||||||
|
-- msg.comment_author_email, |
||||||
|
-- msg.comment_author_city, |
||||||
|
-- msg.comment_author_website, |
||||||
|
msg.parent_id, |
||||||
|
msg.comment_text, |
||||||
|
cmnt.comment_user_groups, |
||||||
|
cmnt.comment_max_chars, |
||||||
|
cmnt.comment_need_approve |
||||||
|
FROM |
||||||
|
" . PREFIX . "_module_comment_info AS msg, |
||||||
|
" . PREFIX . "_module_comments AS cmnt |
||||||
|
WHERE comment_active = '1' |
||||||
|
AND msg.Id = '" . $comment_id . "' |
||||||
|
" . ((UGROUP != 1) ? "AND comment_author_id = " . $_SESSION['user_id'] : '') . " |
||||||
|
")->FetchAssocArray(); |
||||||
|
|
||||||
|
// Если данные получены |
||||||
|
if ($row !== false) |
||||||
|
{ |
||||||
|
|
||||||
|
$comment_max_chars = ($row['comment_max_chars'] != '' && $row['comment_max_chars'] > 10) ? $row['comment_max_chars'] : 20; |
||||||
|
|
||||||
|
$comment_text = iconv('utf-8', 'cp1251', $_POST['text']); |
||||||
|
|
||||||
|
// Преобразуем все HTML сущности к числовым аналогам |
||||||
|
$comment_text = preg_replace_callback('/&([a-zA-Z][a-zA-Z0-9]{1,7});/', 'convert_entity', $comment_text); |
||||||
|
|
||||||
|
// Форматируем текст сообщения |
||||||
|
$comment_text = preg_replace('/&#x([0-9a-f]{1,7});/ei', 'chr(hexdec("\\1"))', $comment_text); |
||||||
|
$comment_text = preg_replace('/&#([0-9]{1,7});/e', 'chr("\\1")', $comment_text); |
||||||
|
|
||||||
|
$comment_text = stripslashes($comment_text); |
||||||
|
$comment_text = str_replace(array("<br>\n", "<br />\n", "<br/>\n"), "\n", $comment_text); |
||||||
|
// $comment_text = strip_tags($comment_text); |
||||||
|
$comment_text = mb_substr($comment_text, 0, $comment_max_chars-1); |
||||||
|
$message_length = mb_strlen($comment_text); |
||||||
|
$comment_text .= ($message_length > $comment_max_chars) ? '…' : ''; |
||||||
|
// $comment_text = pretty_chars(htmlspecialchars($comment_text, ENT_QUOTES)); |
||||||
|
|
||||||
|
// Если группа текущего пользователя совпадает с разрешенной группой в настройках модуля, тогда |
||||||
|
// выполняем запрос к БД на обновление информации. |
||||||
|
if (in_array(UGROUP, explode(',', $row['comment_user_groups'])) && $message_length > 3) |
||||||
|
{ |
||||||
|
$AVE_DB->Query(" |
||||||
|
UPDATE " . PREFIX . "_module_comment_info |
||||||
|
SET |
||||||
|
-- comment_author_name = '" . (empty($_POST['comment_author_name']) ? @addslashes($row['comment_author_name']) : $_POST['comment_author_name']) . "', |
||||||
|
-- comment_author_email = '" . (empty($_POST['comment_author_email']) ? @addslashes($row['comment_author_email']) : $_POST['comment_author_email']) . "', |
||||||
|
-- comment_author_city = '" . (empty($_POST['comment_author_city']) ? @addslashes($row['comment_author_city']) : $_POST['comment_author_city']) . "', |
||||||
|
-- comment_author_website = '" . (empty($_POST['comment_author_website']) ? @addslashes($row['comment_author_website']) : $_POST['comment_author_website']) . "', |
||||||
|
comment_changed = '" . time() . "', |
||||||
|
comment_status = '" . intval(!(bool)$row['comment_need_approve']) . "', |
||||||
|
comment_text = '" . addslashes($comment_text) . "' |
||||||
|
WHERE |
||||||
|
Id = '" . $comment_id . "' |
||||||
|
"); |
||||||
|
|
||||||
|
// if ($row['parent_id'] == 0) |
||||||
|
// echo nl2br(wordwrap($comment_text, 100, "\n", true)); |
||||||
|
// else |
||||||
|
// echo nl2br(wordwrap($comment_text, 90, "\n", true)); |
||||||
|
// echo nl2br(htmlspecialchars($comment_text, ENT_QUOTES)); |
||||||
|
|
||||||
|
// Преобразуем HTML теги в HTML сущности |
||||||
|
echo htmlspecialchars($comment_text, ENT_QUOTES); |
||||||
|
exit; |
||||||
|
} |
||||||
|
|
||||||
|
// if ($row['parent_id'] == 0) |
||||||
|
// echo nl2br(wordwrap($row['comment_text'], 100, "\n", true)); |
||||||
|
// else |
||||||
|
// echo nl2br(wordwrap($row['comment_text'], 90, "\n", true)); |
||||||
|
// echo nl2br(htmlspecialchars($row['comment_text'], ENT_QUOTES)); |
||||||
|
|
||||||
|
// Преобразуем HTML теги в HTML сущности |
||||||
|
echo htmlspecialchars($row['comment_text'], ENT_QUOTES); |
||||||
|
} |
||||||
|
exit; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Метод, предназначенный для удаления комментария. Если комментарий содержал какие-либо ответы на него, |
||||||
|
* то все ответы также будут удалены вместе с родительским комментарием. |
||||||
|
* |
||||||
|
* @param int $comment_id - идентификатор комментария |
||||||
|
*/ |
||||||
|
function commentPostDelete($comment_id) |
||||||
|
{ |
||||||
|
global $AVE_DB; |
||||||
|
|
||||||
|
// Выполняем запрос к БД на удаление родительского комментария |
||||||
|
$AVE_DB->Query(" |
||||||
|
DELETE |
||||||
|
FROM " . PREFIX . "_module_comment_info |
||||||
|
WHERE Id = '" . $comment_id . "' |
||||||
|
"); |
||||||
|
|
||||||
|
// Выполняем запрос к БД на удаление дочерних комментариев (ответов) |
||||||
|
$AVE_DB->Query(" |
||||||
|
DELETE |
||||||
|
FROM " . PREFIX . "_module_comment_info |
||||||
|
WHERE parent_id = '" . $comment_id . "' |
||||||
|
AND parent_id != 0 |
||||||
|
"); |
||||||
|
|
||||||
|
exit; |
||||||
|
} |
||||||
|
function commentAdminDelete($comment_id) |
||||||
|
{ |
||||||
|
global $AVE_DB; |
||||||
|
|
||||||
|
// Выполняем запрос к БД на удаление родительского комментария |
||||||
|
$AVE_DB->Query(" |
||||||
|
DELETE |
||||||
|
FROM " . PREFIX . "_module_comment_info |
||||||
|
WHERE Id = '" . $comment_id . "' |
||||||
|
"); |
||||||
|
|
||||||
|
// Выполняем запрос к БД на удаление дочерних комментариев (ответов) |
||||||
|
$AVE_DB->Query(" |
||||||
|
DELETE |
||||||
|
FROM " . PREFIX . "_module_comment_info |
||||||
|
WHERE parent_id = '" . $comment_id . "' |
||||||
|
AND parent_id != 0 |
||||||
|
"); |
||||||
|
header('Location:index.php?do=modules&action=modedit&mod=comment&moduleaction=1&cp= . SESSION'); |
||||||
|
exit; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Метод, предназначенный для вывода детальной информации об авторе комментария |
||||||
|
* |
||||||
|
* @param string $tpl_dir - путь к шаблонам модуля |
||||||
|
*/ |
||||||
|
function commentPostInfoShow($tpl_dir) |
||||||
|
{ |
||||||
|
global $AVE_DB, $AVE_Template; |
||||||
|
|
||||||
|
// Получаем полную информацию о комментарии |
||||||
|
$row = $AVE_DB->Query(" |
||||||
|
SELECT * |
||||||
|
FROM " . PREFIX . "_module_comment_info |
||||||
|
WHERE Id = '" . (int)$_REQUEST['Id'] . "' |
||||||
|
")->FetchAssocArray(); |
||||||
|
|
||||||
|
// Преобразуем адрес сайта к формату ссылки |
||||||
|
$row['comment_author_website'] = str_replace('http://', '', $row['comment_author_website']); |
||||||
|
$row['comment_author_website'] = ($row['comment_author_website'] != '') ? '<a target="_blank" href="http://' . $row['comment_author_website'] . '">' . $row['comment_author_website'] .'</a>' : ''; |
||||||
|
|
||||||
|
// Выполняем запрос к БД на получение количества всех комментариев, оставленных данным пользователем |
||||||
|
$row['num'] = $AVE_DB->Query(" |
||||||
|
SELECT COUNT(*) |
||||||
|
FROM " . PREFIX . "_module_comment_info |
||||||
|
WHERE comment_author_id = '" . $row['comment_author_id'] . "' |
||||||
|
AND comment_author_id != 0 |
||||||
|
")->GetCell(); |
||||||
|
|
||||||
|
// Отображаем окно с информацией |
||||||
|
$AVE_Template->assign('c', $row); |
||||||
|
$AVE_Template->display($tpl_dir . $this->_postinfo_tpl); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Метод, предназначенный для управления запретом или разрешением отвечать на комментарии |
||||||
|
* |
||||||
|
* @param int $comment_id - идентификатор комментария |
||||||
|
* @param string $comment_status - {lock|unlock} признак запрета/разрешения |
||||||
|
*/ |
||||||
|
function commentReplyStatusSet($comment_id, $comment_status = 'lock') |
||||||
|
{ |
||||||
|
global $AVE_DB; |
||||||
|
|
||||||
|
$AVE_DB->Query(" |
||||||
|
UPDATE " . PREFIX . "_module_comment_info |
||||||
|
SET comment_status = '" . (($comment_status == 'lock') ? 0 : 1) . "' |
||||||
|
WHERE Id = '" . $comment_id . "' |
||||||
|
"); |
||||||
|
|
||||||
|
exit; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Метод, предназначенный для управления запретом или разрешением комментировать документ |
||||||
|
* |
||||||
|
* @param int $document_id - идентификатор документа |
||||||
|
* @param string $comment_status - {close|open} признак запрета/разрешения |
||||||
|
*/ |
||||||
|
function commentStatusSet($document_id, $comment_status = 'open') |
||||||
|
{ |
||||||
|
global $AVE_DB; |
||||||
|
|
||||||
|
$AVE_DB->Query(" |
||||||
|
UPDATE " . PREFIX . "_module_comment_info |
||||||
|
SET comments_close = '" . (($comment_status == 'open') ? 0 : 1) . "' |
||||||
|
WHERE document_id = '" . $document_id . "' |
||||||
|
"); |
||||||
|
|
||||||
|
exit; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Следующие методы описывают работу модуля в Административной части сайта. |
||||||
|
*/ |
||||||
|
|
||||||
|
/** |
||||||
|
* Метод, предназначенный для вывода списка всех комментариев в Административной части. |
||||||
|
* |
||||||
|
* @param string $tpl_dir - путь к шаблонам модуля |
||||||
|
*/ |
||||||
|
function commentAdminListShow($tpl_dir) |
||||||
|
{ |
||||||
|
global $AVE_DB, $AVE_Template; |
||||||
|
|
||||||
|
// Получаем общее количество комментариев |
||||||
|
$num = $AVE_DB->Query("SELECT COUNT(*) FROM " . PREFIX . "_module_comment_info")->GetCell(); |
||||||
|
|
||||||
|
// Определяем количество страниц, учитывая параметр _limit, который опроеделяет количество |
||||||
|
// комментариев отображаемых на одной странице |
||||||
|
@$seiten = @ceil($num / $this->_limit); |
||||||
|
$start = get_current_page() * $this->_limit - $this->_limit; |
||||||
|
|
||||||
|
$docs = array(); |
||||||
|
|
||||||
|
$def_sort = 'ORDER BY doc.Id DESC'; |
||||||
|
$def_nav = ''; |
||||||
|
|
||||||
|
// Определяем условия сортировки комментариев |
||||||
|
if (!empty($_REQUEST['sort'])) |
||||||
|
{ |
||||||
|
switch ($_REQUEST['sort']) |
||||||
|
{ |
||||||
|
case 'document_desc': |
||||||
|
$def_sort = 'ORDER BY CId ASC'; |
||||||
|
$def_nav = '&sort=document_desc'; |
||||||
|
break; |
||||||
|
|
||||||
|
case 'document': |
||||||
|
$def_sort = 'ORDER BY CId DESC'; |
||||||
|
$def_nav = '&sort=document'; |
||||||
|
break; |
||||||
|
|
||||||
|
case 'comment_desc': |
||||||
|
$def_sort = 'ORDER BY cmnt.comment_text ASC'; |
||||||
|
$def_nav = '&sort=comment_desc'; |
||||||
|
break; |
||||||
|
|
||||||
|
case 'comment': |
||||||
|
$def_sort = 'ORDER BY cmnt.comment_text DESC'; |
||||||
|
$def_nav = '&sort=comment'; |
||||||
|
break; |
||||||
|
|
||||||
|
case 'created_desc': |
||||||
|
$def_sort = 'ORDER BY cmnt.comment_published ASC'; |
||||||
|
$def_nav = '&sort=created_desc'; |
||||||
|
break; |
||||||
|
|
||||||
|
case 'created': |
||||||
|
$def_sort = 'ORDER BY cmnt.comment_published DESC'; |
||||||
|
$def_nav = '&sort=created'; |
||||||
|
break; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
// Выполняем запрос к БД на получение комметариев с учетом параметров сортировки и лимита. |
||||||
|
$sql = $AVE_DB->Query(" |
||||||
|
SELECT |
||||||
|
doc.Id, |
||||||
|
doc.document_title, |
||||||
|
cmnt.Id AS CId, |
||||||
|
cmnt.document_id, |
||||||
|
cmnt.comment_text, |
||||||
|
cmnt.comment_published, |
||||||
|
cmnt.comment_status |
||||||
|
FROM |
||||||
|
" . PREFIX . "_module_comment_info AS cmnt |
||||||
|
JOIN |
||||||
|
" . PREFIX . "_documents AS doc |
||||||
|
ON doc.Id = cmnt.document_id |
||||||
|
" . $def_sort . " |
||||||
|
LIMIT " . $start . "," . $this->_limit |
||||||
|
); |
||||||
|
|
||||||
|
while ($row = $sql->FetchAssocArray()) |
||||||
|
{ |
||||||
|
$row['Comments'] = $this->_commentPostCountGet($row['Id']); |
||||||
|
array_push($docs, $row); |
||||||
|
} |
||||||
|
|
||||||
|
// Если количество комментариев полученных из БД превышает допустимое на странице, тогда формируем |
||||||
|
// меню постраницной навигации |
||||||
|
if ($num > $this->_limit) |
||||||
|
{ |
||||||
|
$page_nav = ' <a class="pnav" href="index.php?do=modules&action=modedit&mod=comment&moduleaction=1&cp=' . SESSION . '&page={s}' . $def_nav . '">{t}</a> '; |
||||||
|
$page_nav = get_pagination($seiten, 'page', $page_nav); |
||||||
|
$AVE_Template->assign('page_nav', $page_nav); |
||||||
|
} |
||||||
|
|
||||||
|
// Передаем данные в шаблон для вывода и отображаем шаблон |
||||||
|
$AVE_Template->assign('docs', $docs); |
||||||
|
$AVE_Template->assign('content', $AVE_Template->fetch($tpl_dir . $this->_admin_comments_tpl)); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Метод, предназначенный для редактирования комментариев в Административной части. |
||||||
|
* |
||||||
|
* @param string $tpl_dir - путь к шаблонам модуля |
||||||
|
*/ |
||||||
|
function commentAdminPostEdit($tpl_dir) |
||||||
|
{ |
||||||
|
global $AVE_DB, $AVE_Template; |
||||||
|
|
||||||
|
// Выполняем запрос к БД на получение информации о редактируемом комментарии |
||||||
|
$row = $AVE_DB->Query(" |
||||||
|
SELECT * |
||||||
|
FROM " . PREFIX . "_module_comment_info |
||||||
|
WHERE Id = '" . (int)$_REQUEST['Id'] . "' |
||||||
|
LIMIT 1 |
||||||
|
")->FetchAssocArray(); |
||||||
|
|
||||||
|
// Если в запросе содержится подзапрос на сохранение данных (пользователь уже отредактировал комментарий |
||||||
|
// и нажал кнопку сохранить изменения), тогда выполняем запрос к БД на обновление информации. |
||||||
|
if (isset($_POST['sub']) && $_POST['sub'] == 'send' && false != $row) |
||||||
|
{ |
||||||
|
$AVE_DB->Query(" |
||||||
|
UPDATE " . PREFIX . "_module_comment_info |
||||||
|
SET |
||||||
|
comment_author_name = '" . htmlspecialchars($_POST['comment_author_name']) . "', |
||||||
|
comment_author_email = '" . htmlspecialchars($_POST['comment_author_email']) . "', |
||||||
|
comment_author_city = '" . htmlspecialchars($_POST['comment_author_city']) . "', |
||||||
|
comment_author_website = '" . htmlspecialchars($_POST['comment_author_website']) . "', |
||||||
|
comment_text = '" . htmlspecialchars($_POST['comment_text']) . "', |
||||||
|
comment_changed = '" . time() . "' |
||||||
|
WHERE |
||||||
|
Id = '" . (int)$_POST['Id'] . "' |
||||||
|
"); |
||||||
|
|
||||||
|
echo '<script>window.opener.location.reload();window.close();</script>'; |
||||||
|
|
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
// Если в первой выборке из БД мы получили нулевой результат, тогда генерируем сообщение с ошибкой |
||||||
|
if ($row == false) |
||||||
|
{ |
||||||
|
$AVE_Template->assign('editfalse', 1); |
||||||
|
} |
||||||
|
// в противном случае получаем список комментариев, у которых стоит запрет на ответы |
||||||
|
else |
||||||
|
{ |
||||||
|
$closed = $AVE_DB->Query(" |
||||||
|
SELECT comments_close |
||||||
|
FROM " . PREFIX . "_module_comment_info |
||||||
|
WHERE document_id = '" . (int)$_REQUEST['docid'] . "' |
||||||
|
LIMIT 1 |
||||||
|
")->GetCell(); |
||||||
|
|
||||||
|
$AVE_Template->assign('closed', $closed); |
||||||
|
$AVE_Template->assign('row', $row); |
||||||
|
$AVE_Template->assign('comment_max_chars', $this->_commentSettingsGet('comment_max_chars')); |
||||||
|
} |
||||||
|
|
||||||
|
// Отображаем шаблон |
||||||
|
$AVE_Template->assign('content', $AVE_Template->fetch($tpl_dir . $this->_admin_edit_link_tpl)); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Метод, предназначенный для управления настройками модуля |
||||||
|
* |
||||||
|
* @param string $tpl_dir - путь к шаблонам модуля |
||||||
|
*/ |
||||||
|
function commentAdminSettingsEdit($tpl_dir) |
||||||
|
{ |
||||||
|
global $AVE_DB, $AVE_Template; |
||||||
|
|
||||||
|
// Если в запросе содержится подзапрос на сохранение данных (пользователь нажал кнопку |
||||||
|
// сохранить изменения), тогда выполняем запрос к БД на обновление информации. |
||||||
|
|
||||||
|
if (isset($_REQUEST['sub']) && $_REQUEST['sub'] == 'save') |
||||||
|
{ |
||||||
|
$_POST['comment_max_chars'] = (empty($_POST['comment_max_chars']) || $_POST['comment_max_chars'] < 50) ? 50 : $_POST['comment_max_chars']; |
||||||
|
|
||||||
|
$AVE_DB->Query(" |
||||||
|
UPDATE " . PREFIX . "_module_comments |
||||||
|
SET |
||||||
|
comment_max_chars = '" . @(int)$_POST['comment_max_chars'] . "', |
||||||
|
comment_user_groups = '" . @implode(',', $_POST['comment_user_groups']) . "', |
||||||
|
comment_need_approve = '" . @(int)$_POST['comment_need_approve'] . "', |
||||||
|
comment_active = '" . @(int)$_POST['comment_active'] . "', |
||||||
|
comment_use_antispam = '" . @(int)$_POST['comment_use_antispam'] . "', |
||||||
|
comment_use_page_nav = '" . @(int)$_POST['comment_use_page_nav'] . "', |
||||||
|
comment_page_nav_count = '" . @(int)$_POST['comment_page_nav_count'] . "' |
||||||
|
WHERE |
||||||
|
Id = 1 |
||||||
|
"); |
||||||
|
} |
||||||
|
|
||||||
|
// Получаем список всех настроек модуля |
||||||
|
$row = $this->_commentSettingsGet(); |
||||||
|
$row['comment_user_groups'] = explode(',', $row['comment_user_groups']); |
||||||
|
|
||||||
|
// Передаем данные в шаблон и показываем страницу с настройками модуля |
||||||
|
$AVE_Template->assign($row); |
||||||
|
$AVE_Template->assign('content', $AVE_Template->fetch($tpl_dir . $this->_admin_settings_tpl)); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
?> |
@ -0,0 +1,8 @@ |
|||||||
|
<?php |
||||||
|
/** |
||||||
|
* Файл-заглушка, предназначенный для запрета показа списка файлов в текущей директории, |
||||||
|
* если через адресную строку браузера было прямое общращение к данной директории. |
||||||
|
*/ |
||||||
|
header('Location:/'); |
||||||
|
exit; |
||||||
|
?> |
@ -0,0 +1,162 @@ |
|||||||
|
/*Limit symbols*/ |
||||||
|
(function($){$.fn.extend({limit:function(limit,element){var interval,f;var self=$(this);$(this).focus(function(){interval=window.setInterval(substring,100)});$(this).blur(function(){clearInterval(interval);substring()});substringFunction="function substring(){ var val = $(self).val();var length = val.length;if(length > limit){$(self).val($(self).val().substring(0,limit));}";if(typeof element!='undefined')substringFunction+="if($(element).html() != limit-length){$(element).html((limit-length<=0)?'0':limit-length);}";substringFunction+="}";eval(substringFunction);substring()}})})(jQuery); |
||||||
|
|
||||||
|
function getCaptha(){ |
||||||
|
now = new Date(); |
||||||
|
$('#captcha img').attr('src', aveabspath+'inc/captcha.php?cd=' + now); |
||||||
|
}; |
||||||
|
|
||||||
|
function cAction(obj,action){ |
||||||
|
var cid = $(obj).parents('.mod_comment_box').attr('id'); |
||||||
|
if (action=='answer'){ |
||||||
|
$('#parent_id').val(cid); |
||||||
|
$('#mod_comment_new').insertAfter('#'+cid); |
||||||
|
return; |
||||||
|
} |
||||||
|
if (UGROUP==1){ |
||||||
|
$.get(aveabspath+'index.php',{ |
||||||
|
module: 'comment', |
||||||
|
action: action, |
||||||
|
docid: DOC_ID, |
||||||
|
Id: cid |
||||||
|
},function(){ |
||||||
|
if (action=='delete'){ |
||||||
|
$(obj).parents('.mod_comment_comment').eq(0).remove(); |
||||||
|
} |
||||||
|
if (action=='open'){ |
||||||
|
$(obj).unbind('click') |
||||||
|
.click(function(){cAction(obj,'close');}) |
||||||
|
.html(COMMENT_SITE_CLOSE); |
||||||
|
} |
||||||
|
if (action=='close'){ |
||||||
|
$(obj).unbind('click') |
||||||
|
.click(function(){cAction(obj,'open');}) |
||||||
|
.html(COMMENT_SITE_OPEN); |
||||||
|
} |
||||||
|
if (action=='unlock'){ |
||||||
|
$(obj).unbind('click') |
||||||
|
.click(function(){cAction(obj,'lock');}) |
||||||
|
.attr('title',COMMENT_LOCK_LINK) |
||||||
|
.find('img').attr('src',aveabspath+'modules/comment/templates/images/lock.gif'); |
||||||
|
} |
||||||
|
if (action=='lock'){ |
||||||
|
$(obj).unbind('click') |
||||||
|
.click(function(){cAction(obj,'unlock');}) |
||||||
|
.attr('title',COMMENT_UNLOCK_LINK) |
||||||
|
.find('img').attr('src',aveabspath+'modules/comment/templates/images/unlock.gif'); |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
function validate(formData,jqForm,options){ |
||||||
|
$('.alert').remove(); |
||||||
|
var form = jqForm[0]; |
||||||
|
if (!form.comment_author_name.value){ |
||||||
|
alert(COMMENT_ERROR_AUTHOR); |
||||||
|
$(form.comment_author_name).focus(); |
||||||
|
return false; |
||||||
|
} |
||||||
|
if (!form.comment_author_email.value){ |
||||||
|
alert(COMMENT_ERROR_EMAIL); |
||||||
|
$(form.comment_author_email).focus(); |
||||||
|
return false; |
||||||
|
} |
||||||
|
if (!form.comment_text.value){ |
||||||
|
alert(COMMENT_ERROR_TEXT); |
||||||
|
$(form.comment_text).focus(); |
||||||
|
return false; |
||||||
|
} |
||||||
|
if (IS_IM && !form.securecode.value){ |
||||||
|
alert(COMMENT_ERROR_CAPTCHA); |
||||||
|
$(form.securecode).focus(); |
||||||
|
return false; |
||||||
|
} |
||||||
|
return true; |
||||||
|
}; |
||||||
|
|
||||||
|
function setClickable(){ |
||||||
|
$('.editable_text').click(function(){ |
||||||
|
var cid = $(this).parents('.mod_comment_box').attr('id'); |
||||||
|
var revert = $(this).html(); |
||||||
|
var textarea = '<p><textarea rows="7" id="ta_'+cid+'" class="editable">'+revert+'</textarea></p>'; |
||||||
|
var charsLeft = '<p>'+COMMENT_CHARS_LEFT+' <span class="charsLeft" id="charsLeft_'+cid+'"></span></p>'; |
||||||
|
var buttonSave = '<input type="button" value="'+COMMENT_BUTTON_EDIT+'" class="button saveButton" /> '; |
||||||
|
var buttonReset = '<input type="button" value="'+COMMENT_BUTTON_CANCEL+'" class="button cancelButton" />'; |
||||||
|
$(this).after('<div class="box"><div class="block" id="forms"><fieldset><legend>'+COMMENT_EDIT_TITLE |
||||||
|
+'</legend>'+textarea+buttonSave+buttonReset+charsLeft+'</fieldset></div></div>').remove(); |
||||||
|
$('.saveButton').click(function(){saveChanges(this,false,cid);}); |
||||||
|
$('.cancelButton').click(function(){saveChanges(this,revert,cid);}); |
||||||
|
$('#ta_'+cid).limit(MAX_CHARS,'#charsLeft_'+cid); |
||||||
|
}) |
||||||
|
/*.addClass('tooltip')*/ |
||||||
|
.attr('title',COMMENT_EDIT_LINK) |
||||||
|
.mouseover(function(){$(this).addClass('editable');}) |
||||||
|
.mouseout(function(){$(this).removeClass('editable');}); |
||||||
|
$('#in_message').limit(MAX_CHARS,'#charsLeft_new'); |
||||||
|
$('.mod_comment_answer').click(function(){cAction(this,'answer');}); |
||||||
|
if (UGROUP == 1){ |
||||||
|
$('.mod_comment_delete').click(function(){cAction(this,'delete');}); |
||||||
|
$('.mod_comment_lock').click(function(){cAction(this,'lock');}); |
||||||
|
$('.mod_comment_unlock').click(function(){cAction(this,'unlock');}); |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
function saveChanges(obj,cancel,cid){ |
||||||
|
if (!cancel){ |
||||||
|
var t = $(obj).parent().children().children().val(); |
||||||
|
$.post(aveabspath+'index.php',{ |
||||||
|
module: 'comment', |
||||||
|
action: 'edit', |
||||||
|
Id: cid, |
||||||
|
text: t |
||||||
|
}, |
||||||
|
function(txt){ |
||||||
|
$(obj).parent().parent().parent().after('<div class="mod_comment_text editable_text">'+txt+'</div>').remove(); |
||||||
|
var now = new Date(); |
||||||
|
var date = now.toLocaleFormat(COMMENT_DATE_TIME_FORMAT); |
||||||
|
$('#'+cid).find('.mod_comment_changed').html(' ('+COMMENT_TEXT_CHANGED+' '+date+')'); |
||||||
|
setClickable(); |
||||||
|
}); |
||||||
|
} |
||||||
|
else { |
||||||
|
$(obj).parent().parent().parent().after('<div class="mod_comment_text editable_text">'+cancel+'</div>').remove(); |
||||||
|
setClickable(); |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
function displayNewComment(data){ |
||||||
|
if (data=='wrong_securecode'){ |
||||||
|
$('#captcha').after('<div class="alert alert-error">'+COMMENT_WRONG_CODE+'</div>'); |
||||||
|
$('#securecode').focus(); |
||||||
|
} |
||||||
|
else { |
||||||
|
$('#end'+$('#parent_id').val()).before(data); |
||||||
|
$('#parent_id').val(''); |
||||||
|
$('#mod_comment_new').insertAfter('#end').resetForm(); |
||||||
|
setClickable(); |
||||||
|
} |
||||||
|
getCaptha(); |
||||||
|
}; |
||||||
|
|
||||||
|
$(document).ready(function(){ |
||||||
|
$('#captcha img').click(function(){getCaptha();}); |
||||||
|
setClickable(); |
||||||
|
$('#mod_comment_new form').submit(function(){ |
||||||
|
$(this).ajaxSubmit({ |
||||||
|
url: aveabspath+'index.php?ajax=1', |
||||||
|
beforeSubmit: validate, |
||||||
|
success: displayNewComment, |
||||||
|
timeout: 3000 |
||||||
|
}); |
||||||
|
return false; |
||||||
|
}); |
||||||
|
$('#buttonReset').click(function(){ |
||||||
|
$('#parent_id').val(''); |
||||||
|
$('#mod_comment_new').insertAfter('#end').resetForm(); |
||||||
|
}); |
||||||
|
if (UGROUP==1){ |
||||||
|
$('#mod_comment_open').click(function(){cAction(this,'open');}); |
||||||
|
$('#mod_comment_close').click(function(){cAction(this,'close');}); |
||||||
|
} |
||||||
|
}); |
@ -0,0 +1,8 @@ |
|||||||
|
<?php |
||||||
|
/** |
||||||
|
* Файл-заглушка, предназначенный для запрета показа списка файлов в текущей директории, |
||||||
|
* если через адресную строку браузера было прямое общращение к данной директории. |
||||||
|
*/ |
||||||
|
header('Location:/'); |
||||||
|
exit; |
||||||
|
?> |
@ -0,0 +1,71 @@ |
|||||||
|
COMMENT_EDIT_TITLE = "Редактирование комментария" |
||||||
|
COMMENT_IS_CLOSED = "Редактирование не возможно, поскольку обсуждение закрыто." |
||||||
|
COMMENT_CLOSE_BUTTON = "Закрыть окно" |
||||||
|
COMMENT_EDIT_FALSE = "Извините, но вы не имеете прав для редактирования." |
||||||
|
COMMENT_YOUR_NAME = "* Имя:" |
||||||
|
COMMENT_YOUR_EMAIL = "* E-mail:" |
||||||
|
COMMENT_YOUR_SITE = "Веб-сайт:" |
||||||
|
COMMENT_YOUR_FROM = "Город:" |
||||||
|
COMMENT_YOUR_TEXT = "* Комментарий:" |
||||||
|
COMMENT_BUTTON_EDIT = "Сохранить изменения" |
||||||
|
COMMENT_BUTTON_CANCEL = "Отменить" |
||||||
|
COMMENT_BUTTON_RESET = "Очистить" |
||||||
|
COMMENT_NEW_TITLE = "Написать комментарий" |
||||||
|
COMMENT_NEW_CLOSED = "Извините, но Вы не можете добавить комментарий, поскольку обсуждение закрыто." |
||||||
|
COMMENT_NEW_FALSE = "Извините, но у Вас не достаточно прав для добавления комментария." |
||||||
|
COMMENT_CHARS_LEFT = "Количество оставшихся символов" |
||||||
|
COMMENT_BUTTON_ADD = "Добавить комментарий" |
||||||
|
COMMENT_INFO = "Информация о пользователе" |
||||||
|
COMMENT_USER_NAME = "Имя пользователя:" |
||||||
|
COMMENT_DATE_CREATE = "Опубликовано:" |
||||||
|
COMMENT_USER_EMAIL = "E-mail пользователя:" |
||||||
|
COMMENT_USER_SITE = "Личный сайт:" |
||||||
|
COMMENT_USER_FROM = "Откуда:" |
||||||
|
COMMENT_USER_COMMENTS = "Оставил комментариев:" |
||||||
|
COMMENT_THANKYOU_TITLE = "Спасибо за комментарий" |
||||||
|
COMMENT_THANKYOU_TEXT = "Ваш комментарий успешно добавлен." |
||||||
|
COMMENT_SITE_TITLE = "Комментарии пользователей" |
||||||
|
COMMENT_SITE_CLOSED = "(комментирование временно отключено)" |
||||||
|
COMMENT_SITE_ADD = "Добавить комментарий" |
||||||
|
COMMENT_LAST_COMMENT = "Последний комментарий" |
||||||
|
COMMENT_SITE_CLOSE = "Запретить комментирование" |
||||||
|
COMMENT_SITE_OPEN = "Разрешить комментирование" |
||||||
|
COMMENT_USER_ADD = "Опубликовано:" |
||||||
|
COMMENT_USER_TIME = "в" |
||||||
|
COMMENT_ANSWER_LINK = "Ответить на этот комментарий" |
||||||
|
COMMENT_EDIT_LINK = "Редактировать комментарий" |
||||||
|
COMMENT_LOCK_LINK = "Заблокировать ответы" |
||||||
|
COMMENT_DELETE_LINK = "Удалить комментарий" |
||||||
|
COMMENT_UNLOCK_LINK = "Разрешить ответы" |
||||||
|
COMMENT_TEXT_CHANGED = "Изменено:" |
||||||
|
COMMENT_TEXT_ANSWER = "» Ответил(а):" |
||||||
|
COMMENT_AFTER_MODER = "Ваш комментарий добавлен.<br />Прежде чем, он будет опубликован, он должен пройти проверку Администрацией сайта." |
||||||
|
COMMENT_MESSAGE_ADMIN = "На Вашем сайте добавлен новый комментарий:%N%%N%%COMMENT% %N%%N%Для просмотра комментария, перейдите по ссылке:%N%%PAGE%" |
||||||
|
COMMENT_SUBJECT_MAIL = "Добавлен новый комментарий" |
||||||
|
COMMENT_CHARSET_LEFT = "осталось символов" |
||||||
|
COMMENT_FORM_CODE = "Защитный код:" |
||||||
|
COMMENT_FORM_CODE_ENTER = "Введите код:" |
||||||
|
COMMENT_WRONG_CODE = "Указанный защитный код неверен." |
||||||
|
COMMENT_DATE_TIME_FORMAT = "%d-%m-%Y %H:%M" |
||||||
|
COMMENT_ERROR_AUTHOR = "Укажите Имя!" |
||||||
|
COMMENT_ERROR_EMAIL = "Укажите eMail!" |
||||||
|
COMMENT_ERROR_TEXT = "Напишите комментарий!" |
||||||
|
COMMENT_ERROR_CAPTCHA = "Укажите защитный код!" |
||||||
|
|
||||||
|
[admin] |
||||||
|
COMMENT_MODULE_NAME = "Комментарии" |
||||||
|
COMMENT_MODULE_COMENTS = "Список комментариев" |
||||||
|
COMMENT_MODULE_SETTINGS = "Настройки модуля" |
||||||
|
COMMENT_TEXT_COMMENT = "Комментарий" |
||||||
|
COMMENT_DATE_CREATE = "Дата создания" |
||||||
|
COMMENT_DOC_TITLE = "Документ" |
||||||
|
COMMENT_DATE_FORMAT = "%d/%m/%Y %H:%M" |
||||||
|
COMMENT_ENABLE_COMMENT = "Разрешить комментарии?" |
||||||
|
COMMENT_CHECK_ADMIN = "Опубликовывать только после проверки?" |
||||||
|
COMMENT_FOR_GROUPS = "Группы пользователей, которым разрешены комментарии:" |
||||||
|
COMMENT_MAX_CHARS = "Максимальное количество символов:" |
||||||
|
COMMENT_BUTTON_SAVE = "Сохранить настройки" |
||||||
|
COMMENT_EDIT = "Редактировать комментарий" |
||||||
|
COMMENT_SPAMPROTECT = "Защита от спама" |
||||||
|
COMMENT_USE_PAGE_NAV = "Использовать постраничную навигацию" |
||||||
|
COMMENT_PAGE_NAV_COUNT = "Кол-во комментариев на странице" |
@ -0,0 +1,169 @@ |
|||||||
|
<?php |
||||||
|
|
||||||
|
/** |
||||||
|
* AVE.cms - Модуль Комментарии |
||||||
|
* |
||||||
|
* @package AVE.cms |
||||||
|
* @subpackage module_Comment |
||||||
|
* @filesource |
||||||
|
*/ |
||||||
|
|
||||||
|
if(!defined('BASE_DIR')) exit; |
||||||
|
|
||||||
|
if (defined('ACP')) |
||||||
|
{ |
||||||
|
$modul['ModuleName'] = 'Комментарии'; |
||||||
|
$modul['ModuleSysName'] = 'comment'; |
||||||
|
$modul['ModuleVersion'] = '1.2.2a'; |
||||||
|
$modul['ModuleDescription'] = 'Данный модуль предназначен для организации системы комментариев для документов на сайте. Для того, чтобы использовать данный модуль, разместите системный тег <strong>[mod_comment]</strong> в нужном месте шаблона рубрики.'; |
||||||
|
$modul['ModuleAutor'] = 'AVE.CMS Team'; |
||||||
|
$modul['ModuleCopyright'] = '© 2007-2013 AVE.CMS'; |
||||||
|
$modul['ModuleIsFunction'] = 1; |
||||||
|
$modul['ModuleTemplate'] = 0; |
||||||
|
$modul['ModuleAdminEdit'] = 1; |
||||||
|
$modul['ModuleFunction'] = 'mod_comment'; |
||||||
|
$modul['ModuleTag'] = '[mod_comment]'; |
||||||
|
$modul['ModuleTagLink'] = null; |
||||||
|
$modul['ModuleAveTag'] = '#\\\[mod_comment]#'; |
||||||
|
$modul['ModulePHPTag'] = '<?php mod_comment(); ?>';
|
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Функция, предназначенная для вывода списка комментариев к данному документу. |
||||||
|
* Она будет выполнена при парсинге шаблона вместо системного тега [mod_comment]. |
||||||
|
*/ |
||||||
|
function mod_comment() |
||||||
|
{ |
||||||
|
global $AVE_Template; |
||||||
|
|
||||||
|
// Подключаем класс и создаем объект дял работы |
||||||
|
require_once(BASE_DIR . '/modules/comment/class.comment.php'); |
||||||
|
$comment = new Comment; |
||||||
|
|
||||||
|
// Подключаем языковые файлы |
||||||
|
$tpl_dir = BASE_DIR . '/modules/comment/templates/'; |
||||||
|
$lang_file = BASE_DIR . '/modules/comment/lang/' . $_SESSION['user_language'] . '.txt'; |
||||||
|
$AVE_Template->config_load($lang_file); |
||||||
|
|
||||||
|
// Обращаемся к методу commentListShow() и отображаем список комментариев |
||||||
|
$comment->commentListShow($tpl_dir); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Следующий раздел описывает правила поведения модуля и его функциональные возможности |
||||||
|
* только при работе в Публичной части сайта. |
||||||
|
*/ |
||||||
|
|
||||||
|
|
||||||
|
// Определяем, что мы не находимся в Панели управления и в строке запроса происходит обращение именно к данному модулю |
||||||
|
if (!defined('ACP') && isset($_REQUEST['module']) && $_REQUEST['module'] == 'comment' && isset($_REQUEST['action'])) |
||||||
|
{ |
||||||
|
// Подключаем основной класс и создаем объект |
||||||
|
require_once(BASE_DIR . '/modules/comment/class.comment.php'); |
||||||
|
$comment = new Comment; |
||||||
|
|
||||||
|
// Определяем директори, где хранятся файлы с шаблонами модуля и подключаем языковые переменные |
||||||
|
$tpl_dir = BASE_DIR . '/modules/comment/templates/'; |
||||||
|
$lang_file = BASE_DIR . '/modules/comment/lang/' . $_SESSION['user_language'] . '.txt'; |
||||||
|
$AVE_Template->config_load($lang_file); |
||||||
|
|
||||||
|
// Определяем, какой параметр пришел из строки запроса браузера |
||||||
|
switch($_REQUEST['action']) |
||||||
|
{ |
||||||
|
// Если form, тогда отображаем форму для добавления нового комментария |
||||||
|
case 'form': |
||||||
|
$comment->commentPostFormShow($tpl_dir); |
||||||
|
break; |
||||||
|
|
||||||
|
// Если comment, тогда производим запись нового комментария в БД |
||||||
|
case 'comment': |
||||||
|
$comment->commentPostNew($tpl_dir); |
||||||
|
break; |
||||||
|
|
||||||
|
// Если edit, тогда открываем форму для редактирования текста комментария |
||||||
|
case 'edit': |
||||||
|
$comment->commentPostEdit((int)$_REQUEST['Id']); |
||||||
|
break; |
||||||
|
|
||||||
|
|
||||||
|
// Если delete, тогда удаляем комментарий |
||||||
|
case 'delete': |
||||||
|
if (UGROUP==1) |
||||||
|
{ |
||||||
|
$comment->commentPostDelete((int)$_REQUEST['Id']); |
||||||
|
} |
||||||
|
break; |
||||||
|
|
||||||
|
// Если postinfo, тогда отображаем окно с информацией об авторе комментария |
||||||
|
case 'postinfo': |
||||||
|
$comment->commentPostInfoShow($tpl_dir); |
||||||
|
break; |
||||||
|
|
||||||
|
// Если lock или unlock, тогда запрещаем или разрешаем оставлять ответы для имеющихся комментариев |
||||||
|
case 'lock': |
||||||
|
case 'unlock': |
||||||
|
if (UGROUP==1) |
||||||
|
{ |
||||||
|
$comment->commentReplyStatusSet((int)$_REQUEST['Id'], $_REQUEST['action']); |
||||||
|
} |
||||||
|
break; |
||||||
|
|
||||||
|
|
||||||
|
// Если open или close, тогда разрешаем или запрещаем полное комментирование документа |
||||||
|
case 'open': |
||||||
|
case 'close': |
||||||
|
if (UGROUP==1) |
||||||
|
{ |
||||||
|
$comment->commentStatusSet((int)$_REQUEST['docid'], $_REQUEST['action']); |
||||||
|
} |
||||||
|
break; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Следующий раздел описывает правила поведения модуля и его функциональные возможности |
||||||
|
* только при работе в Административной части сайта. |
||||||
|
*/ |
||||||
|
if (defined('ACP') && !empty($_REQUEST['moduleaction'])) |
||||||
|
{ |
||||||
|
// Подключаем основной класс и создаем объект |
||||||
|
require_once(BASE_DIR . '/modules/comment/class.comment.php'); |
||||||
|
$comment = new Comment; |
||||||
|
|
||||||
|
// Определяем директори, где хранятся файлы с шаблонами модуля и подключаем языковые переменные |
||||||
|
$tpl_dir = BASE_DIR . '/modules/comment/templates/'; |
||||||
|
$lang_file = BASE_DIR . '/modules/comment/lang/' . $_SESSION['admin_language'] . '.txt'; |
||||||
|
$AVE_Template->config_load($lang_file, 'admin'); |
||||||
|
|
||||||
|
|
||||||
|
// Определяем, какой параметр пришел из строки запроса браузера |
||||||
|
switch ($_REQUEST['moduleaction']) |
||||||
|
{ |
||||||
|
|
||||||
|
// Если 1, тогда отображаем список всех комментариев с постраничной навигацией |
||||||
|
case '1': |
||||||
|
$comment->commentAdminListShow($tpl_dir); |
||||||
|
break; |
||||||
|
|
||||||
|
// Если admin_edit, тогда открываем форму для редактирования выбранного комментария |
||||||
|
case 'admin_edit': |
||||||
|
$comment->commentAdminPostEdit($tpl_dir); |
||||||
|
break; |
||||||
|
|
||||||
|
// Если settings, тогда открываем страницу с настройками данного модуля |
||||||
|
case 'settings': |
||||||
|
// Подключаем файл класса для работы с пользователями, создаем объект и получаем список |
||||||
|
// всех групп пользователей, имеющихся в системе. |
||||||
|
require_once(BASE_DIR . '/class/class.user.php'); |
||||||
|
$AVE_User = new AVE_User; |
||||||
|
$AVE_Template->assign('groups', $AVE_User->userGroupListGet()); |
||||||
|
|
||||||
|
$comment->commentAdminSettingsEdit($tpl_dir); |
||||||
|
break; |
||||||
|
case 'admin_del': |
||||||
|
$comment->commentAdminDelete((int)$_REQUEST['Id']); |
||||||
|
break; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
?> |
@ -0,0 +1,87 @@ |
|||||||
|
<?php |
||||||
|
|
||||||
|
/** |
||||||
|
* AVE.cms - Модуль Комментарии |
||||||
|
* |
||||||
|
* Данный файл является частью модуля "Комментарии" и содержит mySQL-запросы |
||||||
|
* к базе данных при операцих установки, обновления и удаления модуля через Панель управления. |
||||||
|
* |
||||||
|
* @package AVE.cms |
||||||
|
* @subpackage module_Comment |
||||||
|
* @since 1.4 |
||||||
|
* @filesource |
||||||
|
*/ |
||||||
|
|
||||||
|
$module_sql_install = array(); |
||||||
|
$module_sql_deinstall = array(); |
||||||
|
$module_sql_update = array(); |
||||||
|
|
||||||
|
$module_sql_deinstall[] = "DROP TABLE IF EXISTS `CPPREFIX_module_comments`;"; |
||||||
|
$module_sql_deinstall[] = "DROP TABLE IF EXISTS `CPPREFIX_module_comment_info`;"; |
||||||
|
|
||||||
|
$module_sql_install[] = "CREATE TABLE `CPPREFIX_module_comments` ( |
||||||
|
`Id` tinyint(1) unsigned NOT NULL auto_increment, |
||||||
|
`comment_max_chars` smallint(3) unsigned NOT NULL default '1000', |
||||||
|
`comment_user_groups` text NOT NULL, |
||||||
|
`comment_need_approve` enum('0','1') NOT NULL default '0', |
||||||
|
`comment_active` enum('1','0') NOT NULL default '1', |
||||||
|
`comment_use_antispam` enum('1','0') NOT NULL default '1', |
||||||
|
`comment_use_page_nav` enum('1','0') NOT NULL default '1', |
||||||
|
`comment_page_nav_count` varchar(5) NOT NULL, |
||||||
|
PRIMARY KEY (`Id`) |
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=utf8;"; |
||||||
|
|
||||||
|
$module_sql_install[] = "CREATE TABLE `CPPREFIX_module_comment_info` ( |
||||||
|
`Id` int(10) unsigned NOT NULL auto_increment, |
||||||
|
`parent_id` int(10) unsigned NOT NULL default '0', |
||||||
|
`document_id` int(10) unsigned NOT NULL default '0', |
||||||
|
`comment_author_name` varchar(255) NOT NULL, |
||||||
|
`comment_author_id` int(10) unsigned NOT NULL default '0', |
||||||
|
`comment_author_email` varchar(255) NOT NULL, |
||||||
|
`comment_author_city` varchar(255) NOT NULL, |
||||||
|
`comment_author_website` varchar(255) NOT NULL, |
||||||
|
`comment_author_ip` varchar(15) NOT NULL, |
||||||
|
`comment_published` int(10) unsigned NOT NULL default '0', |
||||||
|
`comment_changed` int(10) unsigned NOT NULL default '0', |
||||||
|
`comment_text` text NOT NULL, |
||||||
|
`comment_status` tinyint(1) unsigned NOT NULL default '1', |
||||||
|
`comments_close` tinyint(1) unsigned NOT NULL default '0', |
||||||
|
PRIMARY KEY (`Id`), |
||||||
|
KEY `document_id` (`document_id`), |
||||||
|
KEY `parent_id` (`parent_id`), |
||||||
|
KEY `comment_status` (`comment_status`) |
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0;"; |
||||||
|
|
||||||
|
$module_sql_install[] = "INSERT INTO `CPPREFIX_module_comments` VALUES (1, 1000, '1,3', '0', '1', '1' , '0', '');"; |
||||||
|
|
||||||
|
// Обновление модуля |
||||||
|
$module_sql_update[] = " |
||||||
|
UPDATE |
||||||
|
`CPPREFIX_module` |
||||||
|
SET |
||||||
|
ModuleAveTag = '" . $modul['ModuleAveTag'] . "', |
||||||
|
ModulePHPTag = '" . $modul['ModulePHPTag'] . "', |
||||||
|
ModuleVersion = '" . $modul['ModuleVersion'] . "' |
||||||
|
WHERE |
||||||
|
ModuleSysName = '" . $modul['ModuleSysName'] . "' |
||||||
|
LIMIT 1; |
||||||
|
"; |
||||||
|
|
||||||
|
$module_sql_update[] = " |
||||||
|
ALTER TABLE |
||||||
|
`CPPREFIX_module_comments` |
||||||
|
ADD |
||||||
|
`comment_use_page_nav` ENUM('0','1') NOT NULL DEFAULT '1' |
||||||
|
AFTER |
||||||
|
`comment_use_antispam`; |
||||||
|
"; |
||||||
|
|
||||||
|
$module_sql_update[] = " |
||||||
|
ALTER TABLE |
||||||
|
`CPPREFIX_module_comments` |
||||||
|
ADD |
||||||
|
`comment_page_nav_count` VARCHAR(5) NOT NULL |
||||||
|
AFTER |
||||||
|
`comment_use_page_nav`; |
||||||
|
"; |
||||||
|
?> |
@ -0,0 +1,83 @@ |
|||||||
|
<script type="text/javascript" language="JavaScript"> |
||||||
|
$(document).ready(function(){ldelim} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{rdelim}); |
||||||
|
</script> |
||||||
|
|
||||||
|
<div class="title"><h5>{#COMMENT_MODULE_NAME#}</h5></div> |
||||||
|
|
||||||
|
<div class="widget" style="margin-top: 0px;"> |
||||||
|
<div class="body"> |
||||||
|
{#COMMENT_MODULE_COMENTS#} |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
<div class="breadCrumbHolder module"> |
||||||
|
<div class="breadCrumb module"> |
||||||
|
<ul> |
||||||
|
<li class="firstB"><a href="index.php" title="{#MAIN_PAGE#}">{#MAIN_PAGE#}</a></li> |
||||||
|
<li><a href="index.php?do=modules&cp={$sess}">{#MODULES_SUB_TITLE#}</a></li> |
||||||
|
<li>{#COMMENT_MODULE_NAME#}</li> |
||||||
|
<li><strong class="code">{#COMMENT_MODULE_COMENTS#}</strong></li> |
||||||
|
</ul> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
<div class="widget first"> |
||||||
|
<div class="head"> |
||||||
|
<h5 class="iFrames">{#COMMENT_MODULE_COMENTS#}</h5> |
||||||
|
<div class="num"><a class="basicNum" href="index.php?do=modules&action=modedit&mod=comment&moduleaction=settings&cp={$sess}">{#COMMENT_MODULE_SETTINGS#}</a></div> |
||||||
|
</div> |
||||||
|
|
||||||
|
<table cellpadding="0" cellspacing="0" width="100%" class="tableStatic"> |
||||||
|
<col width="20"> |
||||||
|
<col> |
||||||
|
<col width="120"> |
||||||
|
<col width="120"> |
||||||
|
<col width="20"> |
||||||
|
<col width="20"> |
||||||
|
<thead> |
||||||
|
<tr> |
||||||
|
<td></td> |
||||||
|
<td><a href="index.php?do=modules&action=modedit&mod=comment&moduleaction=1&cp={$sess}&page={$smarty.request.page|escape|default:1}&sort=comment{if $smarty.request.sort=='comment'}_desc{/if}">{#COMMENT_TEXT_COMMENT#}</a> </td> |
||||||
|
<td><a href="index.php?do=modules&action=modedit&mod=comment&moduleaction=1&cp={$sess}&page={$smarty.request.page|escape|default:1}&sort=created{if $smarty.request.sort=='created'}_desc{/if}">{#COMMENT_DATE_CREATE#}</a> </td> |
||||||
|
<td><a href="index.php?do=modules&action=modedit&mod=comment&moduleaction=1&cp={$sess}&page={$smarty.request.page|escape|default:1}&sort=document{if $smarty.request.sort=='document'}_desc{/if}">{#COMMENT_DOC_TITLE#}</a> </td> |
||||||
|
<td colspan="2">Действия</td> |
||||||
|
</tr> |
||||||
|
</thead> |
||||||
|
<tbody> |
||||||
|
{if $docs} |
||||||
|
{foreach from=$docs item=doc} |
||||||
|
<tr> |
||||||
|
<td>{if $doc.comment_status != "0"}<span class="icon_sprite ico_ok"></span>{else}<span class="icon_sprite ico_blanc"></span>{/if}</td> |
||||||
|
<td><a class="topDir" title="{$doc.comment_text|escape|truncate:'1000'}" target="_blank" href="../index.php?id={$doc.document_id}&doc=impressum&subaction=showonly&comment_id={$doc.CId}#{$doc.CId}">{$doc.comment_text|escape|truncate:'100'}</a></td> |
||||||
|
<td class="date_text dgrey">{$doc.comment_published|date_format:$TIME_FORMAT|pretty_date}</td> |
||||||
|
<td><a target="_blank" href="../index.php?id={$doc.document_id}">{$doc.document_title|escape}</a> <span class="date_text dgrey">({$doc.Comments})</span></td> |
||||||
|
<td width="20"><a class="topleftDir icon_sprite ico_edit" title="{#COMMENT_EDIT#}" href="javascript:void(0);" onClick="windowOpen('index.php?do=modules&action=modedit&mod=comment&moduleaction=admin_edit&pop=1&docid={$doc.document_id}&Id={$doc.CId}','700','700','1');"></a></td> |
||||||
|
<td width="20"><a class="topleftDir icon_sprite ico_delete ConfirmDelete" title="{#COMMENT_DELETE_LINK#}" dir="{#COMMENT_DELETE_LINK#}" name="{#COMMENT_DELETE_LINK#}" href="index.php?do=modules&action=modedit&mod=comment&moduleaction=admin_del&Id={$doc.CId}"></a></td> |
||||||
|
</tr> |
||||||
|
{/foreach} |
||||||
|
{else} |
||||||
|
<tr> |
||||||
|
<td colspan="6"> |
||||||
|
<ul class="messages"> |
||||||
|
<li class="highlight yellow"><strong>Сообщение:</strong><br />Нет комментариев.</li> |
||||||
|
</ul> |
||||||
|
</td> |
||||||
|
</tr> |
||||||
|
{/if} |
||||||
|
</tbody> |
||||||
|
</table> |
||||||
|
</div> |
||||||
|
|
||||||
|
{if $page_nav} |
||||||
|
<div class="pagination"> |
||||||
|
<ul class="pages"> |
||||||
|
{$page_nav} |
||||||
|
</ul> |
||||||
|
</div> |
||||||
|
{/if} |
@ -0,0 +1,112 @@ |
|||||||
|
<script type="text/javascript" language="JavaScript"> |
||||||
|
{literal} |
||||||
|
$(document).ready(function(){ |
||||||
|
|
||||||
|
var left = {/literal}{$comment_max_chars}{literal} |
||||||
|
$('#text_counter').text(left); |
||||||
|
|
||||||
|
$('#in_message').keyup(function () { |
||||||
|
|
||||||
|
left = {/literal}{$comment_max_chars}{literal} - $(this).val().length; |
||||||
|
|
||||||
|
if(left < 0){ |
||||||
|
$('#text_counter').addClass("overlimit"); |
||||||
|
} |
||||||
|
if(left >= 0){ |
||||||
|
$('#text_counter').removeClass("overlimit"); |
||||||
|
} |
||||||
|
|
||||||
|
$('#text_counter').text(left); |
||||||
|
}); |
||||||
|
|
||||||
|
}); |
||||||
|
{/literal} |
||||||
|
</script> |
||||||
|
|
||||||
|
<div class="widget first"></div> |
||||||
|
|
||||||
|
<div class="title"><h5>{#COMMENT_MODULE_NAME#}</h5></div> |
||||||
|
|
||||||
|
<div class="widget" style="margin-top: 0px;"> |
||||||
|
<div class="body"> |
||||||
|
{#COMMENT_EDIT_TITLE#} |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
<div class="breadCrumbHolder module"> |
||||||
|
<div class="breadCrumb module"> |
||||||
|
<ul> |
||||||
|
<li class="firstB"><a href="index.php" title="{#MAIN_PAGE#}">{#MAIN_PAGE#}</a></li> |
||||||
|
<li>{#COMMENT_MODULE_NAME#}</li> |
||||||
|
<li>{#COMMENT_EDIT_TITLE#}</li> |
||||||
|
</ul> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
<div class="widget first"> |
||||||
|
{if $closed == 1 && $smarty.const.UGROUP != 1} |
||||||
|
|
||||||
|
{#COMMENT_IS_CLOSED#} |
||||||
|
|
||||||
|
<p><input onclick="window.close();" type="button" class="basicBtn" value="{#COMMENT_CLOSE_BUTTON#}" /></p> |
||||||
|
{else} |
||||||
|
{if $editfalse==1} |
||||||
|
{#COMMENT_EDIT_FALSE#} |
||||||
|
{else} |
||||||
|
<form method="post" action="index.php" class="mainForm"> |
||||||
|
<table cellpadding="0" cellspacing="0" width="100%" class="tableStatic"> |
||||||
|
<col width="150"> |
||||||
|
{if $smarty.const.UGROUP == 1} |
||||||
|
<tr> |
||||||
|
<td>{#COMMENT_YOUR_NAME#}</td> |
||||||
|
<td><input name="comment_author_name" type="text" id="in_author_name" style="width:250px" value="{$row.comment_author_name|stripslashes|escape}" /></td> |
||||||
|
</tr> |
||||||
|
|
||||||
|
<tr> |
||||||
|
<td>{#COMMENT_YOUR_EMAIL#}</td> |
||||||
|
<td><input name="comment_author_email" type="text" id="in_author_email" style="width:250px" value="{$row.comment_author_email|stripslashes|escape}" /></td> |
||||||
|
</tr> |
||||||
|
{else} |
||||||
|
<input type="hidden" name="comment_author_name" value="{$row.comment_author_name|stripslashes|escape}" /> |
||||||
|
<input type="hidden" name="comment_author_email" value="{$row.comment_author_email|stripslashes|escape}" /> |
||||||
|
{/if} |
||||||
|
<tr> |
||||||
|
<td>{#COMMENT_YOUR_SITE#}</td> |
||||||
|
<td><input name="comment_author_website" type="text" id="in_author_website" style="width:250px" value="{$row.comment_author_website|stripslashes|escape}" /></td> |
||||||
|
</tr> |
||||||
|
|
||||||
|
<tr> |
||||||
|
<td>{#COMMENT_YOUR_FROM#}</td> |
||||||
|
<td><input name="comment_author_city" type="text" id="in_author_city" style="width:250px" value="{$row.comment_author_city|stripslashes|escape}" /></td> |
||||||
|
</tr> |
||||||
|
|
||||||
|
<tr> |
||||||
|
<td>{#COMMENT_YOUR_TEXT#}</td> |
||||||
|
<td> |
||||||
|
<div class="pr12"><textarea style="width:100%; height:170px" name="comment_text" id="in_message">{$row.comment_text}</textarea></div> |
||||||
|
<span id="text_counter"></span> {#COMMENT_CHARS_LEFT#} |
||||||
|
</td> |
||||||
|
</tr> |
||||||
|
|
||||||
|
<input type="hidden" name="do" value="modules" /> |
||||||
|
<input type="hidden" name="action" value="modedit" /> |
||||||
|
<input type="hidden" name="mod" value="comment" /> |
||||||
|
<input type="hidden" name="moduleaction" value="admin_edit" /> |
||||||
|
<input type="hidden" name="sub" value="send" /> |
||||||
|
<input type="hidden" name="Id" value="{$smarty.request.Id|escape}" /> |
||||||
|
|
||||||
|
<tr> |
||||||
|
<td colspan="3"> |
||||||
|
<input type="submit" class="basicBtn" value="{#COMMENT_BUTTON_EDIT#}" /> |
||||||
|
<input type="reset" class="basicBtn" value="{#COMMENT_BUTTON_RESET#}" /> |
||||||
|
</td> |
||||||
|
</tr> |
||||||
|
|
||||||
|
</table> |
||||||
|
|
||||||
|
|
||||||
|
</form> |
||||||
|
{/if} |
||||||
|
{/if} |
||||||
|
|
||||||
|
</div> |
@ -0,0 +1,88 @@ |
|||||||
|
<div class="title"><h5>{#COMMENT_MODULE_NAME#}</h5></div> |
||||||
|
|
||||||
|
<div class="widget" style="margin-top: 0px;"> |
||||||
|
<div class="body"> |
||||||
|
{#COMMENT_MODULE_SETTINGS#} |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
<div class="breadCrumbHolder module"> |
||||||
|
<div class="breadCrumb module"> |
||||||
|
<ul> |
||||||
|
<li class="firstB"><a href="index.php" title="{#MAIN_PAGE#}">{#MAIN_PAGE#}</a></li> |
||||||
|
<li><a href="index.php?do=modules&cp={$sess}">{#MODULES_SUB_TITLE#}</a></li> |
||||||
|
<li><a href="index.php?do=modules&action=modedit&mod=comment&moduleaction=1&cp={$sess}">{#COMMENT_MODULE_NAME#}</a></li> |
||||||
|
<li><strong class="code">{#COMMENT_MODULE_SETTINGS#}</strong></li> |
||||||
|
</ul> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
<div class="widget first"> |
||||||
|
<div class="head"> |
||||||
|
<h5 class="iFrames">{#COMMENT_MODULE_SETTINGS#}</h5> |
||||||
|
<div class="num"><a class="basicNum" href="index.php?do=modules&action=modedit&mod=comment&moduleaction=1&cp={$sess}">{#COMMENT_MODULE_COMENTS#}</a></div> |
||||||
|
</div> |
||||||
|
|
||||||
|
<form action="index.php?do=modules&action=modedit&mod=comment&moduleaction=settings&cp={$sess}&sub=save" method="post" class="mainForm"> |
||||||
|
<table cellpadding="0" cellspacing="0" width="100%" class="tableStatic"> |
||||||
|
<tr class="noborder"> |
||||||
|
<td width="240">{#COMMENT_ENABLE_COMMENT#}</td> |
||||||
|
<td><input name="comment_active" type="checkbox" value="1" {if $comment_active=='1'}checked{/if} /></td> |
||||||
|
</tr> |
||||||
|
|
||||||
|
<tr> |
||||||
|
<td width="240">{#COMMENT_CHECK_ADMIN#}</td> |
||||||
|
<td> |
||||||
|
<input name="comment_need_approve" type="checkbox" value="1" {if $comment_need_approve=='1'}checked{/if} /> |
||||||
|
</td> |
||||||
|
</tr> |
||||||
|
|
||||||
|
<tr> |
||||||
|
<td width="240">{#COMMENT_SPAMPROTECT#}</td> |
||||||
|
<td> |
||||||
|
<input name="comment_use_antispam" type="checkbox" value="1" {if $comment_use_antispam=='1'}checked{/if} /> |
||||||
|
</td> |
||||||
|
</tr> |
||||||
|
|
||||||
|
<tr> |
||||||
|
<td width="240">{#COMMENT_USE_PAGE_NAV#}</td> |
||||||
|
<td> |
||||||
|
<input name="comment_use_page_nav" type="checkbox" value="1" {if $comment_use_page_nav=='1'}checked{/if} /> |
||||||
|
</td> |
||||||
|
</tr> |
||||||
|
|
||||||
|
<tr> |
||||||
|
<td width="240">{#COMMENT_PAGE_NAV_COUNT#}</td> |
||||||
|
<td> |
||||||
|
<input name="comment_page_nav_count" type="text" value="{$comment_page_nav_count}" size="4" style="width: 50px;" /> |
||||||
|
</td> |
||||||
|
</tr> |
||||||
|
|
||||||
|
<tr> |
||||||
|
<td width="240">{#COMMENT_FOR_GROUPS#}</td> |
||||||
|
<td> |
||||||
|
<select name="comment_user_groups[]" multiple="multiple" size="5" style="width:300px"> |
||||||
|
{foreach from=$groups item=g} |
||||||
|
{assign var='sel' value=''} |
||||||
|
{if $g->user_group} |
||||||
|
{if (in_array($g->user_group,$comment_user_groups)) } |
||||||
|
{assign var='sel' value='selected'} |
||||||
|
{/if} |
||||||
|
{/if} |
||||||
|
<option value="{$g->user_group}" {$sel}>{$g->user_group_name|escape}</option> |
||||||
|
{/foreach} |
||||||
|
</select> |
||||||
|
</td> |
||||||
|
</tr> |
||||||
|
<tr> |
||||||
|
<td width="240">{#COMMENT_MAX_CHARS#}</td> |
||||||
|
<td><input name="comment_max_chars" type="text" id="comment_max_chars" value="{$comment_max_chars}" size="5" maxlength="5" maxlength="4" style="width: 50px;" /></td> |
||||||
|
</tr> |
||||||
|
<tr> |
||||||
|
<td colspan="2"><input type="submit" value="{#COMMENT_BUTTON_SAVE#}" class="basicBtn" /></td> |
||||||
|
</tr> |
||||||
|
</table> |
||||||
|
|
||||||
|
</form> |
||||||
|
</div> |
@ -0,0 +1,71 @@ |
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml"> |
||||||
|
|
||||||
|
<head> |
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" /> |
||||||
|
<title>{#COMMENT_EDIT_TITLE#}</title> |
||||||
|
<link href="templates/{$theme}/css/style.css" rel="stylesheet" type="text/css" media="screen" /> |
||||||
|
<script src="templates/{$theme}/js/common.js" type="text/javascript"></script> |
||||||
|
</head> |
||||||
|
|
||||||
|
<body id="body_popup"> |
||||||
|
<div id="module_header"><h2>{#COMMENT_EDIT_TITLE#}</h2></div> |
||||||
|
|
||||||
|
<div id="module_content"> |
||||||
|
{if $closed == 1 && $smarty.const.UGROUP != 1} |
||||||
|
{#COMMENT_IS_CLOSED#} |
||||||
|
<p> </p> |
||||||
|
<p><input onclick="window.close();" type="button" class="button" value="{#COMMENT_CLOSE_BUTTON#}" /></p> |
||||||
|
{else} |
||||||
|
{if $editfalse==1} |
||||||
|
{#COMMENT_EDIT_FALSE#} |
||||||
|
{else} |
||||||
|
<form method="post"> |
||||||
|
{if $smarty.const.UGROUP==1} |
||||||
|
<fieldset> |
||||||
|
<legend><label for="in_author_name">{#COMMENT_YOUR_NAME#}</label></legend> |
||||||
|
<input name="comment_author_name" type="text" id="in_author_name" style="width:250px" value="{$row.comment_author_name|stripslashes|escape}" /> |
||||||
|
</fieldset> |
||||||
|
|
||||||
|
<fieldset> |
||||||
|
<legend><label for="in_author_email">{#COMMENT_YOUR_EMAIL#}</label></legend> |
||||||
|
<input name="comment_author_email" type="text" id="in_author_email" style="width:250px" value="{$row.comment_author_email|stripslashes|escape}" /> |
||||||
|
</fieldset> |
||||||
|
{else} |
||||||
|
<input name="comment_author_name" type="hidden" id="in_author_name" value="{$row.comment_author_name|stripslashes|escape}" /> |
||||||
|
<input name="comment_author_email" type="hidden" id="in_author_email" value="{$row.comment_author_email|stripslashes|escape}" /> |
||||||
|
{/if} |
||||||
|
|
||||||
|
<fieldset> |
||||||
|
<legend><label for="in_author_website">{#COMMENT_YOUR_SITE#}</label></legend> |
||||||
|
<input name="comment_author_website" type="text" id="in_author_website" style="width:250px" value="{$row.comment_author_website|stripslashes|escape}" /> |
||||||
|
</fieldset> |
||||||
|
|
||||||
|
<fieldset> |
||||||
|
<legend><label for="in_author_city">{#COMMENT_YOUR_FROM#}</label></legend> |
||||||
|
<input name="comment_author_city" type="text" id="in_author_city" style="width:250px" value="{$row.comment_author_city|stripslashes|escape}" /> |
||||||
|
</fieldset> |
||||||
|
|
||||||
|
<fieldset> |
||||||
|
<legend><label for="in_message">{#COMMENT_YOUR_TEXT#}</label></legend> |
||||||
|
<textarea onkeyup="javascript:textCounter(this.form.comment_text,this.form.charleft,{$row.comment_max_chars});" onkeydown="javascript:textCounter(this.form.comment_text,this.form.charleft,{$row.comment_max_chars});" style="width:98%; height:170px" name="comment_text" id="in_message">{$row.comment_text}</textarea> |
||||||
|
<input type="text" size="6" name="charleft" value="{$row.comment_max_chars}" /> {#COMMENT_CHARS_LEFT#} |
||||||
|
</fieldset> |
||||||
|
|
||||||
|
<input name="theme" type="hidden" id="theme" value="{$smarty.request.theme|escape}" /> |
||||||
|
<input name="module" type="hidden" value="comment" /> |
||||||
|
<input name="action" type="hidden" value="edit" /> |
||||||
|
<input name="pop" type="hidden" value="1" /> |
||||||
|
<input name="sub" type="hidden" value="send" /> |
||||||
|
<input name="Id" type="hidden" value="{$smarty.request.Id|escape}" /> |
||||||
|
|
||||||
|
<p> |
||||||
|
<input type="submit" class="button" value="{#COMMENT_BUTTON_EDIT#}" /> |
||||||
|
<input type="reset" class="button" /> |
||||||
|
</p> |
||||||
|
</form> |
||||||
|
{/if} |
||||||
|
{/if} |
||||||
|
</div> |
||||||
|
</body> |
||||||
|
</html> |
@ -0,0 +1,84 @@ |
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml"> |
||||||
|
|
||||||
|
<head> |
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" /> |
||||||
|
<title>{#COMMENT_NEW_TITLE#}</title> |
||||||
|
<link href="templates/{$theme}/css/style.css" rel="stylesheet" type="text/css" media="screen" /> |
||||||
|
<script src="templates/{$theme}/js/common.js" type="text/javascript"></script> |
||||||
|
</head> |
||||||
|
|
||||||
|
<body id="body_popup"> |
||||||
|
|
||||||
|
<div id="module_header"><h2>{#COMMENT_NEW_TITLE#}</h2></div> |
||||||
|
|
||||||
|
<div id="module_content"> |
||||||
|
{if $closed==1} |
||||||
|
{#COMMENT_NEW_CLOSED#} |
||||||
|
<p> </p> |
||||||
|
<p><input onclick="window.close();" type="button" class="button" value="{#COMMENT_CLOSE_BUTTON#}" /></p> |
||||||
|
{else} |
||||||
|
{if !$cancomment} |
||||||
|
<p id="module_intro">{#COMMENT_NEW_FALSE#}</p> |
||||||
|
<p> </p> |
||||||
|
<p><input onclick="window.close();" type="button" class="button" value="{#COMMENT_CLOSE_BUTTON#}" /></p> |
||||||
|
{else} |
||||||
|
<form method="post"> |
||||||
|
{if $smarty.session.user_name != ''} |
||||||
|
<input name="comment_author_name" type="hidden" value="{$smarty.session.user_name|escape}" /> |
||||||
|
{else} |
||||||
|
<fieldset> |
||||||
|
<legend><label for="in_author_name">{#COMMENT_YOUR_NAME#}</label></legend> |
||||||
|
<input name="comment_author_name" type="text" id="in_author_name" style="width:250px" value="{$smarty.session.user_name|escape}" /> |
||||||
|
</fieldset> |
||||||
|
<br /> |
||||||
|
{/if} |
||||||
|
|
||||||
|
{if $smarty.session.user_email != ''} |
||||||
|
<input name="comment_author_email" type="hidden" value="{$smarty.session.user_email|escape}" /> |
||||||
|
{else} |
||||||
|
<fieldset> |
||||||
|
<legend><label for="in_author_email">{#COMMENT_YOUR_EMAIL#}</label></legend> |
||||||
|
<input name="comment_author_email" type="text" id="in_author_email" style="width:250px" value="" /> |
||||||
|
</fieldset> |
||||||
|
<br /> |
||||||
|
{/if} |
||||||
|
|
||||||
|
<fieldset> |
||||||
|
<legend><label for="in_author_website">{#COMMENT_YOUR_SITE#}</label></legend> |
||||||
|
<input name="comment_author_website" type="text" id="in_author_website" style="width:250px" /> |
||||||
|
</fieldset> |
||||||
|
<br /> |
||||||
|
|
||||||
|
<fieldset> |
||||||
|
<legend><label for="in_author_city">{#COMMENT_YOUR_FROM#}</label></legend> |
||||||
|
<input name="comment_author_city" type="text" id="in_author_city" style="width:250px" /> |
||||||
|
</fieldset> |
||||||
|
<br /> |
||||||
|
|
||||||
|
<fieldset> |
||||||
|
<legend><label for="in_message">{#COMMENT_YOUR_TEXT#}</label></legend> |
||||||
|
<textarea onkeyup="javascript:textCounter(this.form.comment_text,this.form.charleft,{$comment_max_chars});" onkeydown="javascript:textCounter(this.form.comment_text,this.form.charleft,{$comment_max_chars});" style="width:98%; height:165px" name="comment_text" id="in_message"></textarea> |
||||||
|
<input type="text" size="6" name="charleft" value="{$comment_max_chars}" /> {#COMMENT_CHARSET_LEFT#} |
||||||
|
</fieldset> |
||||||
|
|
||||||
|
<input name="theme" type="hidden" id="theme" value="{$smarty.request.theme|escape}" /> |
||||||
|
<input name="module" type="hidden" value="comment" /> |
||||||
|
<input name="action" type="hidden" value="comment" /> |
||||||
|
<input name="pop" type="hidden" id="pop" value="1" /> |
||||||
|
<input name="sub" type="hidden" id="sub" value="send" /> |
||||||
|
<input name="page" type="hidden" value="{$smarty.request.page|escape}" /> |
||||||
|
<input name="document_id" type="hidden" value="{$smarty.request.docid|escape}" /> |
||||||
|
<input name="parent_id" type="hidden" value="{$smarty.request.parent|escape|default:0}" /> |
||||||
|
|
||||||
|
<p> |
||||||
|
<input type="submit" class="button" value="{#COMMENT_BUTTON_ADD#}" /> |
||||||
|
<input type="reset" class="button" /> |
||||||
|
</p> |
||||||
|
</form> |
||||||
|
{/if} |
||||||
|
{/if} |
||||||
|
</div> |
||||||
|
|
||||||
|
</body> |
||||||
|
</html> |
@ -0,0 +1,54 @@ |
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml"> |
||||||
|
|
||||||
|
<head> |
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" /> |
||||||
|
<title>{#COMMENT_INFO#}</title> |
||||||
|
<link href="templates/{$smarty.request.theme|escape}/css/style.css" rel="stylesheet" type="text/css" media="screen" /> |
||||||
|
</head> |
||||||
|
|
||||||
|
<body id="body_popup"> |
||||||
|
|
||||||
|
<div id="module_header"><h2>{#COMMENT_INFO#}</h2></div> |
||||||
|
|
||||||
|
<div id="module_content"> |
||||||
|
<table width="100%" border="0" cellspacing="1" cellpadding="4"> |
||||||
|
<tr> |
||||||
|
<td width="160">{#COMMENT_USER_NAME#}</td> |
||||||
|
<td>{$c.comment_author_name|stripslashes|escape}</td> |
||||||
|
</tr> |
||||||
|
|
||||||
|
<tr> |
||||||
|
<td width="160">{#COMMENT_DATE_CREATE#}</td> |
||||||
|
<td>{$c.comment_published|date_format:$TIME_FORMAT|pretty_date}</td> |
||||||
|
</tr> |
||||||
|
|
||||||
|
<tr> |
||||||
|
<td width="160">{#COMMENT_USER_EMAIL#}</td> |
||||||
|
<td> |
||||||
|
{assign var=comment_author_email value=$c.comment_author_email} |
||||||
|
{mailto address="$comment_author_email" encode="javascript_charcode"} |
||||||
|
</td> |
||||||
|
</tr> |
||||||
|
|
||||||
|
<tr> |
||||||
|
<td width="160">{#COMMENT_USER_SITE#}</td> |
||||||
|
<td>{$c.comment_author_website|default:'-'}</td> |
||||||
|
</tr> |
||||||
|
|
||||||
|
<tr> |
||||||
|
<td width="160">{#COMMENT_USER_FROM#}</td> |
||||||
|
<td>{$c.comment_author_city|stripslashes|escape|default:'-'}</td> |
||||||
|
</tr> |
||||||
|
|
||||||
|
<tr> |
||||||
|
<td width="160">{#COMMENT_USER_COMMENTS#}</td> |
||||||
|
<td>{$c.num|default:'-'}</td> |
||||||
|
</tr> |
||||||
|
</table> |
||||||
|
|
||||||
|
<p><input onclick="window.close();" type="button" class="button" value="{#COMMENT_CLOSE_BUTTON#}" /></p> |
||||||
|
</div> |
||||||
|
|
||||||
|
</body> |
||||||
|
</html> |
@ -0,0 +1,24 @@ |
|||||||
|
<table width="100%" border="0" cellspacing="0" cellpadding="0" class="mod_comment_box"> |
||||||
|
<tr> |
||||||
|
<td class="mod_comment_header"> |
||||||
|
<div class="mod_comment_author"> |
||||||
|
<a name="{$comment_id}"></a>{#COMMENT_USER_ADD#} <a title="{#COMMENT_INFO#}" href="javascript:void(0);" onclick="popup('index.php?module=comment&action=postinfo&pop=1&Id={$comment_id}&theme={$theme}','comment','500','300','1');">{$comment_author_name}</a> • {$smarty.now|date_format:$TIME_FORMAT|pretty_date}{if $smarty.const.UGROUP==1} • IP:{$comment_author_ip}{/if} |
||||||
|
</div> |
||||||
|
|
||||||
|
{if $smarty.const.UGROUP==1} |
||||||
|
<div class="mod_comment_icons"> |
||||||
|
<a class="" title="{#COMMENT_DELETE_LINK#}" href="javascript:void(0);" onclick="cAction(this, 'delete', '{$comment_id}');"><img src="modules/comment/templates/images/trash.gif" alt="" border="0" /></a> |
||||||
|
{if $comment_status!=1} |
||||||
|
<a class="" title="{#COMMENT_UNLOCK_LINK#}" href="javascript:void(0);" onclick="cAction(this, 'unlock', '{$comment_id}');"><img src="modules/comment/templates/images/unlock.gif" alt="" border="0" /></a> |
||||||
|
{else} |
||||||
|
<a class="" title="{#COMMENT_LOCK_LINK#}" href="javascript:void(0);" onclick="cAction(this, 'unlock', '{$comment_id}');"><img src="modules/comment/templates/images/lock.gif" alt="" border="0" /></a> |
||||||
|
{/if} |
||||||
|
</div> |
||||||
|
{/if} |
||||||
|
</td> |
||||||
|
</tr> |
||||||
|
|
||||||
|
<tr> |
||||||
|
<td id="id_{$comment_id}" class="mod_comment_text{if $smarty.session.user_id} editable_text{/if}">{$comment_text}</td> |
||||||
|
</tr> |
||||||
|
</table> |
@ -0,0 +1,15 @@ |
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml"> |
||||||
|
<head> |
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" /> |
||||||
|
<title>{#COMMENT_THANKYOU_TITLE#}</title> |
||||||
|
<link href="templates/{$smarty.request.theme}/css/style.css" rel="stylesheet" type="text/css" media="screen" /> |
||||||
|
</head> |
||||||
|
<body id="body_popup"> |
||||||
|
<div id="module_header"><h2>{#COMMENT_THANKYOU_TITLE#}</h2></div> |
||||||
|
<div id="module_content"> |
||||||
|
<p id="module_intro">{$JsAfter}</p> |
||||||
|
<input onclick="window.close();" type="button" class="button" value="{#COMMENT_CLOSE_BUTTON#}" /> |
||||||
|
</div> |
||||||
|
</body> |
||||||
|
</html> |
@ -0,0 +1,122 @@ |
|||||||
|
{if $display_comments==1}<br /> |
||||||
|
|
||||||
|
<h6>{#COMMENT_SITE_TITLE#}{if $closed==1} {#COMMENT_SITE_CLOSED#}{/if}</h6> |
||||||
|
|
||||||
|
{if $cancomment==1 && $closed!=1} |
||||||
|
<a href="javascript:void(0);" onclick="popup('index.php?docid={$smarty.request.id|escape}&module=comment&action=form&pop=1&theme={$theme}&page={$page}','comment','500','600','1')">{#COMMENT_SITE_ADD#}</a> | |
||||||
|
{/if} |
||||||
|
|
||||||
|
<a href="#end">{#COMMENT_LAST_COMMENT#}</a> |
||||||
|
|
||||||
|
{if $smarty.const.UGROUP == 1} |
||||||
|
| |
||||||
|
{if $closed==1} |
||||||
|
<a href="javascript:void(0);" onclick="popup('index.php?document_id={$smarty.request.id|escape}&module=comment&action=open&pop=1','comment','50','50','1');">{#COMMENT_SITE_OPEN#}</a> |
||||||
|
{else} |
||||||
|
<a href="javascript:void(0);" onclick="popup('index.php?document_id={$smarty.request.id|escape}&module=comment&action=close&pop=1','comment','50','50','1');">{#COMMENT_SITE_CLOSE#}</a> |
||||||
|
{/if} |
||||||
|
{/if}<br /> |
||||||
|
<br /> |
||||||
|
|
||||||
|
{foreach from=$comments.0 item=c name=co} |
||||||
|
{if $smarty.request.subaction=='showonly' && $smarty.request.comment_id==$c.Id} |
||||||
|
<div class="mod_comment_highlight"> |
||||||
|
{/if} |
||||||
|
|
||||||
|
<table width="100%" border="0" cellspacing="0" cellpadding="0" class="mod_comment_box"> |
||||||
|
<tr> |
||||||
|
<td class="mod_comment_header"> |
||||||
|
<div class="mod_comment_author"> |
||||||
|
<a name="{$c.Id}"></a>{#COMMENT_USER_ADD#} <a title="{#COMMENT_INFO#}" href="javascript:void(0);" onclick="popup('index.php?module=comment&action=postinfo&pop=1&Id={$c.Id}&theme={$theme}','comment','500','300','1');">{$c.comment_author_name}{*|stripslashes|escape:html*}</a> • {$c.comment_published}{if $smarty.const.UGROUP==1} • IP:{$c.comment_author_ip}{/if} |
||||||
|
</div> |
||||||
|
|
||||||
|
<div class="mod_comment_icons"> |
||||||
|
<a class="popup" href="javascript:void(0);" onclick="popup('index.php?parent={$c.Id}&docid={$smarty.request.id|escape}&module=comment&action=form&pop=1&theme={$theme}&page={$page}','comment','500','520','1');"> |
||||||
|
<img src="modules/comment/templates/images/reply.gif" alt="" border="0" /><span>{#COMMENT_ANSWER_LINK#}</span> |
||||||
|
</a> |
||||||
|
|
||||||
|
{if $smarty.const.UGROUP==1 || $c.comment_author_id==$smarty.session.user_id} |
||||||
|
<a class="popup" href="javascript:void(0);" onclick="popup('index.php?parent={$c.Id}&docid={$smarty.request.id|escape}&module=comment&action=edit&pop=1&Id={$c.Id}&theme={$theme}','comment','500','620','1');"> |
||||||
|
<img src="modules/comment/templates/images/edit.gif" alt="" border="0" /><span>{#COMMENT_EDIT_LINK#}</span></a> |
||||||
|
{/if} |
||||||
|
|
||||||
|
{if $smarty.const.UGROUP==1} |
||||||
|
<a class="popup" href="javascript:void(0);" onclick="popup('index.php?parent={$c.Id}&docid={$smarty.request.id|escape}&module=comment&action=delete&pop=1&Id={$c.Id}','comment','100','100','1');"> |
||||||
|
<img src="modules/comment/templates/images/trash.gif" alt="" border="0" /><span>{#COMMENT_DELETE_LINK#}</span> |
||||||
|
</a> |
||||||
|
{if $c.comment_status!=1} |
||||||
|
<a class="popup" href="javascript:void(0);" onclick="popup('index.php?parent={$c.Id}&docid={$smarty.request.id|escape}&module=comment&action=unlock&pop=1&Id={$c.Id}','comment','100','100','1');"> |
||||||
|
<img src="modules/comment/templates/images/unlock.gif" alt="" border="0" /><span>{#COMMENT_UNLOCK_LINK#}</span> |
||||||
|
</a> |
||||||
|
{else} |
||||||
|
<a class="popup" href="javascript:void(0);" onclick="popup('index.php?parent={$c.Id}&docid={$smarty.request.id|escape}&module=comment&action=lock&pop=1&Id={$c.Id}','comment','100','100','1');"> |
||||||
|
<img src="modules/comment/templates/images/lock.gif" alt="" border="0" /><span>{#COMMENT_LOCK_LINK#}</span> |
||||||
|
</a> |
||||||
|
{/if} |
||||||
|
{/if} |
||||||
|
</div> |
||||||
|
</td> |
||||||
|
</tr> |
||||||
|
|
||||||
|
<tr> |
||||||
|
<td class="mod_comment_text"> |
||||||
|
{$c.comment_text} |
||||||
|
{if $c.comment_changed > 1}<br /><span class="mod_comment_changed">{#COMMENT_TEXT_CHANGED#} {$c.comment_changed}</span>{/if} |
||||||
|
</td> |
||||||
|
</tr> |
||||||
|
</table> |
||||||
|
|
||||||
|
{if $smarty.request.subaction=='showonly' && $smarty.request.comment_id==$c.Id} |
||||||
|
</div> |
||||||
|
{/if} |
||||||
|
|
||||||
|
{foreach from=$comments[$c.Id] item=sc} |
||||||
|
<div class="mod_comment_ans_box"> |
||||||
|
{if $smarty.request.subaction=='showonly' && $smarty.request.comment_id==$sc.Id} |
||||||
|
<div class="mod_comment_highlight"> |
||||||
|
{/if} |
||||||
|
|
||||||
|
<table width="100%" border="0" cellpadding="0" cellspacing="0" class="mod_comment_box"> |
||||||
|
<tr> |
||||||
|
<td class="mod_comment_header"> |
||||||
|
<div class="mod_comment_author"> |
||||||
|
<a name="{$sc.Id}"></a>{#COMMENT_TEXT_ANSWER#} <a title="{#COMMENT_INFO#}" href="javascript:void(0);" onclick="popup('index.php?module=comment&action=postinfo&pop=1&Id={$sc.Id}&theme={$theme}','comment','500','300','1');">{$sc.comment_author_name}{*|stripslashes|escape:html*}</a> ({$sc.comment_published}){if $smarty.const.UGROUP==1} IP:{$sc.comment_author_ip}{/if} |
||||||
|
</div> |
||||||
|
|
||||||
|
<div class="mod_comment_icons"> |
||||||
|
{if $smarty.const.UGROUP==1 || $sc.comment_author_id==$smarty.session.user_id} |
||||||
|
<a title="{#COMMENT_EDIT_LINK#}" href="javascript:void(0);" onclick="popup('index.php?parent={$sc.Id}&docid={$smarty.request.id|escape}&module=comment&action=edit&pop=1&Id={$sc.Id}&theme={$theme}','comment','500','620','1');"><img src="modules/comment/templates/images/edit.gif" alt="" border="0" /></a> |
||||||
|
{/if} |
||||||
|
|
||||||
|
{if $smarty.const.UGROUP==1} |
||||||
|
<a title="{#COMMENT_DELETE_LINK#}" href="javascript:void(0);" onclick="popup('index.php?parent={$sc.Id}&docid={$smarty.request.id|escape}&module=comment&action=delete&pop=1&Id={$sc.Id}','comment','100','100','1');"><img src="modules/comment/templates/images/trash.gif" alt="" border="0" /></a> |
||||||
|
{if $sc.comment_status!=1} |
||||||
|
<a title="{#COMMENT_UNLOCK_LINK#}" href="javascript:void(0);" onclick="popup('index.php?parent={$sc.Id}&docid={$smarty.request.id|escape}&module=comment&action=unlock&pop=1&Id={$sc.Id}','comment','100','100','1');"><img src="modules/comment/templates/images/unlock.gif" alt="" border="0" /></a> |
||||||
|
{else} |
||||||
|
<a title="{#COMMENT_LOCK_LINK#}" href="javascript:void(0);" onclick="popup('index.php?parent={$sc.Id}&docid={$smarty.request.id|escape}&module=comment&action=lock&pop=1&Id={$sc.Id}','comment','100','100','1');"><img src="modules/comment/templates/images/lock.gif" alt="" border="0" /></a> |
||||||
|
{/if} |
||||||
|
{else} |
||||||
|
|
||||||
|
{/if} |
||||||
|
</div> |
||||||
|
</td> |
||||||
|
</tr> |
||||||
|
|
||||||
|
<tr> |
||||||
|
<td class="mod_comment_text"> |
||||||
|
{$sc.comment_text} |
||||||
|
{if $sc.comment_changed > 1}<br /><span class="mod_comment_changed">{#COMMENT_TEXT_CHANGED#} {$sc.comment_changed}</span>{/if} |
||||||
|
</td> |
||||||
|
</tr> |
||||||
|
</table> |
||||||
|
|
||||||
|
{if $smarty.request.subaction=='showonly' && $smarty.request.comment_id==$sc.Id} |
||||||
|
</div> |
||||||
|
{/if} |
||||||
|
</div> |
||||||
|
{/foreach} |
||||||
|
{/foreach} |
||||||
|
|
||||||
|
{if $smarty.foreach.co.last}<a name="end"></a>{/if} |
||||||
|
|
||||||
|
{/if} |
@ -0,0 +1,110 @@ |
|||||||
|
{if $display_comments==1} |
||||||
|
<h3>{#COMMENT_SITE_TITLE#}{if $closed==1 && $smarty.const.UGROUP!=1} <small>{#COMMENT_SITE_CLOSED#}</small>{/if}</h3> |
||||||
|
|
||||||
|
<a href="#end">{#COMMENT_SITE_ADD#}</a> |
||||||
|
|
||||||
|
{if $smarty.const.UGROUP==1} |
||||||
|
| |
||||||
|
{if $closed==1} |
||||||
|
<a id="mod_comment_open" href="javascript:void(0);">{#COMMENT_SITE_OPEN#}</a> |
||||||
|
{else} |
||||||
|
<a id="mod_comment_close" href="javascript:void(0);">{#COMMENT_SITE_CLOSE#}</a> |
||||||
|
{/if}<br /> |
||||||
|
{/if} |
||||||
|
|
||||||
|
{if $comments[0]} |
||||||
|
{include file="$subtpl" subcomments=$comments[0]} |
||||||
|
{/if} |
||||||
|
|
||||||
|
<a id="end"></a> |
||||||
|
|
||||||
|
{if $closed==1 && $smarty.const.UGROUP!=1} |
||||||
|
<p>{#COMMENT_NEW_CLOSED#}</p> |
||||||
|
{elseif $cancomment!=1 && $smarty.const.UGROUP!=1} |
||||||
|
<p>{#COMMENT_NEW_FALSE#}</p> |
||||||
|
{else} |
||||||
|
<div id="mod_comment_new" class="box"> |
||||||
|
<h3>{#COMMENT_NEW_TITLE#}</h3> |
||||||
|
|
||||||
|
<div class="block" id="forms"> |
||||||
|
<fieldset> |
||||||
|
<form method="post" action="{$ABS_PATH}"> |
||||||
|
{if $smarty.session.user_group != '2'} |
||||||
|
<input name="comment_author_name" type="hidden" id="in_author_name" value="{$smarty.session.user_name|escape|stripslashes}" /> |
||||||
|
{else} |
||||||
|
<p> |
||||||
|
<label>{#COMMENT_YOUR_NAME#}</label> |
||||||
|
<input name="comment_author_name" type="text" id="in_author_name" value="{$smarty.request.comment_author_name|escape|stripslashes}" /> |
||||||
|
</p> |
||||||
|
{/if} |
||||||
|
{if $smarty.session.user_email != ''} |
||||||
|
<input name="comment_author_email" type="hidden" id="in_author_email" value="{$smarty.session.user_email|escape|stripslashes}" /> |
||||||
|
{else} |
||||||
|
<input name="comment_author_email" class="span4" placeholder="{#COMMENT_YOUR_EMAIL#}" type="text" id="in_author_email" value="{$smarty.request.comment_author_email|escape|stripslashes}" /> |
||||||
|
{/if} |
||||||
|
|
||||||
|
<input name="comment_author_website" class="span4" placeholder="{#COMMENT_YOUR_SITE#}" type="text" id="in_author_website" $value="{$smarty.request.comment_author_website|escape|stripslashes}" /> |
||||||
|
|
||||||
|
<input name="comment_author_city" class="span4" placeholder="{#COMMENT_YOUR_FROM#}" type="text" id="in_author_city" $value="{$smarty.request.comment_author_city|escape|stripslashes}" /> |
||||||
|
|
||||||
|
|
||||||
|
<textarea class="span8" placeholder="{#COMMENT_YOUR_TEXT#}" rows="8" name="comment_text" id="in_message"></textarea> |
||||||
|
<p> |
||||||
|
<label> </label> |
||||||
|
{#COMMENT_CHARS_LEFT#} - <span class="charsLeft" id="charsLeft_new"></span> |
||||||
|
</p> |
||||||
|
{if $im} |
||||||
|
<p> |
||||||
|
<label>{#COMMENT_FORM_CODE#}</label> |
||||||
|
<span id="captcha"><img src="{$ABS_PATH}inc/captcha.php" alt="" width="120" height="60" border="0" /></span> |
||||||
|
</p> |
||||||
|
<p> |
||||||
|
<label for="securecode">{#COMMENT_FORM_CODE_ENTER#}</label> |
||||||
|
<input name="securecode" type="text" id="securecode" maxlength="10" /> |
||||||
|
</p> |
||||||
|
{/if} |
||||||
|
<p> |
||||||
|
<input class="confirm btn-small btn-success" value="{#COMMENT_BUTTON_ADD#}" type="submit" /> |
||||||
|
<input class="btn btn-small" id="buttonReset" type="reset" /> |
||||||
|
</p> |
||||||
|
|
||||||
|
<input name="module" type="hidden" value="comment" /> |
||||||
|
<input name="action" type="hidden" value="comment" /> |
||||||
|
<input name="sub" type="hidden" value="send" /> |
||||||
|
<input name="doc_id" type="hidden" value="{$smarty.request.id|escape}" /> |
||||||
|
<input name="parent_id" id="parent_id" type="hidden" value="" /> |
||||||
|
<input name="page" type="hidden" value="{$page}" /> |
||||||
|
</form> |
||||||
|
</fieldset> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
{if $page_nav} |
||||||
|
<div class="page_navigation_box">{$page_nav}</div> |
||||||
|
{/if} |
||||||
|
|
||||||
|
<script type="text/javascript"> |
||||||
|
var COMMENT_SITE_CLOSE = '{#COMMENT_SITE_CLOSE#}'; |
||||||
|
var COMMENT_SITE_OPEN = '{#COMMENT_SITE_OPEN#}'; |
||||||
|
var COMMENT_LOCK_LINK = '{#COMMENT_LOCK_LINK#}'; |
||||||
|
var COMMENT_EDIT_LINK = '{#COMMENT_EDIT_LINK#}'; |
||||||
|
var COMMENT_EDIT_TITLE = '{#COMMENT_EDIT_TITLE#}'; |
||||||
|
var COMMENT_UNLOCK_LINK = '{#COMMENT_UNLOCK_LINK#}'; |
||||||
|
var COMMENT_ERROR_AUTHOR = '{#COMMENT_ERROR_AUTHOR#}'; |
||||||
|
var COMMENT_ERROR_EMAIL = '{#COMMENT_ERROR_EMAIL#}'; |
||||||
|
var COMMENT_ERROR_TEXT = '{#COMMENT_ERROR_TEXT#}'; |
||||||
|
var COMMENT_ERROR_CAPTCHA = '{#COMMENT_ERROR_CAPTCHA#}'; |
||||||
|
var COMMENT_BUTTON_EDIT = '{#COMMENT_BUTTON_EDIT#}'; |
||||||
|
var COMMENT_BUTTON_CANCEL = '{#COMMENT_BUTTON_CANCEL#}'; |
||||||
|
var COMMENT_CHARS_LEFT = '{#COMMENT_CHARS_LEFT#}'; |
||||||
|
var COMMENT_DATE_TIME_FORMAT = '{#COMMENT_DATE_TIME_FORMAT#}'; |
||||||
|
var COMMENT_TEXT_CHANGED = '{#COMMENT_TEXT_CHANGED#}'; |
||||||
|
var COMMENT_WRONG_CODE = '{#COMMENT_WRONG_CODE#}'; |
||||||
|
var UGROUP = '{$smarty.const.UGROUP}'; |
||||||
|
var IS_IM = '{$im}'; |
||||||
|
var DOC_ID = '{$doc_id}'; |
||||||
|
var MAX_CHARS = '{$comment_max_chars}'; |
||||||
|
</script> |
||||||
|
<script src="{$ABS_PATH}modules/comment/js/comment.js" type="text/javascript"></script> |
||||||
|
{/if} |
||||||
|
{/if} |
@ -0,0 +1,41 @@ |
|||||||
|
{foreach from=$subcomments item=c} |
||||||
|
<div class="mod_comment_comment{if $c.parent_id} mod_comment_ans_box{/if}"> |
||||||
|
|
||||||
|
{if $smarty.request.subaction=='showonly' && $smarty.request.comment_id==$c.Id} |
||||||
|
<div class="mod_comment_highlight"> |
||||||
|
{/if} |
||||||
|
|
||||||
|
<div id="{$c.Id}" class="mod_comment_box"> |
||||||
|
<div class="mod_comment_header clearfix"> |
||||||
|
<div class="mod_comment_author"> |
||||||
|
{#COMMENT_USER_ADD#} <a title="{#COMMENT_INFO#}" href="javascript:void(0);" onclick="popup('{$ABS_PATH}index.php?module=comment&action=postinfo&pop=1&Id={$c.Id}&theme={$theme}','comment','500','300','1');">{$c.comment_author_name|stripslashes|escape}</a> • {$c.comment_published}{if $smarty.const.UGROUP==1} • IP:{$c.comment_author_ip}{/if} |
||||||
|
<span class="mod_comment_changed">{if $c.comment_changed > 1} ({#COMMENT_TEXT_CHANGED#} {$c.comment_changed}){/if}</span> |
||||||
|
</div> |
||||||
|
|
||||||
|
<div class="mod_comment_icons"> |
||||||
|
{if $c.comment_author_id!=$smarty.session.user_id|default:'*' && (($cancomment==1 && $closed!=1) || $smarty.const.UGROUP==1)} |
||||||
|
<a class="mod_comment_answer" href="javascript:void(0);"><img src="{$ABS_PATH}modules/comment/templates/images/reply.gif" alt="" border="0" /></a> |
||||||
|
{/if} |
||||||
|
{if $smarty.const.UGROUP==1} |
||||||
|
{if $c.comment_status!=1} <a class="mod_comment_unlock" href="javascript:void(0);"><img src="{$ABS_PATH}modules/comment/templates/images/unlock.gif" alt="" border="0" /></a> |
||||||
|
{else} <a class="mod_comment_lock" href="javascript:void(0);"><img src="{$ABS_PATH}modules/comment/templates/images/lock.gif" alt="" border="0" /></a> |
||||||
|
{/if} <a class="mod_comment_delete" href="javascript:void(0);"><img src="{$ABS_PATH}modules/comment/templates/images/trash.gif" alt="" border="0" /></a> |
||||||
|
{/if} |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
<div class="mod_comment_text{if $smarty.const.UGROUP==1 || $c.comment_author_id==$smarty.session.user_id|default:'*'} editable_text{/if}">{$c.comment_text|escape}</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
{if $smarty.request.subaction=='showonly' && $smarty.request.comment_id==$c.Id} |
||||||
|
</div> |
||||||
|
{/if} |
||||||
|
|
||||||
|
{if $comments[$c.Id]} |
||||||
|
{include file="$subtpl" subcomments=$comments[$c.Id] sub=1} |
||||||
|
{/if} |
||||||
|
|
||||||
|
<a id="end{$c.Id}"></a> |
||||||
|
|
||||||
|
</div> |
||||||
|
{/foreach} |
After Width: | Height: | Size: 67 B |
After Width: | Height: | Size: 68 B |
After Width: | Height: | Size: 130 B |
After Width: | Height: | Size: 69 B |
After Width: | Height: | Size: 67 B |
Loading…
Reference in new issue