MediaWiki:Common.js: Perbedaan antara revisi

Tidak ada ringkasan suntingan
Tanda: Suntingan perangkat seluler Suntingan peramban seluler
Tidak ada ringkasan suntingan
Tanda: Suntingan perangkat seluler Suntingan peramban seluler
Baris 532: Baris 532:


/* ==========================================================
/* ==========================================================
   🛡️ MIPPEDIA ULTIMATE VERIFICATION v4.0 (STATUS & RE-TRY)
   🛡️ MIPPEDIA VERIFICATION SYSTEM v7.0 (THE TOTAL FUSION)
   ========================================================== */
   ========================================================== */
$(document).ready(function() {
$(document).ready(function() {
Baris 540: Baris 540:
     var isAdmin = mw.config.get('wgUserGroups').includes('sysop');
     var isAdmin = mw.config.get('wgUserGroups').includes('sysop');
     var $content = $('#mw-content-text');
     var $content = $('#mw-content-text');
    var pageText = $content.text();


     // --- 1. SISI PENGGUNA: PENGISI TEKS OTOMATIS ---
     // --- 1. AUTO-FILL SAAT USER KLIK MINTA VERIFIKASI ---
     if (mw.config.get('wgAction') === 'edit' && sessionStorage.getItem('mippedia_req_text')) {
     if (mw.config.get('wgAction') === 'edit' && sessionStorage.getItem('mippedia_req_text')) {
         var savedText = sessionStorage.getItem('mippedia_req_text');
         var savedText = sessionStorage.getItem('mippedia_req_text');
         $('#wpTextbox1').val(savedText + "\n\n**Alasan saya:** \n(Tulis alasan baru lo di sini, boys!) \n\n--" + user);
         $('#wpTextbox1').val(savedText + "\n\n**Alasan saya:** \n(Tulis alasan lo di sini, boys!) \n\n<div class='mippedia-status'>'''Status: 🕒 Sedang diajukan'''</div>\n\n--" + user);
         sessionStorage.removeItem('mippedia_req_text');
         sessionStorage.removeItem('mippedia_req_text');
     }
     }


     // --- 2. SISI HALAMAN BERKAS: TOMBOL MINTA ---
     // --- 2. TOMBOL MINTA DI HALAMAN BERKAS ---
     if (ns === 6) {
     if (ns === 6) {
         var isVerified = pageText.includes("Aset Resmi");
         var pageText = $content.text();
        if (!isVerified) {
        if (!pageText.includes("Aset Resmi")) {
             var $reqBtn = $('<button>').html('<span>📩</span> Minta Verifikasi').css({
             var $reqBtn = $('<button>').html('<span>📩</span> Minta Verifikasi').css({
                 'background': '#36c', 'color': '#fff', 'border': 'none', 'padding': '5px 15px',  
                 'background': '#36c', 'color': '#fff', 'border': 'none', 'padding': '5px 15px',  
Baris 560: Baris 559:
                 if (!user) { window.location.href = mw.util.getUrl('Istimewa:Masuk_log', { returnto: pageName }); return; }
                 if (!user) { window.location.href = mw.util.getUrl('Istimewa:Masuk_log', { returnto: pageName }); return; }
                 var talkPage = "Pembicaraan_Berkas:" + mw.config.get('wgTitle');
                 var talkPage = "Pembicaraan_Berkas:" + mw.config.get('wgTitle');
                 sessionStorage.setItem('mippedia_req_text', "Halo Pengurus Mippedia,\n\nSaya memohon verifikasi ulang untuk berkas [[:" + pageName + "]].");
                 sessionStorage.setItem('mippedia_req_text', "Halo Pengurus Mippedia,\n\nSaya memohon verifikasi untuk berkas [[:" + pageName + "]].");
                 window.location.href = mw.util.getUrl(talkPage, { action: 'edit', section: 'new', preloadtitle: 'Permintaan Verifikasi Berkas' });
                 window.location.href = mw.util.getUrl(talkPage, { action: 'edit', section: 'new', preloadtitle: 'Permintaan Verifikasi Berkas' });
             });
             });
Baris 567: Baris 566:
     }
     }


     // --- 3. SISI HALAMAN PEMBICARAAN: STATUS & ADMIN CONTROL ---
     // --- 3. LOGIKA ADMIN & STATUS DI HALAMAN PEMBICARAAN ---
     if (ns === 7) {
     if (ns === 7) {
         var api = new mw.Api();
         var api = new mw.Api();
        var requester = "";
         var filePage = pageName.replace('Pembicaraan_Berkas:', 'Berkas:');
         var filePage = pageName.replace('Pembicaraan_Berkas:', 'Berkas:');
 
       
         // Cari tahu pengaju pertama
         // Cari pengaju (revisi pertama)
         api.get({ action: 'query', prop: 'revisions', titles: pageName, rvprop: 'user', rvlimit: 1, rvdir: 'newer' }).done(function(data) {
         api.get({ action: 'query', prop: 'revisions', titles: pageName, rvprop: 'user', rvlimit: 1, rvdir: 'newer' }).done(function(data) {
             var pages = data.query.pages;
             var pages = data.query.pages;
            var requester = "";
             for (var id in pages) { requester = pages[id].revisions[0].user; }
             for (var id in pages) { requester = pages[id].revisions[0].user; }


             // Cek Status Berkas (Apakah sudah ada teks Aset Resmi di halaman Berkas?)
             var isPending = $content.text().includes("Status: 🕒 Sedang diajukan");
            api.get({ action: 'parse', page: filePage, prop: 'text' }).done(function(d) {
            var isRejected = $content.text().includes("Status: ❌ Ditolak");
                var fileContent = d.parse.text['*'];
                var statusHTML = "";
                var isDone = fileContent.includes("Aset Resmi");
 
                if (isDone) {
                    statusHTML = '<div style="background:#e6fffb; border:1px solid #00af89; color:#00af89; padding:10px; border-radius:8px; font-weight:bold; margin-bottom:15px;">✅ PERMINTAAN DISETUJUI</div>';
                } else if (pageText.includes("DITOLAK")) {
                    statusHTML = '<div style="background:#fff1f0; border:1px solid #f5222d; color:#f5222d; padding:10px; border-radius:8px; font-weight:bold; margin-bottom:15px;">❌ PERMINTAAN DITOLAK</div>';
                    // Munculin tombol Coba Lagi khusus buat pengaju
                    if (user === requester) {
                        var $retryBtn = $('<button>').text('🔄 Coba Lagi').css({'background':'#36c', 'color':'#fff', 'border':'none', 'padding':'5px 10px', 'border-radius':'5px', 'cursor':'pointer', 'margin-top':'10px'});
                        $retryBtn.click(function() {
                            sessionStorage.setItem('mippedia_req_text', "Halo Pengurus, saya mencoba mengajukan kembali verifikasi untuk [[:" + filePage + "]] setelah memperbaiki alasan.");
                            window.location.href = mw.util.getUrl(pageName, { action: 'edit', section: 'new', preloadtitle: 'Permintaan Verifikasi Berkas (Re-submission)' });
                        });
                        statusHTML += '<br>';
                        setTimeout(function(){ $('#status-box').append($retryBtn); }, 100);
                    }
                } else {
                    statusHTML = '<div style="background:#fff7e6; border:1px solid #faad14; color:#d48806; padding:10px; border-radius:8px; font-weight:bold; margin-bottom:15px;">🕒 SEDANG DIAJUKAN</div>';
                }


                 $('#firstHeading').after('<div id="status-box">' + statusHTML + '</div>');
            // Munculkan Tombol Coba Lagi jika Ditolak (Khusus Pengaju)
            if (isRejected && user === requester) {
                 var $retryBtn = $('<button>').text('🔄 Coba Lagi').css({'background':'#36c','color':'#fff','border':'none','padding':'5px 10px','border-radius':'5px','cursor':'pointer','display':'block','margin-top':'10px'});
                $retryBtn.click(function() { window.location.href = mw.util.getUrl(filePage); });
                $('.mippedia-status').append($retryBtn);
            }


                // --- PANEL ADMIN (Hanya jika belum disetujui) ---
            // PANEL ADMIN (Muncul jika ada pengajuan yang belum diproses)
                if (isAdmin && !isDone) {
            if (isAdmin && isPending) {
                    var $adminPanel = $('<div style="background:#f0f5ff; border:1px solid #36c; padding:15px; border-radius:12px; margin-bottom:20px;">' +
                var $panel = $('<div style="background:#f0f5ff; border:2px solid #36c; padding:15px; border-radius:12px; margin:15px 0;">' +
                        '<div style="font-weight:bold; color:#36c; margin-bottom:10px;">🛡️ ADMIN ACTION</div></div>');
                    '<div style="font-weight:bold; color:#36c; margin-bottom:10px;">🛡️ ADMIN CONTROL PANEL</div></div>');
                   
               
                    var $btnApprove = $('<button>').text('SETUJUI').css({'background':'#00af89', 'color':'#fff', 'border':'none', 'padding':'8px 15px', 'margin-right':'10px', 'cursor':'pointer'});
                var $btnApprove = $('<button>').text('✅ SETUJUI').css({'background':'#00af89','color':'#fff','border':'none','padding':'8px 15px','margin-right':'10px','cursor':'pointer','font-weight':'bold'});
                    var $btnReject = $('<button>').text('TOLAK').css({'background':'#d33', 'color':'#fff', 'border':'none', 'padding':'8px 15px', 'cursor':'pointer'});
                var $btnReject = $('<button>').text('❌ TOLAK').css({'background':'#d33','color':'#fff','border':'none','padding':'8px 15px','cursor':'pointer','font-weight':'bold'});


                    $btnApprove.click(function() {
                $btnApprove.click(function() {
                        api.postWithToken('edit', { action: 'edit', title: filePage, appendtext: '\nAset Resmi', summary: 'Verifikasi Disetujui' }).done(function() {
                    $btnApprove.prop('disabled', true).text('Processing...');
                             var msg = "\n== Notifikasi Verifikasi ==\n\nHalo [[" + requester + "]], permohonan Anda untuk [[:" + filePage + "]] telah '''DISETUJUI'''. --[[Pengguna:Admin|Admin]] ([[Pembicaraan Pengguna:Admin|bicara]]) 10 April 2026 14.57 (UTC)";
                    // A. Update Halaman Berkas (Badge Aset Resmi)
                            api.postWithToken('edit', { action: 'edit', title: "Pembicaraan_Pengguna:" + requester, section: 'new', text: msg }).done(function() { location.reload(); });
                    api.postWithToken('edit', { action: 'edit', title: filePage, appendtext: '\nAset Resmi', summary: 'Verifikasi Disetujui' }).done(function() {
                        // B. Update Isi Teks Pembicaraan (Ganti status di dalam konten)
                        api.get({ action: 'query', prop: 'revisions', titles: pageName, rvprop: 'content' }).done(function(res) {
                            var content = res.query.pages[Object.keys(res.query.pages)[0]].revisions[0]['*'];
                             var updatedContent = content.replace("Status: 🕒 Sedang diajukan", "Status: ✅ '''Disetujui'''");
                            api.postWithToken('edit', { action: 'edit', title: pageName, text: updatedContent, summary: 'Status: Disetujui' }).done(function() {
                                // C. Kirim Pesan Notif ke User
                                var msg = "\n== Notifikasi Verifikasi ==\nHalo [[" + requester + "]], permohonan Anda untuk [[:" + filePage + "]] telah '''DISETUJUI'''. --[[Pengguna:Admin|Admin]] ([[Pembicaraan Pengguna:Admin|bicara]]) 10 April 2026 16.30 (UTC)";
                                api.postWithToken('edit', { action: 'edit', title: "Pembicaraan_Pengguna:" + requester, section: 'new', text: msg }).done(function() {
                                    location.reload();
                                });
                            });
                         });
                         });
                     });
                     });
                });


                    $btnReject.click(function() {
                $btnReject.click(function() {
                        var alasan = prompt("Alasan penolakan:");
                    var alasan = prompt("Masukkan alasan penolakan:");
                        if (!alasan) return;
                    if (!alasan) return;
                        api.postWithToken('edit', { action: 'edit', title: pageName, appendtext: '\n\n**STATUS: DITOLAK**', summary: 'Verifikasi Ditolak' }).done(function() {
                    $btnReject.prop('disabled', true).text('Processing...');
                             var retryLink = mw.util.getUrl(filePage);
                    // A. Update Isi Teks Pembicaraan (Status Ditolak + Alasan)
                             var msg = "\n== Notifikasi Verifikasi ==\n\nHalo [[" + requester + "]], permohonan Anda untuk [[:" + filePage + "]] '''DITOLAK''' karena: ''" + alasan + "''.\n\nJika ingin mencoba lagi, silakan klik tombol di halaman permohonan atau klik [ " + retryLink + " di sini] untuk kembali ke berkas. --[[Pengguna:Admin|Admin]] ([[Pembicaraan Pengguna:Admin|bicara]]) 10 April 2026 14.57 (UTC)";
                    api.get({ action: 'query', prop: 'revisions', titles: pageName, rvprop: 'content' }).done(function(res) {
                             api.postWithToken('edit', { action: 'edit', title: "Pembicaraan_Pengguna:" + requester, section: 'new', text: msg }).done(function() { location.reload(); });
                        var content = res.query.pages[Object.keys(res.query.pages)[0]].revisions[0]['*'];
                        var updatedContent = content.replace("Status: 🕒 Sedang diajukan", "Status: ❌ '''Ditolak'''\n\n''Alasan: " + alasan + "''");
                        api.postWithToken('edit', { action: 'edit', title: pageName, text: updatedContent, summary: 'Status: Ditolak' }).done(function() {
                             // B. Kirim Pesan Notif ke User
                             var msg = "\n== Notifikasi Verifikasi ==\nHalo [[" + requester + "]], permohonan Anda untuk [[:" + filePage + "]] '''DITOLAK''' karena: ''" + alasan + "''. --[[Pengguna:Admin|Admin]] ([[Pembicaraan Pengguna:Admin|bicara]]) 10 April 2026 16.30 (UTC)";
                             api.postWithToken('edit', { action: 'edit', title: "Pembicaraan_Pengguna:" + requester, section: 'new', text: msg }).done(function() {
                                location.reload();
                            });
                         });
                         });
                     });
                     });
                });


                    $adminPanel.append($btnApprove, $btnReject);
                $panel.append($btnApprove, $btnReject);
                    $('#status-box').after($adminPanel);
                $('#mw-content-text').prepend($panel);
                }
             }
             });
         });
         });
     }
     }
});
});