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 1.001: | Baris 1.001: | ||
/* ========================================================== | /* ========================================================== | ||
🔵 MIPPEDIA ACCOUNT VERIFICATION SYSTEM | |||
Versi Stabil: Auto-Fill, Admin Panel, & Strict Security | |||
========================================================== */ | ========================================================== */ | ||
$(document).ready(function() { | $(document).ready(function() { | ||
var user = mw.config.get('wgUserName') | var user = mw.config.get('wgUserName'); | ||
var pageName = mw.config.get('wgPageName'); | |||
var ns = mw.config.get('wgNamespaceNumber'); | |||
var isAdmin = mw.config.get('wgUserGroups').includes('sysop'); | |||
var $content = $('#mw-content-text'); | |||
var api = new mw.Api(); | |||
// URL Ikon Centang Biru (Pastikan file ini ada di Wiki lo) | |||
var vBadgeUrl = mw.config.get('wgScriptPath') + '/index.php?title=Special:Redirect/file/Verified_Badge.png'; | var vBadgeUrl = mw.config.get('wgScriptPath') + '/index.php?title=Special:Redirect/file/Verified_Badge.png'; | ||
// --- 1. | // --- 1. AUTO-FILL TEKS VERIFIKASI --- | ||
if (mw.config.get('wgAction') === 'edit' && sessionStorage.getItem('mippedia_auth_verify')) { | |||
var | var savedText = sessionStorage.getItem('mippedia_auth_verify'); | ||
var vTable = "{| class='wikitable' style='width:100%'\n|+ Bukti Identitas Resmi\n|-\n! Dokumen !! Tautan/URL Bukti\n|-\n| KTP / Paspor / SIM || (Masukkan URL Foto Bukti lo di sini, boys!)\n|-\n| Akun Medsos / Website || (Masukkan URL pembuktian identitas lainnya)\n|}"; | |||
$('#wpTextbox1').val(savedText + "\n\n" + vTable + "\n\n<div class='mippedia-status'>'''Status: 🕒 Sedang diverifikasi'''</div>\n\n--" + user); | |||
sessionStorage.removeItem('mippedia_auth_verify'); | |||
} | } | ||
// --- 2. | // --- 2. TOMBOL VERIFIKASI (DI PROFIL SENDIRI) --- | ||
if (ns === 2 && user && pageName.includes('Pengguna:' + user)) { | |||
if (!$('#ca-mippedia-verify').length) { | |||
var $vLink = $('<li>').attr({'id': 'ca-mippedia-verify', 'class': 'mw-list-item'}).append( | |||
$('<a>').attr({'href': '#', 'title': 'Ajukan verifikasi akun'}).css({ | |||
'display': 'flex', 'align-items': 'center', 'padding': '6px 12px' | |||
}).append( | |||
} | $('<span>').html('🔵 Verifikasi').css({'color': '#0095f6', 'font-weight': 'bold'}) | ||
) | |||
); | |||
$vLink.click(function(e) { | |||
e.preventDefault(); | |||
var talkPage = "Pembicaraan_Pengguna:" + mw.config.get('wgTitle'); | |||
sessionStorage.setItem('mippedia_auth_verify', "== Permintaan Verifikasi Akun ==\nHalo Pengurus,\n\nSaya memohon verifikasi untuk akun [[" + pageName + "]] agar mendapatkan lencana centang biru resmi."); | |||
window.location.href = mw.util.getUrl(talkPage, { action: 'edit', section: 'new', preloadtitle: 'Permintaan Verifikasi Akun' }); | |||
}); | }); | ||
$('#p-cactions ul, #p-views ul').append($vLink); | |||
} | } | ||
} | } | ||
// --- 3. | // --- 3. SISTEM PENCEGAHAN (SATPAM KATEGORI MANUAL) --- | ||
if (ns===2 && ['edit','submit'].includes(mw.config.get('wgAction'))) { | if (ns === 2 && ['edit', 'submit'].includes(mw.config.get('wgAction'))) { | ||
$('#editform').on('submit', function() { | $('#editform').on('submit', function() { | ||
var | var content = $('#wpTextbox1').val(); | ||
if (/\[\[Category:Pengguna_Terverifikasi\]\]/gi.test( | if (/\[\[Category:Pengguna_Terverifikasi\]\]/gi.test(content) && !sessionStorage.getItem('is_admin_action')) { | ||
alert("⚠️ | alert("⚠️ AKSES DITOLAK: Penambahan kategori verifikasi secara manual dilarang!\nSistem akan menghapus kategori tersebut secara otomatis."); | ||
$('#wpTextbox1').val( | $('#wpTextbox1').val(content.replace(/\[\[Category:Pengguna_Terverifikasi\]\]/gi, '')); | ||
return false; | return false; | ||
} | } | ||
| Baris 1.053: | Baris 1.058: | ||
} | } | ||
// --- 4. | // --- 4. PANEL ADMIN (PROSES PERSETUJUAN) --- | ||
if (ns=== | if (ns === 3 && isAdmin && $content.text().includes("Sedang diverifikasi")) { | ||
var targetUserPage = "Pengguna:" + mw.config.get('wgTitle'); | |||
api.get({ action: 'query', prop: 'revisions', titles: pageName, rvprop: 'user|content', rvlimit: 1 }).done(function(res) { | |||
var pg = res.query.pages[Object.keys(res.query.pages)[0]]; | |||
var requester = pg.revisions[0].user; | |||
var oldContent = pg.revisions[0]['*']; | |||
var $panel = $('<div style="background:#f0f7ff; border:2px solid #0095f6; padding:15px; border-radius:10px; margin-bottom:15px;">' + | |||
'<b>🔵 ADMIN VERIFICATION CONTROL</b><br><small>Pemohon: '+requester+'</small></div>'); | |||
var | var $btnOk = $('<button>').text('✅ SETUJUI').css({'background':'#0095f6','color':'#fff','padding':'5px 12px','border':'none','cursor':'pointer','font-weight':'bold'}); | ||
var $btnNo = $('<button>').text('❌ TOLAK').css({'background':'#555','color':'#fff','padding':'5px 12px','border':'none','cursor':'pointer','margin-left':'10px'}); | |||
$btnOk.click(function() { | |||
$(this).prop('disabled', true).text('Processing...'); | |||
sessionStorage.setItem('is_admin_action', 'true'); | |||
// STEP 1: TAMBAH KATEGORI KE PROFIL | |||
api.postWithToken('edit', { | |||
action: 'edit', title: targetUserPage, appendtext: '\n[[Category:Pengguna_Terverifikasi]]', summary: 'System: Akun Terverifikasi' | |||
}).then(function() { | |||
// STEP 2: UPDATE STATUS DI TALKPAGE | |||
var newText = oldContent.replace("Status: 🕒 Sedang diverifikasi", "Status: ✅ '''Akun Terverifikasi''' 🔵"); | |||
api.postWithToken('edit', {action:'edit', title: | return api.postWithToken('edit', { action: 'edit', title: pageName, text: newText, summary: 'Verification Approved' }); | ||
var | |||
return api.postWithToken('edit', {action:'edit', title: | |||
}).then(function() { | }).then(function() { | ||
// STEP 3: PESAN OTOMATIS KE USER | |||
}).done(function() { | var msg = "\n== Akun Terverifikasi ==\nHalo [["+requester+"]], permohonan verifikasi lo udah disetujui, boys! Sekarang profil lo punya centang biru resmi. --[[Pengguna:Admin|Admin]] 🔵"; | ||
sessionStorage.removeItem(' | return api.postWithToken('edit', { action: 'edit', title: "Pembicaraan_Pengguna:"+requester, section: 'new', text: msg }); | ||
}).done(function() { | |||
sessionStorage.removeItem('is_admin_action'); | |||
location.reload(); | |||
}); | }); | ||
}); | }); | ||
$btnNo.click(function() { | |||
$ | |||
var alasan = prompt("Masukkan alasan penolakan:"); | var alasan = prompt("Masukkan alasan penolakan:"); | ||
if (!alasan) return; | if (!alasan) return; | ||
$(this).prop('disabled',true).text(' | $(this).prop('disabled', true).text('Rejecting...'); | ||
var | |||
api.postWithToken('edit', {action:'edit', title: | var newText = oldContent.replace("Status: 🕒 Sedang diverifikasi", "Status: ❌ '''Verifikasi Ditolak'''\n\nAlasan: " + alasan); | ||
api.postWithToken('edit', { action: 'edit', title: pageName, text: newText, summary: 'Verification Rejected' }).then(function() { | |||
var msg = "\n== Notifikasi Verifikasi ==\nHalo [["+requester+"]], permohonan verifikasi lo ditolak karena: " + alasan + ". Silakan ajukan ulang dengan bukti lebih kuat, boys! --[[Pengguna:Admin|Admin]]"; | |||
}).done(function() { location.reload(); }); | return api.postWithToken('edit', { action: 'edit', title: "Pembicaraan_Pengguna:"+requester, section: 'new', text: msg }); | ||
}).done(function() { | |||
location.reload(); | |||
}); | |||
}); | }); | ||
$('#mw-content-text').prepend($ | $panel.append($btnOk, $btnNo); | ||
$('#mw-content-text').prepend($panel); | |||
}); | }); | ||
} | } | ||
}); | }); | ||