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 VERIFICATION SYSTEM v7.0 (THE TOTAL FUSION)
   🛡️ MIPPEDIA VERIFICATION SYSTEM v8.0 (ANTI-GAGAL)
   ========================================================== */
   ========================================================== */
$(document).ready(function() {
$(document).ready(function() {
Baris 541: Baris 541:
     var $content = $('#mw-content-text');
     var $content = $('#mw-content-text');


     // --- 1. AUTO-FILL SAAT USER KLIK MINTA VERIFIKASI ---
     // --- 1. AUTO-FILL TEKS (PENGGUNA) ---
     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');
Baris 548: Baris 548:
     }
     }


     // --- 2. TOMBOL MINTA DI HALAMAN BERKAS ---
     // --- 2. TOMBOL MINTA (HALAMAN BERKAS) ---
     if (ns === 6) {
     if (ns === 6) {
         var pageText = $content.text();
         if (!$content.text().includes("Aset Resmi")) {
        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 566: Baris 565:
     }
     }


     // --- 3. LOGIKA ADMIN & STATUS DI HALAMAN PEMBICARAAN ---
     // --- 3. PANEL ADMIN & AUTOMATION (HALAMAN PEMBICARAAN) ---
     if (ns === 7) {
     if (ns === 7) {
         var api = new mw.Api();
         var api = new mw.Api();
         var filePage = pageName.replace('Pembicaraan_Berkas:', 'Berkas:');
         var filePage = pageName.replace('Pembicaraan_Berkas:', 'Berkas:');
          
         var fullContent = $content.text();
         // Cari pengaju (revisi pertama)
        var isPending = fullContent.includes("Status: 🕒 Sedang diajukan");
 
         // Ambil User Pengaju
         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;
Baris 577: Baris 578:
             for (var id in pages) { requester = pages[id].revisions[0].user; }
             for (var id in pages) { requester = pages[id].revisions[0].user; }


             var isPending = $content.text().includes("Status: 🕒 Sedang diajukan");
             // Tombol Coba Lagi buat Pengaju
             var isRejected = $content.text().includes("Status: ❌ Ditolak");
             if (fullContent.includes("Status: ❌ Ditolak") && user === requester) {
 
                 var $retryBtn = $('<button>').text('🔄 Coba Lagi').css({'background':'#36c','color':'#fff','border':'none','padding':'4px 10px','border-radius':'4px','cursor':'pointer','display':'block','margin-top':'10px'});
            // 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); });
                 $retryBtn.click(function() { window.location.href = mw.util.getUrl(filePage); });
                 $('.mippedia-status').append($retryBtn);
                 $('.mippedia-status').append($retryBtn);
             }
             }


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


                 $btnApprove.click(function() {
                 $btnApprove.click(function() {
                     $btnApprove.prop('disabled', true).text('Processing...');
                     $btnApprove.prop('disabled', true).text('Processing...');
                     // A. Update Halaman Berkas (Badge Aset Resmi)
                   
                     // STEP 1: Nulis "Aset Resmi" di Berkas
                     api.postWithToken('edit', { action: 'edit', title: filePage, appendtext: '\nAset Resmi', summary: 'Verifikasi Disetujui' }).done(function() {
                     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)
                         // STEP 2: Ganti teks status di halaman diskusi
                         api.get({ action: 'query', prop: 'revisions', titles: pageName, rvprop: 'content' }).done(function(res) {
                         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 content = res.query.pages[Object.keys(res.query.pages)[0]].revisions[0]['*'];
                             var updatedContent = content.replace("Status: 🕒 Sedang diajukan", "Status: ✅ '''Disetujui'''");
                             var newText = content.replace("Status: 🕒 Sedang diajukan", "Status: ✅ '''Disetujui'''");
                             api.postWithToken('edit', { action: 'edit', title: pageName, text: updatedContent, summary: 'Status: Disetujui' }).done(function() {
                             api.postWithToken('edit', { action: 'edit', title: pageName, text: newText, summary: 'Update Status: Disetujui' }).done(function() {
                                 // C. Kirim Pesan Notif ke User
                                 // STEP 3: Kirim 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)";
                                 var msg = "\n== Notifikasi Verifikasi ==\nHalo [[" + requester + "]], permohonan Anda untuk [[:" + filePage + "]] telah '''DISETUJUI'''. --[[Pengguna:Admin|Admin]] ([[Pembicaraan Pengguna:Admin|bicara]]) 10 April 2026 16.37 (UTC)";
                                 api.postWithToken('edit', { action: 'edit', title: "Pembicaraan_Pengguna:" + requester, section: 'new', text: msg }).done(function() {
                                 api.postWithToken('edit', { action: 'edit', title: "Pembicaraan_Pengguna:" + requester, section: 'new', text: msg }).done(function() {
                                     location.reload();
                                     location.reload();
Baris 615: Baris 614:


                 $btnReject.click(function() {
                 $btnReject.click(function() {
                     var alasan = prompt("Masukkan alasan penolakan:");
                     var alasan = prompt("Alasan penolakan:");
                     if (!alasan) return;
                     if (!alasan) return;
                     $btnReject.prop('disabled', true).text('Processing...');
                     $btnReject.prop('disabled', true).text('Processing...');
                    // A. Update Isi Teks Pembicaraan (Status Ditolak + Alasan)
 
                     api.get({ action: 'query', prop: 'revisions', titles: pageName, rvprop: 'content' }).done(function(res) {
                     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 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 + "''");
                         var newText = 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() {
                         api.postWithToken('edit', { action: 'edit', title: pageName, text: newText, summary: 'Update 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.37 (UTC)";
                             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() {
                             api.postWithToken('edit', { action: 'edit', title: "Pembicaraan_Pengguna:" + requester, section: 'new', text: msg }).done(function() {
                                 location.reload();
                                 location.reload();