Сергей Варламов
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