добавляем языковые переменные для админки - вывода списка комментариев и работа с ним

This commit is contained in:
2026-01-17 19:53:10 +05:00
parent 491b27349b
commit 7b4382b9d4
3 changed files with 55 additions and 31 deletions

View File

@@ -903,7 +903,7 @@ if (!$can_upload && isset($_FILES['comment_image'])) {
// 1. Получаем оригинальное имя файла без расширения
$original_basename = pathinfo($fname, PATHINFO_FILENAME);
// 2. Очищаем имя через нашу исправленную функцию
// 2. Очищаем имя
$clean_name = prepare_fname($original_basename);
// 3. Защита от пустого имени
@@ -941,7 +941,7 @@ if (!$can_upload && isset($_FILES['comment_image'])) {
$user_rating = (int)$row['user_rating'];
}
// 6. Обновление базы данных
// Обновление базы данных
$new_status = $is_admin ? (int)$row['comment_status'] : ($row['comment_need_approve'] == '1' ? 0 : 1);
$AVE_DB->Query("
@@ -1112,7 +1112,7 @@ function commentPostDelete($comment_id)
$user_id = empty($_SESSION['user_id']) ? 0 : (int)$_SESSION['user_id'];
$anon_key = $this->_getAnonKey();
// ПРОВЕРКА ПРАВ ГОЛОСОВАНИЯ (Новое)
// ПРОВЕРКА ПРАВ ГОЛОСОВАНИЯ
// Получаем настройки модуля, чтобы узнать, разрешено ли анонимам голосовать
$settings = $this->_commentSettingsGet();
if (empty($user_id) && empty($settings['comment_rating_anon_vote'])) {
@@ -1206,7 +1206,6 @@ function commentPostDelete($comment_id)
'" . time() . "')
");
// ОБНОВЛЕНИЕ В ТАБЛИЦЕ INFO
$AVE_DB->Query("
UPDATE " . PREFIX . "_module_comment_info
SET rating_sum = rating_sum + " . $vote_value . ",
@@ -1214,7 +1213,7 @@ function commentPostDelete($comment_id)
WHERE Id = '" . $comment_id . "'
");
// ФИНАЛ: Чистый ответ для JS
// Чистый ответ для JS
if ($ajax) {
if (ob_get_length()) ob_end_clean();
echo 'success';
@@ -1236,7 +1235,6 @@ function commentAdminDelete($comment_id)
if (empty($ids)) return;
// Читаем тип удаления из запроса (для одиночных кликов по иконкам)
// Для массового удаления через кнопку "Применить" этот параметр обычно не передается
$delete_type = $_REQUEST['admin_action_type'] ?? 'auto';
foreach ($ids as $id) {
@@ -1245,7 +1243,6 @@ function commentAdminDelete($comment_id)
// Проверяем наличие детей
$has_children = $AVE_DB->Query("SELECT COUNT(*) FROM " . PREFIX . "_module_comment_info WHERE parent_id = '$id'")->GetCell();
// ЛОГИКА СОГЛАСНО ДОГОВОРУ:
// Если тип 'soft' ИЛИ (тип 'auto' и есть дети) — делаем мягкое удаление
if (($delete_type == 'soft') || ($delete_type == 'auto' && $has_children > 0)) {
$AVE_DB->Query("
@@ -1404,7 +1401,7 @@ function commentAdminListShow($tpl_dir)
$res = $AVE_DB->Query("SELECT Id FROM " . PREFIX . "_module_comment_info WHERE parent_id IN ($parent_list)");
$found_children = [];
// Перебираем результат построчно через стандартный FetchAssocArray
// Перебираем результат построчно
if ($res) {
while ($row_child = $res->FetchAssocArray()) {
$found_children[] = (int)$row_child['Id'];

View File

@@ -219,3 +219,30 @@ COMMENT_SET_GEN = "Общие настройки"
COMMENT_TEXT_DEL_BY_ADMIN = "Комментарий удален администратором."
COMMENT_TEXT_DEL_BY_AUTHOR = "Комментарий удален автором."
COMMENT_STATUS_DELETED = "Удалено"
COMMENT_STATUS_AKTIV = "Активен"
COMMENT_STATUS_HIDE = "Скрыт"
COMMENT_ANSWER_ADM = "Ответ на комментарий"
COMMENT_DEL_ADM_ADM = "Комментарий удален администратором"
COMMENT_DEL_AVT_ADM = "Автор удалил свой комментарий"
COMMENT_ICON_HIDE_ADM = "Скрыть"
COMMENT_ICON_SHOW_ADM = "Одобрить"
COMMENT_ICON_EDIT_ADM = "Редактировать"
COMMENT_ICON_DEL_SOFT = "Мягкое удаление/заменяет текст (сохраняет ветку)"
COMMENT_ICON_DEL_HARD = "Удалить навсегда (вместе с веткой)"
COMMENT_NOT_COOMENTS_MES = "Сообщение:"
COMMENT_NOT_COOMENTS_MES_A = "Нет комментариев."
COMMENT_ACTION_SELECT = "Выберите действие..."
COMMENT_ACTION_SELECT_PUB = "Опубликовать"
COMMENT_ACTION_HIDE = "Скрыть"
COMMENT_ACTION_DEL = "Удалить выбранные"
COMMENT_ACT_DEL_SEL = "Выберите действие из списка!"
COMMENT_ACT_DEL_WAR = "Внимание"
COMMENT_ACT_DEL_SEL_A = "Вы не выбрали ни одного комментария для обработки."
COMMENT_ACT_DEL_WAR_A = "Ошибка"
COMMENT_ACT_DEL_SEL_B = "Выполнить выбранное действие для "
COMMENT_ACT_DEL_WAR_B = " эл.?
COMMENT_ACT_DEL_WAR_C = "Подтверждение"
COMMENT_CONFIRM_ADM_DIR = "Удаление комментария"
COMMENT_CONFIRM_ADM_NAME = "Удалить навсегда (вместе с веткой)?"
COMMENT_CONFIRM_ADM_DIR_SOFT = "Мягкое удаление комментария (ветка остается)"
COMMENT_CONFIRM_ADM_NAME_SOFT = "Удалить все данные и применить текст Комментарий удален администратором ?"

View File

@@ -158,7 +158,7 @@
{if $docs}
{foreach from=$docs item=row name=zebraloop}
{assign var="is_deleted" value=false}
{if $row.comment_author_name == '__DELETED__' || $row.comment_author_name == 'Удалено'}{assign var="is_deleted" value=true}{/if}
{if $row.comment_author_name == '__DELETED__' || $row.comment_author_name == '{#COMMENT_STATUS_DELETED#}'}{assign var="is_deleted" value=true}{/if}
<tr class="{if $row.comment_status == '0'}row-hidden deleted-row{elseif $smarty.foreach.zebraloop.iteration % 2 == 0}row-even{else}row-odd{/if}">
@@ -166,9 +166,9 @@
<td align="center"><strong>{$row.CId}</strong></td>
<td align="center">
{if $row.comment_status == '1'}
<span class="status-dot dot-active" title="Активен"></span>
<span class="status-dot dot-active" title="{#COMMENT_STATUS_AKTIV#}"></span>
{else}
<span class="status-dot dot-hidden" title="Скрыт"></span>
<span class="status-dot dot-hidden" title="{#COMMENT_STATUS_HIDE#}"></span>
{/if}
</td>
@@ -215,16 +215,16 @@
</div>
<div style="display: flex; align-items: center; gap: 8px;">
{if $row.parent_id > 0}
<span style="background:#e1f5fe; color:#0288d1; padding:1px 5px; border-radius:3px; font-weight:bold; font-size: 10px !important;">Ответ на комментарий #{$row.parent_id} »</span>
<span style="background:#e1f5fe; color:#0288d1; padding:1px 5px; border-radius:3px; font-weight:bold; font-size: 10px !important;">{#COMMENT_ANSWER_ADM#} #{$row.parent_id} »</span>
{/if}
<div class="comment-text-cell">
{if $row.comment_text == '__DEL_BY_ADM__'}
<div class="comment-deleted-info del-adm">
<span style="font-size:14px;">🚫</span> Комментарий удален администратором
<span style="font-size:14px;">🚫</span> {#COMMENT_DEL_ADM_ADM#}
</div>
{elseif $row.comment_text == '__DEL_BY_AUT__'}
<div class="comment-deleted-info del-aut">
<span style="font-size:14px;">🗑️</span> Автор удалил свой комментарий
<span style="font-size:14px;">🗑️</span> {#COMMENT_DEL_AVT_ADM#}
</div>
{else}
{$row.comment_text|strip_tags|truncate:130}
@@ -263,17 +263,17 @@
<div style="display: flex; justify-content: flex-end; gap: 6px;">
{if !$is_deleted}
{if $row.comment_status == '1'}
<a class="icon_sprite ico_unlock_no" title="Скрыть" href="index.php?do=modules&action=modedit&mod=comment&moduleaction=1&admin_action=set_status_0&id={$row.CId}&cp={$sess}"></a>
<a class="icon_sprite ico_unlock_no" title="{#COMMENT_ICON_HIDE_ADM#}" href="index.php?do=modules&action=modedit&mod=comment&moduleaction=1&admin_action=set_status_0&id={$row.CId}&cp={$sess}"></a>
{else}
<a class="icon_sprite ico_unlock" title="Одобрить" href="index.php?do=modules&action=modedit&mod=comment&moduleaction=1&admin_action=set_status_1&id={$row.CId}&cp={$sess}"></a>
<a class="icon_sprite ico_unlock" title="{#COMMENT_ICON_SHOW_ADM#}" href="index.php?do=modules&action=modedit&mod=comment&moduleaction=1&admin_action=set_status_1&id={$row.CId}&cp={$sess}"></a>
{/if}
<a class="icon_sprite ico_edit" title="Редактировать" href="javascript:void(0);" onClick="windowOpen('index.php?do=modules&action=modedit&mod=comment&moduleaction=admin_edit&pop=1&docid={$row.document_id}&Id={$row.CId}','700','700','1');"></a>
<a class="icon_sprite ico_edit" title="{#COMMENT_ICON_EDIT_ADM#}" href="javascript:void(0);" onClick="windowOpen('index.php?do=modules&action=modedit&mod=comment&moduleaction=admin_edit&pop=1&docid={$row.document_id}&Id={$row.CId}','700','700','1');"></a>
{if $row.has_children}
<a class="icon_sprite ico_delete ConfirmDelete" title="Скрыть текст (сохранить ветку)"
<a class="icon_sprite ico_delete ConfirmDelete" title="{#COMMENT_ICON_DEL_SOFT#}" dir="{#COMMENT_CONFIRM_ADM_DIR_SOFT#}" name="{#COMMENT_CONFIRM_ADM_NAME_SOFT#}"
href="index.php?do=modules&action=modedit&mod=comment&moduleaction=admin_del&admin_action_type=soft&Id={$row.CId}&cp={$sess}"></a>
{/if}
{/if}
<a class="icon_sprite ico_delete ico_delete_all ConfirmDelete" title="УДАЛИТЬ ПОЛНОСТЬЮ"
<a class="icon_sprite ico_delete ico_delete_all ConfirmDelete" title="{#COMMENT_ICON_DEL_HARD#}" dir="{#COMMENT_CONFIRM_ADM_DIR#}" name="{#COMMENT_CONFIRM_ADM_NAME#}"
href="index.php?do=modules&action=modedit&mod=comment&moduleaction=admin_del&admin_action_type=full&Id={$row.CId}&cp={$sess}"></a>
</div>
</td>
@@ -283,7 +283,7 @@
<tr>
<td colspan="9">
<ul class="messages">
<li class="highlight yellow"><strong>Сообщение:</strong><br />Нет комментариев.</li>
<li class="highlight yellow"><strong>{#COMMENT_NOT_COOMENTS_MES#}</strong><br />{#COMMENT_NOT_COOMENTS_MES_A#}</li>
</ul>
</td>
</tr>
@@ -294,12 +294,12 @@
<div class="tfoot">
<div class="left" style="padding:15px;">
<select id="mass_action_select">
<option value="">Выберите действие...</option>
<option value="set_status_1">Опубликовать</option>
<option value="set_status_0">Скрыть</option>
<option value="delete">Удалить выбранные</option>
<option value="">{#COMMENT_ACTION_SELECT#}</option>
<option value="set_status_1">{#COMMENT_ACTION_SELECT_PUB#}</option>
<option value="set_status_0">{#COMMENT_ACTION_HIDE#}</option>
<option value="delete">{#COMMENT_ACTION_DEL#}</option>
</select>
<input type="button" value="ПРИМЕНИТЬ" class="blueBtn" onclick="runMassAction()" style="margin-left:10px;" />
<input type="button" value="{#COMMENT_BUTTON_APPLY#}" class="blueBtn" onclick="runMassAction()" style="margin-left:10px;" />
</div>
</div>
</div>
@@ -318,9 +318,9 @@ function runMassAction() {
var select = document.getElementById('mass_action_select');
var action = select.value;
// Красивое уведомление, если не выбрали действие
// уведомление, если не выбрали действие
if (!action) {
jAlert('Выберите действие из списка!', 'Внимание');
jAlert('{#COMMENT_ACT_DEL_SEL#}', '{#COMMENT_ACT_DEL_WAR#}');
return;
}
@@ -330,9 +330,9 @@ function runMassAction() {
if (checkboxes[i].checked) ids.push(checkboxes[i].value);
}
// Красивое уведомление, если не выбрали чекбоксы
// уведомление, если не выбрали чекбоксы
if (ids.length === 0) {
jAlert('Вы не выбрали ни одного комментария для обработки.', 'Ошибка');
jAlert('{#COMMENT_ACT_DEL_SEL_A#}', '{#COMMENT_ACT_DEL_WAR_A#}');
return;
}
@@ -346,8 +346,8 @@ function runMassAction() {
url = 'index.php?do=modules&action=modedit&mod=comment&moduleaction=1&admin_action=' + action + '&ids=' + ids.join(',') + '&cp=' + cp;
}
// Красивое подтверждение
jConfirm('Выполнить выбранное действие для ' + ids.length + ' эл.?', 'Подтверждение', function(r) {
// подтверждение
jConfirm('{#COMMENT_ACT_DEL_SEL_B#} ' + ids.length + ' {#COMMENT_ACT_DEL_WAR_B#}', '{#COMMENT_ACT_DEL_WAR_C#}', function(r) {
if(r) window.location.href = url;
});
}