Below is a differential between the unpatched vulnerable code and the patched update, for reference.
--- a/map-location-picker-at-checkout-for-woocommerce/includes/Bootstrap/Admin_Enqueues.php
+++ b/map-location-picker-at-checkout-for-woocommerce/includes/Bootstrap/Admin_Enqueues.php
@@ -55,8 +55,6 @@
* Initialize the class and set its properties.
*
* @since 1.0.0
- * @param string $plugin_name The name of this plugin.
- * @param string $version The version of this plugin.
*/
public function __construct() {
$this->plugin_name = LPAC_PLUGIN_NAME;
--- a/map-location-picker-at-checkout-for-woocommerce/includes/Bootstrap/Main.php
+++ b/map-location-picker-at-checkout-for-woocommerce/includes/Bootstrap/Main.php
@@ -37,6 +37,7 @@
use LpacControllersCheckout_PageValidate as Checkout_Page_Validation;
use LpacControllersShortcodes as Shortcodes_Controller;
use LpacHelpersFunctions as FunctionsHelper;
+use LpacHelpersLogger;
use LpacNoticesAdmin as Admin_Notices;
use LpacNoticesNotice;
use LpacNoticesLoader as Notices_Loader;
@@ -153,6 +154,32 @@
}
/**
+ * Redirect the user to the map builder page when they click the sub menu item.
+ *
+ * @return void
+ * @since 1.10.8
+ */
+ public function redirectToMapBuilder() {
+ try {
+ } catch ( Exception $e ) {
+ ( new Logger() )->logCritical( $e->getMessage() );
+ }
+ ?>
+ <h1><?php
+ esc_html_e( 'Map Builder', 'map-location-picker-at-checkout-for-woocommerce' );
+ ?> (PRO)</h1>
+ <p style='font-size: 18px'><?php
+ esc_html_e( 'Create custom maps showing your store locations and serviceable areas and add them anywhere on your website using a shortcode.', 'map-location-picker-at-checkout-for-woocommerce' );
+ ?> <a href='https://lpacwp.com/docs/map-builder/' target='_blank'><?php
+ esc_html_e( 'Learn more', 'map-location-picker-at-checkout-for-woocommerce' );
+ ?> >></a></p>
+ <p><img src="<?php
+ echo LPAC_PLUGIN_ASSETS_PATH_URL;
+ ?>img/map-builder.png" alt="kikote map builder screenshot" width='1000px'></p>
+ <?php
+ }
+
+ /**
* Register all of the hooks related to the admin area functionality
* of the plugin.
*
--- a/map-location-picker-at-checkout-for-woocommerce/includes/Helpers/Logger.php
+++ b/map-location-picker-at-checkout-for-woocommerce/includes/Helpers/Logger.php
@@ -0,0 +1,76 @@
+<?php
+/**
+ * File responsible for defining up log methods.
+ *
+ * Author: Uriahs Victor
+ * Created on: 10/07/2025 (d/m/y)
+ *
+ * @link https://uriahsvictor.com
+ * @since 1.10.8
+ * @package Helpers
+ */
+
+namespace LpacHelpers;
+
+if ( ! defined( 'ABSPATH' ) ) {
+ exit;
+}
+
+use WC_Logger;
+
+/**
+ * Log Class.
+ *
+ * Extendings WC_Logger to add context for plugin.
+ *
+ * @package PrintusHelpers
+ * @since 1.0.0
+ */
+class Logger extends WC_Logger {
+
+ const CONTEXT = array( 'source' => 'kikote' );
+
+ /**
+ * Save a Critical log.
+ *
+ * @param string $msg The error message.
+ * @return void
+ * @since 1.0.0
+ */
+ public function logCritical( string $msg ): void {
+ $this->critical( $msg, self::CONTEXT );
+ }
+
+ /**
+ * Save an Error log.
+ *
+ * @param string $msg The error message.
+ * @return void
+ * @since 1.0.0
+ */
+ public function logError( string $msg ): void {
+ $this->error( $msg, self::CONTEXT );
+ }
+
+ /**
+ * Save a Warning log.
+ *
+ * @param string $msg The error message.
+ * @return void
+ * @since 1.0.0
+ */
+ public function logWarning( string $msg ): void {
+ $this->warning( $msg, self::CONTEXT );
+ }
+
+ /**
+ * Save an Info log.
+ *
+ * @param string $msg The error message.
+ * @return void
+ * @since 1.0.0
+ */
+ public function logInfo( string $msg ): void {
+ $this->info( $msg, self::CONTEXT );
+ }
+}
--- a/map-location-picker-at-checkout-for-woocommerce/includes/Helpers/QR_Code_Generator.php
+++ b/map-location-picker-at-checkout-for-woocommerce/includes/Helpers/QR_Code_Generator.php
@@ -86,7 +86,7 @@
// Its possible to add logo to QR code.
$result = $writer->write( $qr_code );
- $image = $result->saveToFile( $path_with_filename );
+ $result->saveToFile( $path_with_filename );
// Doesn't work in email clients like Gmail
// $image_base64 = $result->getDataUri();
--- a/map-location-picker-at-checkout-for-woocommerce/includes/Views/Frontend/Frontend.php
+++ b/map-location-picker-at-checkout-for-woocommerce/includes/Views/Frontend/Frontend.php
@@ -486,7 +486,7 @@
*
* @return void
*/
- public function createFrontendTranslatedStrings() {
+ public function createFrontendTranslatedStrings() : void {
$strings = array(
'geolocation_not_supported' => __( 'Geolocation is not possible on this web browser. Please switch to a different web browser to use our interactive map.', 'map-location-picker-at-checkout-for-woocommerce' ),
'manually_select_location' => __( 'Please select your location manually by clicking on the map then moving the marker to your desired location.', 'map-location-picker-at-checkout-for-woocommerce' ),
--- a/map-location-picker-at-checkout-for-woocommerce/lpac.php
+++ b/map-location-picker-at-checkout-for-woocommerce/lpac.php
@@ -12,7 +12,7 @@
* Plugin Name: Kikote - Location Picker at Checkout for WooCommerce
* Plugin URI: https://lpacwp.com
* Description: Allow customers to choose their shipping or pickup location using a map at checkout.
- * Version: 1.10.6
+ * Version: 1.10.8
* Requires at least: 5.7
* Author: Uriahs Victor
* Author URI: https://lpacwp.com
@@ -21,7 +21,7 @@
* Text Domain: map-location-picker-at-checkout-for-woocommerce
* Domain Path: /languages
* WC requires at least: 5.5
- * WC tested up to: 9.5
+ * WC tested up to: 10.0
* Requires Plugins: woocommerce
* Requires PHP: 7.4
*/
@@ -30,7 +30,7 @@
die;
}
if ( !defined( 'LPAC_VERSION' ) ) {
- define( 'LPAC_VERSION', '1.10.6' );
+ define( 'LPAC_VERSION', '1.10.8' );
}
/**
* Check PHP version
@@ -202,39 +202,6 @@
}
register_activation_hook( __FILE__, 'activate_lpac' );
register_deactivation_hook( __FILE__, 'deactivate_lpac' );
- /**
- * Map Builder
- */
- function lpac_redirect_to_map_builder() {
- ?>
- <h1><?php
- esc_html_e( 'Map Builder', 'map-location-picker-at-checkout-for-woocommerce' );
- ?> (PRO)</h1>
- <p style='font-size: 18px'><?php
- esc_html_e( 'Create custom maps showing your store locations and serviceable areas and add them anywhere on your website using a shortcode.', 'map-location-picker-at-checkout-for-woocommerce' );
- ?> <a href='https://lpacwp.com/docs/map-builder/' target='_blank'><?php
- esc_html_e( 'Learn more', 'map-location-picker-at-checkout-for-woocommerce' );
- ?> >></a></p>
- <p><img src="<?php
- echo LPAC_PLUGIN_ASSETS_PATH_URL;
- ?>img/map-builder.png" alt="kikote map builder screenshot" width='1000px'></p>
- <?php
- }
-
- if ( !defined( 'WP_FS__DEFAULT_PRIORITY' ) ) {
- define( 'WP_FS__DEFAULT_PRIORITY', 10 );
- }
- lpac_fs()->add_submenu_item(
- esc_html__( 'Map Builder', 'map-location-picker-at-checkout-for-woocommerce' ),
- 'lpac_redirect_to_map_builder',
- $page_title = true,
- $capability = 'manage_options',
- $menu_slug = 'map-builder',
- $before_render_function = false,
- $priority = WP_FS__DEFAULT_PRIORITY,
- $show_submenu = true,
- $class = ''
- );
require __DIR__ . '/class-lpac-uninstall.php';
require __DIR__ . '/admin-pointers.php';
lpac_fs()->add_action( 'after_uninstall', array(new Lpac_Uninstall(), 'remove_plugin_settings') );
@@ -243,8 +210,8 @@
return __DIR__ . '/assets/img/logo.png';
} );
/**
- * Constants
- */
+ Constants
+ */
define( 'LPAC_BASE_FILE', basename( plugin_dir_path( __FILE__ ) ) );
define( 'LPAC_PLUGIN_NAME', 'lpac' );
define( 'LPAC_PLUGIN_DIR', __DIR__ . '/' );
@@ -313,5 +280,5 @@
}
}
- add_action( 'plugins_loaded', 'soaringleads_kikote_init' );
+ add_action( 'init', 'soaringleads_kikote_init' );
}
No newline at end of file
--- a/map-location-picker-at-checkout-for-woocommerce/vendor/autoload.php
+++ b/map-location-picker-at-checkout-for-woocommerce/vendor/autoload.php
@@ -22,4 +22,4 @@
require_once __DIR__ . '/composer/autoload_real.php';
-return ComposerAutoloaderInit8140b59f29551cb511efdbcac01103c3::getLoader();
+return ComposerAutoloaderInit993a252c6a799ab413a5a33aef64f5c5::getLoader();
--- a/map-location-picker-at-checkout-for-woocommerce/vendor/composer/InstalledVersions.php
+++ b/map-location-picker-at-checkout-for-woocommerce/vendor/composer/InstalledVersions.php
@@ -33,6 +33,11 @@
private static $installed;
/**
+ * @var bool
+ */
+ private static $installedIsLocalDir;
+
+ /**
* @var bool|null
*/
private static $canGetVendors;
@@ -309,6 +314,12 @@
{
self::$installed = $data;
self::$installedByVendor = array();
+
+ // when using reload, we disable the duplicate protection to ensure that self::$installed data is
+ // always returned, but we cannot know whether it comes from the installed.php in __DIR__ or not,
+ // so we have to assume it does not, and that may result in duplicate data being returned when listing
+ // all installed packages for example
+ self::$installedIsLocalDir = false;
}
/**
@@ -322,19 +333,27 @@
}
$installed = array();
+ $copiedLocalDir = false;
if (self::$canGetVendors) {
+ $selfDir = strtr(__DIR__, '\', '/');
foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) {
+ $vendorDir = strtr($vendorDir, '\', '/');
if (isset(self::$installedByVendor[$vendorDir])) {
$installed[] = self::$installedByVendor[$vendorDir];
} elseif (is_file($vendorDir.'/composer/installed.php')) {
/** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $required */
$required = require $vendorDir.'/composer/installed.php';
- $installed[] = self::$installedByVendor[$vendorDir] = $required;
- if (null === self::$installed && strtr($vendorDir.'/composer', '\', '/') === strtr(__DIR__, '\', '/')) {
- self::$installed = $installed[count($installed) - 1];
+ self::$installedByVendor[$vendorDir] = $required;
+ $installed[] = $required;
+ if (self::$installed === null && $vendorDir.'/composer' === $selfDir) {
+ self::$installed = $required;
+ self::$installedIsLocalDir = true;
}
}
+ if (self::$installedIsLocalDir && $vendorDir.'/composer' === $selfDir) {
+ $copiedLocalDir = true;
+ }
}
}
@@ -350,7 +369,7 @@
}
}
- if (self::$installed !== array()) {
+ if (self::$installed !== array() && !$copiedLocalDir) {
$installed[] = self::$installed;
}
--- a/map-location-picker-at-checkout-for-woocommerce/vendor/composer/autoload_classmap.php
+++ b/map-location-picker-at-checkout-for-woocommerce/vendor/composer/autoload_classmap.php
@@ -193,6 +193,7 @@
'Lpac\Controllers\Shortcodes' => $baseDir . '/includes/Controllers/Shortcodes.php',
'Lpac\Controllers\SiteWide\InlineScriptsController' => $baseDir . '/includes/Controllers/SiteWide/InlineScriptsController.php',
'Lpac\Helpers\Functions' => $baseDir . '/includes/Helpers/Functions.php',
+ 'Lpac\Helpers\Logger' => $baseDir . '/includes/Helpers/Logger.php',
'Lpac\Helpers\QR_Code_Generator' => $baseDir . '/includes/Helpers/QR_Code_Generator.php',
'Lpac\Helpers\Utilities' => $baseDir . '/includes/Helpers/Utilities.php',
'Lpac\KikoteActivator' => $baseDir . '/includes/KikoteActivator.php',
@@ -209,7 +210,7 @@
'Lpac\Notices\Review_Notices' => $baseDir . '/includes/Notices/Review_Notices.php',
'Lpac\Notices\Upsells_Notices' => $baseDir . '/includes/Notices/Upsells_Notices.php',
'Lpac\Pro\Controllers\AdminSettingsController' => $baseDir . '/includes/Pro/Controllers/AdminSettingsController.php',
- 'Lpac\Pro\Controllers\Admin\Custom_Post_Types' => $baseDir . '/includes/Pro/Controllers/Admin/Custom_Post_Types.php',
+ 'Lpac\Pro\Controllers\Admin\CustomPostTypes' => $baseDir . '/includes/Pro/Controllers/Admin/CustomPostTypes.php',
'Lpac\Pro\Controllers\Checkout_Page\Controller' => $baseDir . '/includes/Pro/Controllers/Checkout_Page/Controller.php',
'Lpac\Pro\Controllers\Checkout_Page\StoreLocations\ShippingMethods' => $baseDir . '/includes/Pro/Controllers/Checkout_Page/StoreLocations/ShippingMethods.php',
'Lpac\Pro\Controllers\Checkout_Page\Validate' => $baseDir . '/includes/Pro/Controllers/Checkout_Page/Validate.php',
@@ -221,7 +222,7 @@
'Lpac\Pro\Controllers\Shipping\SetupSession' => $baseDir . '/includes/Pro/Controllers/Shipping/SetupSession.php',
'Lpac\Pro\Controllers\WooCommerce_Account' => $baseDir . '/includes/Pro/Controllers/WooCommerce_Account.php',
'Lpac\Pro\Helpers\Functions' => $baseDir . '/includes/Pro/Helpers/Functions.php',
- 'Lpac\Pro\Models\Admin\Custom_Post_Types\Map_Builder' => $baseDir . '/includes/Pro/Models/Admin/Custom_Post_Types/Map_Builder.php',
+ 'Lpac\Pro\Models\Admin\CustomPostTypes\Map_Builder' => $baseDir . '/includes/Pro/Models/Admin/CustomPostTypes/Map_Builder.php',
'Lpac\Pro\Models\Draw_Shipping_Region' => $baseDir . '/includes/Pro/Models/Draw_Shipping_Region.php',
'Lpac\Pro\Models\Export_Orders' => $baseDir . '/includes/Pro/Models/Export_Orders.php',
'Lpac\Pro\Models\Location_Details' => $baseDir . '/includes/Pro/Models/Location_Details.php',
@@ -233,7 +234,7 @@
'Lpac\Pro\Models\WooCommerce_Account' => $baseDir . '/includes/Pro/Models/WooCommerce_Account.php',
'Lpac\Pro\Views\Admin\Admin' => $baseDir . '/includes/Pro/Views/Admin/Admin.php',
'Lpac\Pro\Views\Admin\Admin_Settings' => $baseDir . '/includes/Pro/Views/Admin/Admin_Settings.php',
- 'Lpac\Pro\Views\Admin\Custom_Post_Types\Map_Builder' => $baseDir . '/includes/Pro/Views/Admin/Custom_Post_Types/Map_Builder.php',
+ 'Lpac\Pro\Views\Admin\CustomPostTypes\Map_Builder' => $baseDir . '/includes/Pro/Views/Admin/CustomPostTypes/Map_Builder.php',
'Lpac\Pro\Views\Frontend\Frontend' => $baseDir . '/includes/Pro/Views/Frontend/Frontend.php',
'Lpac\Pro\Views\Frontend\Shortcodes' => $baseDir . '/includes/Pro/Views/Frontend/Shortcodes.php',
'Lpac\Pro\Views\Frontend\WooCommerce_Account' => $baseDir . '/includes/Pro/Views/Frontend/WooCommerce_Account.php',
--- a/map-location-picker-at-checkout-for-woocommerce/vendor/composer/autoload_real.php
+++ b/map-location-picker-at-checkout-for-woocommerce/vendor/composer/autoload_real.php
@@ -2,7 +2,7 @@
// autoload_real.php @generated by Composer
-class ComposerAutoloaderInit8140b59f29551cb511efdbcac01103c3
+class ComposerAutoloaderInit993a252c6a799ab413a5a33aef64f5c5
{
private static $loader;
@@ -24,16 +24,16 @@
require __DIR__ . '/platform_check.php';
- spl_autoload_register(array('ComposerAutoloaderInit8140b59f29551cb511efdbcac01103c3', 'loadClassLoader'), true, true);
+ spl_autoload_register(array('ComposerAutoloaderInit993a252c6a799ab413a5a33aef64f5c5', 'loadClassLoader'), true, true);
self::$loader = $loader = new ComposerAutoloadClassLoader(dirname(__DIR__));
- spl_autoload_unregister(array('ComposerAutoloaderInit8140b59f29551cb511efdbcac01103c3', 'loadClassLoader'));
+ spl_autoload_unregister(array('ComposerAutoloaderInit993a252c6a799ab413a5a33aef64f5c5', 'loadClassLoader'));
require __DIR__ . '/autoload_static.php';
- call_user_func(ComposerAutoloadComposerStaticInit8140b59f29551cb511efdbcac01103c3::getInitializer($loader));
+ call_user_func(ComposerAutoloadComposerStaticInit993a252c6a799ab413a5a33aef64f5c5::getInitializer($loader));
$loader->register(true);
- $filesToLoad = ComposerAutoloadComposerStaticInit8140b59f29551cb511efdbcac01103c3::$files;
+ $filesToLoad = ComposerAutoloadComposerStaticInit993a252c6a799ab413a5a33aef64f5c5::$files;
$requireFile = Closure::bind(static function ($fileIdentifier, $file) {
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
$GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
--- a/map-location-picker-at-checkout-for-woocommerce/vendor/composer/autoload_static.php
+++ b/map-location-picker-at-checkout-for-woocommerce/vendor/composer/autoload_static.php
@@ -4,7 +4,7 @@
namespace ComposerAutoload;
-class ComposerStaticInit8140b59f29551cb511efdbcac01103c3
+class ComposerStaticInit993a252c6a799ab413a5a33aef64f5c5
{
public static $files = array (
'8d50dc88e56bace65e1e72f6017983ed' => __DIR__ . '/..' . '/freemius/wordpress-sdk/start.php',
@@ -242,6 +242,7 @@
'Lpac\Controllers\Shortcodes' => __DIR__ . '/../..' . '/includes/Controllers/Shortcodes.php',
'Lpac\Controllers\SiteWide\InlineScriptsController' => __DIR__ . '/../..' . '/includes/Controllers/SiteWide/InlineScriptsController.php',
'Lpac\Helpers\Functions' => __DIR__ . '/../..' . '/includes/Helpers/Functions.php',
+ 'Lpac\Helpers\Logger' => __DIR__ . '/../..' . '/includes/Helpers/Logger.php',
'Lpac\Helpers\QR_Code_Generator' => __DIR__ . '/../..' . '/includes/Helpers/QR_Code_Generator.php',
'Lpac\Helpers\Utilities' => __DIR__ . '/../..' . '/includes/Helpers/Utilities.php',
'Lpac\KikoteActivator' => __DIR__ . '/../..' . '/includes/KikoteActivator.php',
@@ -258,7 +259,7 @@
'Lpac\Notices\Review_Notices' => __DIR__ . '/../..' . '/includes/Notices/Review_Notices.php',
'Lpac\Notices\Upsells_Notices' => __DIR__ . '/../..' . '/includes/Notices/Upsells_Notices.php',
'Lpac\Pro\Controllers\AdminSettingsController' => __DIR__ . '/../..' . '/includes/Pro/Controllers/AdminSettingsController.php',
- 'Lpac\Pro\Controllers\Admin\Custom_Post_Types' => __DIR__ . '/../..' . '/includes/Pro/Controllers/Admin/Custom_Post_Types.php',
+ 'Lpac\Pro\Controllers\Admin\CustomPostTypes' => __DIR__ . '/../..' . '/includes/Pro/Controllers/Admin/CustomPostTypes.php',
'Lpac\Pro\Controllers\Checkout_Page\Controller' => __DIR__ . '/../..' . '/includes/Pro/Controllers/Checkout_Page/Controller.php',
'Lpac\Pro\Controllers\Checkout_Page\StoreLocations\ShippingMethods' => __DIR__ . '/../..' . '/includes/Pro/Controllers/Checkout_Page/StoreLocations/ShippingMethods.php',
'Lpac\Pro\Controllers\Checkout_Page\Validate' => __DIR__ . '/../..' . '/includes/Pro/Controllers/Checkout_Page/Validate.php',
@@ -270,7 +271,7 @@
'Lpac\Pro\Controllers\Shipping\SetupSession' => __DIR__ . '/../..' . '/includes/Pro/Controllers/Shipping/SetupSession.php',
'Lpac\Pro\Controllers\WooCommerce_Account' => __DIR__ . '/../..' . '/includes/Pro/Controllers/WooCommerce_Account.php',
'Lpac\Pro\Helpers\Functions' => __DIR__ . '/../..' . '/includes/Pro/Helpers/Functions.php',
- 'Lpac\Pro\Models\Admin\Custom_Post_Types\Map_Builder' => __DIR__ . '/../..' . '/includes/Pro/Models/Admin/Custom_Post_Types/Map_Builder.php',
+ 'Lpac\Pro\Models\Admin\CustomPostTypes\Map_Builder' => __DIR__ . '/../..' . '/includes/Pro/Models/Admin/CustomPostTypes/Map_Builder.php',
'Lpac\Pro\Models\Draw_Shipping_Region' => __DIR__ . '/../..' . '/includes/Pro/Models/Draw_Shipping_Region.php',
'Lpac\Pro\Models\Export_Orders' => __DIR__ . '/../..' . '/includes/Pro/Models/Export_Orders.php',
'Lpac\Pro\Models\Location_Details' => __DIR__ . '/../..' . '/includes/Pro/Models/Location_Details.php',
@@ -282,7 +283,7 @@
'Lpac\Pro\Models\WooCommerce_Account' => __DIR__ . '/../..' . '/includes/Pro/Models/WooCommerce_Account.php',
'Lpac\Pro\Views\Admin\Admin' => __DIR__ . '/../..' . '/includes/Pro/Views/Admin/Admin.php',
'Lpac\Pro\Views\Admin\Admin_Settings' => __DIR__ . '/../..' . '/includes/Pro/Views/Admin/Admin_Settings.php',
- 'Lpac\Pro\Views\Admin\Custom_Post_Types\Map_Builder' => __DIR__ . '/../..' . '/includes/Pro/Views/Admin/Custom_Post_Types/Map_Builder.php',
+ 'Lpac\Pro\Views\Admin\CustomPostTypes\Map_Builder' => __DIR__ . '/../..' . '/includes/Pro/Views/Admin/CustomPostTypes/Map_Builder.php',
'Lpac\Pro\Views\Frontend\Frontend' => __DIR__ . '/../..' . '/includes/Pro/Views/Frontend/Frontend.php',
'Lpac\Pro\Views\Frontend\Shortcodes' => __DIR__ . '/../..' . '/includes/Pro/Views/Frontend/Shortcodes.php',
'Lpac\Pro\Views\Frontend\WooCommerce_Account' => __DIR__ . '/../..' . '/includes/Pro/Views/Frontend/WooCommerce_Account.php',
@@ -298,9 +299,9 @@
public static function getInitializer(ClassLoader $loader)
{
return Closure::bind(function () use ($loader) {
- $loader->prefixLengthsPsr4 = ComposerStaticInit8140b59f29551cb511efdbcac01103c3::$prefixLengthsPsr4;
- $loader->prefixDirsPsr4 = ComposerStaticInit8140b59f29551cb511efdbcac01103c3::$prefixDirsPsr4;
- $loader->classMap = ComposerStaticInit8140b59f29551cb511efdbcac01103c3::$classMap;
+ $loader->prefixLengthsPsr4 = ComposerStaticInit993a252c6a799ab413a5a33aef64f5c5::$prefixLengthsPsr4;
+ $loader->prefixDirsPsr4 = ComposerStaticInit993a252c6a799ab413a5a33aef64f5c5::$prefixDirsPsr4;
+ $loader->classMap = ComposerStaticInit993a252c6a799ab413a5a33aef64f5c5::$classMap;
}, null, ClassLoader::class);
}
--- a/map-location-picker-at-checkout-for-woocommerce/vendor/composer/installed.php
+++ b/map-location-picker-at-checkout-for-woocommerce/vendor/composer/installed.php
@@ -3,7 +3,7 @@
'name' => '__root__',
'pretty_version' => 'dev-main',
'version' => 'dev-main',
- 'reference' => '73f015c4073ad963fa15cdab64786e84e9445833',
+ 'reference' => 'a39b778a137a4866721075485358f6b084c054d1',
'type' => 'library',
'install_path' => __DIR__ . '/../../',
'aliases' => array(),
@@ -13,7 +13,7 @@
'__root__' => array(
'pretty_version' => 'dev-main',
'version' => 'dev-main',
- 'reference' => '73f015c4073ad963fa15cdab64786e84e9445833',
+ 'reference' => 'a39b778a137a4866721075485358f6b084c054d1',
'type' => 'library',
'install_path' => __DIR__ . '/../../',
'aliases' => array(),
@@ -47,9 +47,9 @@
'dev_requirement' => false,
),
'freemius/wordpress-sdk' => array(
- 'pretty_version' => '2.10.1',
- 'version' => '2.10.1.0',
- 'reference' => '5f57de9d7504b37b0ee9f5da44b6699c99854dd2',
+ 'pretty_version' => '2.12.0',
+ 'version' => '2.12.0.0',
+ 'reference' => 'db6f35a2b3d318a53330409dbeab49156ee76dd8',
'type' => 'library',
'install_path' => __DIR__ . '/../freemius/wordpress-sdk',
'aliases' => array(),
--- a/map-location-picker-at-checkout-for-woocommerce/vendor/freemius/wordpress-sdk/includes/class-freemius.php
+++ b/map-location-picker-at-checkout-for-woocommerce/vendor/freemius/wordpress-sdk/includes/class-freemius.php
@@ -3629,7 +3629,7 @@
$this->delete_current_install( false );
- $license_key = false;
+ $license = null;
if (
is_object( $this->_license ) &&
@@ -3637,20 +3637,21 @@
( WP_FS__IS_LOCALHOST_FOR_SERVER || FS_Site::is_localhost_by_address( self::get_unfiltered_site_url() ) )
)
) {
- $license_key = $this->_license->secret_key;
+ $license = $this->_license;
}
return $this->opt_in(
false,
false,
false,
- $license_key,
+ ( is_object( $license ) ? $license->secret_key : false ),
false,
false,
false,
null,
array(),
- false
+ false,
+ ( is_object( $license ) ? $license->user_id : null )
);
}
@@ -7659,7 +7660,14 @@
$parent_fs->get_current_or_network_user()->email,
false,
false,
- $license->secret_key
+ $license->secret_key,
+ false,
+ false,
+ false,
+ null,
+ array(),
+ true,
+ $license->user_id
);
} else {
// Activate the license.
@@ -7723,7 +7731,9 @@
false,
false,
null,
- $sites
+ $sites,
+ true,
+ $license->user_id
);
} else {
$blog_2_install_map = array();
@@ -7777,7 +7787,7 @@
* @param array $sites
* @param int $blog_id
*/
- private function maybe_activate_bundle_license( FS_Plugin_License $license = null, $sites = array(), $blog_id = 0 ) {
+ private function maybe_activate_bundle_license( $license = null, $sites = array(), $blog_id = 0 ) {
if ( ! is_object( $license ) && $this->has_active_valid_license() ) {
$license = $this->_license;
}
@@ -7949,7 +7959,8 @@
null,
null,
$sites,
- ( $current_blog_id > 0 ? $current_blog_id : null )
+ ( $current_blog_id > 0 ? $current_blog_id : null ),
+ $license->user_id
);
}
}
@@ -11576,7 +11587,7 @@
continue;
}
- $missing_plan = self::_get_plan_by_id( $plan_id );
+ $missing_plan = self::_get_plan_by_id( $plan_id, false );
if ( is_object( $missing_plan ) ) {
$plans[] = $missing_plan;
@@ -11738,10 +11749,10 @@
*
* @return FS_Plugin_Plan|false
*/
- function _get_plan_by_id( $id ) {
+ function _get_plan_by_id( $id, $allow_sync = true ) {
$this->_logger->entrance();
- if ( ! is_array( $this->_plans ) || 0 === count( $this->_plans ) ) {
+ if ( $allow_sync && ( ! is_array( $this->_plans ) || 0 === count( $this->_plans ) ) ) {
$this->_sync_plans();
}
@@ -12385,7 +12396,7 @@
*
* @param FS_Plugin_License $license
*/
- private function set_license( FS_Plugin_License $license = null ) {
+ private function set_license( $license = null ) {
$this->_license = $license;
$this->maybe_update_whitelabel_flag( $license );
@@ -13485,7 +13496,8 @@
fs_request_get( 'module_id', null, 'post' ),
fs_request_get( 'user_id', null ),
fs_request_get_bool( 'is_extensions_tracking_allowed', null ),
- fs_request_get_bool( 'is_diagnostic_tracking_allowed', null )
+ fs_request_get_bool( 'is_diagnostic_tracking_allowed', null ),
+ fs_request_get( 'license_owner_id', null )
);
if (
@@ -13634,6 +13646,7 @@
* @param null|number $plugin_id
* @param array $sites
* @param int $blog_id
+ * @param null|number $license_owner_id
*
* @return array {
* @var bool $success
@@ -13648,7 +13661,8 @@
$is_marketing_allowed = null,
$plugin_id = null,
$sites = array(),
- $blog_id = null
+ $blog_id = null,
+ $license_owner_id = null
) {
$this->_logger->entrance();
@@ -13659,7 +13673,11 @@
$sites,
$is_marketing_allowed,
$blog_id,
- $plugin_id
+ $plugin_id,
+ null,
+ null,
+ null,
+ $license_owner_id
);
// No need to show the sticky after license activation notice after migrating a license.
@@ -13733,9 +13751,10 @@
* @param null|bool $is_marketing_allowed
* @param null|int $blog_id
* @param null|number $plugin_id
- * @param null|number $license_owner_id
+ * @param null|number $user_id
* @param bool|null $is_extensions_tracking_allowed
* @param bool|null $is_diagnostic_tracking_allowed Since 2.5.0.2 to allow license activation with minimal data footprint.
+ * @param null|number $license_owner_id
*
*
* @return array {
@@ -13750,9 +13769,10 @@
$is_marketing_allowed = null,
$blog_id = null,
$plugin_id = null,
- $license_owner_id = null,
+ $user_id = null,
$is_extensions_tracking_allowed = null,
- $is_diagnostic_tracking_allowed = null
+ $is_diagnostic_tracking_allowed = null,
+ $license_owner_id = null
) {
$this->_logger->entrance();
@@ -13841,10 +13861,10 @@
$install_ids = array();
- $change_owner = FS_User::is_valid_id( $license_owner_id );
+ $change_owner = FS_User::is_valid_id( $user_id );
if ( $change_owner ) {
- $params['user_id'] = $license_owner_id;
+ $params['user_id'] = $user_id;
$installs_info_by_slug_map = $fs->get_parent_and_addons_installs_info();
@@ -13920,7 +13940,9 @@
false,
false,
$is_marketing_allowed,
- $sites
+ $sites,
+ true,
+ $license_owner_id
);
if ( isset( $next_page->error ) ) {
@@ -15630,7 +15652,7 @@
*
* @return bool Since 2.3.1 returns if a switch was made.
*/
- function switch_to_blog( $blog_id, FS_Site $install = null, $flush = false ) {
+ function switch_to_blog( $blog_id, $install = null, $flush = false ) {
if ( ! is_numeric( $blog_id ) ) {
return false;
}
@@ -16936,14 +16958,13 @@
*
* @param array $override_with
* @param bool|int|null $network_level_or_blog_id If true, return params for network level opt-in. If integer, get params for specified blog in the network.
+ * @param bool $skip_user_info
*
* @return array
*/
- function get_opt_in_params( $override_with = array(), $network_level_or_blog_id = null ) {
+ function get_opt_in_params( $override_with = array(), $network_level_or_blog_id = null, $skip_user_info = false ) {
$this->_logger->entrance();
- $current_user = self::_get_current_wp_user();
-
$activation_action = $this->get_unique_affix() . '_activate_new';
$return_url = $this->is_anonymous() ?
// If skipped already, then return to the account page.
@@ -16954,9 +16975,6 @@
$versions = $this->get_versions();
$params = array_merge( $versions, array(
- 'user_firstname' => $current_user->user_firstname,
- 'user_lastname' => $current_user->user_lastname,
- 'user_email' => $current_user->user_email,
'plugin_slug' => $this->_slug,
'plugin_id' => $this->get_id(),
'plugin_public_key' => $this->get_public_key(),
@@ -16972,6 +16990,21 @@
'is_localhost' => WP_FS__IS_LOCALHOST,
) );
+ if (
+ ! $skip_user_info &&
+ (
+ empty( $override_with['user_firstname'] ) ||
+ empty( $override_with['user_lastname'] ) ||
+ empty( $override_with['user_email'] )
+ )
+ ) {
+ $current_user = self::_get_current_wp_user();
+
+ $params['user_firstname'] = $current_user->user_firstname;
+ $params['user_lastname'] = $current_user->user_lastname;
+ $params['user_email'] = $current_user->user_email;
+ }
+
if ( $this->is_addon() ) {
$parent_fs = $this->get_parent_instance();
@@ -17051,6 +17084,7 @@
* @param null|bool $is_marketing_allowed
* @param array $sites If network-level opt-in, an array of containing details of sites.
* @param bool $redirect
+ * @param null|number $license_owner_id
*
* @return string|object
* @use WP_Error
@@ -17065,15 +17099,11 @@
$is_disconnected = false,
$is_marketing_allowed = null,
$sites = array(),
- $redirect = true
+ $redirect = true,
+ $license_owner_id = null
) {
$this->_logger->entrance();
- if ( false === $email ) {
- $current_user = self::_get_current_wp_user();
- $email = $current_user->user_email;
- }
-
/**
* @since 1.2.1 If activating with license key, ignore the context-user
* since the user will be automatically loaded from the license.
@@ -17083,6 +17113,11 @@
$this->_storage->remove( 'pending_license_key' );
if ( ! $is_uninstall ) {
+ if ( false === $email ) {
+ $current_user = self::_get_current_wp_user();
+ $email = $current_user->user_email;
+ }
+
$fs_user = Freemius::_get_user_by_email( $email );
if ( is_object( $fs_user ) && ! $this->is_pending_activation() ) {
return $this->install_with_user(
@@ -17097,15 +17132,22 @@
}
}
+ $skip_user_info = ( ! empty( $license_key ) && FS_User::is_valid_id( $license_owner_id ) );
+
$user_info = array();
- if ( ! empty( $email ) ) {
- $user_info['user_email'] = $email;
- }
- if ( ! empty( $first ) ) {
- $user_info['user_firstname'] = $first;
- }
- if ( ! empty( $last ) ) {
- $user_info['user_lastname'] = $last;
+
+ if ( ! $skip_user_info ) {
+ if ( ! empty( $email ) ) {
+ $user_info['user_email'] = $email;
+ }
+
+ if ( ! empty( $first ) ) {
+ $user_info['user_firstname'] = $first;
+ }
+
+ if ( ! empty( $last ) ) {
+ $user_info['user_lastname'] = $last;
+ }
}
if ( ! empty( $sites ) ) {
@@ -17116,7 +17158,7 @@
$is_network = false;
}
- $params = $this->get_opt_in_params( $user_info, $is_network );
+ $params = $this->get_opt_in_params( $user_info, $is_network, $skip_user_info );
$filtered_license_key = false;
if ( is_string( $license_key ) ) {
@@ -18112,7 +18154,7 @@
private function _activate_addon_account(
Freemius $parent_fs,
$network_level_or_blog_id = null,
- FS_Plugin_License $bundle_license = null
+ $bundle_license = null
) {
if ( $this->is_registered() ) {
// Already activated.
@@ -18745,7 +18787,7 @@
* @return bool
*/
function is_pricing_page_visible() {
- return (
+ $visible = (
// Has at least one paid plan.
$this->has_paid_plan() &&
// Didn't ask to hide the pricing page.
@@ -18753,6 +18795,8 @@
// Don't have a valid active license or has more than one plan.
( ! $this->is_paying() || ! $this->is_single_plan( true ) )
);
+
+ return $this->apply_filters( 'is_pricing_page_visible', $visible );
}
/**
@@ -19708,7 +19752,7 @@
* @param null|int $network_level_or_blog_id Since 2.0.0
* @param FS_Site $site Since 2.0.0
*/
- private function _store_site( $store = true, $network_level_or_blog_id = null, FS_Site $site = null, $is_backup = false ) {
+ private function _store_site( $store = true, $network_level_or_blog_id = null, $site = null, $is_backup = false ) {
$this->_logger->entrance();
if ( is_null( $site ) ) {
@@ -21548,7 +21592,14 @@
false,
false,
false,
- $premium_license->secret_key
+ $premium_license->secret_key,
+ false,
+ false,
+ false,
+ null,
+ array(),
+ true,
+ $premium_license->user_id
);
return;
@@ -24000,13 +24051,15 @@
// Start trial button.
$button = ' ' . sprintf(
- '<a style="margin-left: 10px; vertical-align: super;" href="%s"><button class="button button-primary">%s ➜</button></a>',
+ '<div><a class="button button-primary" href="%s">%s ➜</a></div>',
$trial_url,
$this->get_text_x_inline( 'Start free trial', 'call to action', 'start-free-trial' )
);
+ $message_text = $this->apply_filters( 'trial_promotion_message', "{$message} {$cc_string}" );
+
$this->_admin_notices->add_sticky(
- $this->apply_filters( 'trial_promotion_message', "{$message} {$cc_string} {$button}" ),
+ "<div class="fs-trial-message-container"><div>{$message_text}</div> {$button}</div>",
'trial_promotion',
'',
'promotion'
@@ -25476,7 +25529,7 @@
$img_dir = WP_FS__DIR_IMG;
// Locate the main assets folder.
- if ( 1 < count( $fs_active_plugins->plugins ) ) {
+ if ( ! empty( $fs_active_plugins->plugins ) ) {
$plugin_or_theme_img_dir = ( $this->is_plugin() ? WP_PLUGIN_DIR : get_theme_root( get_stylesheet() ) );
foreach ( $fs_active_plugins->plugins as $sdk_path => &$data ) {
--- a/map-location-picker-at-checkout-for-woocommerce/vendor/freemius/wordpress-sdk/includes/class-fs-logger.php
+++ b/map-location-picker-at-checkout-for-woocommerce/vendor/freemius/wordpress-sdk/includes/class-fs-logger.php
@@ -636,7 +636,17 @@
$offset = 0,
$order = false
) {
- global $wpdb;
+ if ( empty( $filename ) ) {
+ $filename = 'fs-logs-' . date( 'Y-m-d_H-i-s', WP_FS__SCRIPT_START_TIME ) . '.csv';
+ }
+
+ $upload_dir = wp_upload_dir();
+ $filepath = rtrim( $upload_dir['path'], '/' ) . "/{$filename}";
+
+ WP_Filesystem();
+ if ( ! $GLOBALS['wp_filesystem']->is_writable( dirname( $filepath ) ) ) {
+ return false;
+ }
$query = self::build_db_logs_query(
$filters,
@@ -646,14 +656,6 @@
true
);
- $upload_dir = wp_upload_dir();
- if ( empty( $filename ) ) {
- $filename = 'fs-logs-' . date( 'Y-m-d_H-i-s', WP_FS__SCRIPT_START_TIME ) . '.csv';
- }
- $filepath = rtrim( $upload_dir['path'], '/' ) . "/{$filename}";
-
- $query .= " INTO OUTFILE '{$filepath}' FIELDS TERMINATED BY 't' ESCAPED BY '\\' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n'";
-
$columns = '';
for ( $i = 0, $len = count( self::$_log_columns ); $i < $len; $i ++ ) {
if ( $i > 0 ) {
@@ -665,12 +667,16 @@
$query = "SELECT {$columns} UNION ALL " . $query;
- $result = $wpdb->query( $query );
+ $result = $GLOBALS['wpdb']->get_results( $query );
if ( false === $result ) {
return false;
}
+ if ( ! self::write_csv_to_filesystem( $filepath, $result ) ) {
+ return false;
+ }
+
return rtrim( $upload_dir['url'], '/' ) . '/' . $filename;
}
@@ -691,5 +697,32 @@
return rtrim( $upload_dir['url'], '/' ) . $filename;
}
+ /**
+ * @param string $file_path
+ * @param array $query_results
+ *
+ * @return bool
+ */
+ private static function write_csv_to_filesystem( $file_path, $query_results ) {
+ if ( empty( $query_results ) ) {
+ return false;
+ }
+
+ $content = '';
+
+ foreach ( $query_results as $row ) {
+ $row_data = array_map( function ( $value ) {
+ return str_replace( "n", ' ', $value );
+ }, (array) $row );
+ $content .= implode( "t", $row_data ) . "n";
+ }
+
+ if ( ! $GLOBALS['wp_filesystem']->put_contents( $file_path, $content, FS_CHMOD_FILE ) ) {
+ return false;
+ }
+
+ return true;
+ }
+
#endregion
}
--- a/map-location-picker-at-checkout-for-woocommerce/vendor/freemius/wordpress-sdk/includes/class-fs-plugin-updater.php
+++ b/map-location-picker-at-checkout-for-woocommerce/vendor/freemius/wordpress-sdk/includes/class-fs-plugin-updater.php
@@ -542,24 +542,8 @@
global $wp_current_filter;
- $current_plugin_version = $this->_fs->get_plugin_version();
-
- if ( ! empty( $wp_current_filter ) && 'upgrader_process_complete' === $wp_current_filter[0] ) {
- if (
- is_null( $this->_update_details ) ||
- ( is_object( $this->_update_details ) && $this->_update_details->new_version !== $current_plugin_version )
- ) {
- /**
- * After an update, clear the stored update details and reparse the plugin's main file in order to get
- * the updated version's information and prevent the previous update information from showing up on the
- * updates page.
- *
- * @author Leo Fajardo (@leorw)
- * @since 2.3.1
- */
- $this->_update_details = null;
- $current_plugin_version = $this->_fs->get_plugin_version( true );
- }
+ if ( ! empty( $wp_current_filter ) && in_array( 'upgrader_process_complete', $wp_current_filter ) ) {
+ return $transient_data;
}
if ( ! isset( $this->_update_details ) ) {
@@ -568,7 +552,7 @@
false,
fs_request_get_bool( 'force-check' ),
FS_Plugin_Updater::UPDATES_CHECK_CACHE_EXPIRATION,
- $current_plugin_version
+ $this->_fs->get_plugin_version()
);
$this->_update_details = false;
--- a/map-location-picker-at-checkout-for-woocommerce/vendor/freemius/wordpress-sdk/includes/entities/class-fs-plugin-plan.php
+++ b/map-location-picker-at-checkout-for-woocommerce/vendor/freemius/wordpress-sdk/includes/entities/class-fs-plugin-plan.php
@@ -13,7 +13,6 @@
/**
* Class FS_Plugin_Plan
*
- * @property FS_Pricing[] $pricing
*/
class FS_Plugin_Plan extends FS_Entity {
--- a/map-location-picker-at-checkout-for-woocommerce/vendor/freemius/wordpress-sdk/includes/entities/class-fs-site.php
+++ b/map-location-picker-at-checkout-for-woocommerce/vendor/freemius/wordpress-sdk/includes/entities/class-fs-site.php
@@ -10,16 +10,16 @@
exit;
}
- /**
- * @property int $blog_id
- */
- #[AllowDynamicProperties]
class FS_Site extends FS_Scope_Entity {
/**
* @var number
*/
public $site_id;
/**
+ * @var int
+ */
+ public $blog_id;
+ /**
* @var number
*/
public $plugin_id;
--- a/map-location-picker-at-checkout-for-woocommerce/vendor/freemius/wordpress-sdk/includes/entities/class-fs-user.php
+++ b/map-location-picker-at-checkout-for-woocommerce/vendor/freemius/wordpress-sdk/includes/entities/class-fs-user.php
@@ -48,6 +48,19 @@
parent::__construct( $user );
}
+ /**
+ * This method removes the deprecated 'is_beta' property from the serialized data.
+ * Should clean up the serialized data to avoid PHP 8.2 warning on next execution.
+ *
+ * @return void
+ */
+ function __wakeup() {
+ if ( property_exists( $this, 'is_beta' ) ) {
+ // If we enter here, and we are running PHP 8.2, we already had the warning. But we sanitize data for next execution.
+ unset( $this->is_beta );
+ }
+ }
+
function get_name() {
return trim( ucfirst( trim( is_string( $this->first ) ? $this->first : '' ) ) . ' ' . ucfirst( trim( is_string( $this->last ) ? $this->last : '' ) ) );
}
--- a/map-location-picker-at-checkout-for-woocommerce/vendor/freemius/wordpress-sdk/includes/managers/class-fs-admin-menu-manager.php
+++ b/map-location-picker-at-checkout-for-woocommerce/vendor/freemius/wordpress-sdk/includes/managers/class-fs-admin-menu-manager.php
@@ -699,16 +699,36 @@
$menu = $this->find_main_submenu();
}
+ $menu_slug = $menu['menu'][2];
$parent_slug = isset( $menu['parent_slug'] ) ?
- $menu['parent_slug'] :
- 'admin.php';
+ $menu['parent_slug'] :
+ 'admin.php';
- return admin_url(
- $parent_slug .
- ( false === strpos( $parent_slug, '?' ) ? '?' : '&' ) .
- 'page=' .
- $menu['menu'][2]
- );
+ if ( fs_apply_filter( $this->_module_unique_affix, 'enable_cpt_advanced_menu_logic', false ) ) {
+ $parent_slug = 'admin.php';
+
+ /**
+ * This line and the `if` block below it are based on the `menu_page_url()` function of WordPress.
+ *
+ * @author Leo Fajardo (@leorw)
+ * @since 2.10.2
+ */
+ global $_parent_pages;
+
+ if ( ! empty( $_parent_pages[ $menu_slug ] ) ) {
+ $_parent_slug = $_parent_pages[ $menu_slug ];
+ $parent_slug = isset( $_parent_pages[ $_parent_slug ] ) ?
+ $parent_slug :
+ $menu['parent_slug'];
+ }
+ }
+
+ return admin_url(
+ $parent_slug .
+ ( false === strpos( $parent_slug, '?' ) ? '?' : '&' ) .
+ 'page=' .
+ $menu_slug
+ );
}
/**
--- a/map-location-picker-at-checkout-for-woocommerce/vendor/freemius/wordpress-sdk/includes/managers/class-fs-admin-notice-manager.php
+++ b/map-location-picker-at-checkout-for-woocommerce/vendor/freemius/wordpress-sdk/includes/managers/class-fs-admin-notice-manager.php
@@ -194,8 +194,14 @@
* @since 1.0.7
*/
static function _add_sticky_dismiss_javascript() {
+ $sticky_admin_notice_js_template_name = 'sticky-admin-notice-js.php';
+
+ if ( ! file_exists( fs_get_template_path( $sticky_admin_notice_js_template_name ) ) ) {
+ return;
+ }
+
$params = array();
- fs_require_once_template( 'sticky-admin-notice-js.php', $params );
+ fs_require_once_template( $sticky_admin_notice_js_template_name, $params );
}
private static $_added_sticky_javascript = false;
--- a/map-location-picker-at-checkout-for-woocommerce/vendor/freemius/wordpress-sdk/includes/managers/class-fs-clone-manager.php
+++ b/map-location-picker-at-checkout-for-woocommerce/vendor/freemius/wordpress-sdk/includes/managers/class-fs-clone-manager.php
@@ -412,12 +412,12 @@
* @author Vova Feldman (@svovaf)
* @since 2.5.0
*
- * @param Freemius $instance
- * @param string|false $license_key
+ * @param Freemius $instance
+ * @param FS_Plugin_License|null $license
*
* @return bool TRUE if successfully connected. FALSE if failed and had to restore install from backup.
*/
- private function delete_install_and_connect( Freemius $instance, $license_key = false ) {
+ private function delete_install_and_connect( Freemius $instance, $license = null ) {
$user = Freemius::_get_user_by_id( $instance->get_site()->user_id );
$instance->delete_current_install( true );
@@ -430,6 +430,9 @@
$user = Freemius::_get_user_by_email( $current_user->user_email );
}
+ $license_key = ( is_object( $license ) ? $license->secret_key : false );
+ $license_owner_id = ( is_object( $license ) ? $license->user_id : null );
+
if ( is_object( $user ) ) {
// When a clone is found, we prefer to use the same user of the original install for the opt-in.
$instance->install_with_user( $user, $license_key, false, false );
@@ -439,7 +442,14 @@
false,
false,
false,
- $license_key
+ $license_key,
+ false,
+ false,
+ false,
+ null,
+ array(),
+ true,
+ $license_owner_id
);
}
@@ -505,7 +515,7 @@
}
// If the site is a clone of another subsite in the network, or a localhost one, try to auto activate the license.
- return $this->delete_install_and_connect( $instance, $license->secret_key );
+ return $this->delete_install_and_connect( $instance, $license );
}
/**
--- a/map-location-picker-at-checkout-for-woocommerce/vendor/freemius/wordpress-sdk/start.php
+++ b/map-location-picker-at-checkout-for-woocommerce/vendor/freemius/wordpress-sdk/start.php
@@ -7,7 +7,7 @@
*/
if ( ! defined( 'ABSPATH' ) ) {
- exit;
+ return;
}
/**
@@ -15,7 +15,7 @@
*
* @var string
*/
- $this_sdk_version = '2.10.1';
+ $this_sdk_version = '2.12.0';
#region SDK Selection Logic --------------------------------------------------------------------
@@ -90,8 +90,8 @@
* @author Leo Fajardo (@leorw)
* @since 2.2.3
*/
- $themes_directory = get_theme_root( get_stylesheet() );
- $themes_directory_name = basename( $themes_directory );
+ $themes_directory = fs_normalize_path( get_theme_root( get_stylesheet() ) );
+ $themes_directory_name = basename( $themes_directory );
// This change ensures that the condition works even if the SDK is located in a subdirectory (e.g., vendor)
$theme_candidate_sdk_basename = str_replace( $themes_directory . '/' . get_stylesheet() . '/', '', $fs_root_path );
@@ -128,12 +128,16 @@
* The check of `fs_find_direct_caller_plugin_file` determines that this file was indeed included by a different plugin than the main plugin.
*/
if ( DIRECTORY_SEPARATOR . $this_sdk_relative_path === $fs_root_path && function_exists( 'fs_find_direct_caller_plugin_file' ) ) {
- $original_plugin_dir_name = dirname( fs_find_direct_caller_plugin_file( $file_path ) );
+ $direct_caller_plugin_file = fs_find_direct_caller_plugin_file( $file_path );
+
+ if ( ! empty( $direct_caller_plugin_file ) ) {
+ $original_plugin_dir_name = dirname( $direct_caller_plugin_file );
- // Remove everything before the original plugin directory name.
- $this_sdk_relative_path = substr( $this_sdk_relative_path, strpos( $this_sdk_relative_path, $original_plugin_dir_name ) );
+ // Remove everything before the original plugin directory name.
+ $this_sdk_relative_path = substr( $this_sdk_relative_path, strpos( $this_sdk_relative_path, $original_plugin_dir_name ) );
- unset( $original_plugin_dir_name );
+ unset( $original_plugin_dir_name );
+ }
}
}
@@ -441,6 +445,7 @@
* fs_is_submenu_visible_{plugin_slug}
* fs_plugin_icon_{plugin_slug}
* fs_show_trial_{plugin_slug}
+ * fs_is_pricing_page_visible_{plugin_slug}
*
* --------------------------------------------------------
*
--- a/map-location-picker-at-checkout-for-woocommerce/vendor/freemius/wordpress-sdk/templates/add-ons.php
+++ b/map-location-picker-at-checkout-for-woocommerce/vendor/freemius/wordpress-sdk/templates/add-ons.php
@@ -374,6 +374,12 @@
</div>
<script type="text/javascript">
(function( $, undef ) {
+ $( 'a.thickbox' ).on( 'click', function () {
+ setTimeout( function () {
+ $( '#TB_window' ).addClass( 'plugin-details-modal' );
+ }, 0 );
+ } );
+
<?php if ( $open_addon ) : ?>
var interval = setInterval(function () {
--- a/map-location-picker-at-checkout-for-woocommerce/vendor/freemius/wordpress-sdk/templates/checkout/process-redirect.php
+++ b/map-location-picker-at-checkout-for-woocommerce/vendor/freemius/wordpress-sdk/templates/checkout/process-redirect.php
@@ -51,16 +51,36 @@
$loader.show();
- switch ( action ) {
- case 'install':
- processInstall( data );
- break;
- case 'pending_activation':
- processPendingActivation( data );
- break;
- default:
- syncLicense( data );
- break;
+ // This remains compatible with the same filter in /templates/checkout/frame.php.
+ // You can return a promise to make the successive redirection wait until your own processing is completed.
+ // However for most cases, we recommend sending a beacon request {https://developer.mozilla.org/en-US/docs/Web/API/Navigator/sendBeacon}
+ var processPurchaseEvent = (<?php echo $fs->apply_filters('checkout/purchaseCompleted', 'function (data) {
+ console.log("checkout", "purchaseCompleted");
+ }'); ?>)(data.purchaseData);
+
+ if (typeof Promise !== 'undefined' && processPurchaseEvent instanceof Promise) {
+ processPurchaseEvent.finally(function () {
+ finishProcessing(action, data);
+ });
+ } else {
+ finishProcessing(action, data);
+ }
+
+ function finishProcessing(action, data) {
+ switch ( action ) {
+ case 'install':
+ processInstall( data );
+ break;
+ case 'pending_activation':
+ processPendingActivation( data );
+ break;
+ case 'return_without_sync':
+ goToAccount();
+ break;
+ default:
+ syncLicense( data );
+ break;
+ }
}
function processInstall( data ) {
@@ -101,5 +121,9 @@
window.location.href = redirectUrl.toString();
}
+
+ function goToAccount() {
+ window.location.href = <?php echo wp_json_encode( $fs->get_account_url() ) ?>;
+ }
});
</script>
--- a/map-location-picker-at-checkout-for-woocommerce/vendor/freemius/wordpress-sdk/templates/connect.php
+++ b/map-location-picker-at-checkout-for-woocommerce/vendor/freemius/wordpress-sdk/templates/connect.php
@@ -336,6 +336,9 @@
</label>
</div>
</div>
+ <div id="fs_orphan_license_message">
+ <span class="fs-message"><?php fs_echo_inline( "A user has not yet been associated with the license, which is necessary to prevent unauthorized activation. To assign the license to your user, you agree to share your WordPress user's full name and email address." ) ?></span>
+ </div>
<?php endif ?>
<?php if ( $is_network_level_activation ) : ?>
<?php
@@ -739,10 +742,11 @@
var
licenseKey = $licenseKeyInput.val(),
data = {
- action : action,
- security : security,
- license_key: licenseKey,
- module_id : '<?php echo $fs->get_id() ?>'
+ action : action,
+ security : security,
+ license_key : licenseKey,
+ module_id : '<?php echo $fs->get_id() ?>',
+ license_owner_id: licenseOwnerIDByLicense[ licenseKey ]
};
if (
@@ -915,14 +919,14 @@
if ('' === key) {
$primaryCta.attr('disabled', 'disabled');
- $marketingOptin.hide();
+ hideOptinAndLicenseMessage();
} else {
$primaryCta.prop('disabled', false);
if (32 <= key.length){
fetchIsMarketingAllowedFlagAndToggleOptin();
} else {
- $marketingOptin.hide();
+ hideOptinAndLicenseMessage();
}
}
@@ -958,8 +962,10 @@
//region GDPR
//--------------------------------------------------------------------------------
var isMarketingAllowedByLicense = {},
- $marketingOptin = $('#fs_marketing_optin'),
- previousLicenseKey = null;
+ licenseOwnerIDByLicense = {},
+ $marketingOptin = $( '#fs_marketing_optin' ),
+ $orphanLicenseMessage = $( '#fs_orphan_license_message' ),
+ previousLicenseKey = null;
if (requireLicenseKey) {
@@ -981,6 +987,14 @@
$marketingOptin.hide();
$primaryCta.focus();
}
+
+ $orphanLicenseMessage.toggle( false === licenseOwnerIDByLicense[ licenseKey ] );
+
+ if ( false !== licenseOwnerIDByLicense[ licenseKey ] ) {
+ $( 'input[name=user_firstname]' ).remove();
+ $( 'input[name=user_lastname]' ).remove();
+ $( 'input[name=user_email]' ).remove();
+ }
},