43 lines
3.1 KiB
PHP
43 lines
3.1 KiB
PHP
<?php
|
|
if (!defined('ABSPATH')) exit;
|
|
class WZHF_Admin {
|
|
public function __construct(){ add_action('admin_menu',array($this,'menu')); add_action('admin_enqueue_scripts',array($this,'assets')); add_action('admin_post_wzhf_save',array($this,'save')); add_action('admin_post_wzhf_patch_so',array($this,'patch_so_server')); }
|
|
public function menu(){ add_menu_page('WooZoho','WooZoho','manage_woocommerce',WZHF_SLUG,array($this,'render'),'dashicons-portfolio',56); }
|
|
public function assets($hook){
|
|
if($hook!=='toplevel_page_'.WZHF_SLUG) return;
|
|
wp_enqueue_style('wzhf-admin',WZHF_URL.'assets/admin.css',array(),WZHF_VER);
|
|
wp_enqueue_script('wzhf-admin',WZHF_URL.'assets/admin.js',array('jquery'),WZHF_VER,true);
|
|
wp_localize_script('wzhf-admin','WZHF',array(
|
|
'rest'=> rest_url(WZHF_NS.'/tools'),
|
|
'nonce'=> wp_create_nonce('wp_rest')
|
|
));
|
|
}
|
|
public function save(){
|
|
if(!wzhf_admin_cap()) wp_die('Forbidden',403); if(!wzhf_verified_nonce()) wp_die('Bad nonce',403);
|
|
$opt=wzhf_get_option(); $fields=array('dc','org','cid','sec','scopes','trigger_mode','create_missing','set_status_after_so','status_after_so','contact_addr_sync');
|
|
foreach($fields as $f){ $v=isset($_POST[$f])?sanitize_text_field(wp_unslash($_POST[$f])):''; if(in_array($f,array('create_missing','set_status_after_so'))) $v=isset($_POST[$f])?'1':'0'; $opt[$f]=$v; }
|
|
if(empty($opt['contact_addr_sync'])) $opt['contact_addr_sync']='always';
|
|
update_option(WZHF_OPT,$opt,false); do_action('update_option_'.WZHF_OPT,array(),$opt,WZHF_OPT); wp_safe_redirect(admin_url('admin.php?page='.WZHF_SLUG.'&saved=1')); exit;
|
|
}
|
|
public function render(){ if(!wzhf_admin_cap()) return; $opt=wzhf_get_option(); $redir=esc_url_raw(rest_url(WZHF_NS.'/oauth/callback'));
|
|
if(isset($_GET['wzhf_msg'])){
|
|
$msg = sanitize_text_field($_GET['wzhf_msg']);
|
|
echo '<div class="notice notice-success"><p>'.esc_html($msg).'</p></div>';
|
|
}
|
|
|
|
$auth=''; if(!empty($opt['cid']) && !empty($opt['dc']) && !empty($opt['scopes'])){ $acc='https://accounts.zoho'.trim($opt['dc']).'/oauth/v2/auth'; $params=http_build_query(array('response_type'=>'code','client_id'=>$opt['cid'],'scope'=>$opt['scopes'],'redirect_uri'=>$redir,'access_type'=>'offline','prompt'=>'consent')); $auth=$acc.'?'.$params; }
|
|
$z = new WZHF_Zoho(); $connected=$z->is_connected(); include WZHF_DIR.'views/settings-page.php';
|
|
}
|
|
|
|
public function patch_so_server(){
|
|
if(!wzhf_admin_cap()) wp_die('Forbidden',403);
|
|
if(!wzhf_verified_nonce()) wp_die('Bad nonce',403);
|
|
$order_id = isset($_POST['order_id_patch']) ? absint($_POST['order_id_patch']) : 0;
|
|
if(!$order_id){ wp_safe_redirect(admin_url('admin.php?page='.WZHF_SLUG.'&wzhf_msg='.rawurlencode('Укажите Order ID'))); exit; }
|
|
$res = WZHF_Tools::patch_so_from_order($order_id);
|
|
if(!empty($res['ok'])){ wp_safe_redirect(admin_url('admin.php?page='.WZHF_SLUG.'&tab=tools&wzhf_msg='.rawurlencode('SO '.$res['so'].' — адрес обновлён'))); }
|
|
else { wp_safe_redirect(admin_url('admin.php?page='.WZHF_SLUG+'&tab=tools&wzhf_msg='.rawurlencode('Патч не применён: '.($res['error']??'unknown')))); }
|
|
exit;
|
|
}
|
|
}
|