PluginProbe
Tiered Pricing Table for WooCommerce / 2.2.3
Tiered Pricing Table for WooCommerce v2.2.3
8.1.0 8.0.2 7.1.7 7.1.5 7.1.4 7.1.1 6.5.0 6.4.0 6.1.0 trunk 1.0 1.1 2.0 2.0.1 2.0.2 2.1 2.1.1 2.1.2 2.2.0 2.2.1 2.2.2 2.2.3 2.3.0 2.3.1 2.3.2 All 92 releases
← All changes | freemius/includes/fs-core-functions.php +248 -402 8.0.2 → 2.2.3 View file →
@@ -62,72 +62,64 @@
62 62
63 63 /* Scripts and styles including.
64 64 --------------------------------------------------------------------------------------------*/
65 65
66 - if ( ! function_exists( 'fs_asset_url' ) ) {
67 - /**
68 - * Generates an absolute URL to the given path. This function ensures that the URL will be correct whether the asset
69 - * is inside a plugin's folder or a theme's folder.
70 - *
71 - * Examples:
72 - * 1. "themes" folder
73 - * Path: C:/xampp/htdocs/fswp/wp-content/themes/twentytwelve/freemius/assets/css/admin/common.css
74 - * URL: http://fswp:8080/wp-content/themes/twentytwelve/freemius/assets/css/admin/common.css
75 - *
76 - * 2. "plugins" folder
77 - * Path: C:/xampp/htdocs/fswp/wp-content/plugins/rating-widget-premium/freemius/assets/css/admin/common.css
78 - * URL: http://fswp:8080/wp-content/plugins/rating-widget-premium/freemius/assets/css/admin/common.css
79 - *
80 - * @author Leo Fajardo (@leorw)
81 - * @since 1.2.2
82 - *
83 - * @param string $asset_abs_path Asset's absolute path.
84 - *
85 - * @return string Asset's URL.
86 - */
87 - function fs_asset_url( $asset_abs_path ) {
88 - $wp_content_dir = fs_normalize_path( WP_CONTENT_DIR );
89 - $asset_abs_path = fs_normalize_path( $asset_abs_path );
66 + /**
67 + * Generates an absolute URL to the given path. This function ensures that the URL will be correct whether the asset
68 + * is inside a plugin's folder or a theme's folder.
69 + *
70 + * Examples:
71 + * 1. "themes" folder
72 + * Path: C:/xampp/htdocs/fswp/wp-content/themes/twentytwelve/freemius/assets/css/admin/common.css
73 + * URL: http://fswp:8080/wp-content/themes/twentytwelve/freemius/assets/css/admin/common.css
74 + *
75 + * 2. "plugins" folder
76 + * Path: C:/xampp/htdocs/fswp/wp-content/plugins/rating-widget-premium/freemius/assets/css/admin/common.css
77 + * URL: http://fswp:8080/wp-content/plugins/rating-widget-premium/freemius/assets/css/admin/common.css
78 + *
79 + * @author Leo Fajardo (@leorw)
80 + * @since 1.2.2
81 + *
82 + * @param string $asset_abs_path Asset's absolute path.
83 + *
84 + * @return string Asset's URL.
85 + */
86 + function fs_asset_url( $asset_abs_path ) {
87 + $wp_content_dir = fs_normalize_path( WP_CONTENT_DIR );
88 + $asset_abs_path = fs_normalize_path( $asset_abs_path );
90 89
91 - if ( 0 === strpos( $asset_abs_path, $wp_content_dir ) ) {
92 - // Handle both theme and plugin assets located in the standard directories.
93 - $asset_rel_path = str_replace( $wp_content_dir, '', $asset_abs_path );
94 - $asset_url = content_url( fs_normalize_path( $asset_rel_path ) );
90 + if ( 0 === strpos( $asset_abs_path, $wp_content_dir ) ) {
91 + // Handle both theme and plugin assets located in the standard directories.
92 + $asset_rel_path = str_replace( $wp_content_dir, '', $asset_abs_path );
93 + $asset_url = content_url( fs_normalize_path( $asset_rel_path ) );
94 + } else {
95 + $wp_plugins_dir = fs_normalize_path( WP_PLUGIN_DIR );
96 + if ( 0 === strpos( $asset_abs_path, $wp_plugins_dir ) ) {
97 + // Try to handle plugin assets that may be located in a non-standard plugins directory.
98 + $asset_rel_path = str_replace( $wp_plugins_dir, '', $asset_abs_path );
99 + $asset_url = plugins_url( fs_normalize_path( $asset_rel_path ) );
95 100 } else {
96 - $wp_plugins_dir = fs_normalize_path( WP_PLUGIN_DIR );
97 - if ( 0 === strpos( $asset_abs_path, $wp_plugins_dir ) ) {
98 - // Try to handle plugin assets that may be located in a non-standard plugins directory.
99 - $asset_rel_path = str_replace( $wp_plugins_dir, '', $asset_abs_path );
100 - $asset_url = plugins_url( fs_normalize_path( $asset_rel_path ) );
101 - } else {
102 - // Try to handle theme assets that may be located in a non-standard themes directory.
103 - $active_theme_stylesheet = get_stylesheet();
104 - $wp_themes_dir = fs_normalize_path( trailingslashit( get_theme_root( $active_theme_stylesheet ) ) );
105 - $asset_rel_path = str_replace( $wp_themes_dir, '', fs_normalize_path( $asset_abs_path ) );
106 - $asset_url = trailingslashit( get_theme_root_uri( $active_theme_stylesheet ) ) . fs_normalize_path( $asset_rel_path );
107 - }
101 + // Try to handle theme assets that may be located in a non-standard themes directory.
102 + $active_theme_stylesheet = get_stylesheet();
103 + $wp_themes_dir = fs_normalize_path( trailingslashit( get_theme_root( $active_theme_stylesheet ) ) );
104 + $asset_rel_path = str_replace( $wp_themes_dir, '', fs_normalize_path( $asset_abs_path ) );
105 + $asset_url = trailingslashit( get_theme_root_uri( $active_theme_stylesheet ) ) . fs_normalize_path( $asset_rel_path );
108 106 }
107 + }
109 108
110 - return $asset_url;
111 - }
109 + return $asset_url;
112 110 }
113 111
114 - if ( ! function_exists( 'fs_enqueue_local_style' ) ) {
115 - function fs_enqueue_local_style( $handle, $path, $deps = array(), $ver = false, $media = 'all' ) {
116 - wp_enqueue_style( $handle, fs_asset_url( WP_FS__DIR_CSS . '/' . trim( $path, '/' ) ), $deps, $ver, $media );
117 - }
112 + function fs_enqueue_local_style( $handle, $path, $deps = array(), $ver = false, $media = 'all' ) {
113 + wp_enqueue_style( $handle, fs_asset_url( WP_FS__DIR_CSS . '/' . trim( $path, '/' ) ), $deps, $ver, $media );
118 114 }
119 115
120 - if ( ! function_exists( 'fs_enqueue_local_script' ) ) {
121 - function fs_enqueue_local_script( $handle, $path, $deps = array(), $ver = false, $in_footer = true ) {
122 - wp_enqueue_script( $handle, fs_asset_url( WP_FS__DIR_JS . '/' . trim( $path, '/' ) ), $deps, $ver, $in_footer );
123 - }
116 + function fs_enqueue_local_script( $handle, $path, $deps = array(), $ver = false, $in_footer = 'all' ) {
117 + wp_enqueue_script( $handle, fs_asset_url( WP_FS__DIR_JS . '/' . trim( $path, '/' ) ), $deps, $ver, $in_footer );
124 118 }
125 119
126 - if ( ! function_exists( 'fs_img_url' ) ) {
127 - function fs_img_url( $path, $img_dir = WP_FS__DIR_IMG ) {
128 - return ( fs_asset_url( $img_dir . '/' . trim( $path, '/' ) ) );
129 - }
120 + function fs_img_url( $path, $img_dir = WP_FS__DIR_IMG ) {
121 + return ( fs_asset_url( $img_dir . '/' . trim( $path, '/' ) ) );
130 122 }
131 123
132 124 #--------------------------------------------------------------------------------
133 125 #region Request handlers.
@@ -132,103 +124,48 @@
132 124 #--------------------------------------------------------------------------------
133 125 #region Request handlers.
134 126 #--------------------------------------------------------------------------------
135 127
136 - if ( ! function_exists( 'fs_request_get_raw' ) ) {
128 + if ( ! function_exists( 'fs_request_get' ) ) {
137 129 /**
138 - * A helper function to fetch GET/POST user input with an optional default value when the input is not set.
139 - * This function does not do sanitization. It is up to the caller to properly sanitize and validate the input.
130 + * A helper method to fetch GET/POST user input with an optional default value when the input is not set.
131 + * @author Vova Feldman (@svovaf)
140 132 *
141 - * The return of this function is always unslashed.
142 - *
143 - * @since 2.5.10
144 - *
145 133 * @param string $key
146 134 * @param mixed $def
147 - * @param string|bool $type When set to 'get', it will look for the value passed via query string. When
148 - * set to 'post', it will look for the value passed via the POST request's body. Otherwise,
149 - * it will check if the parameter was passed using any of the mentioned two methods.
135 + * @param string|bool $type Since 1.2.1.7 - when set to 'get' will look for the value passed via querystring, when
136 + * set to 'post' will look for the value passed via the POST request's body, otherwise,
137 + * will check if the parameter was passed in any of the two.
150 138 *
151 139 * @return mixed
152 140 */
153 - function fs_request_get_raw( $key, $def = false, $type = false ) {
141 + function fs_request_get( $key, $def = false, $type = false ) {
154 142 if ( is_string( $type ) ) {
155 143 $type = strtolower( $type );
156 144 }
157 145
158 146 /**
159 - * Note to WordPress.org reviewers:
160 - * This is a helper function to fetch GET/POST user input with an optional default value when the input is not set. The actual sanitization is done in the scope of the function's usage.
147 + * Note to WordPress.org Reviewers:
148 + * This is a helper method to fetch GET/POST user input with an optional default value when the input is not set. The actual sanitization is done in the scope of the function's usage.
161 149 */
162 150 switch ( $type ) {
163 151 case 'post':
164 - // phpcs:ignore WordPress.Security.NonceVerification.Missing
165 152 $value = isset( $_POST[ $key ] ) ? $_POST[ $key ] : $def;
166 153 break;
167 154 case 'get':
168 - // phpcs:ignore WordPress.Security.NonceVerification.Recommended
169 155 $value = isset( $_GET[ $key ] ) ? $_GET[ $key ] : $def;
170 156 break;
171 157 default:
172 - // phpcs:ignore WordPress.Security.NonceVerification.Recommended
173 158 $value = isset( $_REQUEST[ $key ] ) ? $_REQUEST[ $key ] : $def;
174 159 break;
175 160 }
176 161
177 - // Don't unslash if the value itself is empty (empty string, null, empty array etc).
178 - return empty( $value ) ? $value : wp_unslash( $value );
162 + return $value;
179 163 }
180 164 }
181 165
182 - if ( ! function_exists( 'fs_sanitize_input' ) ) {
183 - /**
184 - * Sanitizes input recursively (if an array).
185 - *
186 - * @param mixed $input
187 - *
188 - * @return mixed
189 - * @uses sanitize_text_field()
190 - * @since 2.5.10
191 - */
192 - function fs_sanitize_input( $input ) {
193 - if ( is_array( $input ) ) {
194 - foreach ( $input as $key => $value ) {
195 - $input[ $key ] = fs_sanitize_input( $value );
196 - }
197 - } else {
198 - // Allow empty values to pass through as-is, like `null`, `''`, `0`, `'0'` etc.
199 - $input = empty( $input ) ? $input : sanitize_text_field( $input );
200 - }
201 -
202 - return $input;
203 - }
204 - }
205 -
206 - if ( ! function_exists( 'fs_request_get' ) ) {
207 - /**
208 - * A helper method to fetch GET/POST user input with an optional default value when the input is not set.
209 - *
210 - * @author Vova Feldman (@svovaf)
211 - *
212 - * @note The return value is always sanitized with sanitize_text_field().
213 - *
214 - * @param string $key
215 - * @param mixed $def
216 - * @param string|bool $type Since 1.2.1.7 - when set to 'get' will look for the value passed via querystring, when
217 - * set to 'post' will look for the value passed via the POST request's body, otherwise,
218 - * will check if the parameter was passed in any of the two.
219 - *
220 - *
221 - * @return mixed
222 - */
223 - function fs_request_get( $key, $def = false, $type = false ) {
224 - return fs_sanitize_input( fs_request_get_raw( $key, $def, $type ) );
225 - }
226 - }
227 -
228 166 if ( ! function_exists( 'fs_request_has' ) ) {
229 167 function fs_request_has( $key ) {
230 - // phpcs:ignore WordPress.Security.NonceVerification.Recommended
231 168 return isset( $_REQUEST[ $key ] );
232 169 }
233 170 }
234 171
@@ -285,9 +222,8 @@
285 222 }
286 223
287 224 if ( ! function_exists( 'fs_get_action' ) ) {
288 225 function fs_get_action( $action_key = 'action' ) {
289 - // phpcs:disable WordPress.Security.NonceVerification.Recommended
290 226 if ( ! empty( $_REQUEST[ $action_key ] ) && is_string( $_REQUEST[ $action_key ] ) ) {
291 227 return strtolower( $_REQUEST[ $action_key ] );
292 228 }
293 229
@@ -299,9 +235,8 @@
299 235 }
300 236 }
301 237
302 238 return false;
303 - // phpcs:enable WordPress.Security.NonceVerification.Recommended
304 239 }
305 240 }
306 241
307 242 if ( ! function_exists( 'fs_request_is_action' ) ) {
@@ -379,194 +314,141 @@
379 314 }
380 315
381 316 /* Core UI.
382 317 --------------------------------------------------------------------------------------------*/
383 - if ( ! function_exists( 'fs_ui_action_button' ) ) {
384 - /**
385 - * @param number $module_id
386 - * @param string $page
387 - * @param string $action
388 - * @param string $title
389 - * @param string $button_class
390 - * @param array $params
391 - * @param bool $is_primary
392 - * @param bool $is_small
393 - * @param string|bool $icon_class Optional class for an icon (since 1.1.7).
394 - * @param string|bool $confirmation Optional confirmation message before submit (since 1.1.7).
395 - * @param string $method Since 1.1.7
396 - *
397 - * @uses fs_ui_get_action_button()
398 - */
399 - function fs_ui_action_button(
318 + /**
319 + * @param number $module_id
320 + * @param string $page
321 + * @param string $action
322 + * @param string $title
323 + * @param string $button_class
324 + * @param array $params
325 + * @param bool $is_primary
326 + * @param bool $is_small
327 + * @param string|bool $icon_class Optional class for an icon (since 1.1.7).
328 + * @param string|bool $confirmation Optional confirmation message before submit (since 1.1.7).
329 + * @param string $method Since 1.1.7
330 + *
331 + * @uses fs_ui_get_action_button()
332 + */
333 + function fs_ui_action_button(
334 + $module_id,
335 + $page,
336 + $action,
337 + $title,
338 + $button_class = '',
339 + $params = array(),
340 + $is_primary = true,
341 + $is_small = false,
342 + $icon_class = false,
343 + $confirmation = false,
344 + $method = 'GET'
345 + ) {
346 + echo fs_ui_get_action_button(
400 347 $module_id,
401 348 $page,
402 349 $action,
403 350 $title,
404 - $button_class = '',
405 - $params = array(),
406 - $is_primary = true,
407 - $is_small = false,
408 - $icon_class = false,
409 - $confirmation = false,
410 - $method = 'GET'
411 - ) {
412 - echo fs_ui_get_action_button(
413 - $module_id,
414 - $page,
351 + $button_class,
352 + $params,
353 + $is_primary,
354 + $is_small,
355 + $icon_class,
356 + $confirmation,
357 + $method
358 + );
359 + }
360 +
361 + /**
362 + * @author Vova Feldman (@svovaf)
363 + * @since 1.1.7
364 + *
365 + * @param number $module_id
366 + * @param string $page
367 + * @param string $action
368 + * @param string $title
369 + * @param string $button_class
370 + * @param array $params
371 + * @param bool $is_primary
372 + * @param bool $is_small
373 + * @param string|bool $icon_class Optional class for an icon.
374 + * @param string|bool $confirmation Optional confirmation message before submit.
375 + * @param string $method
376 + *
377 + * @return string
378 + */
379 + function fs_ui_get_action_button(
380 + $module_id,
381 + $page,
382 + $action,
383 + $title,
384 + $button_class = '',
385 + $params = array(),
386 + $is_primary = true,
387 + $is_small = false,
388 + $icon_class = false,
389 + $confirmation = false,
390 + $method = 'GET'
391 + ) {
392 + // Prepend icon (if set).
393 + $title = ( is_string( $icon_class ) ? '<i class="' . $icon_class . '"></i> ' : '' ) . $title;
394 +
395 + if ( is_string( $confirmation ) ) {
396 + return sprintf( '<form action="%s" method="%s"><input type="hidden" name="fs_action" value="%s">%s<a href="#" class="%s" onclick="if (confirm(\'%s\')) this.parentNode.submit(); return false;">%s</a></form>',
397 + freemius( $module_id )->_get_admin_page_url( $page, $params ),
398 + $method,
415 399 $action,
416 - $title,
417 - $button_class,
418 - $params,
419 - $is_primary,
420 - $is_small,
421 - $icon_class,
400 + wp_nonce_field( $action, '_wpnonce', true, false ),
401 + 'button' . ( ! empty( $button_class ) ? ' ' . $button_class : '' ) . ( $is_primary ? ' button-primary' : '' ) . ( $is_small ? ' button-small' : '' ),
422 402 $confirmation,
423 - $method
403 + $title
424 404 );
405 + } else if ( 'GET' !== strtoupper( $method ) ) {
406 + return sprintf( '<form action="%s" method="%s"><input type="hidden" name="fs_action" value="%s">%s<a href="#" class="%s" onclick="this.parentNode.submit(); return false;">%s</a></form>',
407 + freemius( $module_id )->_get_admin_page_url( $page, $params ),
408 + $method,
409 + $action,
410 + wp_nonce_field( $action, '_wpnonce', true, false ),
411 + 'button' . ( ! empty( $button_class ) ? ' ' . $button_class : '' ) . ( $is_primary ? ' button-primary' : '' ) . ( $is_small ? ' button-small' : '' ),
412 + $title
413 + );
414 + } else {
415 + return sprintf( '<a href="%s" class="%s">%s</a></form>',
416 + wp_nonce_url( freemius( $module_id )->_get_admin_page_url( $page, array_merge( $params, array( 'fs_action' => $action ) ) ), $action ),
417 + 'button' . ( ! empty( $button_class ) ? ' ' . $button_class : '' ) . ( $is_primary ? ' button-primary' : '' ) . ( $is_small ? ' button-small' : '' ),
418 + $title
419 + );
425 420 }
426 421 }
427 422
428 - if ( ! function_exists( 'fs_ui_get_action_button' ) ) {
429 - /**
430 - * @author Vova Feldman (@svovaf)
431 - * @since 1.1.7
432 - *
433 - * @param number $module_id
434 - * @param string $page
435 - * @param string $action
436 - * @param string $title
437 - * @param string $button_class
438 - * @param array $params
439 - * @param bool $is_primary
440 - * @param bool $is_small
441 - * @param string|bool $icon_class Optional class for an icon.
442 - * @param string|bool $confirmation Optional confirmation message before submit.
443 - * @param string $method
444 - *
445 - * @return string
446 - */
447 - function fs_ui_get_action_button(
448 - $module_id,
449 - $page,
450 - $action,
451 - $title,
452 - $button_class = '',
453 - $params = array(),
454 - $is_primary = true,
455 - $is_small = false,
456 - $icon_class = false,
457 - $confirmation = false,
458 - $method = 'GET'
459 - ) {
460 - // Prepend icon (if set).
461 - $title = ( is_string( $icon_class ) ? '<i class="' . $icon_class . '"></i> ' : '' ) . $title;
423 + function fs_ui_action_link( $module_id, $page, $action, $title, $params = array() ) {
424 + ?><a class=""
425 + href="<?php echo wp_nonce_url( freemius( $module_id )->_get_admin_page_url( $page, array_merge( $params, array( 'fs_action' => $action ) ) ), $action ) ?>"><?php echo $title ?></a><?php
426 + }
462 427
463 - if ( is_string( $confirmation ) ) {
464 - return sprintf( '<form action="%s" method="%s"><input type="hidden" name="fs_action" value="%s">%s<a href="#" class="%s" onclick="if (confirm(\'%s\')) this.parentNode.submit(); return false;">%s</a></form>',
465 - freemius( $module_id )->_get_admin_page_url( $page, $params ),
466 - $method,
467 - $action,
468 - wp_nonce_field( $action, '_wpnonce', true, false ),
469 - 'button' . ( ! empty( $button_class ) ? ' ' . $button_class : '' ) . ( $is_primary ? ' button-primary' : '' ) . ( $is_small ? ' button-small' : '' ),
470 - $confirmation,
471 - $title
472 - );
473 - } else if ( 'GET' !== strtoupper( $method ) ) {
474 - return sprintf( '<form action="%s" method="%s"><input type="hidden" name="fs_action" value="%s">%s<a href="#" class="%s" onclick="this.parentNode.submit(); return false;">%s</a></form>',
475 - freemius( $module_id )->_get_admin_page_url( $page, $params ),
476 - $method,
477 - $action,
478 - wp_nonce_field( $action, '_wpnonce', true, false ),
479 - 'button' . ( ! empty( $button_class ) ? ' ' . $button_class : '' ) . ( $is_primary ? ' button-primary' : '' ) . ( $is_small ? ' button-small' : '' ),
480 - $title
481 - );
482 - } else {
483 - return sprintf( '<a href="%s" class="%s">%s</a></form>',
484 - wp_nonce_url( freemius( $module_id )->_get_admin_page_url( $page, array_merge( $params, array( 'fs_action' => $action ) ) ), $action ),
485 - 'button' . ( ! empty( $button_class ) ? ' ' . $button_class : '' ) . ( $is_primary ? ' button-primary' : '' ) . ( $is_small ? ' button-small' : '' ),
486 - $title
487 - );
488 - }
428 + /*function fs_error_handler($errno, $errstr, $errfile, $errline)
429 + {
430 + if (false === strpos($errfile, 'freemius/'))
431 + {
432 + // @todo Dump Freemius errors to local log.
489 433 }
490 434
491 - function fs_ui_action_link( $module_id, $page, $action, $title, $params = array() ) {
492 - ?><a class=""
493 - href="<?php echo wp_nonce_url( freemius( $module_id )->_get_admin_page_url( $page, array_merge( $params, array( 'fs_action' => $action ) ) ), $action ) ?>"><?php echo $title ?></a><?php
494 - }
435 +// switch ($errno) {
436 +// case E_USER_ERROR:
437 +// break;
438 +// case E_WARNING:
439 +// case E_USER_WARNING:
440 +// break;
441 +// case E_NOTICE:
442 +// case E_USER_NOTICE:
443 +// break;
444 +// default:
445 +// break;
446 +// }
495 447 }
496 448
497 - if ( ! function_exists( 'fs_get_entity' ) ) {
498 - /**
499 - * @author Leo Fajardo (@leorw)
500 - * @since 2.3.1
501 - *
502 - * @param mixed $entity
503 - * @param string $class
504 - *
505 - * @return FS_Plugin|FS_User|FS_Site|FS_Plugin_License|FS_Plugin_Plan|FS_Plugin_Tag|FS_Subscription
506 - */
507 - function fs_get_entity( $entity, $class ) {
508 - if ( ! is_object( $entity ) || $entity instanceof $class ) {
509 - return $entity;
510 - }
449 + set_error_handler('fs_error_handler');*/
511 450
512 - return new $class( $entity );
513 - }
514 - }
515 -
516 - if ( ! function_exists( 'fs_get_entities' ) ) {
517 - /**
518 - * @author Leo Fajardo (@leorw)
519 - * @since 2.3.1
520 - *
521 - * @param mixed $entities
522 - * @param string $class_name
523 - *
524 - * @return FS_Plugin[]|FS_User[]|FS_Site[]|FS_Plugin_License[]|FS_Plugin_Plan[]|FS_Plugin_Tag[]|FS_Subscription[]
525 - */
526 - function fs_get_entities( $entities, $class_name ) {
527 - if ( ! is_array( $entities ) || empty( $entities ) ) {
528 - return $entities;
529 - }
530 -
531 - // Get first element.
532 - $first_array_element = reset( $entities );
533 -
534 - if ( $first_array_element instanceof $class_name ) {
535 - /**
536 - * If the first element of the array is an instance of the context class, assume that all other
537 - * elements are instances of the class.
538 - */
539 - return $entities;
540 - }
541 -
542 - if (
543 - is_array( $first_array_element ) &&
544 - ! empty( $first_array_element )
545 - ) {
546 - $first_array_element = reset( $first_array_element );
547 -
548 - if ( $first_array_element instanceof $class_name ) {
549 - /**
550 - * If the first element of the `$entities` array is an array whose first element is an instance of the
551 - * context class, assume that all other objects are instances of the class.
552 - */
553 - return $entities;
554 - }
555 - }
556 -
557 - foreach ( $entities as $key => $entities_or_entity ) {
558 - if ( is_array( $entities_or_entity ) ) {
559 - $entities[ $key ] = fs_get_entities( $entities_or_entity, $class_name );
560 - } else {
561 - $entities[ $key ] = fs_get_entity( $entities_or_entity, $class_name );
562 - }
563 - }
564 -
565 - return $entities;
566 - }
567 - }
568 -
569 451 if ( ! function_exists( 'fs_nonce_url' ) ) {
570 452 /**
571 453 * Retrieve URL with nonce added to URL query.
572 454 *
@@ -587,35 +469,8 @@
587 469 return add_query_arg( $name, wp_create_nonce( $action ), $actionurl );
588 470 }
589 471 }
590 472
591 - if ( ! function_exists( 'fs_parse_url_params' ) ) {
592 - /**
593 - * Returns the query parameters of the given URL if there are any.
594 - *
595 - * @param string $url
596 - * @param bool $html_entity_decode
597 - *
598 - * @return array<string, string> Key value pair where key represents the parameter name and value represents the parameter value.
599 - */
600 - function fs_parse_url_params( $url, $html_entity_decode = false ) {
601 - $query_str = parse_url( $url, PHP_URL_QUERY );
602 - $url_params = array();
603 -
604 - if ( empty( $query_str ) ) {
605 - return $url_params;
606 - }
607 -
608 - if ( $html_entity_decode ) {
609 - $query_str = html_entity_decode( $query_str );
610 - }
611 -
612 - parse_str( $query_str, $url_params );
613 -
614 - return $url_params;
615 - }
616 - }
617 -
618 473 if ( ! function_exists( 'fs_starts_with' ) ) {
619 474 /**
620 475 * Check if string starts with.
621 476 *
@@ -778,77 +633,73 @@
778 633 }
779 634
780 635 #endregion Url Canonization ------------------------------------------------------------------
781 636
782 - if ( ! function_exists( 'fs_download_image' ) ) {
783 - /**
784 - * @author Vova Feldman (@svovaf)
785 - *
786 - * @since 1.2.2 Changed to usage of WP_Filesystem_Direct.
787 - *
788 - * @param string $from URL
789 - * @param string $to File path.
790 - *
791 - * @return bool Is successfully downloaded.
792 - */
793 - function fs_download_image( $from, $to ) {
794 - $dir = dirname( $to );
637 + /**
638 + * @author Vova Feldman (@svovaf)
639 + *
640 + * @since 1.2.2 Changed to usage of WP_Filesystem_Direct.
641 + *
642 + * @param string $from URL
643 + * @param string $to File path.
644 + *
645 + * @return bool Is successfully downloaded.
646 + */
647 + function fs_download_image( $from, $to ) {
648 + $dir = dirname( $to );
795 649
796 - if ( 'direct' !== get_filesystem_method( array(), $dir ) ) {
797 - return false;
798 - }
650 + if ( 'direct' !== get_filesystem_method( array(), $dir ) ) {
651 + return false;
652 + }
799 653
800 - if ( ! class_exists( 'WP_Filesystem_Direct' ) ) {
801 - require_once ABSPATH . 'wp-admin/includes/class-wp-filesystem-base.php';
802 - require_once ABSPATH . 'wp-admin/includes/class-wp-filesystem-direct.php';
803 - }
654 + if ( ! class_exists( 'WP_Filesystem_Direct' ) ) {
655 + require_once ABSPATH . 'wp-admin/includes/class-wp-filesystem-base.php';
656 + require_once ABSPATH . 'wp-admin/includes/class-wp-filesystem-direct.php';
657 + }
804 658
805 - $fs = new WP_Filesystem_Direct( '' );
806 - $tmpfile = download_url( $from );
659 + $fs = new WP_Filesystem_Direct( '' );
660 + $tmpfile = download_url( $from );
807 661
808 - if ( $tmpfile instanceof WP_Error ) {
809 - // Issue downloading the file.
810 - return false;
811 - }
662 + if ( $tmpfile instanceof WP_Error ) {
663 + // Issue downloading the file.
664 + return false;
665 + }
812 666
813 - $fs->copy( $tmpfile, $to );
814 - $fs->delete( $tmpfile );
667 + $fs->copy( $tmpfile, $to );
668 + $fs->delete( $tmpfile );
815 669
816 - return true;
817 - }
670 + return true;
818 671 }
819 672
820 673 /* General Utilities
821 674 --------------------------------------------------------------------------------------------*/
822 675
823 - if ( ! function_exists( 'fs_sort_by_priority' ) ) {
824 - /**
825 - * Sorts an array by the value of the priority key.
826 - *
827 - * @author Daniel Iser (@danieliser)
828 - * @since 1.1.7
829 - *
830 - * @param $a
831 - * @param $b
832 - *
833 - * @return int
834 - */
835 - function fs_sort_by_priority( $a, $b ) {
676 + /**
677 + * Sorts an array by the value of the priority key.
678 + *
679 + * @author Daniel Iser (@danieliser)
680 + * @since 1.1.7
681 + *
682 + * @param $a
683 + * @param $b
684 + *
685 + * @return int
686 + */
687 + function fs_sort_by_priority( $a, $b ) {
836 688
837 - // If b has a priority and a does not, b wins.
838 - if ( ! isset( $a['priority'] ) && isset( $b['priority'] ) ) {
839 - return 1;
840 - } // If b has a priority and a does not, b wins.
841 - elseif ( isset( $a['priority'] ) && ! isset( $b['priority'] ) ) {
842 - return - 1;
843 - } // If neither has a priority or both priorities are equal it's a tie.
844 - elseif ( ( ! isset( $a['priority'] ) && ! isset( $b['priority'] ) ) || $a['priority'] === $b['priority'] ) {
845 - return 0;
846 - }
689 + // If b has a priority and a does not, b wins.
690 + if ( ! isset( $a['priority'] ) && isset( $b['priority'] ) ) {
691 + return 1;
692 + } // If b has a priority and a does not, b wins.
693 + elseif ( isset( $a['priority'] ) && ! isset( $b['priority'] ) ) {
694 + return - 1;
695 + } // If neither has a priority or both priorities are equal its a tie.
696 + elseif ( ( ! isset( $a['priority'] ) && ! isset( $b['priority'] ) ) || $a['priority'] === $b['priority'] ) {
697 + return 0;
698 + }
847 699
848 - // If both have priority return the winner.
849 - return ( $a['priority'] < $b['priority'] ) ? - 1 : 1;
850 - }
700 + // If both have priority return the winner.
701 + return ( $a['priority'] < $b['priority'] ) ? - 1 : 1;
851 702 }
852 703
853 704 #--------------------------------------------------------------------------------
854 705 #region Localization
@@ -853,14 +704,8 @@
853 704 #--------------------------------------------------------------------------------
854 705 #region Localization
855 706 #--------------------------------------------------------------------------------
856 707
857 - global $fs_text_overrides;
858 -
859 - if ( ! isset( $fs_text_overrides ) ) {
860 - $fs_text_overrides = array();
861 - }
862 -
863 708 if ( ! function_exists( 'fs_text' ) ) {
864 709 /**
865 710 * Retrieve a translated text by key.
866 711 *
@@ -871,12 +716,14 @@
871 716 * @param string $slug
872 717 *
873 718 * @return string
874 719 *
875 - * @global $fs_text_overrides
720 + * @global $fs_text , $fs_text_overrides
876 721 */
877 722 function fs_text( $key, $slug = 'freemius' ) {
878 - global $fs_text_overrides;
723 + global $fs_text,
724 + $fs_module_info_text,
725 + $fs_text_overrides;
879 726
880 727 if ( isset( $fs_text_overrides[ $slug ] ) ) {
881 728 if ( isset( $fs_text_overrides[ $slug ][ $key ] ) ) {
882 729 return $fs_text_overrides[ $slug ][ $key ];
@@ -887,8 +734,24 @@
887 734 return $fs_text_overrides[ $slug ][ $lower_key ];
888 735 }
889 736 }
890 737
738 + if ( ! isset( $fs_text ) ) {
739 + $dir = defined( 'WP_FS__DIR_INCLUDES' ) ?
740 + WP_FS__DIR_INCLUDES :
741 + dirname( __FILE__ );
742 +
743 + require_once $dir . '/i18n.php';
744 + }
745 +
746 + if ( isset( $fs_text[ $key ] ) ) {
747 + return $fs_text[ $key ];
748 + }
749 +
750 + if ( isset( $fs_module_info_text[ $key ] ) ) {
751 + return $fs_module_info_text[ $key ];
752 + }
753 +
891 754 return $key;
892 755 }
893 756
894 757 #region Private
@@ -1230,9 +1093,9 @@
1230 1093 * @param string $context Context information for the translators.
1231 1094 * @param string $key String key for overrides.
1232 1095 * @param string $slug Module slug for overrides.
1233 1096 *
1234 - * @return void
1097 + * @return string
1235 1098 */
1236 1099 function fs_esc_js_echo_x_inline( $text, $context, $key = '', $slug = 'freemius' ) {
1237 1100 echo esc_js( _fs_text_x_inline( $text, $context, $key, $slug ) );
1238 1101 }
@@ -1420,9 +1283,9 @@
1420 1283 */
1421 1284 function fs_is_plugin_uninstall() {
1422 1285 return (
1423 1286 defined( 'WP_UNINSTALL_PLUGIN' ) ||
1424 - ( 0 < did_action( 'pre_uninstall_plugin' ) )
1287 + ( 0 < did_action( 'update_option_uninstall_plugins' ) )
1425 1288 );
1426 1289 }
1427 1290 }
1428 1291
@@ -1484,22 +1347,5 @@
1484 1347 array( "fs_{$tag}_{$module_unique_affix}" ),
1485 1348 array_slice( $args, 2 ) )
1486 1349 );
1487 1350 }
1488 - }
1489 -
1490 - if ( ! function_exists( 'fs_get_optional_constant' ) ) {
1491 - /**
1492 - * Gets the value of an optional constant. If the constant is not defined, the default value will be returned.
1493 - *
1494 - * @author Swashata Ghosh (@swashata)
1495 - * @since 2.5.12.5
1496 - *
1497 - * @param string $constant_name
1498 - * @param mixed $default_value
1499 - *
1500 - * @return mixed
1501 - */
1502 - function fs_get_optional_constant( $constant_name, $default_value = null ) {
1503 - return defined( $constant_name ) ? constant( $constant_name ) : $default_value;
1504 - }
1505 - }
1351 + }