редактирование в Админке комментария теперь в модальном окне работаетю но по дефолту функций - будем добавлять.
This commit is contained in:
@@ -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 '<script>window.opener.location.reload();window.close();</script>';
|
||||
// Если это 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));
|
||||
}
|
||||
|
||||
/**
|
||||
* Метод, предназначенный для управления настройками модуля
|
||||
|
||||
@@ -267,7 +267,14 @@
|
||||
{else}
|
||||
<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="{#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>
|
||||
<a data-dialog="edit-comment-{$row.CId}"
|
||||
href="index.php?do=modules&action=modedit&mod=comment&moduleaction=admin_edit&Id={$row.CId}&cp={$sess}&pop=1&onlycontent=1"
|
||||
data-width="1180"
|
||||
data-height="700"
|
||||
data-modal="true"
|
||||
data-title="{#COMMENT_ICON_EDIT_ADM#}"
|
||||
class="openDialog icon_sprite ico_edit"
|
||||
title="{#COMMENT_ICON_EDIT_ADM#}"></a>
|
||||
{if $row.has_children}
|
||||
<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>
|
||||
|
||||
@@ -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}
|
||||
</script>
|
||||
@@ -29,84 +80,85 @@ $(document).ready(function(){
|
||||
|
||||
<div class="widget" style="margin-top: 0px;">
|
||||
<div class="body">
|
||||
{#COMMENT_EDIT_TITLE#}
|
||||
{#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 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">
|
||||
{if $closed == 1 && $smarty.const.UGROUP != 1}
|
||||
<div class="body">
|
||||
{#COMMENT_IS_CLOSED#}
|
||||
<p style="margin-top:10px;">
|
||||
<a href="javascript:void(0);" class="button redBtn CloseCommentDialog">{#COMMENT_CLOSE_BUTTON#}</a>
|
||||
</p>
|
||||
</div>
|
||||
{else}
|
||||
{if $editfalse == 1}
|
||||
<div class="body">{#COMMENT_EDIT_FALSE#}</div>
|
||||
{else}
|
||||
<form method="post" action="index.php" class="mainForm" id="comment_edit_form">
|
||||
<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>
|
||||
|
||||
{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_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_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_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>
|
||||
<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_CANCEL#}" />
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
|
||||
|
||||
</form>
|
||||
{/if}
|
||||
{/if}
|
||||
<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="2">
|
||||
<input type="submit" class="basicBtn SaveCommentAjax" value="{#COMMENT_BUTTON_EDIT#}" />
|
||||
<a href="javascript:void(0);" class="button redBtn CloseCommentDialog">{#COMMENT_BUTTON_CANCEL#}</a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
{/if}
|
||||
{/if}
|
||||
</div>
|
||||
Reference in New Issue
Block a user