PluginProbe
Visualizer – Tables & Charts Manager with Built-in AI Generator / 3.11.10
Visualizer – Tables & Charts Manager with Built-in AI Generator v3.11.10
4.0.8 4.0.7 4.0.6 4.0.5 4.0.4 4.0.3 3.0.5 3.0.6 3.0.7 3.0.8 3.0.9 3.1.0 3.1.1 3.1.2 3.1.3 3.10.0 3.10.1 3.10.10 3.10.11 3.10.12 3.10.13 3.10.14 3.10.15 3.10.2 3.10.3 All 149 releases
visualizer / vendor / codeinwp / themeisle-sdk / src / Modules / Script_loader.php

Script_loader.php in Visualizer – Tables & Charts Manager with Built-in AI Generator 3.11.10, at vendor/codeinwp/themeisle-sdk/src/Modules/Script_loader.php

283 lines 7.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * The dependency model class for ThemeIsle SDK
4 *
5 * @package ThemeIsleSDK
6 * @subpackage Modules
7 * @copyright Copyright (c) 2017, Marius Cristea
8 * @license http://opensource.org/licenses/gpl-3.0.php GNU Public License
9 * @since 3.3
10 */
11
12 namespace ThemeisleSDK\Modules;
13
14 use ThemeisleSDK\Common\Abstract_Module;
15 use ThemeisleSDK\Product;
16
17 // Exit if accessed directly.
18 if ( ! defined( 'ABSPATH' ) ) {
19 exit;
20 }
21
22 /**
23 * Script loader module for ThemeIsle SDK.
24 */
25 class Script_Loader extends Abstract_Module {
26 /**
27 * Check if we should load the module for this product.
28 *
29 * @param Product $product Product to load the module for.
30 *
31 * @return bool Should we load ?
32 */
33 public function can_load( $product ) {
34 if ( $this->is_from_partner( $product ) ) {
35 return false;
36 }
37
38 return true;
39 }
40
41 /**
42 * Load module logic.
43 *
44 * @param Product $product Product to load.
45 *
46 * @return Dependancy Module object.
47 */
48 public function load( $product ) {
49 $this->product = $product;
50 $this->setup_actions();
51 return $this;
52 }
53
54 /**
55 * Setup actions. Once for all products.
56 */
57 private function setup_actions() {
58
59 if ( apply_filters( 'themeisle_sdk_script_setup', false ) ) {
60 return;
61 }
62
63 add_filter( 'themeisle_sdk_dependency_script_handler', [ $this, 'get_script_handler' ], 10, 1 );
64 add_action( 'themeisle_sdk_dependency_enqueue_script', [ $this, 'enqueue_script' ], 10, 1 );
65 add_filter( 'themeisle_sdk_secret_masking', [ $this, 'secret_masking' ], 10, 1 );
66
67 add_filter( 'themeisle_sdk_script_setup', '__return_true' );
68
69 add_action( 'themeisle_internal_page', [ $this, 'load_survey_for_product' ], 10, 2 );
70 }
71
72 /**
73 * Load survey for product using internal pages.
74 *
75 * @param string $product_slug Product slug.
76 * @param string $page_slug Page slug.
77 */
78 public function load_survey_for_product( $product_slug, $page_slug ) {
79 $data = apply_filters( 'themeisle-sdk/survey/' . $product_slug, [], $page_slug );
80
81 if ( empty( $data ) || ! is_array( $data ) ) {
82 return;
83 }
84
85 $handler = $this->get_script_handler( 'survey' );
86 $this->load_survey( $handler, $data );
87 }
88
89 /**
90 * Get the script handler.
91 *
92 * @param string $slug The slug of the script.
93 *
94 * @return string The script handler. Empty if slug is not a string or not implemented.
95 */
96 public function get_script_handler( $slug ) {
97 if ( ! is_string( $slug ) ) {
98 return '';
99 }
100
101 if ( 'tracking' !== $slug && 'survey' !== $slug && 'banner' !== $slug ) {
102 return '';
103 }
104
105 return apply_filters( 'themeisle_sdk_dependency_script_handler_name', 'themeisle_sdk_' . $slug . '_script', $slug );
106 }
107
108 /**
109 * Enqueue the script.
110 *
111 * @param string $slug The slug of the script.
112 */
113 public function enqueue_script( $slug ) {
114 $handler = apply_filters( 'themeisle_sdk_dependency_script_handler', $slug );
115 if ( empty( $handler ) ) {
116 return;
117 }
118
119 if ( 'tracking' === $slug ) {
120 $this->load_tracking( $handler );
121 } elseif ( 'survey' === $slug ) {
122 $this->load_survey( $handler );
123 } elseif ( 'banner' === $slug ) {
124 $this->load_banner( $handler );
125 }
126 }
127
128 /**
129 * Load the survey script.
130 *
131 * @param string $handler The script handler.
132 * @param array $data The survey data.
133 *
134 * @return void
135 */
136 public function load_survey( $handler, $data = array() ) {
137 global $themeisle_sdk_max_path;
138 $asset_file = require $themeisle_sdk_max_path . '/assets/js/build/survey/survey_deps.asset.php';
139
140 wp_enqueue_script(
141 $handler,
142 $this->get_sdk_uri() . 'assets/js/build/survey/survey_deps.js',
143 $asset_file['dependencies'],
144 $asset_file['version'],
145 true
146 );
147
148 $data = array_replace_recursive( $this->get_survey_common_data( $data ), $data );
149
150 wp_localize_script( $handler, 'tsdk_survey_data', $data );
151 }
152
153 /**
154 * Get the common data in the Formbrick survey format.
155 *
156 * @param array $reference_data Reference data to extrapolate common properties.
157 *
158 * @return array
159 */
160 public function get_survey_common_data( $reference_data = array() ) {
161 $language = apply_filters( 'themeisle_sdk_current_lang', get_user_locale() );
162 $available_languages = [
163 'de_DE' => 'de',
164 'de_DE_formal' => 'de',
165 ];
166 $lang_code = isset( $available_languages[ $language ] ) ? $available_languages[ $language ] : 'en';
167
168 $url_parts = wp_parse_url( apply_filters( 'themeisle_sdk_current_site_url', get_site_url() ) );
169 $clean_url = str_replace( 'www.', '', $url_parts['host'] );
170 if ( isset( $url_parts['path'] ) ) {
171 $clean_url .= $url_parts['path'];
172 }
173 $user_id = 'u_' . hash( 'crc32b', $clean_url );
174
175 $common_data = [
176 'userId' => $user_id,
177 'apiHost' => 'https://app.formbricks.com',
178 'attributes' => [
179 'language' => $lang_code,
180 ],
181 ];
182
183 if (
184 isset( $reference_data['attributes'], $reference_data['attributes']['install_days_number'] )
185 && is_int( $reference_data['attributes']['install_days_number'] )
186 ) {
187 $common_data['attributes']['days_since_install'] = $this->install_time_category( $reference_data['attributes']['install_days_number'] );
188 }
189
190 return $common_data;
191 }
192
193 /**
194 * Compute the install time category.
195 *
196 * @param int $install_days_number The number of days passed since installation.
197 *
198 * @return int The category.
199 */
200 private function install_time_category( $install_days_number ) {
201 if ( 1 < $install_days_number && 8 > $install_days_number ) {
202 return 7;
203 }
204
205 if ( 8 <= $install_days_number && 31 > $install_days_number ) {
206 return 30;
207 }
208
209 if ( 30 < $install_days_number && 90 > $install_days_number ) {
210 return 90;
211 }
212
213 if ( 90 <= $install_days_number ) {
214 return 91;
215 }
216
217 return 0;
218 }
219
220 /**
221 * Load the tracking script.
222 *
223 * @param string $handler The script handler.
224 *
225 * @return void
226 */
227 public function load_tracking( $handler ) {
228 global $themeisle_sdk_max_path;
229 $asset_file = require $themeisle_sdk_max_path . '/assets/js/build/tracking/tracking.asset.php';
230
231 wp_enqueue_script(
232 $handler,
233 $this->get_sdk_uri() . 'assets/js/build/tracking/tracking.js',
234 $asset_file['dependencies'],
235 $asset_file['version'],
236 true
237 );
238 }
239
240 /**
241 * Load the banner script.
242 *
243 * @param string $handler The script handler.
244 *
245 * @return void
246 */
247 public function load_banner( $handler ) {
248 global $themeisle_sdk_max_path;
249 $asset_file = require $themeisle_sdk_max_path . '/assets/js/build/banner/banner.asset.php';
250
251 wp_enqueue_script(
252 $handler,
253 $this->get_sdk_uri() . 'assets/js/build/banner/banner.js',
254 $asset_file['dependencies'],
255 $asset_file['version'],
256 true
257 );
258
259 wp_enqueue_style(
260 $handler . '_style',
261 $this->get_sdk_uri() . 'assets/css/banner.css',
262 [],
263 $asset_file['version']
264 );
265 }
266
267 /**
268 * Mask a secret with `*` for half of its length.
269 *
270 * @param mixed $secret The secret.
271 *
272 * @return mixed The masked secret if secret is a valid string.
273 */
274 public function secret_masking( $secret ) {
275 if ( empty( $secret ) || ! is_string( $secret ) ) {
276 return $secret;
277 }
278
279 $half_len = intval( strlen( $secret ) / 2 );
280 return str_repeat( '*', $half_len ) . substr( $secret, $half_len );
281 }
282 }
283