diff --git a/class/comment.php b/class/comment.php index d548b96..fce3b90 100644 --- a/class/comment.php +++ b/class/comment.php @@ -1601,69 +1601,84 @@ function commentAdminListShow($tpl_dir) * * @param string $tpl_dir - путь к шаблонам модуля */ - function commentAdminPostEdit($tpl_dir) - { - global $AVE_DB, $AVE_Template; +/** + * Метод, предназначенный для редактирования комментариев в Административной части. + * + * @param string $tpl_dir - путь к шаблонам модуля + */ + function commentAdminPostEdit($tpl_dir) + { + global $AVE_DB, $AVE_Template; - // Используем оператор объединения с null для PHP 8.4 - $post_sub = $_POST['sub'] ?? ''; - $request_id = (int)($_REQUEST['Id'] ?? 0); - $request_docid = (int)($_REQUEST['docid'] ?? 0); + // Используем оператор объединения с null для PHP 8.4 + $post_sub = $_POST['sub'] ?? ''; + $request_id = (int)($_REQUEST['Id'] ?? 0); + $request_docid = (int)($_REQUEST['docid'] ?? 0); + $is_ajax = isset($_REQUEST['ajax']); - // Выполняем запрос к БД на получение информации о редактируемом комментарии - $row = $AVE_DB->Query(" - SELECT * - FROM " . PREFIX . "_module_comment_info - WHERE Id = '" . $request_id . "' - LIMIT 1 - ")->FetchAssocArray(); + // Выполняем запрос к БД на получение информации о редактируемом комментарии + $row = $AVE_DB->Query(" + SELECT * + FROM " . PREFIX . "_module_comment_info + WHERE Id = '" . $request_id . "' + LIMIT 1 + ")->FetchAssocArray(); - // Если в запросе содержится подзапрос на сохранение данных (пользователь уже отредактировал комментарий - // и нажал кнопку сохранить изменения), тогда выполняем запрос к БД на обновление информации. - if ($post_sub == 'send' && false != $row) - { - // --- Экранирование данных перед сохранением --- - $AVE_DB->Query(" - UPDATE " . PREFIX . "_module_comment_info - SET - comment_author_name = '" . addslashes(htmlspecialchars($_POST['comment_author_name'] ?? '')) . "', - comment_author_email = '" . addslashes(htmlspecialchars($_POST['comment_author_email'] ?? '')) . "', - comment_author_city = '" . addslashes(htmlspecialchars($_POST['comment_author_city'] ?? '')) . "', - comment_author_website = '" . addslashes(htmlspecialchars($_POST['comment_author_website'] ?? '')) . "', - comment_text = '" . addslashes(htmlspecialchars($_POST['comment_text'] ?? '')) . "', - comment_changed = '" . time() . "' - WHERE - Id = '" . (int)($_POST['Id'] ?? 0) . "' - "); + // Если в запросе содержится подзапрос на сохранение данных + if ($post_sub == 'send' && false != $row) + { + // Экранирование данных перед сохранением + $AVE_DB->Query(" + UPDATE " . PREFIX . "_module_comment_info + SET + comment_author_name = '" . addslashes(htmlspecialchars($_POST['comment_author_name'] ?? '')) . "', + comment_author_email = '" . addslashes(htmlspecialchars($_POST['comment_author_email'] ?? '')) . "', + comment_author_city = '" . addslashes(htmlspecialchars($_POST['comment_author_city'] ?? '')) . "', + comment_author_website = '" . addslashes(htmlspecialchars($_POST['comment_author_website'] ?? '')) . "', + comment_text = '" . addslashes(htmlspecialchars($_POST['comment_text'] ?? '')) . "', + comment_changed = '" . time() . "' + WHERE + Id = '" . (int)($_POST['Id'] ?? 0) . "' + "); - echo ''; + // Если это AJAX-запрос (наша новая модалка), отдаем JSON + if ($is_ajax) { + header('Content-Type: application/json'); + echo json_encode([ + 'status' => 'success', + 'theme' => 'success', + 'header' => 'Обновлено', // Можно заменить на переменную из языкового файла + 'message' => 'Изменения успешно сохранены' + ]); + exit; + } - return; - } + // Если вдруг зашли без AJAX (старым способом), просто выходим + exit; + } - // Если в первой выборке из БД получили нулевой результат, тогда генерируем сообщение с ошибкой - if ($row == false) - { - $AVE_Template->assign('editfalse', 1); - } - // в противном случае получаем список комментариев, у которых стоит запрет на ответы - else - { - $closed = $AVE_DB->Query(" - SELECT comments_close - FROM " . PREFIX . "_module_comment_info - WHERE document_id = '" . $request_docid . "' - LIMIT 1 - ")->GetCell(); + // Если в первой выборке из БД получили нулевой результат + if ($row == false) + { + $AVE_Template->assign('editfalse', 1); + } + else + { + $closed = $AVE_DB->Query(" + SELECT comments_close + FROM " . PREFIX . "_module_comment_info + WHERE document_id = '" . $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('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)); - } + // Отображаем шаблон + $AVE_Template->assign('content', $AVE_Template->fetch($tpl_dir . $this->_admin_edit_link_tpl)); + } /** * Метод, предназначенный для управления настройками модуля diff --git a/templates/admin_comments.tpl b/templates/admin_comments.tpl index 1a58b8e..5a50f8b 100644 --- a/templates/admin_comments.tpl +++ b/templates/admin_comments.tpl @@ -267,7 +267,14 @@ {else} {/if} - + {if $row.has_children} diff --git a/templates/admin_edit.tpl b/templates/admin_edit.tpl index bbb105c..df0aaad 100644 --- a/templates/admin_edit.tpl +++ b/templates/admin_edit.tpl @@ -2,23 +2,74 @@ {literal} $(document).ready(function(){ - var left = {/literal}{$comment_max_chars}{literal} + // Логика счетчика символов + var left = {/literal}{$comment_max_chars}{literal}; $('#text_counter').text(left); - $('#in_message').keyup(function () { - + $('#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); }); + // --- ЛОГИКА ДЛЯ МОДАЛЬНОГО ОКНА (AJAX) --- + + // Формируем ID диалога точно так же, как его создает система AVE.cms + var dialogId = '#ajax-dialog-edit-comment-{/literal}{$smarty.request.Id|escape}{literal}'; + + // Кнопка сохранения + $(".SaveCommentAjax").on('click', function(event){ + event.preventDefault(); + + $("#comment_edit_form").ajaxSubmit({ + // Добавляем флаг ajax=1, чтобы PHP понял, что нужно вернуть JSON + url: 'index.php?ajax=1&onlycontent=1&cp={/literal}{$sess}{literal}', + type: 'POST', + dataType: 'json', + beforeSubmit: function(){ + $.alerts._overlay('show'); + }, + success: function(data){ + $.alerts._overlay('hide'); + + // Показываем уведомление (jGrowl) + $.jGrowl(data['message'], { + header: data['header'], + theme: data['theme'] + }); + + // Если сохранение прошло без ошибок + if (data['theme'] !== 'error') { + // Уничтожаем модальное окно + $(dialogId).dialog('destroy').remove(); + + // Перезагружаем родительское окно, чтобы увидеть изменения в списке + if (window.parent) { + window.parent.location.reload(); + } + } + }, + error: function(xhr, textStatus, errorThrown) { + $.alerts._overlay('hide'); + $.jGrowl('Ошибка системы при сохранении', { theme: 'error' }); + console.log(xhr.responseText); + } + }); + return false; + }); + + // Кнопка отмены/закрытия + $(".CloseCommentDialog").on('click', function(event){ + event.preventDefault(); + $(dialogId).dialog('destroy').remove(); + return false; + }); + }); {/literal} @@ -29,84 +80,85 @@ $(document).ready(function(){
- {#COMMENT_EDIT_TITLE#} + {#COMMENT_EDIT_TITLE#}
- {if $closed == 1 && $smarty.const.UGROUP != 1} - - {#COMMENT_IS_CLOSED#} - -

- {else} - {if $editfalse==1} - {#COMMENT_EDIT_FALSE#} - {else} -
- + {if $closed == 1 && $smarty.const.UGROUP != 1} +
+ {#COMMENT_IS_CLOSED#} +

+ {#COMMENT_CLOSE_BUTTON#} +

+
+ {else} + {if $editfalse == 1} +
{#COMMENT_EDIT_FALSE#}
+ {else} + +
- {if $smarty.const.UGROUP == 1} - - - - + + {if $smarty.const.UGROUP == 1} + + + + + + + + + {else} + + + {/if} - - - - - {else} - - - {/if} - - - - + + + + - - - - + + + + - - - - + + + + - - - - - - - - - -
{#COMMENT_YOUR_NAME#}
{#COMMENT_YOUR_NAME#}
{#COMMENT_YOUR_EMAIL#}
{#COMMENT_YOUR_EMAIL#}
{#COMMENT_YOUR_SITE#}
{#COMMENT_YOUR_SITE#}
{#COMMENT_YOUR_FROM#}
{#COMMENT_YOUR_FROM#}
{#COMMENT_YOUR_TEXT#} -
-  {#COMMENT_CHARS_LEFT#} -
{#COMMENT_YOUR_TEXT#} +
+ +
+  {#COMMENT_CHARS_LEFT#} +
-   - -
- - -
- {/if} - {/if} + + + + + + +   + {#COMMENT_BUTTON_CANCEL#} + + + + + {/if} + {/if}
\ No newline at end of file