PluginProbe
Visualizer – Tables & Charts Manager with Built-in AI Generator / 4.0.8
Visualizer – Tables & Charts Manager with Built-in AI Generator v4.0.8
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
← All changes | vendor/codeinwp/themeisle-sdk/src/Modules/Script_loader.php +109 -1 3.10.114.0.8 View file →
@@ -61,13 +61,33 @@
61 61 }
62 62
63 63 add_filter( 'themeisle_sdk_dependency_script_handler', [ $this, 'get_script_handler' ], 10, 1 );
64 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 );
65 66
66 67 add_filter( 'themeisle_sdk_script_setup', '__return_true' );
68 +
69 + add_action( 'themeisle_internal_page', [ $this, 'load_survey_for_product' ], 10, 2 );
67 70 }
68 71
69 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 + /**
70 90 * Get the script handler.
71 91 *
72 92 * @param string $slug The slug of the script.
73 93 *
@@ -106,12 +126,13 @@
106 126 /**
107 127 * Load the survey script.
108 128 *
109 129 * @param string $handler The script handler.
130 + * @param array $data The survey data.
110 131 *
111 132 * @return void
112 133 */
113 - public function load_survey( $handler ) {
134 + public function load_survey( $handler, $data = array() ) {
114 135 global $themeisle_sdk_max_path;
115 136 $asset_file = require $themeisle_sdk_max_path . '/assets/js/build/survey/survey_deps.asset.php';
116 137
117 138 wp_enqueue_script(
@@ -120,11 +141,82 @@
120 141 $asset_file['dependencies'],
121 142 $asset_file['version'],
122 143 true
123 144 );
145 +
146 + $data = array_replace_recursive( $this->get_survey_common_data( $data ), $data );
147 +
148 + wp_localize_script( $handler, 'tsdk_survey_data', $data );
124 149 }
125 150
126 151 /**
152 + * Get the common data in the Formbrick survey format.
153 + *
154 + * @param array $reference_data Reference data to extrapolate common properties.
155 + *
156 + * @return array
157 + */
158 + public function get_survey_common_data( $reference_data = array() ) {
159 + $language = apply_filters( 'themeisle_sdk_current_lang', get_user_locale() );
160 + $available_languages = [
161 + 'de_DE' => 'de',
162 + 'de_DE_formal' => 'de',
163 + ];
164 + $lang_code = isset( $available_languages[ $language ] ) ? $available_languages[ $language ] : 'en';
165 +
166 + $url_parts = wp_parse_url( apply_filters( 'themeisle_sdk_current_site_url', get_site_url() ) );
167 + $clean_url = str_replace( 'www.', '', $url_parts['host'] );
168 + if ( isset( $url_parts['path'] ) ) {
169 + $clean_url .= $url_parts['path'];
170 + }
171 + $user_id = 'u_' . hash( 'crc32b', $clean_url );
172 +
173 + $common_data = [
174 + 'userId' => $user_id,
175 + 'appUrl' => 'https://app.formbricks.com',
176 + 'attributes' => [
177 + 'language' => $lang_code,
178 + ],
179 + ];
180 +
181 + if (
182 + isset( $reference_data['attributes'], $reference_data['attributes']['install_days_number'] )
183 + && is_int( $reference_data['attributes']['install_days_number'] )
184 + ) {
185 + $common_data['attributes']['days_since_install'] = $this->install_time_category( $reference_data['attributes']['install_days_number'] );
186 + }
187 +
188 + return $common_data;
189 + }
190 +
191 + /**
192 + * Compute the install time category.
193 + *
194 + * @param int $install_days_number The number of days passed since installation.
195 + *
196 + * @return int The category.
197 + */
198 + private function install_time_category( $install_days_number ) {
199 + if ( 1 < $install_days_number && 8 > $install_days_number ) {
200 + return 7;
201 + }
202 +
203 + if ( 8 <= $install_days_number && 31 > $install_days_number ) {
204 + return 30;
205 + }
206 +
207 + if ( 30 < $install_days_number && 90 > $install_days_number ) {
208 + return 90;
209 + }
210 +
211 + if ( 90 <= $install_days_number ) {
212 + return 91;
213 + }
214 +
215 + return 0;
216 + }
217 +
218 + /**
127 219 * Load the tracking script.
128 220 *
129 221 * @param string $handler The script handler.
130 222 *
@@ -140,6 +232,22 @@
140 232 $asset_file['dependencies'],
141 233 $asset_file['version'],
142 234 true
143 235 );
236 + }
237 +
238 + /**
239 + * Mask a secret with `*` for half of its length.
240 + *
241 + * @param mixed $secret The secret.
242 + *
243 + * @return mixed The masked secret if secret is a valid string.
244 + */
245 + public function secret_masking( $secret ) {
246 + if ( empty( $secret ) || ! is_string( $secret ) ) {
247 + return $secret;
248 + }
249 +
250 + $half_len = intval( strlen( $secret ) / 2 );
251 + return str_repeat( '*', $half_len ) . substr( $secret, $half_len );
144 252 }
145 253 }