أضف زر "حذف متعدد" للمواضيع والردود

كود جيفري

عضو جديد
عضو انكور
حذف عدد كبير من المساهمات واحدة تلو الأخرى مهمة مرهقة لأي مدير أو مشرف، خاصة عند تنظيف المواضيع من الردود المكررة أو المخالفة. هذا الكود يضيف زر "حذف متعدد" إلى المواضيع والردود، ويعمل بنفس فكرة زر "اقتباس متعدد" المعروف، حيث تحدد المساهمات المطلوبة ثم تحذفها دفعة واحدة. ويتبع الزر نفس صلاحيات زر الحذف العادي، لذلك يستطيع الأعضاء أيضًا استخدامه لحذف عدة مشاركات من مساهماتهم إذا كانت لديهم صلاحية حذف مشاركاتهم الخاصة. والكود يعمل على نسخ phpBB2 وphpBB3 وPunBB وInvision وModernBB وAwesomeBB.

مثال على الكود​

زر حذف متعدد في المساهمات يعمل مثل زر الاقتباس المتعدد لحذف عدة مشاركات معًا


شرح تركيب الكود​

كود CSS
CSS:
.btn-select-delete:hover {color: #666666; }
.batch-delete-highlight { background-color: #ffe6e6 !important; }
#batch-delete-container { position: fixed; bottom: -100px; left: 50%; transform: translateX(-50%); z-index: 999; margin-bottom: 11px; padding: 12px 25px; background: #cd5c5c; border: 1px solid #000000; border-radius: 20px; }
#batch-delete-container.show-bar { bottom: 0; }
#run-batch-delete { cursor: pointer; font-weight: bold; box-shadow: none; padding: 0; margin: 0; font-size: 20px; }
#run-batch-delete:disabled { opacity: 0.6; cursor: not-allowed; }
#custom-confirm-overlay { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0, 0, 0, 0.5); z-index: 999; display: flex; align-items: center; justify-content: center; }
#custom-confirm-box { background: #fff;padding: 25px 35px;border-radius: 10px; box-shadow: 0 4px 20px rgba(0,0,0,0.25);text-align: center;max-width: 420px;width: 90%;font-family: inherit;}
#custom-confirm-box p {margin-bottom: 20px;font-size: 16px; color: #333;line-height: 1.5;}
#custom-confirm-box .confirm-btns button {padding: 8px 22px;margin: 0 5px;border: none;border-radius: 5px; cursor: pointer;font-weight: bold;font-size: 14px;}
#confirm-yes {background: #dc3545;}
#confirm-no {background: #2196F3;}
#confirm-ok {background: #28a745;}
#confirm-ok,#confirm-no,#confirm-yes {color: #fff;padding: 5px 10px;margin: 5px;font-size: 20px;font-weight: bold;border-radius: 10px; }
.center-loading-spinner {display: block;width: 40px;height: 40px;border: 4px solid rgba(220, 53, 69, 0.2);border-radius: 50%;border-top-color: #dc3545;animation: spin 0.8s ease-in-out infinite;margin: 15px auto;}
@keyframes spin {to { transform: rotate(360deg); }}
.btn-select-delete.marked-for-delete {
    color: #ff4a4a !important;
    background: #000000;
}
 
li.btn-select-delete {
    font-size: 20px;
    color: #ffffff;
    border-radius: 33px;
    cursor: pointer;
    padding: 2px;
    margin: 2px;
    list-style: none;
  display: inline-block;
}
 
.btn-select-delete {
    width: fit-content;
    background: #F44336;
}

يمكنك تغيير التصميم كما تشاء ليناسب منتداك.

كود JavaScript
العنوان: كما تريد
الصلاحيات: المدير - المشرفون - الأعضاء
المكان: في المواضيع

JavaScript:
$(document).ready(function () {
    $('head').append('<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">');
    
    // البحث عن أزرار الحذف وإضافتها فقط إذا كانت مرئية للمستخدم الحالي
    $('.btn-delete, .i_icon_delete').each(function () {
        var $targetElement = $(this);
        
        // إذا كان زر الحذف الأصلي مخفياً عن المستخدم (مثل مساهمات الأعضاء الآخرين)، تخطاه
        if (!$targetElement.is(':visible')) {
            return;
        }

        if ($targetElement.prev('.btn-select-delete').length || $targetElement.next('.btn-select-delete').length) {
            return;
        }
        var $selectButton = $(
            '<li class="btn-select-delete" title="حذف متعدد"><i class="material-symbols-outlined">delete</i></li>'
        );
        $targetElement.before($selectButton);
    });

    if ($('#batch-delete-container').length === 0) {
        var $batchAction = $(
            '<div id="batch-delete-container">' +
                '<button id="run-batch-delete" class="btn btn-default btn-red">' +
                    'حذف المشاركات المحددة (<span id="selected-count">0</span>)' +
                '</button>' +
            '</div>'
        );
        $('body').append($batchAction);
    }

    $(document).on('click', '.btn-select-delete', function (e) {
        e.preventDefault();
        e.stopPropagation();
        var $selectButton = $(this);
        $selectButton.toggleClass('marked-for-delete');
        var $item = $selectButton.closest('.post, tr, .block-content');
        if (!$item.length) {
            $item = $selectButton.parent();
        }
        if ($selectButton.hasClass('marked-for-delete')) {
            $item.addClass('batch-delete-highlight');
        } else {
            $item.removeClass('batch-delete-highlight');
        }
        updateCount();
    });

    function updateCount() {
        var count = $('.btn-select-delete.marked-for-delete').length;
        $('#selected-count').text(count);
        $('#run-batch-delete').prop('disabled', count === 0);

        var $container = $('#batch-delete-container');
        if (count > 0) {
            $container.addClass('show-bar');
        } else {
            $container.removeClass('show-bar');
        }
    }

    $(document).on('click', '#run-batch-delete', function () {
        var $markedItems = $('.btn-select-delete.marked-for-delete');
        if ($markedItems.length === 0) {
            alert('الرجاء تحديد مشاركة واحدة على الأقل للحذف.');
            return;
        }
        var count = $markedItems.length;
        $('#custom-confirm-overlay').remove();
        var confirmModal = $(
            '<div id="custom-confirm-overlay">' +
                '<div id="custom-confirm-box">' +
                    '<p>هل أنت متأكد من رغبتك في حذف <b>' + count + '</b> من المشاركات المحددة؟</p>' +
                    '<div class="confirm-btns">' +
                        '<button id="confirm-yes">نعم</button>' +
                        '<button id="confirm-no">إلغاء</button>' +
                    '</div>' +
                '</div>' +
            '</div>'
        );
        $('body').append(confirmModal);
    });

    $(document).on('click', '#confirm-no', function () {
        $('#custom-confirm-overlay').remove();
    });

    $(document).on('click', '#confirm-yes', function () {
        var $markedItems = $('.btn-select-delete.marked-for-delete');
        var deleteButtons = [];
        $markedItems.each(function () {
            var $selectButton = $(this);
            var $deleteButton = $selectButton.next('.btn-delete, .i_icon_delete');
            if (!$deleteButton.length) {
                $deleteButton = $selectButton.parent().find('.btn-delete, .i_icon_delete');
            }
            if ($deleteButton.length) {
                deleteButtons.push($deleteButton);
            }
        });

        if (deleteButtons.length === 0) {
            $('#custom-confirm-overlay').remove();
            alert('لم يتم العثور على أزرار الحذف.');
            return;
        }

        $('#custom-confirm-box').html(
            '<p id="progress-text">جاري حذف المشاركة... 1 من ' + deleteButtons.length + '...</p>' +
            '<span class="center-loading-spinner"></span>'
        );

        $('#run-batch-delete').prop('disabled', true);
        processFormDeletions(deleteButtons, 0);
    });

    function processFormDeletions(buttons, index) {
        if (index >= buttons.length) {
            $('#custom-confirm-box').html(
                '<p style="color: #28a745; font-weight: bold; font-size: 17px;">تم حذف المشاركات المحددة بنجاح!</p>' +
                '<div class="confirm-btns" style="margin-top: 20px;">' +
                    '<button id="confirm-ok">موافق</button>' +
                '</div>'
            );
            return;
        }

        $('#progress-text').text('جاري حذف المشاركة... ' + (index + 1) + ' من ' + buttons.length + '...');
        var $currentDeleteBtn = buttons[index];
        var targetUrl = '';
    
        if ($currentDeleteBtn.is('a')) {
            targetUrl = $currentDeleteBtn.attr('href');
        } else {
            targetUrl = $currentDeleteBtn.find('a').attr('href') || $currentDeleteBtn.closest('a').attr('href');
        }

        if (!targetUrl) {
            processFormDeletions(buttons, index + 1);
            return;
        }

        $.get(targetUrl)
            .done(function(htmlResponse) {
                var $html = $(htmlResponse);
                var $form = $html.find('form input[name="mode"][value="delete"]').closest('form');
                if ($form.length === 0) {
                    $form = $html.find('form');
                }
                if ($form.length === 0) {
                    $form = $('form');
                }

                if ($form.length > 0) {
                    var formData = $form.serialize() + '&confirm=%D9%86%D8%B9%D9%85';
                    var formAction = $form.attr('action') || targetUrl;

                    $.post(formAction, formData)
                        .done(function() {
                            processFormDeletions(buttons, index + 1);
                        })
                        .fail(function() {
                            processFormDeletions(buttons, index + 1);
                        });
                } else {
                    processFormDeletions(buttons, index + 1);
                }
            })
            .fail(function() {
                processFormDeletions(buttons, index + 1);
            });
    }

    $(document).on('click', '#confirm-ok', function () {
        location.reload();
    });

    updateCount();
});

ثم اضغط على زر قدم.

أداة تختصر دقائق طويلة من العمل الإداري إلى ثوانٍ معدودة، وتجعل تنظيم المواضيع أسهل على الإدارة والأعضاء معًا. كل التقدير لصاحب الكود على هذه الإضافة التي طوّرها بالاستعانة بالذكاء الاصطناعي.

صاحب الكود: كونان2000
 

رأيك جزء من المعرفة.

أضف تجربتك أو سؤالك، فالنقاش يكمل الفكرة.

في هذا الموضوع

صاحب النقاش

كود جيفري
كود جيفريعضو جديد

معرفة تكبر بالنقاش

وجدت معلومة مفيدة؟ أضف تجربتك أو سؤالك ليساعد النقاش أعضاء آخرين.

أكمل رحلتك

كود يخفي أي جزء من المساهمة عن الزواركود الروابط أو الزيارات الأخيرة في المنتدىتمييز المساهمات حسب الجهاز (الهواتف والكمبيوترات)
عودة
أعلى