plugin_path() . '/view/'); $this->GlobalSystemMessageService = A2WL()->getDI()->get('AliNext_Lite\GlobalSystemMessageService'); if (is_admin()) { $this->init($page_title, $menu_title, $capability, $menu_slug, $priority, $menu_type); add_action('a2wl_admin_assets', array($this, 'admin_register_assets'), 1); add_action('a2wl_admin_assets', array($this, 'admin_enqueue_assets'), 2); add_action('wp_loaded', array($this, 'before_render_action')); if ($this->is_current_page() && !Woocommerce::is_woocommerce_installed() && !has_action('admin_notices', array($this, 'woocomerce_check_error'))) { add_action('admin_notices', array($this, 'woocomerce_check_error')); } if ($this->is_current_page() && !has_action('admin_notices', [$this, 'global_system_message'])) { add_action('admin_notices', [$this, 'global_system_message']); } } } function woocomerce_check_error(): void { echo '

' . esc_html__('AliNext (Lite version) notice! Please install the WooCommerce plugin first.', 'ali2woo') . '

'; } function global_system_message(): void { $messages = $this->GlobalSystemMessageService->getAllMessages(); echo implode('', $messages); } protected function init($page_title, $menu_title, $capability, $menu_slug, $priority, $menu_type): void { $this->page_title = $page_title; $this->menu_title = $menu_title; $this->capability = $capability; $this->menu_slug = $menu_slug; $this->menu_type = $menu_type; add_action('a2wl_init_admin_menu', array($this, 'add_submenu_page'), $priority); if ($this->menu_type == 2) { add_action('admin_menu', function () { remove_menu_page($this->menu_slug); }); } } public function add_submenu_page($parent_slug): void { if ($this->menu_type == 1) { $page_id = add_submenu_page( $parent_slug, $this->page_title, $this->menu_title, $this->capability, $this->menu_slug ); } else if ($this->menu_type == 2) { $page_id = $this->addHiddenAdminPage(); } else { $page_id = add_submenu_page( $parent_slug, $this->page_title, $this->menu_title, $this->capability, $this->menu_slug, [$this, 'render'] ); } add_action("load-{$page_id}", [$this, 'configure_screen_options']); } public function before_render_action(): void { if ($this->is_current_page()) { $this->before_admin_render(); } } public function before_admin_render() { } public function configure_screen_options() { } abstract public function render($params = array()); public function add_style($handle, $src, $deps = array(), $ver = false, $media = 'all'){ $this->style_assets[] = array('handle'=>$handle, 'src'=>$src, 'deps'=>$deps, 'ver'=>$ver, 'media'=>$media); } public function add_script($handle, $src, $deps = array(), $ver = false, $in_footer = false){ $this->script_assets[] = array('handle'=>$handle, 'src'=>$src, 'deps'=>$deps, 'ver'=>$ver, 'in_footer'=>$in_footer); } public function add_data_script($handle, $name, $data){ $this->script_data_assets[] = array('handle'=>$handle, 'name'=>$name, 'data'=>$data); } public function admin_register_assets() { if ($this->is_current_page()) { if (!wp_style_is('a2wl-admin-style', 'registered')) { wp_register_style('a2wl-admin-style', A2WL()->plugin_url() . '/assets/css/admin_style.css', array(), A2WL()->version); } if (!wp_script_is('a2wl-sprintf-script', 'registered')) { wp_register_script('a2wl-sprintf-script', A2WL()->plugin_url() . '/assets/js/sprintf.js', array(), A2WL()->version); } if (!wp_script_is('a2wl-admin-script', 'registered')) { wp_register_script('a2wl-admin-script', A2WL()->plugin_url() . '/assets/js/admin_script.js', array('jquery'), A2WL()->version); } if (!wp_script_is('a2wl-admin-svg', 'registered')) { wp_register_script('a2wl-admin-svg', A2WL()->plugin_url() . '/assets/js/svg.min.js', array('jquery','a2wl-admin-script'), A2WL()->version); } /* select2 */ if (!wp_style_is('a2wl-select2-style', 'registered')) { wp_register_style('a2wl-select2-style', A2WL()->plugin_url() . '/assets/js/select2/css/select2.min.css', array(), A2WL()->version); } if (!wp_script_is('a2wl-select2-js', 'registered')) { // wp_register_script('a2wl-select2-js', A2WL()->plugin_url() . '/assets/js/select2/js/select2.min.js', array('jquery'), A2WL()->version); wp_register_script('a2wl-select2-js', A2WL()->plugin_url() . '/assets/js/select2/js/select2.js', array('jquery'), A2WL()->version); } /* jsrender */ if (!wp_script_is('a2wl-jsrender-js', 'registered')) { wp_register_script('a2wl-jsrender-js', A2WL()->plugin_url() . '/assets/js/jsrender.min.js', ['jquery'], A2WL()->version); } /*jquery.lazyload*/ if (!wp_script_is('a2wl-lazyload-js', 'registered')) { wp_register_script('a2wl-lazyload-js', A2WL()->plugin_url() . '/assets/js/jquery/jquery.lazyload.js', array('jquery'), A2WL()->version); } /* custom styles */ if (!wp_style_is('a2wl-custom-style', 'registered')) { wp_register_style('a2wl-custom-style', A2WL()->plugin_url() . '/assets/css/custom.css', array(), A2WL()->version); } foreach($this->style_assets as $s){ if (!wp_style_is($s['handle'], 'registered')) { wp_register_style($s['handle'], A2WL()->plugin_url() . $s['src'], $s['deps'], !empty($s['ver'])?$s['ver']:A2WL()->version, $s['media']); } } foreach($this->script_assets as $s){ if (!wp_script_is($s['handle'], 'registered')) { wp_register_script($s['handle'], A2WL()->plugin_url() . $s['src'], $s['deps'], !empty($s['ver'])?$s['ver']:A2WL()->version, $s['in_footer']); } } $lang_data = []; wp_localize_script( 'a2wl-admin-script', 'a2wl_common_data', [ 'baseurl' => A2WL()->plugin_url().'/', 'lang' => apply_filters('a2wl_configure_lang_data', $lang_data), 'lang_cookies' => AliexpressLocalizator::getInstance()->getLocaleCookies(false) ] ); foreach ($this->script_data_assets as $d) { wp_localize_script($d['handle'], $d['name'], $d['data']); } } } public function admin_enqueue_assets($page) { if ($this->is_current_page()) { wp_enqueue_script('jquery-ui-sortable'); wp_enqueue_script('jquery-effects-core'); if (!wp_style_is('a2wl-admin-style', 'enqueued')) { wp_enqueue_style('a2wl-admin-style'); wp_style_add_data( 'a2wl-admin-style', 'rtl', 'replace' ); } if (!wp_style_is('a2wl-admin-style-new', 'enqueued')) { wp_enqueue_style('a2wl-admin-style-new'); } if (!wp_script_is('a2wl-sprintf-script', 'enqueued')) { wp_enqueue_script('a2wl-sprintf-script'); } if (!wp_script_is('a2wl-admin-script', 'enqueued')) { wp_enqueue_script('a2wl-admin-script'); } if (!wp_script_is('a2wl-admin-svg', 'enqueued')) { wp_enqueue_script('a2wl-admin-svg'); } /* select2 */ if (!wp_style_is('a2wl-select2-style', 'enqueued')) { wp_enqueue_style('a2wl-select2-style'); } if (!wp_script_is('a2wl-select2-js', 'enqueued')) { wp_enqueue_script('a2wl-select2-js'); } /* jsrender */ if (!wp_script_is('a2wl-jsrender-js', 'enqueued')) { wp_enqueue_script('a2wl-jsrender-js'); } /*jquery.lazyload*/ if (!wp_script_is('a2wl-lazyload-js', 'enqueued')) { wp_enqueue_script('a2wl-lazyload-js'); } /* custom */ if (!wp_style_is('a2wl-custom-style', 'enqueued')) { wp_enqueue_style('a2wl-custom-style'); } foreach($this->style_assets as $style){ if (!wp_style_is($style['handle'], 'enqueued')) { wp_enqueue_style($style['handle']); } } foreach($this->script_assets as $script){ if (!wp_script_is($script['handle'], 'enqueued')) { wp_enqueue_script($script['handle']); } } $this->localizeAdminScript(); } } static public function localizeAdminScript(): void { $data = [ 'ajaxurl' => admin_url('admin-ajax.php'), 'nonce_action' => wp_create_nonce(self::AJAX_NONCE_ACTION), ]; wp_localize_script('a2wl-admin-script', 'a2wl_admin_script', $data); } protected function is_current_page(): bool { // phpcs:ignore WordPress.Security.NonceVerification.Recommended return is_admin() && isset($_REQUEST['page']) && $_REQUEST['page'] && $this->menu_slug == $_REQUEST['page']; } protected function modelPutArray(array $data): void { foreach ($data as $key => $value) { $this->model_put($key, $value); } } private function addHiddenAdminPage(): string|false { // Добавляем страницу напрямую, но скрываем её из меню $pageId = add_menu_page( $this->page_title, '', $this->capability, $this->menu_slug, [$this, 'render'], '', 99 ); return $pageId; } }