PluginProbe ʕ •ᴥ•ʔ
ECS – Ele Custom Skin for Elementor / trunk
ECS – Ele Custom Skin for Elementor vtrunk
4.3.5 4.3.4 4.3.3 4.3.2 4.3.1 4.3.0 4.2.0 4.1.11 4.1.10 4.1.9 4.1.8 4.1.6 4.1.7 4.1.5 4.1.4 4.1.1 4.1.2 trunk 1.0.0 1.0.1 1.0.9 1.1.3 1.1.4 1.1.5 1.2.0 1.2.1 1.2.4 1.2.5 1.3.10 1.3.11 1.3.3 1.3.4 1.3.6 1.3.7 1.3.9 1.4.0 2.0.2 2.1.0 2.2.0 2.2.1 2.2.2 3.0.0 3.1.0 3.1.1 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.1.7 4.1.0
ele-custom-skin / admin / class-ecs-admin.php
ele-custom-skin / admin Last commit date
views 1 month ago class-ecs-admin.php 1 month ago
class-ecs-admin.php
109 lines
1 <?php
2 /**
3 * ECS Admin
4 *
5 * Registers the "ECS → Modules" page in WP Admin and handles
6 * saving the module toggle settings.
7 */
8
9 if ( ! defined( 'ABSPATH' ) ) {
10 exit;
11 }
12
13 class ECS_Admin {
14
15 private ECS_Modules_Manager $manager;
16
17 public function __construct( ECS_Modules_Manager $manager ) {
18 $this->manager = $manager;
19
20 add_action( 'admin_menu', [ $this, 'register_menu' ] );
21 add_action( 'admin_post_ecs_save_modules', [ $this, 'handle_save' ] );
22 add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_assets' ] );
23 }
24
25 public function register_menu(): void {
26 add_menu_page(
27 __( 'ECS - Ele Custom Skin', 'ele-custom-skin' ),
28 'ECS',
29 'manage_options',
30 'ecs-modules',
31 [ $this, 'render_modules_page' ],
32 'data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMzQ1IDM5OCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBzdHlsZT0iZmlsbC1ydWxlOmV2ZW5vZGQ7Y2xpcC1ydWxlOmV2ZW5vZGQ7Ij4KICAgIDxnIHRyYW5zZm9ybT0ibWF0cml4KDAuNjA1OTM2LC0wLjM1NjI2OSwwLjQzMzI2NiwwLjczNjg5MSwtMTI3LjIyNjQ5Nyw0My45OTY4NzYpIj4KICAgICAgICA8cGF0aCBkPSJNNDUuNDk5LDQzMi45MzdDNDAuMDU5LDQzMy4wMzIgMzUuMDA1LDQzMC42MzMgMzIuMzgzLDQyNi43MTJMLTE1Ljc4NCwzNTQuNjc5Qy0yNC4wMjEsMzQzLjc2MyAtMjUuMDM3LDMyOS42NDggLTE3LjE0NywzMTcuNjcyQy0xNi43NjYsMzE3LjA4OCAxMDMuOTQyLDE0OC4yNzkgMTAzLjk0MiwxNDguMjc5QzEwOC4yOTEsMTQyLjE5NyAxMTQuNDQsMTM3LjUxOSAxMjEuNTA2LDEzNC40MzJDMTI3Ljg0NywxMzEuNjA2IDEzNS4xMDgsMTMwIDE0Mi44MjEsMTMwTDM4MC4xNzksMTMwQzQwNC45MTYsMTMwIDQyNSwxNDYuNTE1IDQyNSwxNjYuODU2TDQyNSwxNzIuMTQ0QzQyNSwxOTIuNDg1IDQwNC45MTYsMjA5IDM4MC4xNzksMjA5TDE4MC4zMjIsMjA5QzE3NS4xNSwyMDkgMTcwLjM2NCwyMTEuMjUxIDE2Ny43NDMsMjE0LjkxOEwxNjMuNjU4LDIyMC42M0MxNjEuMDA2LDIyNC4zNCAxNjAuOTcyLDIyOC45MzQgMTYzLjU3MSwyMzIuNjY5QzE2Ni4xNywyMzYuNDA1IDE3MS4wMDMsMjM4LjcxIDE3Ni4yMzcsMjM4LjcxTDI0OS4yNSwyMzguNzFDMjU0LjQ4LDIzOC43MSAyNTkuMzEsMjQxLjAxMyAyNjEuOTA4LDI0NC43NDdDMjY0LjUwNSwyNDguNDggMjY0LjQ3MiwyNTMuMDcxIDI2MS44MjEsMjU2Ljc3OUwyMjIuNDc4LDMxMS44MDJDMjE5Ljg2LDMxNS40NjIgMjE1LjA4MiwzMTcuNzEgMjA5LjkxOCwzMTcuNzFMMTAyLjYwMywzMTcuNzFDOTcuNDIzLDMxNy43MSA5Mi42MywzMTkuOTY1IDkwLjAwNSwzMjMuNjM2TDg1LjQzOSwzMzAuMDIyQzgyLjg0OSwzMzMuNjQ0IDgyLjc0OCwzMzguMTE1IDg1LjE3MiwzNDEuODEzTDEzMi40MjQsNDEzLjkyMkMxMzQuODM4LDQxNy42MDYgMTM0Ljc0Nyw0MjIuMDU4IDEzMi4xODUsNDI1LjY3NEMxMjkuNjIyLDQyOS4yODkgMTI0Ljk1Niw0MzEuNTQ5IDExOS44NjgsNDMxLjYzN0w0NS40OTksNDMyLjkzN1pNMzEyLjg4NywyNDQuNjM2QzMxNS41MTMsMjQwLjk2NSAzMjAuMzA2LDIzOC43MSAzMjUuNDg2LDIzOC43MUw0NDAuNjI4LDIzOC43MUM0NTcuNzQ2LDIzOC43MSA0NzIuNjM2LDI0Ni42MTggNDgwLjE4NCwyNTguMjNDNDgwLjg5OCwyNTkuMTA4IDUyMi4wMDksMzIwLjQ5NCA1MjIuMDA5LDMyMC40OTRDNTI4Ljc5MywzMzAuNjQgNTI5LjE0OSwzNDIuMjc2IDUyNC4yLDM1Mi4yMjdDNTIzLjU0NiwzNTQuMjk4IDUwNC42MzgsMzgxLjU1MiA0OTEuMTY1LDQwMC44MjhDNDg4LjY3OCw0MDQuNzY0IDQ4My43NTIsNDA3LjI0OCA0NzguMzU5LDQwNy4yODZDNDcyLjk2Niw0MDcuMzI0IDQ2Ny45ODgsNDA0LjkxIDQ2NS40Miw0MDEuMDFDNDQ5Ljk4OCwzNzcuNjUzIDQyNC41NzMsMzM5LjA2NCA0MTQuNjU0LDMyNC4wMDRDNDEyLjEsMzIwLjEyNiA0MDcuMTY3LDMxNy43MSA0MDEuODAzLDMxNy43MUwyODYuMTg0LDMxNy43MUMyODAuOTQyLDMxNy43MSAyNzYuMTAxLDMxNS40MDEgMjczLjQ5OCwzMTEuNjZDMjcwLjg5NSwzMDcuOTE4IDI3MC45MjksMzAzLjMxNyAyNzMuNTg1LDI5OS42MDFMMzEyLjg4NywyNDQuNjM2Wk00NTIuMjQyLDQ0NC4yMDFDNDU0LjY2OSw0NDcuOTAxIDQ1NC41NjksNDUyLjM3NCA0NTEuOTc4LDQ1NS45OThMNDA4LjgyOCw1MTYuMzQ1QzQwMS45OTcsNTI5LjUzIDM4Ni4wODgsNTM4Ljc4MyAzNjcuNTcxLDUzOC43ODNDMzY3LjU3MSw1MzguNzgzIDEyOS4xMjksNTM4LjM1MyAxMjUuNDQzLDUzNy41NDVDMTEyLjYwOCw1MzUuNjM0IDEwMC44ODcsNTI5LjE1OSA5NC4xMTksNTE5LjAzN0w2OC4xMzQsNDgwLjE3OEM2NS42NzIsNDc2LjQ5NSA2NS43MjgsNDcyLjAyMiA2OC4yODMsNDY4LjM4MUM3MC44MzgsNDY0Ljc0MSA3NS41Miw0NjIuNDYzIDgwLjYzLDQ2Mi4zNzNMMTk0LjIzLDQ2MC4zODlMMTk0LjIxNCw0NTkuNzgzTDMyOS40NjIsNDU5Ljc4M0MzMzQuNjQxLDQ1OS43ODMgMzM5LjQzNCw0NTcuNTI4IDM0Mi4wNiw0NTMuODU2TDM0NS45ODIsNDQ4LjM3MUMzNDguNjM5LDQ0NC42NTUgMzQ4LjY3Myw0NDAuMDU0IDM0Ni4wNyw0MzYuMzEyQzM0My40NjcsNDMyLjU3MSAzMzguNjI2LDQzMC4yNjIgMzMzLjM4NCw0MzAuMjYyTDMwNy4yMTgsNDMwLjI2MkMzMDEuOTc2LDQzMC4yNjIgMjk3LjEzNSw0MjcuOTU0IDI5NC41MzIsNDI0LjIxMkMyOTEuOTI5LDQyMC40NzEgMjkxLjk2Myw0MTUuODY5IDI5NC42Miw0MTIuMTU0TDMzMy45MjIsMzU3LjE4OUMzMzYuNTQ3LDM1My41MTcgMzQxLjM0LDM1MS4yNjIgMzQ2LjUyLDM1MS4yNjJMMzgyLjU0MiwzNTEuMjYyQzM4Ny45MTQsMzUxLjI2MiAzOTIuODUzLDM1My42ODYgMzk1LjQwNCwzNTcuNTczTDQ1Mi4yNDIsNDQ0LjIwMVpNMTQ0LjQ0MSwzNjguOTg2QzE0MS45OTcsMzY1LjI2MiAxNDIuMTE2LDM2MC43NTUgMTQ0Ljc1MywzNTcuMTIxQzE0Ny4zOSwzNTMuNDg4IDE1Mi4xNTcsMzUxLjI2MiAxNTcuMzAzLDM1MS4yNjJMMjcwLjIyOSwzNTEuMjYyQzI3NS40NzEsMzUxLjI2MiAyODAuMzExLDM1My41NzEgMjgyLjkxNCwzNTcuMzEyQzI4NS41MTcsMzYxLjA1NCAyODUuNDg0LDM2NS42NTUgMjgyLjgyNywzNjkuMzcxTDI0My41MjUsNDI0LjMzNkMyNDAuODk5LDQyOC4wMDcgMjM2LjEwNiw0MzAuMjYyIDIzMC45MjcsNDMwLjI2MkwxOTMuMzY2LDQzMC4yNjJDMTg3Ljk5NCw0MzAuMjYyIDE4My4wNTUsNDI3LjgzOSAxODAuNTA0LDQyMy45NTFMMTQ0LjQ0MSwzNjguOTg2WiIgZmlsbD0iI2E3YWFhZCIvPgogICAgPC9nPgo8L3N2Zz4=',
33 58
34 );
35
36 add_submenu_page(
37 'ecs-modules',
38 __( 'Modules', 'ele-custom-skin' ),
39 __( 'Modules', 'ele-custom-skin' ),
40 'manage_options',
41 'ecs-modules',
42 [ $this, 'render_modules_page' ]
43 );
44
45 add_submenu_page(
46 'ecs-modules',
47 __( 'License', 'ele-custom-skin' ),
48 __( 'License', 'ele-custom-skin' ),
49 'manage_options',
50 'ecs-license',
51 [ $this, 'render_license_page' ]
52 );
53 }
54
55 public function render_modules_page(): void {
56 if ( ! current_user_can( 'manage_options' ) ) {
57 wp_die( esc_html__( 'You do not have sufficient permissions.', 'ele-custom-skin' ) );
58 }
59 require_once ECS_PATH . 'admin/views/modules-page.php';
60 }
61
62 public function handle_save(): void {
63 if ( ! current_user_can( 'manage_options' ) ) {
64 wp_die( esc_html__( 'Unauthorized.', 'ele-custom-skin' ) );
65 }
66
67 check_admin_referer( 'ecs_save_modules' );
68
69 $posted = isset( $_POST['ecs_modules'] ) ? (array) $_POST['ecs_modules'] : [];
70 $ids = array_map( 'sanitize_key', $posted );
71
72 $this->manager->set_active( $ids );
73
74 wp_safe_redirect(
75 add_query_arg(
76 [ 'page' => 'ecs-modules', 'updated' => '1' ],
77 admin_url( 'admin.php' )
78 )
79 );
80 exit;
81 }
82
83 public function render_license_page(): void {
84 if ( ! current_user_can( 'manage_options' ) ) {
85 wp_die( esc_html__( 'You do not have sufficient permissions.', 'ele-custom-skin' ) );
86 }
87 require_once ECS_PATH . 'admin/views/license-page.php';
88 }
89
90 public function enqueue_assets( string $hook ): void {
91 if ( ! in_array( $hook, [ 'toplevel_page_ecs-modules', 'ecs_page_ecs-license' ], true ) ) {
92 return;
93 }
94 wp_enqueue_style(
95 'ecs-admin',
96 ECS_URL . 'assets/admin/css/ecs-admin.css',
97 [],
98 ECS_VERSION
99 );
100 wp_enqueue_script(
101 'ecs-admin',
102 ECS_URL . 'assets/admin/js/ecs-admin.js',
103 [],
104 ECS_VERSION,
105 true
106 );
107 }
108 }
109