++++++ проверки с файлами в режиме редактирования
This commit is contained in:
@@ -744,7 +744,9 @@ function commentPostEdit($comment_id)
|
||||
cmnt.comment_edit_time,
|
||||
cmnt.comment_allowed_extensions,
|
||||
cmnt.comment_max_file_size,
|
||||
cmnt.comment_max_files
|
||||
cmnt.comment_max_files,
|
||||
cmnt.comment_allow_files,
|
||||
cmnt.comment_allow_files_anon
|
||||
FROM " . PREFIX . "_module_comment_info AS msg
|
||||
JOIN " . PREFIX . "_module_comments AS cmnt ON cmnt.Id = 1
|
||||
WHERE msg.Id = '" . $comment_id . "'
|
||||
@@ -787,6 +789,26 @@ function commentPostEdit($comment_id)
|
||||
|
||||
|
||||
// 5. Работа с изображениями (МУЛЬТИЗАГРУЗКА И УДАЛЕНИЕ)
|
||||
|
||||
// ПРОВЕРКА ПРАВ НА ЗАГРУЗКУ (Защита от взлома через POST)
|
||||
$allow_files = (int)($row['comment_allow_files'] ?? 0);
|
||||
$allow_anon = (int)($row['comment_allow_files_anon'] ?? 0);
|
||||
|
||||
// Определяем, имеет ли право текущий пользователь загружать файлы
|
||||
$can_upload = false;
|
||||
if ($allow_files === 1) {
|
||||
if ($user_group == 2) { // Если гость
|
||||
if ($allow_anon === 1) $can_upload = true;
|
||||
} else { // Если зарегистрирован
|
||||
$can_upload = true;
|
||||
}
|
||||
}
|
||||
|
||||
// Если файлы пытаются загрузить, но прав нет — просто очищаем массив файлов
|
||||
if (!$can_upload && isset($_FILES['comment_image'])) {
|
||||
unset($_FILES['comment_image']);
|
||||
}
|
||||
|
||||
$upload_dir = BASE_DIR . '/uploads/comments/';
|
||||
// Получаем текущие файлы из БД в массив
|
||||
$current_files = !empty($row['comment_file']) ? explode(',', $row['comment_file']) : [];
|
||||
|
||||
@@ -586,19 +586,43 @@ if ($foundItems.length > 0) {
|
||||
}
|
||||
|
||||
// --- СБОРКА ФОРМЫ ---
|
||||
|
||||
// --- ПРОВЕРКА ПРАВ НА ЗАГРУЗКУ ---
|
||||
var canUploadFiles = false;
|
||||
if (typeof ALLOW_FILES !== 'undefined' && ALLOW_FILES == '1') {
|
||||
if (typeof UGROUP !== 'undefined' && UGROUP == '2') {
|
||||
if (typeof ALLOW_FILES_ANON !== 'undefined' && ALLOW_FILES_ANON == '1') canUploadFiles = true;
|
||||
} else {
|
||||
canUploadFiles = true;
|
||||
}
|
||||
}
|
||||
|
||||
var uploadBlockHtml = '';
|
||||
if (canUploadFiles) {
|
||||
uploadBlockHtml = `
|
||||
<div class="mb-2 border-top pt-2">
|
||||
<label class="small text-muted mb-1 d-block fw-bold">${COMMENT_JS_ADD_NEW_FILES}</label>
|
||||
<div id="file_error_${cid}" class="js-file-error text-danger small fw-bold mb-1" style="display:none;"></div>
|
||||
<input type="file" name="comment_image[]" id="new_file_${cid}" class="form-control form-control-sm mb-1" multiple>
|
||||
<div class="text-muted" style="font-size: 0.7rem;">
|
||||
<i class="bi bi-info-circle"></i> ${ALLOWED_EXTENSIONS.replace(/,/g, ', ')} | до ${MAX_FILE_SIZE_KB} KB
|
||||
</div>
|
||||
</div>`;
|
||||
}
|
||||
|
||||
|
||||
var editHtml = `
|
||||
<div class="edit-form-container border rounded p-3 bg-light mt-2 mb-2" data-cid="${cid}">
|
||||
<textarea rows="5" id="ta_${cid}" class="form-control mb-3">${cleanText}</textarea>
|
||||
${starsEditBlock}
|
||||
|
||||
<p class="small text-muted mb-1">${COMMENT_JS_LOADED_FILES}</p>
|
||||
${existingImagesHtml}
|
||||
${existingImagesHtml !== '' ? `
|
||||
<p class="small text-muted mb-1">${COMMENT_JS_LOADED_FILES}</p>
|
||||
${existingImagesHtml}
|
||||
` : ''}
|
||||
|
||||
${uploadBlockHtml}
|
||||
|
||||
<div class="mb-2">
|
||||
<label class="small text-muted mb-1">${COMMENT_JS_ADD_NEW_FILES}</label>
|
||||
<div id="file_error_${cid}" class="js-file-error text-danger small fw-bold mb-1" style="display:none;"></div>
|
||||
<input type="file" name="comment_image[]" id="new_file_${cid}" class="form-control form-control-sm" multiple>
|
||||
</div>
|
||||
<input type="hidden" name="delete_files" id="delete_files_${cid}" value="">
|
||||
|
||||
<div class="d-flex gap-2 mt-3 align-items-center">
|
||||
@@ -624,6 +648,9 @@ $wrapper.find('.mod_comment_attached_images, .comment-files').hide();
|
||||
|
||||
$wrapper.find('.edit-form-container').data('pendingFiles', pendingFiles);
|
||||
|
||||
|
||||
// Проверяем права, прежде чем вешать обработчик
|
||||
if (canUploadFiles) {
|
||||
$('#new_file_' + cid).on('change', function() {
|
||||
var files = this.files;
|
||||
var $input = $(this);
|
||||
@@ -678,6 +705,8 @@ $('#new_file_' + cid).on('change', function() {
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
// Обработчик удаления НОВОГО файла из превью (до сохранения)
|
||||
$doc.off('click', '.remove-new-file').on('click', '.remove-new-file', function() {
|
||||
@@ -789,12 +818,24 @@ $doc.on('click', '.cancelButton', function() {
|
||||
$container.remove();
|
||||
});
|
||||
|
||||
$doc.on('click', '.saveButton', function() {
|
||||
// Кнопка сохранить редактирование
|
||||
|
||||
$doc.off('click', '.saveButton').on('click', '.saveButton', function() {
|
||||
var $btn = $(this);
|
||||
var cid = $btn.data('id');
|
||||
var $container = $btn.closest('.edit-form-container');
|
||||
|
||||
// Достаем накопительный массив файлов
|
||||
// 1. Повторно определяем права внутри кнопки (чтобы избежать undefined)
|
||||
var canUploadFilesLocal = false;
|
||||
if (typeof ALLOW_FILES !== 'undefined' && ALLOW_FILES == '1') {
|
||||
if (typeof UGROUP !== 'undefined' && UGROUP == '2') {
|
||||
if (typeof ALLOW_FILES_ANON !== 'undefined' && ALLOW_FILES_ANON == '1') canUploadFilesLocal = true;
|
||||
} else {
|
||||
canUploadFilesLocal = true;
|
||||
}
|
||||
}
|
||||
|
||||
// 2. Достаем накопительный массив файлов
|
||||
var pendingFiles = $container.data('pendingFiles') || [];
|
||||
|
||||
var fd = new FormData();
|
||||
@@ -808,13 +849,14 @@ $doc.on('click', '.saveButton', function() {
|
||||
|
||||
fd.append('delete_files', $('#delete_files_' + cid).val());
|
||||
|
||||
// --- берем файлы из массива ---
|
||||
pendingFiles.forEach(function(file) {
|
||||
if (file !== null) { // Проверяем, что файл не был удален крестиком
|
||||
fd.append('comment_image[]', file);
|
||||
}
|
||||
});
|
||||
// ------------------------------------
|
||||
// 3. Добавляем файлы из массива (используем локальную проверку прав)
|
||||
if (canUploadFilesLocal && pendingFiles.length > 0) {
|
||||
pendingFiles.forEach(function(file) {
|
||||
if (file !== null) {
|
||||
fd.append('comment_image[]', file);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
$.ajax({
|
||||
url: aveabspath + 'index.php?ajax=1',
|
||||
@@ -827,14 +869,31 @@ $doc.on('click', '.saveButton', function() {
|
||||
xhr.upload.addEventListener("progress", function(evt) {
|
||||
if (evt.lengthComputable) {
|
||||
var pct = Math.round((evt.loaded / evt.total) * 100);
|
||||
$('#edit_progress_container_' + cid).removeClass('d-none');
|
||||
$('#edit_progress_bar_' + cid).css('width', pct + '%');
|
||||
// Проверяем наличие контейнера прогресса, если его нет в HTML — создаем или пропускаем
|
||||
var $pBar = $('#edit_progress_bar_' + cid);
|
||||
if ($pBar.length) {
|
||||
$('#edit_progress_container_' + cid).removeClass('d-none');
|
||||
$pBar.css('width', pct + '%');
|
||||
}
|
||||
}
|
||||
}, false);
|
||||
return xhr;
|
||||
},
|
||||
beforeSend: function() { $btn.prop('disabled', true).text('...'); },
|
||||
success: function() { location.reload(); }
|
||||
beforeSend: function() {
|
||||
$btn.prop('disabled', true).text('...');
|
||||
},
|
||||
success: function(response) {
|
||||
// Если PHP вернул ошибку лимита, выведем её вместо перезагрузки
|
||||
if (response === 'MAX_FILES_LIMIT_EXCEEDED') {
|
||||
alert('Превышен лимит количества файлов!');
|
||||
$btn.prop('disabled', false).text('Сохранить');
|
||||
} else {
|
||||
location.reload();
|
||||
}
|
||||
},
|
||||
error: function() {
|
||||
$btn.prop('disabled', false).text('Ошибка');
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@@ -320,6 +320,7 @@
|
||||
var ALLOWED_EXTENSIONS = '{$comment_allowed_extensions|default:"jpg,jpeg,png,gif,webp"}';
|
||||
var MAX_FILE_SIZE_KB = '{$comment_max_file_size|default:2048}';
|
||||
var MAX_FILES_COUNT = '{$comment_max_files|default:5}';
|
||||
var ALLOW_FILES = '{$comment_allow_files|default:0}';
|
||||
</script>
|
||||
<script src="{$ABS_PATH}modules/comment/js/comment.js" type="text/javascript"></script>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user