почти все работает осталось научить админа удалять всю ветку ответов вместе со своим стартовым комментрарием
This commit is contained in:
@@ -319,6 +319,7 @@ function commentListShow($tpl_dir)
|
||||
$row['can_edit'] = 1;
|
||||
}
|
||||
}
|
||||
$row['is_my_own'] = $is_author;
|
||||
// ------------------------------------------
|
||||
|
||||
$row['comment_published_raw'] = $row['comment_published'];
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
});
|
||||
}
|
||||
|
||||
/* Limit Plugin (Исправленный с возвратом контекста) */
|
||||
/* Limit Plugin */
|
||||
$.fn.extend({
|
||||
limit: function(limit, element) {
|
||||
return this.each(function() {
|
||||
@@ -76,30 +76,33 @@
|
||||
return true;
|
||||
}
|
||||
|
||||
/* --- ДЕЙСТВИЯ (DELETE, ANSWER, LOCK) --- */
|
||||
/* --- ДЕЙСТВИЯ (DELETE, LOCK, OPEN/CLOSE) --- */
|
||||
function cAction(obj, action) {
|
||||
var $btn = $(obj);
|
||||
var cid = $btn.data('id');
|
||||
if (!cid) return;
|
||||
|
||||
if (action === 'answer') {
|
||||
$('#parent_id').val(cid);
|
||||
$('#mod_comment_new').insertBefore('#end' + cid).show();
|
||||
$('html, body').animate({ scrollTop: $('#mod_comment_new').offset().top - 150 }, 500);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!cid && action !== 'open' && action !== 'close') return;
|
||||
|
||||
$.get(aveabspath + 'index.php', {
|
||||
module: 'comment',
|
||||
action: action,
|
||||
docid: typeof DOC_ID !== 'undefined' ? DOC_ID : '',
|
||||
Id: cid
|
||||
Id: cid ? cid : ''
|
||||
}, function() {
|
||||
if (action === 'close') {
|
||||
$btn.attr('id', 'mod_comment_open')
|
||||
.removeClass('btn-outline-danger').addClass('btn-outline-success')
|
||||
.html('<i class="bi bi-lock-fill me-1"></i> ' + COMMENT_SITE_OPEN);
|
||||
$('#mod_comment_new').fadeOut(300);
|
||||
}
|
||||
else if (action === 'open') {
|
||||
$btn.attr('id', 'mod_comment_close')
|
||||
.removeClass('btn-outline-success').addClass('btn-outline-danger')
|
||||
.html('<i class="bi bi-unlock-fill me-1"></i> ' + COMMENT_SITE_CLOSE);
|
||||
$('#mod_comment_new').fadeIn(300);
|
||||
}
|
||||
if (action === 'delete') {
|
||||
var $commentBlock = $btn.closest('.mod_comment_comment');
|
||||
if ($commentBlock.find('#mod_comment_new').length > 0) {
|
||||
$('#mod_comment_new').insertAfter($('.mod_comment_comment').last());
|
||||
}
|
||||
$commentBlock.fadeOut(300, function() { $(this).remove(); });
|
||||
}
|
||||
if (action === 'unlock' || action === 'lock') {
|
||||
@@ -116,16 +119,38 @@
|
||||
initCommentTimers();
|
||||
var $doc = $(document);
|
||||
|
||||
// Делегирование с защитой от двойного клика через .off()
|
||||
$doc.off('click', '.mod_comment_answer').on('click', '.mod_comment_answer', function(e) {
|
||||
e.preventDefault(); cAction(this, 'answer');
|
||||
// Глобальные кнопки управления
|
||||
$doc.on('click', '#mod_comment_close', function(e) {
|
||||
e.preventDefault(); cAction(this, 'close');
|
||||
});
|
||||
$doc.on('click', '#mod_comment_open', function(e) {
|
||||
e.preventDefault(); cAction(this, 'open');
|
||||
});
|
||||
|
||||
// КНОПКА ОТВЕТА (ИСПРАВЛЕНО: перемещает форму, а не шлет AJAX)
|
||||
$doc.off('click', '.mod_comment_answer').on('click', '.mod_comment_answer', function(e) {
|
||||
e.preventDefault();
|
||||
var cid = $(this).data('id');
|
||||
var $form = $('#mod_comment_new');
|
||||
|
||||
// Переносим форму и ставим parent_id
|
||||
$form.insertAfter('#comment_' + cid).show();
|
||||
$('#parent_id').val(cid);
|
||||
|
||||
// Скролл к форме
|
||||
$('html, body').animate({
|
||||
scrollTop: $form.offset().top - 150
|
||||
}, 500);
|
||||
$('#in_message').focus();
|
||||
});
|
||||
|
||||
// Удаление
|
||||
$doc.off('click', '.mod_comment_delete').on('click', '.mod_comment_delete', function(e) {
|
||||
e.preventDefault();
|
||||
if (confirm('Удалить этот комментарий?')) cAction(this, 'delete');
|
||||
});
|
||||
|
||||
// Блокировка
|
||||
$doc.off('click', '.mod_comment_lock, .mod_comment_unlock').on('click', '.mod_comment_lock, .mod_comment_unlock', function(e) {
|
||||
e.preventDefault();
|
||||
cAction(this, $(this).hasClass('mod_comment_lock') ? 'lock' : 'unlock');
|
||||
@@ -135,11 +160,16 @@
|
||||
$doc.off('click', '.mod_comment_edit').on('click', '.mod_comment_edit', function(e) {
|
||||
e.preventDefault();
|
||||
var cid = $(this).data('id');
|
||||
var $textBlock = $('#comment_wrapper_' + cid).find('.mod_comment_text');
|
||||
$('.edit-form-container').remove(); $('.mod_comment_text').show();
|
||||
var $wrapper = $('#comment_wrapper_' + cid);
|
||||
var $textBlock = $wrapper.find('.mod_comment_text').first();
|
||||
|
||||
if ($wrapper.find('.edit-form-container').length > 0) return;
|
||||
|
||||
$('.edit-form-container').remove();
|
||||
$('.mod_comment_text').show();
|
||||
|
||||
var cleanText = $textBlock.html().replace(/<br\s*\/?>/mg, "\n").trim();
|
||||
var currentImg = $('#comment_wrapper_' + cid).find('.mod_comment_attached_image img').attr('src');
|
||||
var currentImg = $wrapper.find('.mod_comment_attached_image img').first().attr('src');
|
||||
|
||||
var editHtml = `
|
||||
<div class="edit-form-container border rounded p-3 bg-light mt-2 mb-2">
|
||||
@@ -152,16 +182,18 @@
|
||||
<small class="ms-auto text-muted">Осталось: <span id="charsLeft_${cid}"></span></small>
|
||||
</div>
|
||||
</div>`;
|
||||
|
||||
$textBlock.hide().after(editHtml);
|
||||
$('#ta_' + cid).limit(1000, '#charsLeft_' + cid).focus();
|
||||
});
|
||||
|
||||
$doc.off('click', '.cancelButton').on('click', '.cancelButton', function() {
|
||||
$(this).closest('.edit-form-container').prev('.mod_comment_text').show();
|
||||
$(this).closest('.edit-form-container').remove();
|
||||
$doc.on('click', '.cancelButton', function() {
|
||||
var $container = $(this).closest('.edit-form-container');
|
||||
$container.prev('.mod_comment_text').show();
|
||||
$container.remove();
|
||||
});
|
||||
|
||||
$doc.off('click', '.saveButton').on('click', '.saveButton', function() {
|
||||
$doc.on('click', '.saveButton', function() {
|
||||
var $btn = $(this);
|
||||
var cid = $btn.data('id');
|
||||
var fd = new FormData();
|
||||
@@ -179,8 +211,8 @@
|
||||
});
|
||||
});
|
||||
|
||||
// ОТПРАВКА НОВОГО КОММЕНТАРИЯ
|
||||
$doc.off('submit', '#mod_comment_new form').on('submit', '#mod_comment_new form', function(e) {
|
||||
// Отправка новой формы (или ответа)
|
||||
$doc.on('submit', '#mod_comment_new form', function(e) {
|
||||
e.preventDefault();
|
||||
if (!validate(this)) return false;
|
||||
|
||||
@@ -213,7 +245,7 @@
|
||||
});
|
||||
});
|
||||
|
||||
$doc.off('click', '#captcha img, #reload_captcha').on('click', '#captcha img, #reload_captcha', function(e) {
|
||||
$doc.on('click', '#captcha img, #reload_captcha', function(e) {
|
||||
e.preventDefault(); getCaptha();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -89,8 +89,8 @@
|
||||
{* Кнопка ответа *}
|
||||
{* ПРАВА НА ОТВЕТ *}
|
||||
{if ($cancomment==1 && $closed!=1) || $smarty.const.UGROUP==1}
|
||||
{* Строгая проверка: показываем кнопку только если автор сообщения НЕ текущий пользователь *}
|
||||
{if $c.comment_author_name != $smarty.session.user_name}
|
||||
{* Показываем кнопку только если это НЕ мой собственный комментарий *}
|
||||
{if !$c.is_my_own}
|
||||
<a class="mod_comment_answer p-2 text-primary text-decoration-none" href="javascript:void(0);" data-id="{$c.Id}" title="{#COMMENT_ANSWER_LINK#}">
|
||||
<i class="bi bi-reply-fill me-1"></i> {#COMMENT_ANSWER_LINK#}
|
||||
</a>
|
||||
|
||||
Reference in New Issue
Block a user