сделано: удаление файлов из админки при удалении комментария, правильная загрузка файлов по одному и удаление по одному, исправлены имена файлов
This commit is contained in:
@@ -1238,12 +1238,33 @@ function commentAdminDelete($comment_id)
|
||||
|
||||
if (empty($ids)) return;
|
||||
|
||||
// Читаем тип удаления из запроса (для одиночных кликов по иконкам)
|
||||
// Путь к папке с файлами
|
||||
$upload_dir = $_SERVER['DOCUMENT_ROOT'] . "/uploads/comments/";
|
||||
// Читаем тип удаления из запроса
|
||||
$delete_type = $_REQUEST['admin_action_type'] ?? 'auto';
|
||||
|
||||
foreach ($ids as $id) {
|
||||
if ($id <= 0) continue;
|
||||
|
||||
// --- БЛОК УДАЛЕНИЯ ФАЙЛОВ (НАЧАЛО) ---
|
||||
// Получаем имена файлов перед любым действием в БД
|
||||
$comment_files = $AVE_DB->Query("SELECT comment_file FROM " . PREFIX . "_module_comment_info WHERE Id = '$id' LIMIT 1")->GetCell();
|
||||
|
||||
if (!empty($comment_files)) {
|
||||
$files_to_delete = explode(',', $comment_files);
|
||||
foreach ($files_to_delete as $filename) {
|
||||
$filename = trim($filename);
|
||||
if (empty($filename)) continue;
|
||||
|
||||
$full_path = $upload_dir . $filename;
|
||||
$thumb_path = $upload_dir . "thumbs/" . $filename; // Удаляем и миниатюру, если есть
|
||||
|
||||
if (file_exists($full_path)) @unlink($full_path);
|
||||
if (file_exists($thumb_path)) @unlink($thumb_path);
|
||||
}
|
||||
}
|
||||
// --- БЛОК УДАЛЕНИЯ ФАЙЛОВ (КОНЕЦ) ---
|
||||
|
||||
// Проверяем наличие детей
|
||||
$has_children = $AVE_DB->Query("SELECT COUNT(*) FROM " . PREFIX . "_module_comment_info WHERE parent_id = '$id'")->GetCell();
|
||||
|
||||
@@ -1262,7 +1283,6 @@ function commentAdminDelete($comment_id)
|
||||
}
|
||||
// Если детей нет или принудительно выбран 'full' — удаляем физически
|
||||
else {
|
||||
// Собираем дерево (на случай если это Full Delete для родителя)
|
||||
$all_tree_ids = [$id];
|
||||
$parents = [$id];
|
||||
while (!empty($parents)) {
|
||||
@@ -1281,8 +1301,8 @@ function commentAdminDelete($comment_id)
|
||||
}
|
||||
}
|
||||
|
||||
// Редирект с сохранением фильтров
|
||||
$session_id = SESSION ?? '';
|
||||
// --- Сохраняем состояние фильтров ---
|
||||
$s_query = $_REQUEST['search_query'] ?? '';
|
||||
$s_order = $_REQUEST['sort_order'] ?? 'new';
|
||||
$f_type = $_REQUEST['filter_type'] ?? '';
|
||||
@@ -1823,7 +1843,7 @@ $row = $AVE_DB->Query("
|
||||
$clean_name = function_exists('prepare_fname') ? prepare_fname(pathinfo($fname, PATHINFO_FILENAME)) : 'file';
|
||||
if (empty($clean_name)) $clean_name = 'file';
|
||||
|
||||
$new_name = $clean_name . '_' . time() . '_' . rand(100,999) . '.' . $ext;
|
||||
$new_name = $clean_name . '_' . time() . '.' . $ext;
|
||||
|
||||
if (move_uploaded_file($tmp_name, $upload_dir . $new_name)) {
|
||||
$current_files[] = $new_name;
|
||||
|
||||
@@ -12,6 +12,7 @@ $(document).ready(function(){
|
||||
var maxFileSize = {/literal}{$row.comment_max_file_size|default:2048}{literal} * 1024;
|
||||
var allowedExts = {/literal}'{$row.comment_allowed_extensions|default:"jpg,jpeg,png,gif,webp"}'{literal}.split(',');
|
||||
var existingFilesCount = {/literal}{$row.file_list|@count|default:0}{literal};
|
||||
var dt = new DataTransfer();
|
||||
|
||||
var left = {/literal}{$comment_max_chars|default:1000}{literal};
|
||||
$('#text_counter').text(left);
|
||||
@@ -48,7 +49,7 @@ $(document).ready(function(){
|
||||
var $previewContainer = $('#new_images_preview');
|
||||
var $uploadBox = $input.closest('.upload-info-box');
|
||||
|
||||
$previewContainer.empty();
|
||||
//$previewContainer.empty();
|
||||
|
||||
var deletedCount = $('input[name="delete_files[]"]:checked').length;
|
||||
var currentTotal = existingFilesCount - deletedCount;
|
||||
@@ -77,6 +78,8 @@ $(document).ready(function(){
|
||||
return false;
|
||||
}
|
||||
|
||||
var fileIndex = dt.items.length;
|
||||
dt.items.add(file);
|
||||
// Если ошибок нет, читаем превью (FileReader)
|
||||
var reader = new FileReader();
|
||||
reader.onload = function(e) {
|
||||
@@ -85,20 +88,23 @@ $(document).ready(function(){
|
||||
? '<img src="' + e.target.result + '">'
|
||||
: '<div class="ext-placeholder">' + ext + '</div>';
|
||||
|
||||
var html = `
|
||||
<div class="new-file-preview" title="${file.name}">
|
||||
<div class="cancel-new-file" onclick="resetNewFiles()">×</div>
|
||||
${content}
|
||||
<span class="file-name-label">${file.name}</span>
|
||||
</div>`;
|
||||
var html = `
|
||||
<div class="new-file-preview" id="nf_${fileIndex}">
|
||||
<div class="cancel-new-file" onclick="removeSelectedFile(${fileIndex})">×</div>
|
||||
${content}
|
||||
<span class="file-name-label">${file.name}</span>
|
||||
</div>`;
|
||||
$previewContainer.append(html);
|
||||
};
|
||||
reader.readAsDataURL(file);
|
||||
});
|
||||
|
||||
if (hasError) {
|
||||
$input.val('');
|
||||
this.value = "";
|
||||
dt = new DataTransfer();
|
||||
$previewContainer.empty();
|
||||
} else {
|
||||
this.files = dt.files;
|
||||
}
|
||||
});
|
||||
|
||||
@@ -182,6 +188,15 @@ $(document).ready(function(){
|
||||
$('input[name="comment_image[]"]').val('');
|
||||
$('#new_images_preview').empty();
|
||||
};
|
||||
window.removeSelectedFile = function(idx) {
|
||||
var newDt = new DataTransfer();
|
||||
for (var i = 0; i < dt.files.length; i++) {
|
||||
if (i !== idx) newDt.items.add(dt.files[i]);
|
||||
}
|
||||
dt = newDt;
|
||||
$('input[name="comment_image[]"]')[0].files = dt.files;
|
||||
$('#nf_' + idx).remove();
|
||||
};
|
||||
});
|
||||
{/literal}
|
||||
</script>
|
||||
@@ -337,7 +352,7 @@ $(document).ready(function(){
|
||||
{else}
|
||||
<div class="ext-placeholder">{$fileExt}</div>
|
||||
{/if}
|
||||
<span class="file-name-label">{$file|regex_replace:"/^[0-9]+_/":""}</span>
|
||||
<span class="file-name-label">{$file|regex_replace:"/_[0-9]+(?=\.[a-z0-9]+$)/i":""}</span>
|
||||
</div>
|
||||
{/foreach}
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user