?php
if(!defined('ABSPATH'))exit;
define('AM_V','1.0.6');
add_action('after_setup_theme',function(){
add_theme_support('title-tag');add_theme_support('post-thumbnails');add_theme_support('automatic-feed-links');add_theme_support('responsive-embeds');
add_theme_support('html5',['search-form','comment-form','comment-list','gallery','caption','style','script']);
add_theme_support('custom-logo',['height'=>60,'width'=>300,'flex-width'=>true,'flex-height'=>true]);
register_nav_menus(['menu'=>'Menu Kategori (panel menu)','footer'=>'Menu Footer (Informasi)']);
add_image_size('am-card',800,450,true);
});
add_action('wp_enqueue_scripts',function(){
wp_enqueue_style('am-font','https://fonts.googleapis.com/css2?family=Poppins:wght@400;500;600;700;800&display=swap',[],null);
wp_enqueue_style('am',get_stylesheet_uri(),[],AM_V);
wp_enqueue_script('am',get_template_directory_uri().'/assets/main.js',[],AM_V,true);
if(is_singular()&&comments_open()&&get_option('thread_comments'))wp_enqueue_script('comment-reply');
});
add_action('wp_head',function(){if(!has_site_icon())echo '';});
function am_opt($k,$d=''){return get_theme_mod('am_'.$k,$d);}
function am_logo(){if(has_custom_logo()){the_custom_logo();return;}echo '';}
function am_rp($n){return 'Rp'.number_format((float)$n,0,',','.');}
/* ---------- Iklan ---------- */
function am_slots(){return ['atas'=>'Atas halaman, di atas header (320x480 atau 300x600)','header'=>'Header, di bawah menu (970x250 / 320x100)','tengah'=>'Beranda tengah (728x90)','side1'=>'Sidebar atas (300x250)','side2'=>'Sidebar bawah (300x250)','bawah'=>'Beranda bawah (970x250)','a_atas'=>'Artikel: bawah judul (728x90)','a_tengah'=>'Artikel: tengah isi (336x280)','a_bawah'=>'Artikel: setelah isi (728x90)','a_terkait'=>'Artikel: bawah berita terkait (728x90)','a_side'=>'Artikel: sidebar kanan (300x250)'];}
function am_ad($s){$sl=am_slots();$code=am_opt('ad_'.$s.'_code');$img=am_opt('ad_'.$s.'_img');$url=am_opt('ad_'.$s.'_url');
if($code){echo '
Slot iklan: '.esc_html($sl[$s]).' (hanya terlihat oleh admin. Atur di Tampilan > Sesuaikan > ArusMadura: Iklan)
';}
function am_code($v){return current_user_can('unfiltered_html')?$v:wp_kses_post($v);}
/* ---------- Customizer ---------- */
add_action('customize_register',function($c){
$c->add_section('am_info',['title'=>'ArusMadura: Info & Sosial','priority'=>30]);
$f=[['alamat','Alamat redaksi','textarea'],['email','Email redaksi'],['telp','Telepon redaksi'],['fb','Facebook (URL)'],['ig','Instagram (URL)'],['x','X / Twitter (URL)'],['tt','TikTok (URL)'],['wa','WhatsApp (URL)'],['play','Google Play (URL)'],['appstore','App Store (URL)']];
foreach($f as $x){$cb=in_array($x[0],['alamat'])?'sanitize_textarea_field':(in_array($x[0],['email','telp'])?'sanitize_text_field':'esc_url_raw');
$c->add_setting('am_'.$x[0],['default'=>'','sanitize_callback'=>$cb]);$c->add_control('am_'.$x[0],['section'=>'am_info','label'=>$x[1],'type'=>isset($x[2])?$x[2]:'text']);}
$c->add_section('am_ads',['title'=>'ArusMadura: Iklan','priority'=>31,'description'=>'Untuk tiap slot isi KODE IKLAN (mis. Google AdSense) ATAU gambar + link tujuan. Kosongkan untuk menyembunyikan slot.']);
foreach(am_slots() as $k=>$l){
$c->add_setting('am_ad_'.$k.'_code',['default'=>'','sanitize_callback'=>'am_code']);$c->add_control('am_ad_'.$k.'_code',['section'=>'am_ads','label'=>$l.': kode iklan','type'=>'textarea']);
$c->add_setting('am_ad_'.$k.'_img',['default'=>'','sanitize_callback'=>'esc_url_raw']);$c->add_control(new WP_Customize_Image_Control($c,'am_ad_'.$k.'_img',['section'=>'am_ads','label'=>$l.': gambar banner']));
$c->add_setting('am_ad_'.$k.'_url',['default'=>'','sanitize_callback'=>'esc_url_raw']);$c->add_control('am_ad_'.$k.'_url',['section'=>'am_ads','label'=>$l.': link tujuan','type'=>'url']);}
$c->add_section('am_dukung',['title'=>'ArusMadura: Dukung Jurnalisme','priority'=>32]);
$d=[['dk_on','Tampilkan bagian Dukung Jurnalisme','checkbox',1,'absint'],['dk_target','Target dukungan (Rp)','number',30000000,'absint'],['dk_judul','Judul','text','Dukung Jurnalisme ArusMadura','sanitize_text_field'],['dk_desc','Deskripsi','textarea','Bantu kami menjaga jurnalisme yang kritis dan terpercaya. Setiap dukungan yang terverifikasi langsung menambah progres.','sanitize_textarea_field'],['dk_rek','Info rekening / e-wallet (satu baris per rekening)','textarea','','sanitize_textarea_field'],['dk_qris','Gambar QRIS','image','','esc_url_raw']];
foreach($d as $x){$c->add_setting('am_'.$x[0],['default'=>$x[3],'sanitize_callback'=>$x[4]]);
if($x[2]=='image')$c->add_control(new WP_Customize_Image_Control($c,'am_'.$x[0],['section'=>'am_dukung','label'=>$x[1]]));else $c->add_control('am_'.$x[0],['section'=>'am_dukung','label'=>$x[1],'type'=>$x[2]]);}
});
/* ---------- Donasi ---------- */
add_action('init',function(){register_post_type('donasi',['labels'=>['name'=>'Donasi','singular_name'=>'Donasi','add_new_item'=>'Catat donasi','edit_item'=>'Ubah donasi','menu_name'=>'Donasi'],'public'=>false,'show_ui'=>true,'menu_icon'=>'dashicons-heart','supports'=>['title'],'menu_position'=>26]);});
add_action('add_meta_boxes',function(){add_meta_box('am_amt','Nominal donasi','am_amt_box','donasi','normal','high');});
function am_amt_box($p){wp_nonce_field('am_amt','am_amt_n');echo '
Nominal (Rp, angka saja):
Judul = nama donatur. Ubah status ke Terbit (Publish) setelah dana masuk, maka progres di website otomatis bertambah. Status Tertunda (Pending) = belum diverifikasi.
';}
add_action('save_post_donasi',function($id){if(!isset($_POST['am_amt_n'])||!wp_verify_nonce($_POST['am_amt_n'],'am_amt')||!current_user_can('edit_post',$id))return;update_post_meta($id,'_am_amount',absint($_POST['am_amount']));});
add_filter('manage_donasi_posts_columns',function($c){$c['am_amount']='Nominal';return $c;});
add_action('manage_donasi_posts_custom_column',function($col,$id){if($col=='am_amount')echo esc_html(am_rp(get_post_meta($id,'_am_amount',true)));},10,2);
function am_total(){global $wpdb;return (int)$wpdb->get_var("SELECT SUM(m.meta_value+0) FROM {$wpdb->postmeta} m JOIN {$wpdb->posts} p ON p.ID=m.post_id WHERE p.post_type='donasi' AND p.post_status='publish' AND m.meta_key='_am_amount'");}
function am_donasi_submit(){
$back=wp_get_referer()?remove_query_arg('donasi',wp_get_referer()):home_url('/');
if(!isset($_POST['_wpnonce'])||!wp_verify_nonce($_POST['_wpnonce'],'am_donasi')||!empty($_POST['website'])){wp_safe_redirect($back);exit;}
$k='amd_'.md5(isset($_SERVER['REMOTE_ADDR'])?$_SERVER['REMOTE_ADDR']:'x');if(get_transient($k)){wp_safe_redirect(add_query_arg('donasi','tunggu',$back).'#dukung');exit;}
$a=absint(preg_replace('/\D/','',isset($_POST['amount'])?$_POST['amount']:''));$n=sanitize_text_field(isset($_POST['nama'])?$_POST['nama']:'');
if($a<10000){wp_safe_redirect(add_query_arg('donasi','min',$back).'#dukung');exit;}
$id=wp_insert_post(['post_type'=>'donasi','post_status'=>'pending','post_title'=>$n?$n:'Anonim']);
if($id){update_post_meta($id,'_am_amount',$a);set_transient($k,1,30);}
wp_safe_redirect(add_query_arg('donasi','ok',$back).'#dukung');exit;}
add_action('admin_post_nopriv_am_donasi','am_donasi_submit');add_action('admin_post_am_donasi','am_donasi_submit');
function am_dukung(){
if(!am_opt('dk_on',1))return;$T=max(1,(int)am_opt('dk_target',30000000));$g=am_total();$p=min(100,$g/$T*100);$cnt=(int)wp_count_posts('donasi')->publish;
$msg=['ok'=>'Terima kasih! Dukungan Anda akan tampil setelah diverifikasi redaksi.','min'=>'Nominal minimal Rp10.000.','tunggu'=>'Mohon tunggu sebentar sebelum mengirim lagi.'];$s=isset($_GET['donasi'])?sanitize_key($_GET['donasi']):'';
echo '
'.esc_html(am_opt('dk_desc','Bantu kami menjaga jurnalisme yang kritis dan terpercaya. Setiap dukungan yang terverifikasi langsung menambah progres.')).' Target: '.esc_html(am_rp($T)).' dalam 1 tahun.