PluginProbe ʕ •ᴥ•ʔ
Superb Addons: Blocks, Patterns, Pre-built Pages, Sliders, Popups, Free Forms, Animations & More / 4.0.0
Superb Addons: Blocks, Patterns, Pre-built Pages, Sliders, Popups, Free Forms, Animations & More v4.0.0
4.0.6 4.0.5 4.0.4 4.0.3 4.0.2 4.0.1 4.0.0 trunk 1.0.0 2.0.0 2.0.1 2.0.2 2.0.3 3.0 3.0.1 3.0.2 3.0.5 3.0.6 3.0.7 3.0.8 3.0.9 3.1.0 3.1.2 3.1.3 3.2.0 3.2.1 3.2.2 3.2.4 3.2.5 3.2.7 3.2.8 3.2.9 3.3.0 3.3.1 3.3.2 3.4.0 3.4.1 3.4.2 3.4.5 3.4.6 3.5.0 3.5.1 3.5.2 3.5.3 3.5.4 3.5.6 3.5.7 3.5.8 3.5.9 3.6.0 3.6.1 3.6.2 3.7.0 3.7.1
superb-blocks / src / tours / class-tour-controller.php
superb-blocks / src / tours Last commit date
class-tour-controller.php 1 month ago
class-tour-controller.php
182 lines
1 <?php
2
3 namespace SuperbAddons\Tours\Controllers;
4
5 use SuperbAddons\Admin\Controllers\TroubleshootingController;
6 use SuperbAddons\Components\Admin\Modal;
7 use SuperbAddons\Data\Controllers\RestController;
8 use SuperbAddons\Data\Utils\ScriptTranslations;
9
10 defined('ABSPATH') || exit();
11
12 class TourController
13 {
14 const TOUR_GUTENBERG = 'superb-tour-gutenberg';
15 const GUTENBERG_TOUR_BLOCKS = 'blocks';
16 const GUTENBERG_TOUR_PATTERNS = 'patterns';
17 const TOUR_ELEMENTOR = 'superb-tour-elementor';
18
19 const TOUR_ELEMENTOR_PAGE_ID_OPTION = 'superbaddons_elementor_tour_id';
20
21 const TOUR_DASHBOARD_WELCOME_META = 'superbaddons_tour_dashboard_complete';
22 const TOUR_BLOCK_THEME_META = 'superbaddons_tour_block_theme_complete';
23
24 const TOUR_NONCE_ACTION = 'superbaddons-tour';
25 const TOUR_NONCE_PARAM = 'superbaddons-tour-nonce';
26
27 public function __construct()
28 {
29 add_action('enqueue_block_editor_assets', array($this, 'MaybeLoadGutenbergTour'), 0);
30 add_action('elementor/editor/before_enqueue_scripts', array($this, 'MaybeLoadElementorTour'), 0);
31 }
32
33 public function MaybeLoadGutenbergTour()
34 {
35 if (!isset($_GET[self::TOUR_GUTENBERG]) || !isset($_GET[self::TOUR_NONCE_PARAM])) return;
36 if (!wp_verify_nonce(sanitize_text_field(wp_unslash($_GET[self::TOUR_NONCE_PARAM])), self::TOUR_NONCE_ACTION)) return;
37 global $pagenow;
38 if ('post-new.php' !== $pagenow) {
39 return;
40 }
41
42 $tour_param = sanitize_text_field(wp_unslash($_GET[self::TOUR_GUTENBERG]));
43 $this->GutenbergTourAssets($tour_param);
44 }
45
46 public function MaybeLoadElementorTour()
47 {
48 if (!isset($_GET[self::TOUR_ELEMENTOR])) return;
49 global $pagenow;
50 if ('post.php' !== $pagenow) {
51 return;
52 }
53
54 if (!isset($_GET['action']) || $_GET['action'] !== 'elementor' || !isset($_GET['post'])) return;
55
56 $tour_page_id = get_option(self::TOUR_ELEMENTOR_PAGE_ID_OPTION);
57 if (!$tour_page_id || $tour_page_id !== $_GET['post']) return;
58
59 $tour_param = sanitize_text_field(wp_unslash($_GET[self::TOUR_ELEMENTOR]));
60 if (!wp_verify_nonce($tour_param, 'superbaddons-tour-' . $tour_page_id)) {
61 return;
62 }
63 $this->ElementorTourAssets($tour_param);
64 }
65
66 private function GutenbergTourAssets($tour_param)
67 {
68 $this->TourAssets();
69 add_action('admin_footer', function () {
70 new Modal();
71 });
72
73 if ($tour_param === self::GUTENBERG_TOUR_BLOCKS) {
74 wp_enqueue_script(
75 'superb-addons-guided-tours',
76 SUPERBADDONS_ASSETS_PATH . '/js/guided-tours/gutenberg-blocks.js',
77 array('wp-i18n', 'jquery'),
78 SUPERBADDONS_VERSION,
79 true
80 );
81 ScriptTranslations::Set('superb-addons-guided-tours');
82 } else
83 if ($tour_param === self::GUTENBERG_TOUR_PATTERNS) {
84 wp_enqueue_script(
85 'superb-addons-guided-tours',
86 SUPERBADDONS_ASSETS_PATH . '/js/guided-tours/gutenberg-patterns.js',
87 array('wp-i18n', 'jquery'),
88 SUPERBADDONS_VERSION,
89 true
90 );
91 ScriptTranslations::Set('superb-addons-guided-tours');
92 }
93 }
94
95 private function ElementorTourAssets($tour_param)
96 {
97 $this->TourAssets();
98 add_action('elementor/editor/footer', function () {
99 new Modal();
100 });
101 wp_enqueue_script(
102 'superb-addons-guided-tours',
103 SUPERBADDONS_ASSETS_PATH . '/js/guided-tours/elementor-sections.js',
104 array('wp-i18n', 'jquery'),
105 SUPERBADDONS_VERSION,
106 true
107 );
108 ScriptTranslations::Set('superb-addons-guided-tours');
109 wp_localize_script('superb-addons-guided-tours', 'superbaddonstroubleshooting_g', array(
110 "rest" => array(
111 "base" => \get_rest_url(),
112 "namespace" => RestController::NAMESPACE,
113 "nonce" => wp_create_nonce("wp_rest"),
114 "tour_nonce" => isset($tour_param) ? esc_html($tour_param) : false,
115 "routes" => array(
116 "tutorial" => TroubleshootingController::TUTORIAL_ROUTE,
117 )
118 ),
119 ));
120 }
121
122 private function TourAssets()
123 {
124 wp_enqueue_style(
125 'superbaddons-driver',
126 SUPERBADDONS_ASSETS_PATH . '/lib/driver.css',
127 array(),
128 SUPERBADDONS_VERSION
129 );
130 wp_enqueue_style(
131 'superb-addons-admin-modal',
132 SUPERBADDONS_ASSETS_PATH . '/css/admin-modal.min.css',
133 array(),
134 SUPERBADDONS_VERSION
135 );
136 }
137
138 public static function GetElementorTourURL()
139 {
140 $tour_page_id = get_option(self::TOUR_ELEMENTOR_PAGE_ID_OPTION);
141 $post_status = $tour_page_id ? get_post_status($tour_page_id) : false;
142 if (!$tour_page_id || $post_status !== 'draft') {
143 $tour_page_id = wp_insert_post(array(
144 'post_title' => __('Superb Addons Tutorial', "superb-blocks"),
145 'post_type' => 'page',
146 'post_status' => 'draft'
147 ));
148 update_option(self::TOUR_ELEMENTOR_PAGE_ID_OPTION, $tour_page_id, false);
149 } else {
150 }
151
152 $nonce = wp_create_nonce('superbaddons-tour-' . $tour_page_id);
153 $edit_link = get_edit_post_link($tour_page_id);
154 return add_query_arg(array(self::TOUR_ELEMENTOR => $nonce, "action" => "elementor"), $edit_link);
155 }
156
157 public static function IsTourCompleted($meta_key)
158 {
159 return (bool) get_user_meta(get_current_user_id(), $meta_key, true);
160 }
161
162 public static function MarkTourCompleted($meta_key)
163 {
164 update_user_meta(get_current_user_id(), $meta_key, true);
165 }
166
167 public static function CleanUpTourPage($nonce)
168 {
169 $tour_page_id = get_option(self::TOUR_ELEMENTOR_PAGE_ID_OPTION);
170 if (!$tour_page_id) {
171 return;
172 }
173
174 if (!wp_verify_nonce($nonce, 'superbaddons-tour-' . $tour_page_id)) {
175 return;
176 }
177
178 wp_delete_post($tour_page_id, true);
179 delete_option(self::TOUR_ELEMENTOR_PAGE_ID_OPTION);
180 }
181 }
182