From 5e56925ce742730db9e8af218a59ff60757b4448 Mon Sep 17 00:00:00 2001 From: Leo Fajardo Date: Wed, 9 Aug 2023 23:37:52 +0800 Subject: [PATCH 01/24] [garbage-collector] Initial commit. --- includes/class-freemius.php | 7 + includes/class-fs-garbage-collector.php | 233 ++++++++++++++++++++++++ includes/class-fs-storage.php | 1 + require.php | 2 + start.php | 2 +- 5 files changed, 244 insertions(+), 1 deletion(-) create mode 100755 includes/class-fs-garbage-collector.php diff --git a/includes/class-freemius.php b/includes/class-freemius.php index efe97079..94ce99e5 100755 --- a/includes/class-freemius.php +++ b/includes/class-freemius.php @@ -424,6 +424,7 @@ private function __construct( $module_id, $slug = false, $is_init = false ) { $this->_blog_id = is_multisite() ? get_current_blog_id() : null; $this->_storage = FS_Storage::instance( $this->_module_type, $this->_slug ); + $this->_storage->last_load_timestamp = time(); $this->_cache = FS_Cache_Manager::get_manager( WP_FS___OPTION_PREFIX . "cache_{$module_id}" ); @@ -1348,6 +1349,10 @@ function _plugins_loaded() { } } + function _run_garbage_collector() { + FS_Garbage_Collector::instance()->init(); + } + /** * Opens the support forum subemenu item in a new browser page. * @@ -1443,6 +1448,8 @@ private function register_constructor_hooks() { } } + add_action( 'plugins_loaded', array( &$this, '_run_garbage_collector' ) ); + if ( ! self::is_ajax() ) { if ( ! $this->is_addon() ) { add_action( 'init', array( &$this, '_add_default_submenu_items' ), WP_FS__LOWEST_PRIORITY ); diff --git a/includes/class-fs-garbage-collector.php b/includes/class-fs-garbage-collector.php new file mode 100755 index 00000000..d475452d --- /dev/null +++ b/includes/class-fs-garbage-collector.php @@ -0,0 +1,233 @@ +try_lock( 60 ) ) { + return false; + } + + $this->clean_up(); + + // Create a 1-day lock. + $lock->lock( WP_FS__TIME_24_HOURS_IN_SEC ); + } + + private function clean_up() { + $instances = Freemius::_get_all_instances(); + + $product_types = array( 'plugin', 'theme' ); + + $products_to_skip_by_type_and_slug = array_fill_keys( $product_types, array() ); + + // Iterate over the active instances so we can determine the products to skip. + foreach( $instances as $instance ) { + $products_to_skip_by_type_and_slug[ $instance->get_module_type() ] = $instance->get_slug(); + } + + $_accounts = FS_Options::instance( WP_FS__ACCOUNTS_OPTION_NAME, true ); + + $products_slugs_by_type = array_fill_keys( $product_types, array() ); + $products_data_by_type = array(); + + foreach( $product_types as $product_type ) { + $option_name = ( $product_type . 's' ); + $product_data = $_accounts->get_option( $option_name, array() ); + + foreach ( $product_data as $slug => $data ) { + if ( isset( $products_to_skip_by_type_and_slug[ $product_type ][ $slug ] ) ) { + continue; + } + + if ( ! is_array( $data ) ) { + continue; + } + + if ( + empty( $data['last_load_timestamp'] ) || + ! is_numeric( $data['last_load_timestamp'] ) + ) { + continue; + } + + if ( $data['last_load_timestamp'] > ( time() - ( WP_FS__TIME_WEEK_IN_SEC * 4 ) ) ) { + // Do not remove the data if the last activation was within the last 4 weeks. + continue; + } + + $products_slugs_by_type[ $product_type ][] = array( + 'id' => $product_data['id'], + 'slug' => $slug, + 'file' => $product_data['file'], + ); + + $products_data_by_type[ $product_type ][ $option_name ] = $product_data; + } + } + + if ( empty( $products_slugs_by_type ) ) { + return; + } + + $products_options_by_type = array( + 'plugin' => array( + 'plugins', + 'admin_notices', + 'plans', + 'sites', + 'all_licenses', + 'updates', + 'id_slug_type_path_map', + 'file_slug_map', + ), + 'theme' => array( + 'themes', + 'admin_notices', + 'theme_plans', + 'theme_sites', + 'all_licenses', + 'updates', + 'id_slug_type_path_map', + 'file_slug_map', + ) + ); + + $loaded_products_options_by_type = array_fill_keys( $product_types, false ); + + $installs_count_by_user_id = array(); + + foreach( $products_slugs_by_type as $product_type => $product ) { + $product_id = $product['id']; + $slug = $product['slug']; + $product_file = $product['product_file']; + + if ( ! $loaded_products_options_by_type[ $product_type ] ) { + $products_data_by_type[ $product_type ] = $this->load_options( $products_options_by_type[ $product_type ] ); + $loaded_products_options_by_type[ $product_type ] = true; + } + + foreach( $products_data_by_type[ $product_type ] as $products_data ) { + if ( ! is_array( $products_data ) ) { + continue; + } + + foreach( $products_data as $option_name => $product_data ) { + $update = false; + + if ( isset( $product_data[ $slug ] ) ) { + if ( fs_ends_with( $option_name, 'sites' ) ) { + $site = $product_data[ $slug ]; + + $installs_count_by_user_id[ $site->user_id ] = isset( $installs_count_by_user_id[ $site->user_id ] ) ? + $installs_count_by_user_id[ $site->user_id ] ++ : + 0; + } + + unset( $product_data[ $slug ] ); + $update = true; + } else if ( isset( $product_data[ "{$slug}:{$product_type}" ] ) ) { + unset( $product_data[ "{$slug}:{$product_type}" ] ); + $update = true; + } else if ( isset( $product_data[ $product_id ] ) ) { + unset( $product_data[ $product_id ] ); + $update = true; + } else if ( isset( $product_data[ $product_file ] ) ) { + unset( $product_data[ $product_file ] ); + $update = true; + } else if ( in_array( $option_name, array( "all_{$product_type}s", "active_{$product_type}s" ) ) ) { + if ( isset( $product_data[ "{$product_type}s" ][ $product_file ] ) ) { + unset( $product_data[ "{$product_type}s" ][ $product_file ] ); + $update = true; + } + } + + if ( ! $update ) { + $_accounts->set_option( $option_name, $product_data, true ); + } + } + } + } + + foreach( $products_slugs_by_type as $product_type => $product ) { + foreach( $products_data_by_type[ $product_type ] as $products_data ) { + if ( ! is_array( $products_data ) ) { + continue; + } + + $users = $products_data['users']; + + foreach( $installs_count_by_user_id as $user_id => $count ) { + if ( 1 === $count) { + unset( $users[ $user_id ] ); + unset( $products_data['user_id_license_ids_map'][ $user_id ] ); + + $_accounts->set_option( 'users', $users, true ); + $_accounts->set_option( 'user_id_license_ids_map', $products_data['user_id_license_ids_map'], true ); + } + } + } + } + } + + /** + * @since 2.5.11 + * @param $option_names + * + * @return array + */ + private function load_options( $option_names ) { + $_accounts = FS_Options::instance( WP_FS__ACCOUNTS_OPTION_NAME ); + + $all_data = array(); + + foreach ( $option_names as $option_name ) { + $all_data[ $option_name ] = $_accounts->get_option( $option_name ); + } + + return $all_data; + } + } \ No newline at end of file diff --git a/includes/class-fs-storage.php b/includes/class-fs-storage.php index 0d205281..1093302a 100644 --- a/includes/class-fs-storage.php +++ b/includes/class-fs-storage.php @@ -359,6 +359,7 @@ private static function load_network_options_map() { 'is_network_activated' => self::OPTION_LEVEL_NETWORK, 'is_on' => self::OPTION_LEVEL_NETWORK, 'is_plugin_new_install' => self::OPTION_LEVEL_NETWORK, + 'last_load_timestamp' => self::OPTION_LEVEL_NETWORK, 'network_install_blog_id' => self::OPTION_LEVEL_NETWORK, 'pending_sites_info' => self::OPTION_LEVEL_NETWORK, 'plugin_last_version' => self::OPTION_LEVEL_NETWORK, diff --git a/require.php b/require.php index c1f83668..cc194d2d 100644 --- a/require.php +++ b/require.php @@ -19,6 +19,8 @@ require_once WP_FS__DIR_INCLUDES . '/class-fs-logger.php'; require_once WP_FS__DIR_INCLUDES . '/debug/debug-bar-start.php'; + require_once WP_FS__DIR_INCLUDES . '/class-fs-garbage-collector.php'; + // require_once WP_FS__DIR_INCLUDES . '/managers/class-fs-abstract-manager.php'; require_once WP_FS__DIR_INCLUDES . '/managers/class-fs-option-manager.php'; require_once WP_FS__DIR_INCLUDES . '/managers/class-fs-gdpr-manager.php'; diff --git a/start.php b/start.php index 096f5104..637a7233 100644 --- a/start.php +++ b/start.php @@ -15,7 +15,7 @@ * * @var string */ - $this_sdk_version = '2.5.10'; + $this_sdk_version = '2.5.11'; #region SDK Selection Logic -------------------------------------------------------------------- From ed25a0b8d0100f158112acc7bd31585ef6830dd6 Mon Sep 17 00:00:00 2001 From: Leo Fajardo Date: Mon, 14 Aug 2023 01:09:50 +0800 Subject: [PATCH 02/24] [garbage-collector] [refactor] [fix] --- includes/class-freemius.php | 9 ++- includes/class-fs-garbage-collector.php | 85 +++++++++++++------------ 2 files changed, 54 insertions(+), 40 deletions(-) diff --git a/includes/class-freemius.php b/includes/class-freemius.php index 94ce99e5..083f1413 100755 --- a/includes/class-freemius.php +++ b/includes/class-freemius.php @@ -424,7 +424,14 @@ private function __construct( $module_id, $slug = false, $is_init = false ) { $this->_blog_id = is_multisite() ? get_current_blog_id() : null; $this->_storage = FS_Storage::instance( $this->_module_type, $this->_slug ); - $this->_storage->last_load_timestamp = time(); + + // If not set or 24 hours have already passed from the last time it's set, set the last load timestamp to the current time. + if ( + ! isset( $this->_storage->last_load_timestamp ) || + $this->_storage->last_load_timestamp < ( time() - ( WP_FS__TIME_24_HOURS_IN_SEC ) ) + ) { + $this->_storage->last_load_timestamp = time(); + } $this->_cache = FS_Cache_Manager::get_manager( WP_FS___OPTION_PREFIX . "cache_{$module_id}" ); diff --git a/includes/class-fs-garbage-collector.php b/includes/class-fs-garbage-collector.php index d475452d..e567e8ef 100755 --- a/includes/class-fs-garbage-collector.php +++ b/includes/class-fs-garbage-collector.php @@ -60,18 +60,21 @@ function init() { private function clean_up() { $instances = Freemius::_get_all_instances(); - $product_types = array( 'plugin', 'theme' ); + $product_types = array( + WP_FS__MODULE_TYPE_PLUGIN, + WP_FS__MODULE_TYPE_THEME, + ); $products_to_skip_by_type_and_slug = array_fill_keys( $product_types, array() ); // Iterate over the active instances so we can determine the products to skip. foreach( $instances as $instance ) { - $products_to_skip_by_type_and_slug[ $instance->get_module_type() ] = $instance->get_slug(); + $products_to_skip_by_type_and_slug[ $instance->get_module_type() ][ $instance->get_slug() ] = true; } $_accounts = FS_Options::instance( WP_FS__ACCOUNTS_OPTION_NAME, true ); - $products_slugs_by_type = array_fill_keys( $product_types, array() ); + $products_slugs_by_type = array(); $products_data_by_type = array(); foreach( $product_types as $product_type ) { @@ -83,29 +86,33 @@ private function clean_up() { continue; } - if ( ! is_array( $data ) ) { + if ( ! is_object( $data ) ) { continue; } if ( - empty( $data['last_load_timestamp'] ) || - ! is_numeric( $data['last_load_timestamp'] ) + empty( $data->last_load_timestamp ) || + ! is_numeric( $data->last_load_timestamp ) ) { continue; } - if ( $data['last_load_timestamp'] > ( time() - ( WP_FS__TIME_WEEK_IN_SEC * 4 ) ) ) { + if ( $data->last_load_timestamp > ( time() - ( WP_FS__TIME_WEEK_IN_SEC * 4 ) ) ) { // Do not remove the data if the last activation was within the last 4 weeks. continue; } + if ( ! isset( $products_slugs_by_type[ $product_type ] ) ) { + $products_slugs_by_type[ $product_type ] = array(); + } + $products_slugs_by_type[ $product_type ][] = array( - 'id' => $product_data['id'], + 'id' => $data->id, 'slug' => $slug, - 'file' => $product_data['file'], + 'file' => $data->file, ); - $products_data_by_type[ $product_type ][ $option_name ] = $product_data; + $products_data_by_type[ $product_type ][ $option_name ] = $data; } } @@ -140,66 +147,66 @@ private function clean_up() { $installs_count_by_user_id = array(); - foreach( $products_slugs_by_type as $product_type => $product ) { - $product_id = $product['id']; - $slug = $product['slug']; - $product_file = $product['product_file']; + foreach( $products_slugs_by_type as $product_type => $products ) { + foreach( $products as $product ) { + $product_id = $product['id']; + $slug = $product['slug']; + $product_file = $product['product_file']; - if ( ! $loaded_products_options_by_type[ $product_type ] ) { - $products_data_by_type[ $product_type ] = $this->load_options( $products_options_by_type[ $product_type ] ); - $loaded_products_options_by_type[ $product_type ] = true; - } - - foreach( $products_data_by_type[ $product_type ] as $products_data ) { - if ( ! is_array( $products_data ) ) { - continue; + if ( ! $loaded_products_options_by_type[ $product_type ] ) { + $products_data_by_type[ $product_type ] = $this->load_options( $products_options_by_type[ $product_type ] ); + $loaded_products_options_by_type[ $product_type ] = true; } - foreach( $products_data as $option_name => $product_data ) { + foreach( $products_data_by_type[ $product_type ] as $option_name => $products_data ) { + if ( ! is_array( $products_data ) ) { + continue; + } + $update = false; - if ( isset( $product_data[ $slug ] ) ) { + if ( isset( $products_data[ $slug ] ) ) { if ( fs_ends_with( $option_name, 'sites' ) ) { - $site = $product_data[ $slug ]; + $site = $products_data[ $slug ]; $installs_count_by_user_id[ $site->user_id ] = isset( $installs_count_by_user_id[ $site->user_id ] ) ? $installs_count_by_user_id[ $site->user_id ] ++ : - 0; + 1; } - unset( $product_data[ $slug ] ); + unset( $products_data[ $slug ] ); $update = true; - } else if ( isset( $product_data[ "{$slug}:{$product_type}" ] ) ) { - unset( $product_data[ "{$slug}:{$product_type}" ] ); + } else if ( isset( $products_data[ "{$slug}:{$product_type}" ] ) ) { + unset( $products_data[ "{$slug}:{$product_type}" ] ); $update = true; - } else if ( isset( $product_data[ $product_id ] ) ) { - unset( $product_data[ $product_id ] ); + } else if ( isset( $products_data[ $product_id ] ) ) { + unset( $products_data[ $product_id ] ); $update = true; - } else if ( isset( $product_data[ $product_file ] ) ) { - unset( $product_data[ $product_file ] ); + } else if ( isset( $products_data[ $product_file ] ) ) { + unset( $products_data[ $product_file ] ); $update = true; } else if ( in_array( $option_name, array( "all_{$product_type}s", "active_{$product_type}s" ) ) ) { - if ( isset( $product_data[ "{$product_type}s" ][ $product_file ] ) ) { - unset( $product_data[ "{$product_type}s" ][ $product_file ] ); + if ( isset( $products_data[ "{$product_type}s" ][ $product_file ] ) ) { + unset( $products_data[ "{$product_type}s" ][ $product_file ] ); $update = true; } } - if ( ! $update ) { - $_accounts->set_option( $option_name, $product_data, true ); + if ( $update ) { + $_accounts->set_option( $option_name, $products_data, true ); } } } } + $users = Freemius::get_all_users(); + foreach( $products_slugs_by_type as $product_type => $product ) { foreach( $products_data_by_type[ $product_type ] as $products_data ) { if ( ! is_array( $products_data ) ) { continue; } - $users = $products_data['users']; - foreach( $installs_count_by_user_id as $user_id => $count ) { if ( 1 === $count) { unset( $users[ $user_id ] ); From d5c629719b2b733aed03d253d68514b582a6bc9e Mon Sep 17 00:00:00 2001 From: Leo Fajardo Date: Mon, 21 Aug 2023 23:54:03 +0800 Subject: [PATCH 03/24] [garbage-collector] [refactor] --- includes/class-fs-garbage-collector.php | 83 +++++++++++++++---------- 1 file changed, 49 insertions(+), 34 deletions(-) diff --git a/includes/class-fs-garbage-collector.php b/includes/class-fs-garbage-collector.php index e567e8ef..ca99c570 100755 --- a/includes/class-fs-garbage-collector.php +++ b/includes/class-fs-garbage-collector.php @@ -58,19 +58,9 @@ function init() { } private function clean_up() { - $instances = Freemius::_get_all_instances(); - - $product_types = array( - WP_FS__MODULE_TYPE_PLUGIN, - WP_FS__MODULE_TYPE_THEME, - ); + $product_types = $this->get_product_types(); - $products_to_skip_by_type_and_slug = array_fill_keys( $product_types, array() ); - - // Iterate over the active instances so we can determine the products to skip. - foreach( $instances as $instance ) { - $products_to_skip_by_type_and_slug[ $instance->get_module_type() ][ $instance->get_slug() ] = true; - } + $products_to_skip_by_type_and_slug = $this->get_products_to_skip_by_type_and_slug(); $_accounts = FS_Options::instance( WP_FS__ACCOUNTS_OPTION_NAME, true ); @@ -120,28 +110,7 @@ private function clean_up() { return; } - $products_options_by_type = array( - 'plugin' => array( - 'plugins', - 'admin_notices', - 'plans', - 'sites', - 'all_licenses', - 'updates', - 'id_slug_type_path_map', - 'file_slug_map', - ), - 'theme' => array( - 'themes', - 'admin_notices', - 'theme_plans', - 'theme_sites', - 'all_licenses', - 'updates', - 'id_slug_type_path_map', - 'file_slug_map', - ) - ); + $products_options_by_type = $this->product_options_by_type(); $loaded_products_options_by_type = array_fill_keys( $product_types, false ); @@ -199,6 +168,7 @@ private function clean_up() { } } + // Handle deletion of user entities that are no longer associated with installs. $users = Freemius::get_all_users(); foreach( $products_slugs_by_type as $product_type => $product ) { @@ -220,6 +190,51 @@ private function clean_up() { } } + private function get_product_types() { + return array( + WP_FS__MODULE_TYPE_PLUGIN, + WP_FS__MODULE_TYPE_THEME, + ); + } + + private function get_product_options_by_type() { + return array( + WP_FS__MODULE_TYPE_PLUGIN => array( + 'plugins', + 'admin_notices', + 'plans', + 'sites', + 'all_licenses', + 'updates', + 'id_slug_type_path_map', + 'file_slug_map', + ), + WP_FS__MODULE_TYPE_THEME => array( + 'themes', + 'admin_notices', + 'theme_plans', + 'theme_sites', + 'all_licenses', + 'updates', + 'id_slug_type_path_map', + 'file_slug_map', + ) + ); + } + + private function get_products_to_skip_by_type_and_slug() { + $products_to_skip_by_type_and_slug = array_fill_keys( $this->get_product_types(), array() ); + + $instances = Freemius::_get_all_instances(); + + // Iterate over the active instances so we can determine the products to skip. + foreach( $instances as $instance ) { + $products_to_skip_by_type_and_slug[ $instance->get_module_type() ][ $instance->get_slug() ] = true; + } + + return $products_to_skip_by_type_and_slug; + } + /** * @since 2.5.11 * @param $option_names From eab0947f68f75d1b602a5dfb352857e37f2e2059 Mon Sep 17 00:00:00 2001 From: Leo Fajardo Date: Thu, 24 Aug 2023 00:47:48 +0800 Subject: [PATCH 04/24] =?UTF-8?q?[garbage-collector]=20[refactor]=20Additi?= =?UTF-8?q?onal=20enhancements=20and=20fixes=20(this=20also=20covers=20add?= =?UTF-8?q?-on=E2=80=93related=20use=20cases;=20properly=20store=20updated?= =?UTF-8?q?=20options=20and=20store=20them=20only=20once).?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- includes/class-fs-garbage-collector.php | 191 ++++++++++++++++-------- 1 file changed, 127 insertions(+), 64 deletions(-) diff --git a/includes/class-fs-garbage-collector.php b/includes/class-fs-garbage-collector.php index ca99c570..d38ce11d 100755 --- a/includes/class-fs-garbage-collector.php +++ b/includes/class-fs-garbage-collector.php @@ -68,41 +68,52 @@ private function clean_up() { $products_data_by_type = array(); foreach( $product_types as $product_type ) { - $option_name = ( $product_type . 's' ); - $product_data = $_accounts->get_option( $option_name, array() ); + $option_name = ( $product_type . 's' ); + $all_product_data = $_accounts->get_option( $option_name, array() ); - foreach ( $product_data as $slug => $data ) { + foreach ( $all_product_data as $slug => $product_data ) { if ( isset( $products_to_skip_by_type_and_slug[ $product_type ][ $slug ] ) ) { continue; } - if ( ! is_object( $data ) ) { + if ( ! is_object( $product_data ) ) { continue; } if ( - empty( $data->last_load_timestamp ) || - ! is_numeric( $data->last_load_timestamp ) + empty( $product_data->last_load_timestamp ) || + ! is_numeric( $product_data->last_load_timestamp ) ) { continue; } - if ( $data->last_load_timestamp > ( time() - ( WP_FS__TIME_WEEK_IN_SEC * 4 ) ) ) { + if ( $product_data->last_load_timestamp > ( time() - ( WP_FS__TIME_WEEK_IN_SEC * 4 ) ) ) { // Do not remove the data if the last activation was within the last 4 weeks. continue; } + $is_addon = FS_Plugin::is_valid_id( $product_data->parent_plugin_id ); + if ( ! isset( $products_slugs_by_type[ $product_type ] ) ) { $products_slugs_by_type[ $product_type ] = array(); } - $products_slugs_by_type[ $product_type ][] = array( - 'id' => $data->id, + $product = array( + 'id' => $product_data->id, 'slug' => $slug, - 'file' => $data->file, + 'file' => $product_data->file, ); - $products_data_by_type[ $product_type ][ $option_name ] = $data; + if ( ! $is_addon ) { + $products_slugs_by_type[ $product_type ][] = $product; + } else { + /** + * If add-on, add to the beginning of the array so that add-ons are removed before their parent. This is to prevent an unexpected issue when an add-on exists but its parent was already removed. + */ + array_unshift( $products_slugs_by_type[ $product_type ], $product ); + } + + $products_data_by_type[ $product_type ][ $option_name ] = $product_data; } } @@ -110,17 +121,19 @@ private function clean_up() { return; } - $products_options_by_type = $this->product_options_by_type(); + $products_options_by_type = $this->get_product_options_by_type(); $loaded_products_options_by_type = array_fill_keys( $product_types, false ); $installs_count_by_user_id = array(); + $has_updated_option = false; + foreach( $products_slugs_by_type as $product_type => $products ) { foreach( $products as $product ) { $product_id = $product['id']; $slug = $product['slug']; - $product_file = $product['product_file']; + $product_file = $product['file']; if ( ! $loaded_products_options_by_type[ $product_type ] ) { $products_data_by_type[ $product_type ] = $this->load_options( $products_options_by_type[ $product_type ] ); @@ -128,65 +141,77 @@ private function clean_up() { } foreach( $products_data_by_type[ $product_type ] as $option_name => $products_data ) { - if ( ! is_array( $products_data ) ) { - continue; - } + $updated = false; - $update = false; - - if ( isset( $products_data[ $slug ] ) ) { - if ( fs_ends_with( $option_name, 'sites' ) ) { - $site = $products_data[ $slug ]; + if ( ! is_array( $products_data ) ) { + if ( + is_object( $products_data ) && + in_array( $option_name, array( "all_{$product_type}s", "active_{$product_type}s" ) ) + ) { + if ( isset( $products_data->{ "{$product_type}s" }[ $product_file ] ) ) { + unset( $products_data->{ "{$product_type}s" }[ $product_file ] ); + $updated = true; + } + } - $installs_count_by_user_id[ $site->user_id ] = isset( $installs_count_by_user_id[ $site->user_id ] ) ? - $installs_count_by_user_id[ $site->user_id ] ++ : - 1; + if ( ! $updated ) { + continue; } + } - unset( $products_data[ $slug ] ); - $update = true; - } else if ( isset( $products_data[ "{$slug}:{$product_type}" ] ) ) { - unset( $products_data[ "{$slug}:{$product_type}" ] ); - $update = true; - } else if ( isset( $products_data[ $product_id ] ) ) { - unset( $products_data[ $product_id ] ); - $update = true; - } else if ( isset( $products_data[ $product_file ] ) ) { - unset( $products_data[ $product_file ] ); - $update = true; - } else if ( in_array( $option_name, array( "all_{$product_type}s", "active_{$product_type}s" ) ) ) { - if ( isset( $products_data[ "{$product_type}s" ][ $product_file ] ) ) { - unset( $products_data[ "{$product_type}s" ][ $product_file ] ); - $update = true; + if ( ! $updated ) { + if ( isset( $products_data[ $slug ] ) ) { + if ( fs_ends_with( $option_name, 'sites' ) ) { + $site = $products_data[ $slug ]; + + $installs_count_by_user_id[ $site->user_id ] = isset( $installs_count_by_user_id[ $site->user_id ] ) ? + $installs_count_by_user_id[ $site->user_id ] ++ : + 1; + } + + unset( $products_data[ $slug ] ); + $updated = true; + } else if ( isset( $products_data[ "{$slug}:{$product_type}" ] ) ) { + unset( $products_data[ "{$slug}:{$product_type}" ] ); + $updated = true; + } else if ( isset( $products_data[ $product_id ] ) ) { + unset( $products_data[ $product_id ] ); + $updated = true; + } else if ( isset( $products_data[ $product_file ] ) ) { + unset( $products_data[ $product_file ] ); + $updated = true; } } - if ( $update ) { - $_accounts->set_option( $option_name, $products_data, true ); + if ( $updated ) { + $_accounts->set_option( $option_name, $products_data ); + + $products_data_by_type[ $product_type ][ $option_name ] = $products_data; + + $has_updated_option = true; } } } } - // Handle deletion of user entities that are no longer associated with installs. - $users = Freemius::get_all_users(); - - foreach( $products_slugs_by_type as $product_type => $product ) { - foreach( $products_data_by_type[ $product_type ] as $products_data ) { - if ( ! is_array( $products_data ) ) { - continue; - } + if ( $has_updated_option ) { + $users = Freemius::get_all_users(); + } - foreach( $installs_count_by_user_id as $user_id => $count ) { - if ( 1 === $count) { - unset( $users[ $user_id ] ); - unset( $products_data['user_id_license_ids_map'][ $user_id ] ); + // Handle deletion of user entities that are no longer associated with installs. + if ( + $this->delete_users( + $users, + $products_slugs_by_type, + $products_data_by_type, + $installs_count_by_user_id + ) + ) { + $has_updated_option = true; + } - $_accounts->set_option( 'users', $users, true ); - $_accounts->set_option( 'user_id_license_ids_map', $products_data['user_id_license_ids_map'], true ); - } - } - } + if ( $has_updated_option ) { + $_accounts->store(); } } @@ -200,22 +225,28 @@ private function get_product_types() { private function get_product_options_by_type() { return array( WP_FS__MODULE_TYPE_PLUGIN => array( - 'plugins', 'admin_notices', - 'plans', + 'updates', 'sites', 'all_licenses', - 'updates', + 'plans', + 'addons', + 'plugins', + 'active_plugins', + 'all_plugins', 'id_slug_type_path_map', 'file_slug_map', ), WP_FS__MODULE_TYPE_THEME => array( - 'themes', 'admin_notices', - 'theme_plans', + 'updates', 'theme_sites', 'all_licenses', - 'updates', + 'theme_plans', + 'addons', + 'themes', + 'active_themes', + 'all_themes', 'id_slug_type_path_map', 'file_slug_map', ) @@ -235,6 +266,38 @@ private function get_products_to_skip_by_type_and_slug() { return $products_to_skip_by_type_and_slug; } + private function delete_users( + $users, + $products_slugs_by_type, + $products_data_by_type, + $installs_count_by_user_id + ) { + $_accounts = FS_Options::instance( WP_FS__ACCOUNTS_OPTION_NAME ); + + $has_updated_option = false; + + foreach( $products_slugs_by_type as $product_type => $product ) { + foreach( $products_data_by_type[ $product_type ] as $products_data ) { + if ( ! is_array( $products_data ) ) { + continue; + } + + foreach( $installs_count_by_user_id as $user_id => $count ) { + if ( 1 === $count) { + unset( $users[ $user_id ] ); + unset( $products_data['user_id_license_ids_map'][ $user_id ] ); + + $_accounts->set_option( 'users', $users ); + $_accounts->set_option( 'user_id_license_ids_map', $products_data['user_id_license_ids_map'] ); + + $has_updated_option = true; + } + } + } + } + + return $has_updated_option; + } /** * @since 2.5.11 * @param $option_names From 37f4b382be803b13230e50146a45edae89f43755 Mon Sep 17 00:00:00 2001 From: Leo Fajardo Date: Tue, 29 Aug 2023 23:40:24 +0800 Subject: [PATCH 05/24] [garbage-collector] [refactor] Improved the code readability by separating large method(s) into multiple smaller methods. --- includes/class-freemius.php | 4 +- includes/class-fs-garbage-collector.php | 351 +++++++++++++----------- 2 files changed, 199 insertions(+), 156 deletions(-) diff --git a/includes/class-freemius.php b/includes/class-freemius.php index 083f1413..7729d1f7 100755 --- a/includes/class-freemius.php +++ b/includes/class-freemius.php @@ -1357,7 +1357,9 @@ function _plugins_loaded() { } function _run_garbage_collector() { - FS_Garbage_Collector::instance()->init(); + if ( $this->is_user_in_admin() ) { + FS_Garbage_Collector::instance()->run(); + } } /** diff --git a/includes/class-fs-garbage-collector.php b/includes/class-fs-garbage-collector.php index d38ce11d..acba8507 100755 --- a/includes/class-fs-garbage-collector.php +++ b/includes/class-fs-garbage-collector.php @@ -1,9 +1,9 @@ try_lock( 60 ) ) { - return false; + if ( $lock->is_locked() ) { + return; } - $this->clean_up(); - // Create a 1-day lock. $lock->lock( WP_FS__TIME_24_HOURS_IN_SEC ); - } + + $this->clean_up(); + } private function clean_up() { - $product_types = $this->get_product_types(); + $_accounts = FS_Options::instance( WP_FS__ACCOUNTS_OPTION_NAME, true ); - $products_to_skip_by_type_and_slug = $this->get_products_to_skip_by_type_and_slug(); + $products_to_delete = array(); - $_accounts = FS_Options::instance( WP_FS__ACCOUNTS_OPTION_NAME, true ); + foreach ( $this->get_product_types() as $product_type ) { + $products_to_delete[ $product_type ] = $this->get_products_to_delete( $_accounts, $product_type ); + } - $products_slugs_by_type = array(); - $products_data_by_type = array(); + $update_options = false; - foreach( $product_types as $product_type ) { - $option_name = ( $product_type . 's' ); - $all_product_data = $_accounts->get_option( $option_name, array() ); + if ( ! empty( $products_to_delete ) ) { + if ( $this->delete_products( $_accounts, $products_to_delete ) ) { + $this->delete_inactive_users( $_accounts ); - foreach ( $all_product_data as $slug => $product_data ) { - if ( isset( $products_to_skip_by_type_and_slug[ $product_type ][ $slug ] ) ) { - continue; - } + $update_options = true; + } + } - if ( ! is_object( $product_data ) ) { - continue; - } + if ( $update_options ) { + $_accounts->store(); + } + } - if ( - empty( $product_data->last_load_timestamp ) || - ! is_numeric( $product_data->last_load_timestamp ) - ) { - continue; - } + /** + * @param FS_Options $_accounts + * @param string $product_type + * + * @return array + */ + private function get_products_to_delete( $_accounts, $product_type ) { + $option_name = ( $product_type . 's' ); + $all_product_data = $_accounts->get_option( $option_name, array() ); - if ( $product_data->last_load_timestamp > ( time() - ( WP_FS__TIME_WEEK_IN_SEC * 4 ) ) ) { - // Do not remove the data if the last activation was within the last 4 weeks. - continue; - } + $products_to_delete = array(); + + $has_updated_option = false; - $is_addon = FS_Plugin::is_valid_id( $product_data->parent_plugin_id ); + foreach ( $all_product_data as $slug => $product_data ) { + if ( ! is_object( $product_data ) ) { + continue; + } - if ( ! isset( $products_slugs_by_type[ $product_type ] ) ) { - $products_slugs_by_type[ $product_type ] = array(); - } + if ( + empty( $product_data->last_load_timestamp ) || + ! is_numeric( $product_data->last_load_timestamp ) + ) { + // Set to the current time so that if the product is no longer used, its data will be deleted after 4 weeks. + $product_data->last_load_timestamp = time(); - $product = array( - 'id' => $product_data->id, - 'slug' => $slug, - 'file' => $product_data->file, - ); - - if ( ! $is_addon ) { - $products_slugs_by_type[ $product_type ][] = $product; - } else { - /** - * If add-on, add to the beginning of the array so that add-ons are removed before their parent. This is to prevent an unexpected issue when an add-on exists but its parent was already removed. - */ - array_unshift( $products_slugs_by_type[ $product_type ], $product ); - } + $has_updated_option = true; + + continue; + } + + if ( $this->is_product_active( $slug, $product_data ) ) { + continue; + } + + $is_addon = FS_Plugin::is_valid_id( $product_data->parent_plugin_id ); - $products_data_by_type[ $product_type ][ $option_name ] = $product_data; + if ( ! $is_addon ) { + $products_to_delete[] = $product_data; + } else { + /** + * If add-on, add to the beginning of the array so that add-ons are removed before their parent. This is to prevent an unexpected issue when an add-on exists but its parent was already removed. + */ + array_unshift( $products_to_delete, $product_data ); } } - if ( empty( $products_slugs_by_type ) ) { - return; + if ( $has_updated_option ) { + $_accounts->store(); } - $products_options_by_type = $this->get_product_options_by_type(); + return $products_to_delete; + } - $loaded_products_options_by_type = array_fill_keys( $product_types, false ); + /** + * @param string $slug + * @param object $product_data + * + * @return bool + */ + private function is_product_active( $slug, $product_data ) { + $products_to_skip_by_type_and_slug = $this->get_products_to_skip_by_type_and_slug(); - $installs_count_by_user_id = array(); + if ( isset( $products_to_skip_by_type_and_slug[ $product_data->type ][ $slug ] ) ) { + return true; + } + + if ( $product_data->last_load_timestamp > ( time() - ( WP_FS__TIME_WEEK_IN_SEC * 4 ) ) ) { + // Last activation was within the last 4 weeks. + return true; + } + + return false; + } + + /** + * @param FS_Options $_accounts + * @param array[] $products_to_delete + * + * @return bool + */ + private function delete_products( $_accounts, $products_to_delete ) { + $products_option_names_by_type = $this->get_product_option_names_by_type(); + $products_options_by_type = array(); + $has_loaded_products_options_by_type = array_fill_keys( array_keys( $products_to_delete ), false ); $has_updated_option = false; - foreach( $products_slugs_by_type as $product_type => $products ) { + foreach( $products_to_delete as $product_type => $products ) { foreach( $products as $product ) { - $product_id = $product['id']; - $slug = $product['slug']; - $product_file = $product['file']; + $slug = $product->slug; - if ( ! $loaded_products_options_by_type[ $product_type ] ) { - $products_data_by_type[ $product_type ] = $this->load_options( $products_options_by_type[ $product_type ] ); - $loaded_products_options_by_type[ $product_type ] = true; + if ( ! $has_loaded_products_options_by_type[ $product_type ] ) { + $products_options_by_type[ $product_type ] = $this->load_options( $_accounts, $products_option_names_by_type[ $product_type ] ); + $has_loaded_products_options_by_type[ $product_type ] = true; } - foreach( $products_data_by_type[ $product_type ] as $option_name => $products_data ) { + foreach( $products_options_by_type[ $product_type ] as $option_name => $products_options ) { $updated = false; - if ( ! is_array( $products_data ) ) { + if ( ! is_array( $products_options ) ) { if ( - is_object( $products_data ) && + is_object( $products_options ) && in_array( $option_name, array( "all_{$product_type}s", "active_{$product_type}s" ) ) ) { - if ( isset( $products_data->{ "{$product_type}s" }[ $product_file ] ) ) { - unset( $products_data->{ "{$product_type}s" }[ $product_file ] ); + if ( isset( $products_options->{ "{$product_type}s" }[ $product->file ] ) ) { + unset( $products_options->{ "{$product_type}s" }[ $product->file ] ); $updated = true; } } @@ -160,33 +195,25 @@ private function clean_up() { } if ( ! $updated ) { - if ( isset( $products_data[ $slug ] ) ) { - if ( fs_ends_with( $option_name, 'sites' ) ) { - $site = $products_data[ $slug ]; - - $installs_count_by_user_id[ $site->user_id ] = isset( $installs_count_by_user_id[ $site->user_id ] ) ? - $installs_count_by_user_id[ $site->user_id ] ++ : - 1; - } - - unset( $products_data[ $slug ] ); + if ( isset( $products_options[ $slug ] ) ) { + unset( $products_options[ $slug ] ); $updated = true; - } else if ( isset( $products_data[ "{$slug}:{$product_type}" ] ) ) { - unset( $products_data[ "{$slug}:{$product_type}" ] ); + } else if ( isset( $products_options[ "{$slug}:{$product_type}" ] ) ) { + unset( $products_options[ "{$slug}:{$product_type}" ] ); $updated = true; - } else if ( isset( $products_data[ $product_id ] ) ) { - unset( $products_data[ $product_id ] ); + } else if ( isset( $products_options[ $product->id ] ) ) { + unset( $products_options[ $product->id ] ); $updated = true; - } else if ( isset( $products_data[ $product_file ] ) ) { - unset( $products_data[ $product_file ] ); + } else if ( isset( $products_options[ $product->file ] ) ) { + unset( $products_options[ $product->file ] ); $updated = true; } } if ( $updated ) { - $_accounts->set_option( $option_name, $products_data ); + $_accounts->set_option( $option_name, $products_options ); - $products_data_by_type[ $product_type ][ $option_name ] = $products_data; + $products_options_by_type[ $product_type ][ $option_name ] = $products_options; $has_updated_option = true; } @@ -194,27 +221,67 @@ private function clean_up() { } } - if ( $has_updated_option ) { - $users = Freemius::get_all_users(); + return $has_updated_option; + } + + /** + * @param FS_Options $_accounts + * @param array $installs_count_by_user_id + * + * @return bool + */ + private function delete_inactive_users( $_accounts ) { + $users = Freemius::get_all_users(); + + $user_has_install = array(); + + foreach ( $this->get_product_types() as $product_type ) { + $option_name = ( WP_FS__MODULE_TYPE_PLUGIN !== $product_type ) ? + "{$product_type}_sites" : + 'sites'; + + $installs = $_accounts->get_option( $option_name, array() ); + + foreach ( $installs as $install ) { + $user_has_install[ $install->user_id ] = true; + } } - // Handle deletion of user entities that are no longer associated with installs. - if ( - $this->delete_users( - $users, - $products_slugs_by_type, - $products_data_by_type, - $installs_count_by_user_id - ) - ) { - $has_updated_option = true; + if ( count( $users ) === count( $user_has_install ) ) { + return false; } - if ( $has_updated_option ) { - $_accounts->store(); + $products_user_id_license_ids_map = $_accounts->get_option( 'user_id_license_ids_map' ); + + $has_updated_option = false; + + foreach ( $users as $user_id => $user ) { + if ( ! isset( $user_has_install[ $user_id ] ) ) { + unset( $users[ $user_id ] ); + + foreach( $products_user_id_license_ids_map as $product_id => $user_id_license_ids_map ) { + unset( $user_id_license_ids_map[ $user_id ] ); + + if ( empty( $user_id_license_ids_map ) ) { + unset( $products_user_id_license_ids_map[ $product_id ] ); + } else { + $products_user_id_license_ids_map[ $product_id ] = $user_id_license_ids_map; + } + } + + $_accounts->set_option( 'users', $users ); + $_accounts->set_option( 'user_id_license_ids_map', $products_user_id_license_ids_map ); + + $has_updated_option = true; + } } + + return $has_updated_option; } + /** + * @return string[] + */ private function get_product_types() { return array( WP_FS__MODULE_TYPE_PLUGIN, @@ -222,7 +289,10 @@ private function get_product_types() { ); } - private function get_product_options_by_type() { + /** + * @return array[] + */ + private function get_product_option_names_by_type() { return array( WP_FS__MODULE_TYPE_PLUGIN => array( 'admin_notices', @@ -253,66 +323,37 @@ private function get_product_options_by_type() { ); } + /** + * @return array + */ private function get_products_to_skip_by_type_and_slug() { - $products_to_skip_by_type_and_slug = array_fill_keys( $this->get_product_types(), array() ); - - $instances = Freemius::_get_all_instances(); + if ( ! isset( $this->products_to_skip_by_type_and_slug ) ) { + $this->products_to_skip_by_type_and_slug = array_fill_keys( $this->get_product_types(), array() ); - // Iterate over the active instances so we can determine the products to skip. - foreach( $instances as $instance ) { - $products_to_skip_by_type_and_slug[ $instance->get_module_type() ][ $instance->get_slug() ] = true; - } - - return $products_to_skip_by_type_and_slug; - } + $instances = Freemius::_get_all_instances(); - private function delete_users( - $users, - $products_slugs_by_type, - $products_data_by_type, - $installs_count_by_user_id - ) { - $_accounts = FS_Options::instance( WP_FS__ACCOUNTS_OPTION_NAME ); - - $has_updated_option = false; - - foreach( $products_slugs_by_type as $product_type => $product ) { - foreach( $products_data_by_type[ $product_type ] as $products_data ) { - if ( ! is_array( $products_data ) ) { - continue; - } - - foreach( $installs_count_by_user_id as $user_id => $count ) { - if ( 1 === $count) { - unset( $users[ $user_id ] ); - unset( $products_data['user_id_license_ids_map'][ $user_id ] ); - - $_accounts->set_option( 'users', $users ); - $_accounts->set_option( 'user_id_license_ids_map', $products_data['user_id_license_ids_map'] ); - - $has_updated_option = true; - } - } + // Iterate over the active instances so we can determine the products to skip. + foreach( $instances as $instance ) { + $this->products_to_skip_by_type_and_slug[ $instance->get_module_type() ][ $instance->get_slug() ] = true; } } - return $has_updated_option; + return $this->products_to_skip_by_type_and_slug; } + /** - * @since 2.5.11 - * @param $option_names + * @param FS_Options $_accounts + * @param string[] $option_names * * @return array */ - private function load_options( $option_names ) { - $_accounts = FS_Options::instance( WP_FS__ACCOUNTS_OPTION_NAME ); - - $all_data = array(); + private function load_options( $_accounts, $option_names ) { + $products_options_by_type = array(); foreach ( $option_names as $option_name ) { - $all_data[ $option_name ] = $_accounts->get_option( $option_name ); + $products_options_by_type[ $option_name ] = $_accounts->get_option( $option_name ); } - return $all_data; + return $products_options_by_type; } } \ No newline at end of file From 36c001dd381c7651d1f9b7cfbc52f2b6700a5458 Mon Sep 17 00:00:00 2001 From: Leo Fajardo Date: Tue, 19 Sep 2023 16:13:34 +0800 Subject: [PATCH 06/24] [sdk-loader] [themes] Fixed a conflict between the SDK loader and the theme live preview functionality. --- start.php | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/start.php b/start.php index b8971e84..788c7236 100644 --- a/start.php +++ b/start.php @@ -15,7 +15,7 @@ * * @var string */ - $this_sdk_version = '2.5.12'; + $this_sdk_version = '2.5.12.1'; #region SDK Selection Logic -------------------------------------------------------------------- @@ -46,6 +46,29 @@ */ $file_path = fs_normalize_path( __FILE__ ); $fs_root_path = dirname( $file_path ); + + if ( + ! function_exists( 'wp_get_current_user' ) && + /** + * `get_stylesheet()` will rely on `wp_get_current_user()` when it is being filtered by `theme-previews.php`. That happens only when the site editor is loaded or when the site editor is sending REST requests. + * @see theme-previews.php:wp_get_theme_preview_path() + * + * @todo If this behavior is fixed in the core, we will remove this workaround. + * @since WP 6.3.0 + */ + ( + 'site-editor.php' === basename( $_SERVER['SCRIPT_FILENAME'] ) || + ( + function_exists( 'wp_is_json_request' ) && + wp_is_json_request() && + ! empty( $_GET['wp_theme_preview'] ) + ) + ) + ) { + // Requiring this file since the call to get_stylesheet() below can trigger a call to wp_get_current_user() when previewing a theme. + require_once ABSPATH . 'wp-includes/pluggable.php'; + } + /** * Get the themes directory where the active theme is located (not passing the stylesheet will make WordPress * assume that the themes directory is inside `wp-content`. From a357fb04b78f70cede6896e35ff31dd5ac25e2f1 Mon Sep 17 00:00:00 2001 From: Leo Fajardo Date: Tue, 19 Sep 2023 20:10:02 +0800 Subject: [PATCH 07/24] [tabs] [php-8] Ensure that there's a valid stored tabs HTML string before attempting to process it to prevent triggering a deprecated usage notice. --- includes/class-freemius.php | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/includes/class-freemius.php b/includes/class-freemius.php index 2c7c7db2..bad06e91 100755 --- a/includes/class-freemius.php +++ b/includes/class-freemius.php @@ -25424,6 +25424,12 @@ function _add_tabs_before_content() { return false; } + $tabs_html = $this->get_tabs_html(); + + if ( empty( $tabs_html ) ) { + return false; + } + /** * Enqueue the original stylesheets that are included in the * theme settings page. That way, if the theme settings has @@ -25438,7 +25444,7 @@ function _add_tabs_before_content() { } // Cut closing tag. - echo substr( trim( $this->get_tabs_html() ), 0, - 6 ); + echo substr( trim( $tabs_html ), 0, - 6 ); return true; } From 059c189dfd3d3cee665c1fb3d2abec2209fb6bcb Mon Sep 17 00:00:00 2001 From: Swashata Ghosh Date: Wed, 20 Sep 2023 11:16:07 +0530 Subject: [PATCH 08/24] [version] [bump] [pre-release] --- start.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/start.php b/start.php index 788c7236..a449d776 100644 --- a/start.php +++ b/start.php @@ -15,7 +15,7 @@ * * @var string */ - $this_sdk_version = '2.5.12.1'; + $this_sdk_version = '2.5.12.2'; #region SDK Selection Logic -------------------------------------------------------------------- From 5fad5576ae8e347ac45b26462a5d35b55585f267 Mon Sep 17 00:00:00 2001 From: Leo Fajardo Date: Thu, 31 Aug 2023 16:01:22 +0800 Subject: [PATCH 09/24] [affiliation] Fixed the retrieving of the default email address. --- includes/class-freemius.php | 8 +++++++- start.php | 2 +- templates/forms/affiliation.php | 11 +++++++---- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/includes/class-freemius.php b/includes/class-freemius.php index bad06e91..f7d7232d 100755 --- a/includes/class-freemius.php +++ b/includes/class-freemius.php @@ -14791,9 +14791,15 @@ function _submit_affiliate_application() { } if ( ! $this->is_registered() ) { + $email_address = isset( $affiliate['email'] ) ? $affiliate['email'] : ''; + + if ( ! is_email( $email_address ) ) { + self::shoot_ajax_failure('Invalid email address.'); + } + // Opt in but don't track usage. $next_page = $this->opt_in( - false, + $email_address, false, false, false, diff --git a/start.php b/start.php index a449d776..c0a60744 100644 --- a/start.php +++ b/start.php @@ -15,7 +15,7 @@ * * @var string */ - $this_sdk_version = '2.5.12.2'; + $this_sdk_version = '2.5.12.3'; #region SDK Selection Logic -------------------------------------------------------------------- diff --git a/templates/forms/affiliation.php b/templates/forms/affiliation.php index 30a6181d..a053d2d1 100644 --- a/templates/forms/affiliation.php +++ b/templates/forms/affiliation.php @@ -69,10 +69,13 @@ $promotion_method_mobile_apps = in_array( 'mobile_apps', $promotion_methods ); } } else { - $current_user = Freemius::_get_current_wp_user(); - $full_name = trim( $current_user->user_firstname . ' ' . $current_user->user_lastname ); - $email_address = $current_user->user_email; - $domain = Freemius::get_unfiltered_site_url( null, true ); + if ( ! is_object( $user ) ) { + $current_user = Freemius::_get_current_wp_user(); + $full_name = trim( $current_user->user_firstname . ' ' . $current_user->user_lastname ); + $email_address = $current_user->user_email; + } + + $domain = Freemius::get_unfiltered_site_url( null, true ); } $affiliate_tracking = 30; From b2c48dac4367e58cce8d8ad8bc10aea2adb7cc29 Mon Sep 17 00:00:00 2001 From: Leo Fajardo Date: Sun, 17 Sep 2023 14:11:21 +0800 Subject: [PATCH 10/24] [garbage-collector] [refactor] Code enhancements --- includes/class-freemius.php | 2 +- includes/class-fs-garbage-collector.php | 474 ++++++++++++++---------- 2 files changed, 273 insertions(+), 203 deletions(-) diff --git a/includes/class-freemius.php b/includes/class-freemius.php index 7729d1f7..d114480e 100755 --- a/includes/class-freemius.php +++ b/includes/class-freemius.php @@ -1358,7 +1358,7 @@ function _plugins_loaded() { function _run_garbage_collector() { if ( $this->is_user_in_admin() ) { - FS_Garbage_Collector::instance()->run(); + FS_Garbage_Collector::instance()->clean(); } } diff --git a/includes/class-fs-garbage-collector.php b/includes/class-fs-garbage-collector.php index acba8507..b981cf44 100755 --- a/includes/class-fs-garbage-collector.php +++ b/includes/class-fs-garbage-collector.php @@ -10,102 +10,162 @@ exit; } - class FS_Garbage_Collector { - #-------------------------------------------------------------------------------- - #region Singleton - #-------------------------------------------------------------------------------- - - private $products_to_skip_by_type_and_slug; + interface FS_I_Garbage_Collector { + function clean(); + } + class FS_Product_Garbage_Collector implements FS_I_Garbage_Collector { /** - * @var FS_Garbage_Collector - * @since 2.6.0 + * @var FS_Options */ - private static $_instance; + private $_accounts; /** - * @return FS_Garbage_Collector + * @var string[] */ - static function instance() { - if ( ! isset( self::$_instance ) ) { - self::$_instance = new self(); - } + private $_options_names; - return self::$_instance; - } + /** + * @var string + */ + private $_type; - #endregion + /** + * @var string + */ + private $_plural_type; - private function __construct() { + function __construct( FS_Options $_accounts, $option_names, $type ) { + $this->_accounts = $_accounts; + $this->_options_names = $option_names; + $this->_type = $type; + $this->_plural_type = ( $type . 's' ); } - function run() { - require_once WP_FS__DIR_INCLUDES . '/class-fs-lock.php'; - - $lock = new FS_Lock( 'garbage_collection' ); + function clean() { + $options = $this->load_options(); + $has_updated_option = false; - if ( $lock->is_locked() ) { - return; - } + $products_to_clean = $this->get_products_to_clean(); - // Create a 1-day lock. - $lock->lock( WP_FS__TIME_24_HOURS_IN_SEC ); + foreach( $products_to_clean as $product ) { + $slug = $product->slug; - $this->clean_up(); - } + foreach( $options as $option_name => $option ) { + $updated = false; - private function clean_up() { - $_accounts = FS_Options::instance( WP_FS__ACCOUNTS_OPTION_NAME, true ); + if ( ! is_array( $option ) ) { + if ( + is_object( $option ) && + in_array( $option_name, array( 'all_' . $this->_plural_type, 'active_' . $this->_plural_type ) ) + ) { + if ( isset( $option->{ $this->_plural_type }[ $product->file ] ) ) { + unset( $option->{ $this->_plural_type }[ $product->file ] ); + $updated = true; + } + } - $products_to_delete = array(); + if ( ! $updated ) { + continue; + } + } - foreach ( $this->get_product_types() as $product_type ) { - $products_to_delete[ $product_type ] = $this->get_products_to_delete( $_accounts, $product_type ); - } + if ( ! $updated ) { + if ( array_key_exists( $slug, $option ) ) { + unset( $option[ $slug ] ); + $updated = true; + } else if ( array_key_exists( "{$slug}:{$this->_type}", $option ) ) { + unset( $option[ "{$slug}:{$this->_type}" ] ); + $updated = true; + } else if ( isset( $product->id ) && array_key_exists( $product->id, $option ) ) { + unset( $option[ $product->id ] ); + $updated = true; + } else if ( isset( $product->file ) && array_key_exists( $product->file, $option ) ) { + unset( $option[ $product->file ] ); + $updated = true; + } + } - $update_options = false; + if ( $updated ) { + $this->_accounts->set_option( $option_name, $option ); - if ( ! empty( $products_to_delete ) ) { - if ( $this->delete_products( $_accounts, $products_to_delete ) ) { - $this->delete_inactive_users( $_accounts ); + $options[ $option_name ] = $option; - $update_options = true; + $has_updated_option = true; + } } } - if ( $update_options ) { - $_accounts->store(); - } + return $has_updated_option; } - /** - * @param FS_Options $_accounts - * @param string $product_type - * - * @return array - */ - private function get_products_to_delete( $_accounts, $product_type ) { - $option_name = ( $product_type . 's' ); - $all_product_data = $_accounts->get_option( $option_name, array() ); + private function get_all_option_names() { + return array_merge( + array( + 'admin_notices', + 'updates', + 'all_licenses', + 'addons', + 'id_slug_type_path_map', + 'file_slug_map', + ), + $this->_options_names + ); + } - $products_to_delete = array(); + private function get_products() { + if ( ! empty( $this->_products ) ) { + return $this->_products; + } - $has_updated_option = false; + $products = $this->_accounts->get_option( $this->_plural_type, array() ); + $this->_products = $this->maybe_set_products_last_load_timestamp( $products, $products, $this->_plural_type ); - foreach ( $all_product_data as $slug => $product_data ) { - if ( ! is_object( $product_data ) ) { - continue; - } + $other_product_option_names = array( + 'active_' . $this->_plural_type, + 'all_' . $this->_plural_type + ); + + foreach ( $other_product_option_names as $other_option_name ) { + $products_from_other_options = array(); + + $other_option = $this->_accounts->get_option( $other_option_name, array() ); if ( - empty( $product_data->last_load_timestamp ) || - ! is_numeric( $product_data->last_load_timestamp ) + is_object( $other_option ) && + is_array( $other_option->{ $this->_plural_type } ) ) { - // Set to the current time so that if the product is no longer used, its data will be deleted after 4 weeks. - $product_data->last_load_timestamp = time(); + foreach( $other_option->{ $this->_plural_type } as $key => $other_product ) { + $products_from_other_options[ $key ] = $other_product; + } + } - $has_updated_option = true; + $products_from_other_options = $this->maybe_set_products_last_load_timestamp( + $products_from_other_options, + $other_option, + $other_option_name, + $this->_plural_type + ); + + foreach( $products_from_other_options as $file => $product ) { + $product['file'] = $file; + + if ( ! isset( $product['slug'] ) ) { + $this->_products[ $product['slug'] ] = (object) $product; + } + } + } + + return $this->_products; + } + private function get_products_to_clean() { + $products_to_clean = array(); + + $products = $this->get_products(); + + foreach ( $products as $slug => $product_data ) { + if ( ! is_object( $product_data ) ) { continue; } @@ -113,23 +173,35 @@ private function get_products_to_delete( $_accounts, $product_type ) { continue; } - $is_addon = FS_Plugin::is_valid_id( $product_data->parent_plugin_id ); + $is_addon = ( ! empty( $product_data->parent_plugin_id ) ); if ( ! $is_addon ) { - $products_to_delete[] = $product_data; + $products_to_clean[] = $product_data; } else { /** * If add-on, add to the beginning of the array so that add-ons are removed before their parent. This is to prevent an unexpected issue when an add-on exists but its parent was already removed. */ - array_unshift( $products_to_delete, $product_data ); + array_unshift( $products_to_clean, $product_data ); } } - if ( $has_updated_option ) { - $_accounts->store(); + return $products_to_clean; + } + + /** + * @return array + */ + private function get_products_to_skip_by_slug() { + $products_to_skip_by_slug = array(); + + $instances = Freemius::_get_all_instances(); + + // Iterate over the active instances so we can determine the products to skip. + foreach( $instances as $instance ) { + $products_to_skip_by_slug[ $instance->get_slug() ] = true; } - return $products_to_delete; + return $products_to_skip_by_slug; } /** @@ -139,9 +211,9 @@ private function get_products_to_delete( $_accounts, $product_type ) { * @return bool */ private function is_product_active( $slug, $product_data ) { - $products_to_skip_by_type_and_slug = $this->get_products_to_skip_by_type_and_slug(); + $products_to_skip_by_slug = $this->get_products_to_skip_by_slug(); - if ( isset( $products_to_skip_by_type_and_slug[ $product_data->type ][ $slug ] ) ) { + if ( isset( $products_to_skip_by_slug[ $slug ] ) ) { return true; } @@ -153,105 +225,77 @@ private function is_product_active( $slug, $product_data ) { return false; } - /** - * @param FS_Options $_accounts - * @param array[] $products_to_delete - * - * @return bool - */ - private function delete_products( $_accounts, $products_to_delete ) { - $products_option_names_by_type = $this->get_product_option_names_by_type(); - $products_options_by_type = array(); - $has_loaded_products_options_by_type = array_fill_keys( array_keys( $products_to_delete ), false ); - - $has_updated_option = false; + private function load_options() { + $options = array(); + $option_names = $this->get_all_option_names(); - foreach( $products_to_delete as $product_type => $products ) { - foreach( $products as $product ) { - $slug = $product->slug; + foreach ( $option_names as $option_name ) { + $options[ $option_name ] = $this->_accounts->get_option( $option_name, array() ); + } - if ( ! $has_loaded_products_options_by_type[ $product_type ] ) { - $products_options_by_type[ $product_type ] = $this->load_options( $_accounts, $products_option_names_by_type[ $product_type ] ); - $has_loaded_products_options_by_type[ $product_type ] = true; - } + return $options; + } - foreach( $products_options_by_type[ $product_type ] as $option_name => $products_options ) { - $updated = false; - - if ( ! is_array( $products_options ) ) { - if ( - is_object( $products_options ) && - in_array( $option_name, array( "all_{$product_type}s", "active_{$product_type}s" ) ) - ) { - if ( isset( $products_options->{ "{$product_type}s" }[ $product->file ] ) ) { - unset( $products_options->{ "{$product_type}s" }[ $product->file ] ); - $updated = true; - } - } + private function maybe_set_products_last_load_timestamp( + $products, + $option, + $option_name, + $child_option_name = null + ) { + foreach ( $products as $key => $product_data ) { + if ( ! is_object( $product_data ) && ! is_array( $product_data ) ) { + continue; + } - if ( ! $updated ) { - continue; - } - } + if ( + ( is_object( $product_data ) && empty( $product_data->last_load_timestamp ) ) || + ( is_array( $product_data ) && empty( $product_data['last_load_timestamp'] ) ) + ) { + // Set to the current time so that if the product is no longer used, its data will be deleted after 4 weeks. + if ( is_object( $product_data ) ) { + $product_data->last_load_timestamp = time(); + } else { + $product_data['last_load_timestamp'] = time(); + } - if ( ! $updated ) { - if ( isset( $products_options[ $slug ] ) ) { - unset( $products_options[ $slug ] ); - $updated = true; - } else if ( isset( $products_options[ "{$slug}:{$product_type}" ] ) ) { - unset( $products_options[ "{$slug}:{$product_type}" ] ); - $updated = true; - } else if ( isset( $products_options[ $product->id ] ) ) { - unset( $products_options[ $product->id ] ); - $updated = true; - } else if ( isset( $products_options[ $product->file ] ) ) { - unset( $products_options[ $product->file ] ); - $updated = true; - } + if ( ! empty( $child_option_name ) ) { + if ( is_object( $option ) ) { + $option->{ $child_option_name }[ $key ] = $product_data; + } else { + $option[ $child_option_name ][ $key ] = $product_data; } - if ( $updated ) { - $_accounts->set_option( $option_name, $products_options ); - - $products_options_by_type[ $product_type ][ $option_name ] = $products_options; - - $has_updated_option = true; - } + $products[ $key ] = $product_data; } } } - return $has_updated_option; + $this->_accounts->set_option( $option_name, $option ); + + return $products; } + } - /** - * @param FS_Options $_accounts - * @param array $installs_count_by_user_id - * - * @return bool - */ - private function delete_inactive_users( $_accounts ) { - $users = Freemius::get_all_users(); + class FS_User_Garbage_Collector implements FS_I_Garbage_Collector { + private $_accounts; - $user_has_install = array(); + private $_types; - foreach ( $this->get_product_types() as $product_type ) { - $option_name = ( WP_FS__MODULE_TYPE_PLUGIN !== $product_type ) ? - "{$product_type}_sites" : - 'sites'; + function __construct( FS_Options $_accounts, array $types ) { + $this->_accounts = $_accounts; + $this->_types = $types; + } - $installs = $_accounts->get_option( $option_name, array() ); + function clean() { + $users = Freemius::get_all_users(); - foreach ( $installs as $install ) { - $user_has_install[ $install->user_id ] = true; - } - } + $user_has_install_map = $this->get_user_has_install_map(); - if ( count( $users ) === count( $user_has_install ) ) { + if ( count( $users ) === count( $user_has_install_map ) ) { return false; } - $products_user_id_license_ids_map = $_accounts->get_option( 'user_id_license_ids_map' ); + $products_user_id_license_ids_map = $this->_accounts->get_option( 'user_id_license_ids_map', array() ); $has_updated_option = false; @@ -269,8 +313,8 @@ private function delete_inactive_users( $_accounts ) { } } - $_accounts->set_option( 'users', $users ); - $_accounts->set_option( 'user_id_license_ids_map', $products_user_id_license_ids_map ); + $this->_accounts->set_option( 'users', $users ); + $this->_accounts->set_option( 'user_id_license_ids_map', $products_user_id_license_ids_map ); $has_updated_option = true; } @@ -279,81 +323,107 @@ private function delete_inactive_users( $_accounts ) { return $has_updated_option; } + private function get_user_has_install_map() { + $user_has_install_map = array(); + + foreach ( $this->_types as $product_type ) { + $option_name = ( WP_FS__MODULE_TYPE_PLUGIN !== $product_type ) ? + "{$product_type}_sites" : + 'sites'; + + $installs = $this->_accounts->get_option( $option_name, array() ); + + foreach ( $installs as $install ) { + $user_has_install_map[ $install->user_id ] = true; + } + } + + return $user_has_install_map; + } + } + + // Main entry-level class. + class FS_Garbage_Collector implements FS_I_Garbage_Collector { /** - * @return string[] + * @var FS_Garbage_Collector + * @since 2.6.0 */ - private function get_product_types() { - return array( - WP_FS__MODULE_TYPE_PLUGIN, - WP_FS__MODULE_TYPE_THEME, - ); - } + private static $_instance; /** - * @return array[] + * @return FS_Garbage_Collector */ - private function get_product_option_names_by_type() { - return array( - WP_FS__MODULE_TYPE_PLUGIN => array( - 'admin_notices', - 'updates', + static function instance() { + if ( ! isset( self::$_instance ) ) { + self::$_instance = new self(); + } + + return self::$_instance; + } + + #endregion + + private function __construct() { + } + + function clean() { + require_once WP_FS__DIR_INCLUDES . '/class-fs-lock.php'; + + $lock = new FS_Lock( 'garbage_collection' ); + + if ( $lock->is_locked() ) { + return; + } + + // Create a 1-day lock. + $lock->lock( WP_FS__TIME_24_HOURS_IN_SEC ); + + $_accounts = FS_Options::instance( WP_FS__ACCOUNTS_OPTION_NAME, true ); + + $products_cleaners = array(); + + $products_cleaners[ WP_FS__MODULE_TYPE_PLUGIN ] = new FS_Product_Garbage_Collector( + $_accounts, + array( 'sites', - 'all_licenses', 'plans', - 'addons', 'plugins', 'active_plugins', 'all_plugins', - 'id_slug_type_path_map', - 'file_slug_map', ), - WP_FS__MODULE_TYPE_THEME => array( - 'admin_notices', - 'updates', + WP_FS__MODULE_TYPE_PLUGIN + ); + + $products_cleaners[ WP_FS__MODULE_TYPE_THEME ] = new FS_Product_Garbage_Collector( + $_accounts, + array( 'theme_sites', - 'all_licenses', 'theme_plans', - 'addons', 'themes', 'active_themes', 'all_themes', - 'id_slug_type_path_map', - 'file_slug_map', - ) + ), + WP_FS__MODULE_TYPE_THEME ); - } - - /** - * @return array - */ - private function get_products_to_skip_by_type_and_slug() { - if ( ! isset( $this->products_to_skip_by_type_and_slug ) ) { - $this->products_to_skip_by_type_and_slug = array_fill_keys( $this->get_product_types(), array() ); - $instances = Freemius::_get_all_instances(); + $has_cleaned = false; - // Iterate over the active instances so we can determine the products to skip. - foreach( $instances as $instance ) { - $this->products_to_skip_by_type_and_slug[ $instance->get_module_type() ][ $instance->get_slug() ] = true; + foreach ( $products_cleaners as $products_cleaner ) { + if ( $products_cleaner->clean() ) { + $has_cleaned = true; } } - return $this->products_to_skip_by_type_and_slug; - } - - /** - * @param FS_Options $_accounts - * @param string[] $option_names - * - * @return array - */ - private function load_options( $_accounts, $option_names ) { - $products_options_by_type = array(); + if ( $has_cleaned ) { + $user_cleaner = new FS_User_Garbage_Collector( + $_accounts, + array_keys( $products_cleaners ) + ); - foreach ( $option_names as $option_name ) { - $products_options_by_type[ $option_name ] = $_accounts->get_option( $option_name ); + $user_cleaner->clean(); } - return $products_options_by_type; + // Always store regardless of whether there were cleaned products or not since during the process, the logic may set the last load timestamp of some products. + $_accounts->store(); } } \ No newline at end of file From 30fad4999bb0330bc99da736d305e7cebaa45721 Mon Sep 17 00:00:00 2001 From: Swashata Ghosh Date: Thu, 21 Sep 2023 17:42:25 +0530 Subject: [PATCH 11/24] [garbage-collector] [fix] Properly clean storage and metadata on garbage collect. 1. Consider {product}_data when doing garbage collection. 2. Don't garbage collect all_{module} and active_{module} since those have different structure and source. Add @todo to implement them later. 3. Properly handle missing timestamp in the garbage collector, adding zero risk to the existing BL. 4. Disable garbage collection by default and add it behind a flag => WP_FS__ENABLE_GARBAGE_COLLECTOR. 5. Simplify some logic where possible. --- includes/class-freemius.php | 22 +- includes/class-fs-garbage-collector.php | 265 +++++++++++------------- 2 files changed, 139 insertions(+), 148 deletions(-) diff --git a/includes/class-freemius.php b/includes/class-freemius.php index d114480e..a0936562 100755 --- a/includes/class-freemius.php +++ b/includes/class-freemius.php @@ -1357,9 +1357,27 @@ function _plugins_loaded() { } function _run_garbage_collector() { - if ( $this->is_user_in_admin() ) { - FS_Garbage_Collector::instance()->clean(); + // @todo - Remove this check once the garbage collector is ready. + if ( ! defined( 'WP_FS__ENABLE_GARBAGE_COLLECTOR' ) || true !== WP_FS__ENABLE_GARBAGE_COLLECTOR ) { + return; } + + if ( ! $this->is_user_in_admin() ) { + return; + } + + require_once WP_FS__DIR_INCLUDES . '/class-fs-lock.php'; + + $lock = new FS_Lock( 'garbage_collection' ); + + if ( $lock->is_locked() ) { + return; + } + + // Create a 1-day lock. + $lock->lock( WP_FS__TIME_24_HOURS_IN_SEC ); + + FS_Garbage_Collector::instance()->clean(); } /** diff --git a/includes/class-fs-garbage-collector.php b/includes/class-fs-garbage-collector.php index b981cf44..315b1db0 100755 --- a/includes/class-fs-garbage-collector.php +++ b/includes/class-fs-garbage-collector.php @@ -35,11 +35,23 @@ class FS_Product_Garbage_Collector implements FS_I_Garbage_Collector { */ private $_plural_type; + /** + * @var array Map of product slugs to their last load timestamp, only for products that are not active. + */ + private $_gc_timestamp; + + /** + * @var array> Map of product slugs to their data, as stored by the primary storage of `Freemius` class. + */ + private $_storage_data; + function __construct( FS_Options $_accounts, $option_names, $type ) { $this->_accounts = $_accounts; $this->_options_names = $option_names; $this->_type = $type; $this->_plural_type = ( $type . 's' ); + $this->_gc_timestamp = $this->_accounts->get_option( 'gc_timestamp', array() ); + $this->_storage_data = $this->_accounts->get_option( $this->_type . '_data', array() ); } function clean() { @@ -51,39 +63,33 @@ function clean() { foreach( $products_to_clean as $product ) { $slug = $product->slug; + // Clear the product's data. foreach( $options as $option_name => $option ) { $updated = false; + /** + * We expect to deal with only array like options here. + * @todo - Refactor this to create dedicated GC classes for every option, then we can make the code mode predictable. + * For example, depending on data integrity of `plugins` we can still miss something entirely in the `plugin_data` or vice-versa. + * A better algorithm is to iterate over all options individually in separate classes and check against primary storage to see if those can be garbage collected. + * But given the chance of data integrity issue is very low, we let this run for now and gather feedback. + */ if ( ! is_array( $option ) ) { - if ( - is_object( $option ) && - in_array( $option_name, array( 'all_' . $this->_plural_type, 'active_' . $this->_plural_type ) ) - ) { - if ( isset( $option->{ $this->_plural_type }[ $product->file ] ) ) { - unset( $option->{ $this->_plural_type }[ $product->file ] ); - $updated = true; - } - } - - if ( ! $updated ) { - continue; - } + continue; } - if ( ! $updated ) { - if ( array_key_exists( $slug, $option ) ) { - unset( $option[ $slug ] ); - $updated = true; - } else if ( array_key_exists( "{$slug}:{$this->_type}", $option ) ) { - unset( $option[ "{$slug}:{$this->_type}" ] ); - $updated = true; - } else if ( isset( $product->id ) && array_key_exists( $product->id, $option ) ) { - unset( $option[ $product->id ] ); - $updated = true; - } else if ( isset( $product->file ) && array_key_exists( $product->file, $option ) ) { - unset( $option[ $product->file ] ); - $updated = true; - } + if ( array_key_exists( $slug, $option ) ) { + unset( $option[ $slug ] ); + $updated = true; + } else if ( array_key_exists( "{$slug}:{$this->_type}", $option ) ) { /* admin_notices */ + unset( $option[ "{$slug}:{$this->_type}" ] ); + $updated = true; + } else if ( isset( $product->id ) && array_key_exists( $product->id, $option ) ) { /* all_licenses */ + unset( $option[ $product->id ] ); + $updated = true; + } else if ( isset( $product->file ) && array_key_exists( $product->file, $option ) ) { /* file_slug_map */ + unset( $option[ $product->file ] ); + $updated = true; } if ( $updated ) { @@ -94,8 +100,24 @@ function clean() { $has_updated_option = true; } } + + // Clear the product's data from the primary storage. + if ( isset( $this->_storage_data[ $slug ] ) ) { + unset( $this->_storage_data[ $slug ] ); + $has_updated_option = true; + } + + // Clear from GC timestamp. + // @todo - This perhaps needs a separate garbage collector for all expired products. But the chance of left-over is very slim. + if ( isset( $this->_gc_timestamp[ $slug ] ) ) { + unset( $this->_gc_timestamp[ $slug ] ); + $has_updated_option = true; + } } + $this->_accounts->set_option( 'gc_timestamp', $this->_gc_timestamp ); + $this->_accounts->set_option( $this->_type . '_data', $this->_storage_data ); + return $has_updated_option; } @@ -114,49 +136,19 @@ private function get_all_option_names() { } private function get_products() { - if ( ! empty( $this->_products ) ) { - return $this->_products; - } - - $products = $this->_accounts->get_option( $this->_plural_type, array() ); - $this->_products = $this->maybe_set_products_last_load_timestamp( $products, $products, $this->_plural_type ); - - $other_product_option_names = array( - 'active_' . $this->_plural_type, - 'all_' . $this->_plural_type - ); - - foreach ( $other_product_option_names as $other_option_name ) { - $products_from_other_options = array(); - - $other_option = $this->_accounts->get_option( $other_option_name, array() ); + $products = $this->_accounts->get_option( $this->_plural_type, array() ); - if ( - is_object( $other_option ) && - is_array( $other_option->{ $this->_plural_type } ) - ) { - foreach( $other_option->{ $this->_plural_type } as $key => $other_product ) { - $products_from_other_options[ $key ] = $other_product; - } - } - - $products_from_other_options = $this->maybe_set_products_last_load_timestamp( - $products_from_other_options, - $other_option, - $other_option_name, - $this->_plural_type - ); - - foreach( $products_from_other_options as $file => $product ) { - $product['file'] = $file; - - if ( ! isset( $product['slug'] ) ) { - $this->_products[ $product['slug'] ] = (object) $product; - } + // Fill any missing product found in the primary storage. + // @todo - This wouldn't be needed if we use dedicated GC design for every options. The options themselves would provide such information. + foreach( $this->_storage_data as $slug => $product_data ) { + if ( ! isset( $products[ $slug ] ) ) { + $products[ $slug ] = (object) $product_data; } } - return $this->_products; + $this->update_gc_timestamp( $products ); + + return $products; } private function get_products_to_clean() { @@ -169,7 +161,7 @@ private function get_products_to_clean() { continue; } - if ( $this->is_product_active( $slug, $product_data ) ) { + if ( $this->is_product_active( $slug ) ) { continue; } @@ -188,36 +180,19 @@ private function get_products_to_clean() { return $products_to_clean; } - /** - * @return array - */ - private function get_products_to_skip_by_slug() { - $products_to_skip_by_slug = array(); - - $instances = Freemius::_get_all_instances(); - - // Iterate over the active instances so we can determine the products to skip. - foreach( $instances as $instance ) { - $products_to_skip_by_slug[ $instance->get_slug() ] = true; - } - - return $products_to_skip_by_slug; - } - /** * @param string $slug - * @param object $product_data * * @return bool */ - private function is_product_active( $slug, $product_data ) { - $products_to_skip_by_slug = $this->get_products_to_skip_by_slug(); + private function is_product_active( $slug ) { + $instances = Freemius::_get_all_instances(); - if ( isset( $products_to_skip_by_slug[ $slug ] ) ) { + if ( isset( $instances[ $slug ] ) ) { return true; } - if ( $product_data->last_load_timestamp > ( time() - ( WP_FS__TIME_WEEK_IN_SEC * 4 ) ) ) { + if ( $this->get_last_load_timestamp( $slug ) > ( time() - ( WP_FS__TIME_WEEK_IN_SEC * 4 ) ) ) { // Last activation was within the last 4 weeks. return true; } @@ -236,43 +211,38 @@ private function load_options() { return $options; } - private function maybe_set_products_last_load_timestamp( - $products, - $option, - $option_name, - $child_option_name = null - ) { - foreach ( $products as $key => $product_data ) { + /** + * Updates the garbage collector timestamp, only if it was not already set by the product's primary storage. + * + * @param array $products + * + * @return void + */ + private function update_gc_timestamp( $products ) { + foreach ($products as $slug => $product_data) { if ( ! is_object( $product_data ) && ! is_array( $product_data ) ) { continue; } - if ( - ( is_object( $product_data ) && empty( $product_data->last_load_timestamp ) ) || - ( is_array( $product_data ) && empty( $product_data['last_load_timestamp'] ) ) - ) { - // Set to the current time so that if the product is no longer used, its data will be deleted after 4 weeks. - if ( is_object( $product_data ) ) { - $product_data->last_load_timestamp = time(); - } else { - $product_data['last_load_timestamp'] = time(); - } - - if ( ! empty( $child_option_name ) ) { - if ( is_object( $option ) ) { - $option->{ $child_option_name }[ $key ] = $product_data; - } else { - $option[ $child_option_name ][ $key ] = $product_data; - } - - $products[ $key ] = $product_data; - } + // First try to check if the product has last_load_timestamp property. + if ( isset( $this->_storage_data[ $slug ] ) && ! isset( $this->_storage_data[ $slug ]['last_load_timestamp'] ) ) { + $this->_storage_data[ $slug ]['last_load_timestamp'] = time(); + } else if ( ! isset( $gc_timestamp[ $slug ] ) ) { + // If not, fallback to the gc_timestamp, but we don't want to update it more than once. + $gc_timestamp[ $slug ] = time(); } } + } - $this->_accounts->set_option( $option_name, $option ); + private function get_last_load_timestamp( $slug ) { + if ( isset( $this->_storage_data[ $slug ]['last_load_timestamp'] ) ) { + return $this->_storage_data[ $slug ]['last_load_timestamp']; + } - return $products; + return isset( $this->_gc_timestamp[ $slug ] ) ? + $this->_gc_timestamp[ $slug ] : + // This should never happen, but if it does, let's assume the product is not expired. + time(); } } @@ -369,17 +339,42 @@ private function __construct() { function clean() { require_once WP_FS__DIR_INCLUDES . '/class-fs-lock.php'; - $lock = new FS_Lock( 'garbage_collection' ); + $_accounts = FS_Options::instance( WP_FS__ACCOUNTS_OPTION_NAME, true ); + + $products_cleaners = $this->get_product_cleaners( $_accounts ); + + $has_cleaned = false; - if ( $lock->is_locked() ) { - return; + foreach ( $products_cleaners as $products_cleaner ) { + if ( $products_cleaner->clean() ) { + $has_cleaned = true; + } + } + + if ( $has_cleaned ) { + $user_cleaner = new FS_User_Garbage_Collector( + $_accounts, + array_keys( $products_cleaners ) + ); + + $user_cleaner->clean(); } - // Create a 1-day lock. - $lock->lock( WP_FS__TIME_24_HOURS_IN_SEC ); + // @todo - We need a garbage collector for `all_plugins` and `active_plugins` (and variants of themes). - $_accounts = FS_Options::instance( WP_FS__ACCOUNTS_OPTION_NAME, true ); + // Always store regardless of whether there were cleaned products or not since during the process, the logic may set the last load timestamp of some products. + $_accounts->store(); + } + /** + * @param FS_Options $_accounts + * + * @return FS_I_Garbage_Collector[] + */ + private function get_product_cleaners( FS_Options $_accounts ) { + /** + * @var FS_I_Garbage_Collector[] $products_cleaners + */ $products_cleaners = array(); $products_cleaners[ WP_FS__MODULE_TYPE_PLUGIN ] = new FS_Product_Garbage_Collector( @@ -388,8 +383,6 @@ function clean() { 'sites', 'plans', 'plugins', - 'active_plugins', - 'all_plugins', ), WP_FS__MODULE_TYPE_PLUGIN ); @@ -400,30 +393,10 @@ function clean() { 'theme_sites', 'theme_plans', 'themes', - 'active_themes', - 'all_themes', ), WP_FS__MODULE_TYPE_THEME ); - $has_cleaned = false; - - foreach ( $products_cleaners as $products_cleaner ) { - if ( $products_cleaner->clean() ) { - $has_cleaned = true; - } - } - - if ( $has_cleaned ) { - $user_cleaner = new FS_User_Garbage_Collector( - $_accounts, - array_keys( $products_cleaners ) - ); - - $user_cleaner->clean(); - } - - // Always store regardless of whether there were cleaned products or not since during the process, the logic may set the last load timestamp of some products. - $_accounts->store(); + return $products_cleaners; } } \ No newline at end of file From a69d5c0a1cfdaa7157e2a9647a5cb53ec072d850 Mon Sep 17 00:00:00 2001 From: Swashata Ghosh Date: Thu, 21 Sep 2023 18:36:58 +0530 Subject: [PATCH 12/24] [garbage-collector] [timestamp] [fix] Fix issue in options getting overridden during operation and how the gc timestamp is stored. --- includes/class-fs-garbage-collector.php | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/includes/class-fs-garbage-collector.php b/includes/class-fs-garbage-collector.php index 315b1db0..cbd72a97 100755 --- a/includes/class-fs-garbage-collector.php +++ b/includes/class-fs-garbage-collector.php @@ -50,11 +50,12 @@ function __construct( FS_Options $_accounts, $option_names, $type ) { $this->_options_names = $option_names; $this->_type = $type; $this->_plural_type = ( $type . 's' ); - $this->_gc_timestamp = $this->_accounts->get_option( 'gc_timestamp', array() ); - $this->_storage_data = $this->_accounts->get_option( $this->_type . '_data', array() ); } function clean() { + $this->_gc_timestamp = $this->_accounts->get_option( 'gc_timestamp', array() ); + $this->_storage_data = $this->_accounts->get_option( $this->_type . '_data', array() ); + $options = $this->load_options(); $has_updated_option = false; @@ -224,12 +225,18 @@ private function update_gc_timestamp( $products ) { continue; } - // First try to check if the product has last_load_timestamp property. - if ( isset( $this->_storage_data[ $slug ] ) && ! isset( $this->_storage_data[ $slug ]['last_load_timestamp'] ) ) { + + // If the product is active, we don't need to update the gc_timestamp. + if ( isset( $this->_storage_data[ $slug ]['last_load_timestamp'] ) ) { + continue; + } + + // First try to check if the product is present in the primary storage. If so update that. + if ( isset( $this->_storage_data[ $slug ] ) ) { $this->_storage_data[ $slug ]['last_load_timestamp'] = time(); - } else if ( ! isset( $gc_timestamp[ $slug ] ) ) { + } else if ( ! isset( $this->_gc_timestamp[ $slug ] ) ) { // If not, fallback to the gc_timestamp, but we don't want to update it more than once. - $gc_timestamp[ $slug ] = time(); + $this->_gc_timestamp[ $slug ] = time(); } } } @@ -337,8 +344,6 @@ private function __construct() { } function clean() { - require_once WP_FS__DIR_INCLUDES . '/class-fs-lock.php'; - $_accounts = FS_Options::instance( WP_FS__ACCOUNTS_OPTION_NAME, true ); $products_cleaners = $this->get_product_cleaners( $_accounts ); From c462833798de8e46da56e65204417333104529d0 Mon Sep 17 00:00:00 2001 From: Swashata Ghosh Date: Thu, 21 Sep 2023 19:12:26 +0530 Subject: [PATCH 13/24] [garbage-collector] [fix] Fix logic in determining active instances. --- includes/class-fs-garbage-collector.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/includes/class-fs-garbage-collector.php b/includes/class-fs-garbage-collector.php index cbd72a97..1c5d413d 100755 --- a/includes/class-fs-garbage-collector.php +++ b/includes/class-fs-garbage-collector.php @@ -189,8 +189,10 @@ private function get_products_to_clean() { private function is_product_active( $slug ) { $instances = Freemius::_get_all_instances(); - if ( isset( $instances[ $slug ] ) ) { - return true; + foreach ( $instances as $instance ) { + if ( $instance->get_slug() === $slug ) { + return true; + } } if ( $this->get_last_load_timestamp( $slug ) > ( time() - ( WP_FS__TIME_WEEK_IN_SEC * 4 ) ) ) { From 6c90d60b1ddfe93ad0d53f6584aed447c6f5e545 Mon Sep 17 00:00:00 2001 From: Vova Feldman Date: Sun, 24 Sep 2023 10:25:31 +0300 Subject: [PATCH 14/24] [essential-functions] [fix] Added `function_exists()` checks to all functions, to avoid conflicts with the EDD migration plugin. --- includes/fs-essential-functions.php | 408 ++++++++++++++-------------- 1 file changed, 208 insertions(+), 200 deletions(-) diff --git a/includes/fs-essential-functions.php b/includes/fs-essential-functions.php index 0c466256..84ffcbe0 100644 --- a/includes/fs-essential-functions.php +++ b/includes/fs-essential-functions.php @@ -167,244 +167,252 @@ function fs_get_ip() { } } - /** - * Leverage backtrace to find caller plugin main file path. - * - * @author Vova Feldman (@svovaf) - * @since 1.0.6 - * - * @return string - */ - function fs_find_caller_plugin_file() { - /** - * All the code below will be executed once on activation. - * If the user changes the main plugin's file name, the file_exists() - * will catch it. - */ - if ( ! function_exists( 'get_plugins' ) ) { - require_once ABSPATH . 'wp-admin/includes/plugin.php'; - } + if ( ! function_exists( 'fs_find_caller_plugin_file' ) ) { + /** + * Leverage backtrace to find caller plugin main file path. + * + * @author Vova Feldman (@svovaf) + * @since 1.0.6 + * + * @return string + */ + function fs_find_caller_plugin_file() { + /** + * All the code below will be executed once on activation. + * If the user changes the main plugin's file name, the file_exists() + * will catch it. + */ + if ( ! function_exists( 'get_plugins' ) ) { + require_once ABSPATH . 'wp-admin/includes/plugin.php'; + } - $all_plugins = fs_get_plugins( true ); - $all_plugins_paths = array(); + $all_plugins = fs_get_plugins( true ); + $all_plugins_paths = array(); - // Get active plugin's main files real full names (might be symlinks). - foreach ( $all_plugins as $relative_path => $data ) { - $all_plugins_paths[] = fs_normalize_path( realpath( WP_PLUGIN_DIR . '/' . $relative_path ) ); - } + // Get active plugin's main files real full names (might be symlinks). + foreach ( $all_plugins as $relative_path => $data ) { + $all_plugins_paths[] = fs_normalize_path( realpath( WP_PLUGIN_DIR . '/' . $relative_path ) ); + } - $plugin_file = null; - for ( $i = 1, $bt = debug_backtrace(), $len = count( $bt ); $i < $len; $i ++ ) { - if ( empty( $bt[ $i ]['file'] ) ) { - continue; - } + $plugin_file = null; + for ( $i = 1, $bt = debug_backtrace(), $len = count( $bt ); $i < $len; $i ++ ) { + if ( empty( $bt[ $i ]['file'] ) ) { + continue; + } - if ( in_array( fs_normalize_path( $bt[ $i ]['file'] ), $all_plugins_paths ) ) { - $plugin_file = $bt[ $i ]['file']; - break; - } - } + if ( in_array( fs_normalize_path( $bt[ $i ]['file'] ), $all_plugins_paths ) ) { + $plugin_file = $bt[ $i ]['file']; + break; + } + } - if ( is_null( $plugin_file ) ) { - // Throw an error to the developer in case of some edge case dev environment. - wp_die( - 'Freemius SDK couldn\'t find the plugin\'s main file. Please contact sdk@freemius.com with the current error.', - 'Error', - array( 'back_link' => true ) - ); - } + if ( is_null( $plugin_file ) ) { + // Throw an error to the developer in case of some edge case dev environment. + wp_die( + 'Freemius SDK couldn\'t find the plugin\'s main file. Please contact sdk@freemius.com with the current error.', + 'Error', + array( 'back_link' => true ) + ); + } - return $plugin_file; - } + return $plugin_file; + } + } require_once dirname( __FILE__ ) . '/supplements/fs-essential-functions-1.1.7.1.php'; - /** - * Update SDK newest version reference. - * - * @author Vova Feldman (@svovaf) - * @since 1.1.6 - * - * @param string $sdk_relative_path - * @param string|bool $plugin_file - * - * @global $fs_active_plugins - */ - function fs_update_sdk_newest_version( $sdk_relative_path, $plugin_file = false ) { - /** - * If there is a plugin running an older version of FS (1.2.1 or below), the `fs_update_sdk_newest_version()` - * function in the older version will be used instead of this one. But since the older version is using - * the `is_plugin_active` function to check if a plugin is active, passing the theme's `plugin_path` to the - * `is_plugin_active` function will return false since the path is not a plugin path, so `in_activation` will be - * `true` for theme modules and the upgrading of the SDK version to 1.2.2 or newer version will work fine. - * - * Future versions that will call this function will use the proper logic here instead of just relying on the - * `is_plugin_active` function to fail for themes. - * - * @author Leo Fajardo (@leorw) - * @since 1.2.2 - */ - - global $fs_active_plugins; - - $newest_sdk = $fs_active_plugins->plugins[ $sdk_relative_path ]; - - if ( ! is_string( $plugin_file ) ) { - $plugin_file = plugin_basename( fs_find_caller_plugin_file() ); - } - - if ( ! isset( $newest_sdk->type ) || 'theme' !== $newest_sdk->type ) { - if ( ! function_exists( 'is_plugin_active' ) ) { - require_once ABSPATH . 'wp-admin/includes/plugin.php'; + if ( ! function_exists( 'fs_update_sdk_newest_version' ) ) { + /** + * Update SDK newest version reference. + * + * @author Vova Feldman (@svovaf) + * @since 1.1.6 + * + * @param string $sdk_relative_path + * @param string|bool $plugin_file + * + * @global $fs_active_plugins + */ + function fs_update_sdk_newest_version( $sdk_relative_path, $plugin_file = false ) { + /** + * If there is a plugin running an older version of FS (1.2.1 or below), the `fs_update_sdk_newest_version()` + * function in the older version will be used instead of this one. But since the older version is using + * the `is_plugin_active` function to check if a plugin is active, passing the theme's `plugin_path` to the + * `is_plugin_active` function will return false since the path is not a plugin path, so `in_activation` will be + * `true` for theme modules and the upgrading of the SDK version to 1.2.2 or newer version will work fine. + * + * Future versions that will call this function will use the proper logic here instead of just relying on the + * `is_plugin_active` function to fail for themes. + * + * @author Leo Fajardo (@leorw) + * @since 1.2.2 + */ + + global $fs_active_plugins; + + $newest_sdk = $fs_active_plugins->plugins[ $sdk_relative_path ]; + + if ( ! is_string( $plugin_file ) ) { + $plugin_file = plugin_basename( fs_find_caller_plugin_file() ); } - $in_activation = ( ! is_plugin_active( $plugin_file ) ); - } else { - $theme = wp_get_theme(); - $in_activation = ( $newest_sdk->plugin_path == $theme->stylesheet ); - } + if ( ! isset( $newest_sdk->type ) || 'theme' !== $newest_sdk->type ) { + if ( ! function_exists( 'is_plugin_active' ) ) { + require_once ABSPATH . 'wp-admin/includes/plugin.php'; + } - $fs_active_plugins->newest = (object) array( - 'plugin_path' => $plugin_file, - 'sdk_path' => $sdk_relative_path, - 'version' => $newest_sdk->version, - 'in_activation' => $in_activation, - 'timestamp' => time(), - ); + $in_activation = ( ! is_plugin_active( $plugin_file ) ); + } else { + $theme = wp_get_theme(); + $in_activation = ( $newest_sdk->plugin_path == $theme->stylesheet ); + } - // Update DB with latest SDK version and path. - update_option( 'fs_active_plugins', $fs_active_plugins ); - } + $fs_active_plugins->newest = (object) array( + 'plugin_path' => $plugin_file, + 'sdk_path' => $sdk_relative_path, + 'version' => $newest_sdk->version, + 'in_activation' => $in_activation, + 'timestamp' => time(), + ); - /** - * Reorder the plugins load order so the plugin with the newest Freemius SDK is loaded first. - * - * @author Vova Feldman (@svovaf) - * @since 1.1.6 - * - * @return bool Was plugin order changed. Return false if plugin was loaded first anyways. - * - * @global $fs_active_plugins - */ - function fs_newest_sdk_plugin_first() { - global $fs_active_plugins; + // Update DB with latest SDK version and path. + update_option( 'fs_active_plugins', $fs_active_plugins ); + } + } + if ( ! function_exists( 'fs_newest_sdk_plugin_first' ) ) { /** - * @todo Multi-site network activated plugin are always loaded prior to site plugins so if there's a plugin activated in the network mode that has an older version of the SDK of another plugin which is site activated that has new SDK version, the fs-essential-functions.php will be loaded from the older SDK. Same thing about MU plugins (loaded even before network activated plugins). + * Reorder the plugins load order so the plugin with the newest Freemius SDK is loaded first. + * + * @author Vova Feldman (@svovaf) + * @since 1.1.6 + * + * @return bool Was plugin order changed. Return false if plugin was loaded first anyways. * - * @link https://github.com/Freemius/wordpress-sdk/issues/26 + * @global $fs_active_plugins */ + function fs_newest_sdk_plugin_first() { + global $fs_active_plugins; - $newest_sdk_plugin_path = $fs_active_plugins->newest->plugin_path; + /** + * @todo Multi-site network activated plugin are always loaded prior to site plugins so if there's a plugin activated in the network mode that has an older version of the SDK of another plugin which is site activated that has new SDK version, the fs-essential-functions.php will be loaded from the older SDK. Same thing about MU plugins (loaded even before network activated plugins). + * + * @link https://github.com/Freemius/wordpress-sdk/issues/26 + */ - $active_plugins = get_option( 'active_plugins', array() ); - $updated_active_plugins = array( $newest_sdk_plugin_path ); + $newest_sdk_plugin_path = $fs_active_plugins->newest->plugin_path; - $plugin_found = false; - $is_first_path = true; + $active_plugins = get_option( 'active_plugins', array() ); + $updated_active_plugins = array( $newest_sdk_plugin_path ); - foreach ( $active_plugins as $key => $plugin_path ) { - if ( $plugin_path === $newest_sdk_plugin_path ) { - if ( $is_first_path ) { - // if it's the first plugin already, no need to continue - return false; - } + $plugin_found = false; + $is_first_path = true; - $plugin_found = true; + foreach ( $active_plugins as $key => $plugin_path ) { + if ( $plugin_path === $newest_sdk_plugin_path ) { + if ( $is_first_path ) { + // if it's the first plugin already, no need to continue + return false; + } - // Skip the plugin (it is already added as the 1st item of $updated_active_plugins). - continue; - } + $plugin_found = true; - $updated_active_plugins[] = $plugin_path; + // Skip the plugin (it is already added as the 1st item of $updated_active_plugins). + continue; + } + + $updated_active_plugins[] = $plugin_path; - if ( $is_first_path ) { - $is_first_path = false; + if ( $is_first_path ) { + $is_first_path = false; + } } - } - if ( $plugin_found ) { - update_option( 'active_plugins', $updated_active_plugins ); + if ( $plugin_found ) { + update_option( 'active_plugins', $updated_active_plugins ); - return true; - } + return true; + } - if ( is_multisite() ) { - // Plugin is network active. - $network_active_plugins = get_site_option( 'active_sitewide_plugins', array() ); + if ( is_multisite() ) { + // Plugin is network active. + $network_active_plugins = get_site_option( 'active_sitewide_plugins', array() ); - if ( isset( $network_active_plugins[ $newest_sdk_plugin_path ] ) ) { - reset( $network_active_plugins ); - if ( $newest_sdk_plugin_path === key( $network_active_plugins ) ) { - // Plugin is already activated first on the network level. - return false; - } else { - $time = $network_active_plugins[ $newest_sdk_plugin_path ]; + if ( isset( $network_active_plugins[ $newest_sdk_plugin_path ] ) ) { + reset( $network_active_plugins ); + if ( $newest_sdk_plugin_path === key( $network_active_plugins ) ) { + // Plugin is already activated first on the network level. + return false; + } else { + $time = $network_active_plugins[ $newest_sdk_plugin_path ]; - // Remove plugin from its current position. - unset( $network_active_plugins[ $newest_sdk_plugin_path ] ); + // Remove plugin from its current position. + unset( $network_active_plugins[ $newest_sdk_plugin_path ] ); - // Set it to be included first. - $network_active_plugins = array( $newest_sdk_plugin_path => $time ) + $network_active_plugins; + // Set it to be included first. + $network_active_plugins = array( $newest_sdk_plugin_path => $time ) + $network_active_plugins; - update_site_option( 'active_sitewide_plugins', $network_active_plugins ); + update_site_option( 'active_sitewide_plugins', $network_active_plugins ); - return true; + return true; + } } } - } - return false; + return false; + } } - /** - * Go over all Freemius SDKs in the system and find and "remember" - * the newest SDK which is associated with an active plugin. - * - * @author Vova Feldman (@svovaf) - * @since 1.1.6 - * - * @global $fs_active_plugins - */ - function fs_fallback_to_newest_active_sdk() { - global $fs_active_plugins; - - /** - * @var object $newest_sdk_data - */ - $newest_sdk_data = null; - $newest_sdk_path = null; - - foreach ( $fs_active_plugins->plugins as $sdk_relative_path => $data ) { - if ( is_null( $newest_sdk_data ) || version_compare( $data->version, $newest_sdk_data->version, '>' ) - ) { - // If plugin inactive or SDK starter file doesn't exist, remove SDK reference. - if ( 'plugin' === $data->type ) { - $is_module_active = is_plugin_active( $data->plugin_path ); - } else { - $active_theme = wp_get_theme(); - $is_module_active = ( $data->plugin_path === $active_theme->get_template() ); - } - - $is_sdk_exists = file_exists( fs_normalize_path( WP_PLUGIN_DIR . '/' . $sdk_relative_path . '/start.php' ) ); - - if ( ! $is_module_active || ! $is_sdk_exists ) { - unset( $fs_active_plugins->plugins[ $sdk_relative_path ] ); - - // No need to store the data since it will be stored in fs_update_sdk_newest_version() - // or explicitly with update_option(). - } else { - $newest_sdk_data = $data; - $newest_sdk_path = $sdk_relative_path; - } - } - } + if ( ! function_exists( 'fs_fallback_to_newest_active_sdk' ) ) { + /** + * Go over all Freemius SDKs in the system and find and "remember" + * the newest SDK which is associated with an active plugin. + * + * @author Vova Feldman (@svovaf) + * @since 1.1.6 + * + * @global $fs_active_plugins + */ + function fs_fallback_to_newest_active_sdk() { + global $fs_active_plugins; + + /** + * @var object $newest_sdk_data + */ + $newest_sdk_data = null; + $newest_sdk_path = null; + + foreach ( $fs_active_plugins->plugins as $sdk_relative_path => $data ) { + if ( is_null( $newest_sdk_data ) || version_compare( $data->version, $newest_sdk_data->version, '>' ) + ) { + // If plugin inactive or SDK starter file doesn't exist, remove SDK reference. + if ( 'plugin' === $data->type ) { + $is_module_active = is_plugin_active( $data->plugin_path ); + } else { + $active_theme = wp_get_theme(); + $is_module_active = ( $data->plugin_path === $active_theme->get_template() ); + } + + $is_sdk_exists = file_exists( fs_normalize_path( WP_PLUGIN_DIR . '/' . $sdk_relative_path . '/start.php' ) ); + + if ( ! $is_module_active || ! $is_sdk_exists ) { + unset( $fs_active_plugins->plugins[ $sdk_relative_path ] ); + + // No need to store the data since it will be stored in fs_update_sdk_newest_version() + // or explicitly with update_option(). + } else { + $newest_sdk_data = $data; + $newest_sdk_path = $sdk_relative_path; + } + } + } - if ( is_null( $newest_sdk_data ) ) { - // Couldn't find any SDK reference. - $fs_active_plugins = new stdClass(); - update_option( 'fs_active_plugins', $fs_active_plugins ); - } else { - fs_update_sdk_newest_version( $newest_sdk_path, $newest_sdk_data->plugin_path ); - } - } \ No newline at end of file + if ( is_null( $newest_sdk_data ) ) { + // Couldn't find any SDK reference. + $fs_active_plugins = new stdClass(); + update_option( 'fs_active_plugins', $fs_active_plugins ); + } else { + fs_update_sdk_newest_version( $newest_sdk_path, $newest_sdk_data->plugin_path ); + } + } + } \ No newline at end of file From fa16e40592a01641574ff42b3f03fe2db609dc6f Mon Sep 17 00:00:00 2001 From: Leo Fajardo Date: Tue, 26 Sep 2023 16:06:56 +0800 Subject: [PATCH 15/24] [url] [php-8] Improved the URL parsing logic to prevent triggering warnings from PHP 8. --- includes/class-freemius.php | 7 ++----- includes/class-fs-plugin-updater.php | 7 +------ includes/fs-core-functions.php | 27 +++++++++++++++++++++++++++ includes/fs-plugin-info-dialog.php | 6 +----- start.php | 2 +- 5 files changed, 32 insertions(+), 17 deletions(-) diff --git a/includes/class-freemius.php b/includes/class-freemius.php index abdd8fc6..b776c209 100755 --- a/includes/class-freemius.php +++ b/includes/class-freemius.php @@ -3123,11 +3123,8 @@ private function is_matching_url( $sub_url, $url = '' ) { return false; } - $url_params = array(); - parse_str( parse_url( $url, PHP_URL_QUERY ), $url_params ); - - $sub_url_params = array(); - parse_str( parse_url( $sub_url, PHP_URL_QUERY ), $sub_url_params ); + $url_params = fs_parse_url_params( $url ); + $sub_url_params = fs_parse_url_params( $sub_url ); foreach ( $sub_url_params as $key => $val ) { if ( ! isset( $url_params[ $key ] ) || $val != $url_params[ $key ] ) { diff --git a/includes/class-fs-plugin-updater.php b/includes/class-fs-plugin-updater.php index 6188c51f..7f8fcb59 100755 --- a/includes/class-fs-plugin-updater.php +++ b/includes/class-fs-plugin-updater.php @@ -709,12 +709,7 @@ function get_update_details( FS_Plugin_Tag $new_version ) { * @return bool */ private function is_new_version_premium( FS_Plugin_Tag $new_version ) { - $query_str = parse_url( $new_version->url, PHP_URL_QUERY ); - if ( empty( $query_str ) ) { - return false; - } - - parse_str( $query_str, $params ); + $params = fs_parse_url_params( $new_version->url ); return ( isset( $params['is_premium'] ) && 'true' == $params['is_premium'] ); } diff --git a/includes/fs-core-functions.php b/includes/fs-core-functions.php index aa32a959..4d1701b5 100755 --- a/includes/fs-core-functions.php +++ b/includes/fs-core-functions.php @@ -588,6 +588,33 @@ function fs_nonce_url( $actionurl, $action = - 1, $name = '_wpnonce' ) { } } + if ( ! function_exists( 'fs_parse_url_params' ) ) { + /** + * Returns the query parameters of the given URL if there are any. + * + * @param string $url + * @param bool $html_entity_decode + * + * @return string[] + */ + function fs_parse_url_params( $url, $html_entity_decode = false ) { + $query_str = parse_url( $url, PHP_URL_QUERY ); + $url_params = array(); + + if ( empty( $query_str ) ) { + return $url_params; + } + + if ( $html_entity_decode ) { + $query_str = html_entity_decode( $query_str ); + } + + parse_str( $query_str, $url_params ); + + return $url_params; + } + } + if ( ! function_exists( 'fs_starts_with' ) ) { /** * Check if string starts with. diff --git a/includes/fs-plugin-info-dialog.php b/includes/fs-plugin-info-dialog.php index 8bd13d39..24a33bf5 100755 --- a/includes/fs-plugin-info-dialog.php +++ b/includes/fs-plugin-info-dialog.php @@ -838,12 +838,8 @@ private static function get_blog_status_url( $blog_id, $network_status_url, $sta 'install-plugin' : 'upgrade-plugin'; - $query = parse_url( $network_status_url, PHP_URL_QUERY ); - if ( empty( $query ) ) { - return $network_status_url; - } + $url_params = fs_parse_url_params( $network_status_url, true ); - parse_str( html_entity_decode( $query ), $url_params ); if ( empty( $url_params ) || ! isset( $url_params['plugin'] ) ) { return $network_status_url; } diff --git a/start.php b/start.php index c3305789..1d71d7dc 100644 --- a/start.php +++ b/start.php @@ -15,7 +15,7 @@ * * @var string */ - $this_sdk_version = '2.5.12.4'; + $this_sdk_version = '2.5.12.5'; #region SDK Selection Logic -------------------------------------------------------------------- From 35d2264247250a3db24582f779817e24cfa382d7 Mon Sep 17 00:00:00 2001 From: Swashata Ghosh Date: Sun, 1 Oct 2023 12:06:40 +0530 Subject: [PATCH 16/24] [fs_parse_url_params] [php-doc] Minor improvement to the php-doc. --- includes/fs-core-functions.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/includes/fs-core-functions.php b/includes/fs-core-functions.php index 4d1701b5..108e4ba0 100755 --- a/includes/fs-core-functions.php +++ b/includes/fs-core-functions.php @@ -595,7 +595,7 @@ function fs_nonce_url( $actionurl, $action = - 1, $name = '_wpnonce' ) { * @param string $url * @param bool $html_entity_decode * - * @return string[] + * @return array Key value pair where key represents the parameter name and value represents the parameter value. */ function fs_parse_url_params( $url, $html_entity_decode = false ) { $query_str = parse_url( $url, PHP_URL_QUERY ); From d66188d65c51227d7a69600704b9b3b51611b1ef Mon Sep 17 00:00:00 2001 From: Leo Fajardo Date: Thu, 28 Sep 2023 18:48:40 +0800 Subject: [PATCH 17/24] [clone-resolution] Fixed the license activation link that is included in the duplicate website notice. --- assets/scss/admin/clone-resolution.scss | 21 +++++++++++++++++++++ includes/fs-html-escaping-functions.php | 1 + templates/clone-resolution-js.php | 18 ++++++++++++++---- 3 files changed, 36 insertions(+), 4 deletions(-) diff --git a/assets/scss/admin/clone-resolution.scss b/assets/scss/admin/clone-resolution.scss index fe3f810e..56af38ef 100644 --- a/assets/scss/admin/clone-resolution.scss +++ b/assets/scss/admin/clone-resolution.scss @@ -78,4 +78,25 @@ ol { margin-top: 0; } + + a { + position: relative; + + &:focus { + box-shadow: none; + } + + &.disabled { + color: gray; + } + + .fs-ajax-spinner { + position: absolute; + left: 8px; + right: 0; + top: -1px; + bottom: 0; + margin-left: 100%; + } + } } \ No newline at end of file diff --git a/includes/fs-html-escaping-functions.php b/includes/fs-html-escaping-functions.php index 29f30da8..f227f7f8 100644 --- a/includes/fs-html-escaping-functions.php +++ b/includes/fs-html-escaping-functions.php @@ -17,6 +17,7 @@ */ function fs_html_get_allowed_kses_list() { $common_attributes = array( + 'id' => true, 'class' => true, 'style' => true, 'data-*' => true, diff --git a/templates/clone-resolution-js.php b/templates/clone-resolution-js.php index e8f4e9be..358a6026 100644 --- a/templates/clone-resolution-js.php +++ b/templates/clone-resolution-js.php @@ -55,22 +55,32 @@ beforeSend: function() { $body.css( { cursor: 'wait' } ); - $cloneResolutionNotice.find( '.button' ).addClass( 'disabled' ); + $this.addClass( 'disabled' ); + + if ( $this.attr( 'id' ) === 'fs_temporary_duplicate_license_activation_link' ) { + $this.append( '' ); + } $( window ).on( 'beforeunload', beforeUnload ); }, success : function( resultObj ) { $( window ).off( 'beforeunload', beforeUnload ); - if ( resultObj.data.redirect_url && '' !== resultObj.data.redirect_url ) { + if ( + resultObj.data && + resultObj.data.redirect_url && + '' !== resultObj.data.redirect_url + ) { window.location = resultObj.data.redirect_url; } else { window.location.reload(); } }, - error : function() { + complete : function() { $body.css( { cursor: cursor } ); - $cloneResolutionNotice.find( '.button' ).removeClass( 'disabled' ); + $this.removeClass( 'disabled' ); + + $this.parent().find( '.fs-ajax-spinner' ).remove(); } } ); } ); From 1a6f2f88ccc215a86a3f376ae7b1f35a687bf6a8 Mon Sep 17 00:00:00 2001 From: Swashata Ghosh Date: Sun, 1 Oct 2023 12:36:13 +0530 Subject: [PATCH 18/24] [escaping] [update] Add `i` tag to the list of whitelisted HTML tags. --- includes/fs-html-escaping-functions.php | 1 + 1 file changed, 1 insertion(+) diff --git a/includes/fs-html-escaping-functions.php b/includes/fs-html-escaping-functions.php index f227f7f8..9384b596 100644 --- a/includes/fs-html-escaping-functions.php +++ b/includes/fs-html-escaping-functions.php @@ -49,6 +49,7 @@ function fs_html_get_allowed_kses_list() { 'strong' => $common_attributes, 'u' => $common_attributes, 'b' => $common_attributes, + 'i' => $common_attributes, 'hr' => $common_attributes, 'span' => $common_attributes, 'p' => $common_attributes, From 41c20719d5cfd9df490fbc0de81a63cae454c9fc Mon Sep 17 00:00:00 2001 From: Swashata Ghosh Date: Sun, 1 Oct 2023 12:40:13 +0530 Subject: [PATCH 19/24] [version] [bump] 2.5.12.6 --- start.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/start.php b/start.php index 1d71d7dc..d87816db 100644 --- a/start.php +++ b/start.php @@ -15,7 +15,7 @@ * * @var string */ - $this_sdk_version = '2.5.12.5'; + $this_sdk_version = '2.5.12.6'; #region SDK Selection Logic -------------------------------------------------------------------- From 4725e276e78a3d5d638f4f78bfea46a4a3b27f49 Mon Sep 17 00:00:00 2001 From: Swashata Ghosh Date: Sun, 1 Oct 2023 13:00:15 +0530 Subject: [PATCH 20/24] [compile] [css] --- assets/css/admin/account.css | 2 +- assets/css/admin/account.css.map | 2 +- assets/css/admin/add-ons.css | 2 +- assets/css/admin/add-ons.css.map | 2 +- assets/css/admin/affiliation.css | 2 +- assets/css/admin/checkout.css | 2 +- assets/css/admin/clone-resolution.css | 2 +- assets/css/admin/clone-resolution.css.map | 2 +- assets/css/admin/common.css | 2 +- assets/css/admin/common.css.map | 2 +- assets/css/admin/connect.css | 2 +- assets/css/admin/connect.css.map | 2 +- assets/css/admin/debug.css | 2 +- assets/css/admin/dialog-boxes.css | 2 +- assets/css/admin/dialog-boxes.css.map | 2 +- assets/css/admin/gdpr-optin-notice.css | 2 +- assets/css/admin/optout.css | 2 +- assets/css/admin/optout.css.map | 2 +- assets/css/admin/plugins.css | 2 +- assets/css/customizer.css | 2 +- assets/css/customizer.css.map | 2 +- 21 files changed, 21 insertions(+), 21 deletions(-) diff --git a/assets/css/admin/account.css b/assets/css/admin/account.css index b24eddac..5ef5e916 100644 --- a/assets/css/admin/account.css +++ b/assets/css/admin/account.css @@ -1 +1 @@ -label.fs-tag,span.fs-tag{background:#ffba00;color:#fff;display:inline-block;border-radius:3px;padding:5px;font-size:11px;line-height:11px;vertical-align:baseline}label.fs-tag.fs-warn,span.fs-tag.fs-warn{background:#ffba00}label.fs-tag.fs-info,span.fs-tag.fs-info{background:#00a0d2}label.fs-tag.fs-success,span.fs-tag.fs-success{background:#46b450}label.fs-tag.fs-error,span.fs-tag.fs-error{background:#dc3232}.fs-notice[data-id=license_not_whitelabeled].success,.fs-notice[data-id=license_whitelabeled].success{color:inherit;border-left-color:#00a0d2}.fs-notice[data-id=license_not_whitelabeled].success label.fs-plugin-title,.fs-notice[data-id=license_whitelabeled].success label.fs-plugin-title{display:none}#fs_account .postbox,#fs_account .widefat{max-width:800px}#fs_account h3{font-size:1.3em;padding:12px 15px;margin:0 0 12px 0;line-height:1.4;border-bottom:1px solid #f1f1f1}#fs_account h3 .dashicons{width:26px;height:26px;font-size:1.3em}#fs_account i.dashicons{font-size:1.2em;height:1.2em;width:1.2em}#fs_account .dashicons{vertical-align:middle}#fs_account .fs-header-actions{position:absolute;top:17px;right:15px;font-size:.9em}#fs_account .fs-header-actions ul{margin:0}#fs_account .fs-header-actions li{float:left}#fs_account .fs-header-actions li form{display:inline-block}#fs_account .fs-header-actions li a{text-decoration:none}#fs_account_details .button-group{float:right}.rtl #fs_account .fs-header-actions{left:15px;right:auto}.fs-key-value-table{width:100%}.fs-key-value-table form{display:inline-block}.fs-key-value-table tr td:first-child{text-align:right}.fs-key-value-table tr td:first-child nobr{font-weight:bold}.fs-key-value-table tr td:first-child form{display:block}.fs-key-value-table tr td.fs-right{text-align:right}.fs-key-value-table tr.fs-odd{background:#ebebeb}.fs-key-value-table td,.fs-key-value-table th{padding:10px}.fs-key-value-table code{line-height:28px}.fs-key-value-table var,.fs-key-value-table code,.fs-key-value-table input[type=text]{color:#0073aa;font-size:16px;background:none}.fs-key-value-table input[type=text]{width:100%;font-weight:bold}.fs-field-beta_program label{margin-left:7px}label.fs-tag{background:#ffba00;color:#fff;display:inline-block;border-radius:3px;padding:5px;font-size:11px;line-height:11px;vertical-align:baseline}label.fs-tag.fs-warn{background:#ffba00}label.fs-tag.fs-success{background:#46b450}label.fs-tag.fs-error{background:#dc3232}#fs_sites .fs-scrollable-table .fs-table-body{max-height:200px;overflow:auto;border:1px solid #e5e5e5}#fs_sites .fs-scrollable-table .fs-table-body>table.widefat{border:none !important}#fs_sites .fs-scrollable-table .fs-main-column{width:100%}#fs_sites .fs-scrollable-table .fs-site-details td:first-of-type{text-align:right;color:gray;width:1px}#fs_sites .fs-scrollable-table .fs-site-details td:last-of-type{text-align:right}#fs_sites .fs-scrollable-table .fs-install-details table tr td{width:1px;white-space:nowrap}#fs_sites .fs-scrollable-table .fs-install-details table tr td:last-of-type{width:auto}#fs_addons h3{border:none;margin-bottom:0;padding:4px 5px}#fs_addons td{vertical-align:middle}#fs_addons thead{white-space:nowrap}#fs_addons td:first-child,#fs_addons th:first-child{text-align:left;font-weight:bold}#fs_addons td:last-child,#fs_addons th:last-child{text-align:right}#fs_addons th{font-weight:bold}#fs_billing_address{width:100%}#fs_billing_address tr td{width:50%;padding:5px}#fs_billing_address tr:first-of-type td{padding-top:0}#fs_billing_address span{font-weight:bold}#fs_billing_address input,#fs_billing_address select{display:block;width:100%;margin-top:5px}#fs_billing_address input::-moz-placeholder,#fs_billing_address select::-moz-placeholder{color:transparent;opacity:1}#fs_billing_address input:-ms-input-placeholder,#fs_billing_address select:-ms-input-placeholder{color:transparent}#fs_billing_address input::-webkit-input-placeholder,#fs_billing_address select::-webkit-input-placeholder{color:transparent}#fs_billing_address input.fs-read-mode,#fs_billing_address select.fs-read-mode{border-color:transparent;color:#777;border-bottom:1px dashed #ccc;padding-left:0;background:none}#fs_billing_address.fs-read-mode td span{display:none}#fs_billing_address.fs-read-mode input,#fs_billing_address.fs-read-mode select{border-color:transparent;color:#777;border-bottom:1px dashed #ccc;padding-left:0;background:none}#fs_billing_address.fs-read-mode input::-moz-placeholder,#fs_billing_address.fs-read-mode select::-moz-placeholder{color:#ccc;opacity:1}#fs_billing_address.fs-read-mode input:-ms-input-placeholder,#fs_billing_address.fs-read-mode select:-ms-input-placeholder{color:#ccc}#fs_billing_address.fs-read-mode input::-webkit-input-placeholder,#fs_billing_address.fs-read-mode select::-webkit-input-placeholder{color:#ccc}#fs_billing_address button{display:block;width:100%}@media screen and (max-width: 639px){#fs_account .fs-header-actions{position:static;padding:0 15px 12px 15px;margin:0 0 12px 0}#fs_account .fs-header-actions li{float:none;display:inline-block}#fs_account #fs_account_details{display:block}#fs_account #fs_account_details tbody,#fs_account #fs_account_details tr,#fs_account #fs_account_details td,#fs_account #fs_account_details th{display:block}#fs_account #fs_account_details tr td:first-child{text-align:left}#fs_account #fs_account_details tr td:nth-child(2){padding:0 12px}#fs_account #fs_account_details tr td:nth-child(2) code{margin:0;padding:0}#fs_account #fs_account_details tr td:nth-child(2) label{margin-left:0}#fs_account #fs_account_details tr td:nth-child(3){text-align:left}#fs_account #fs_account_details tr.fs-field-plan td:nth-child(2) .button-group{float:none;margin:12px 0}} +label.fs-tag,span.fs-tag{background:#ffba00;color:#fff;display:inline-block;border-radius:3px;padding:5px;font-size:11px;line-height:11px;vertical-align:baseline}label.fs-tag.fs-warn,span.fs-tag.fs-warn{background:#ffba00}label.fs-tag.fs-info,span.fs-tag.fs-info{background:#00a0d2}label.fs-tag.fs-success,span.fs-tag.fs-success{background:#46b450}label.fs-tag.fs-error,span.fs-tag.fs-error{background:#dc3232}.fs-notice[data-id=license_not_whitelabeled].success,.fs-notice[data-id=license_whitelabeled].success{color:inherit;border-left-color:#00a0d2}.fs-notice[data-id=license_not_whitelabeled].success label.fs-plugin-title,.fs-notice[data-id=license_whitelabeled].success label.fs-plugin-title{display:none}#fs_account .postbox,#fs_account .widefat{max-width:800px}#fs_account h3{font-size:1.3em;padding:12px 15px;margin:0 0 12px 0;line-height:1.4;border-bottom:1px solid #f1f1f1}#fs_account h3 .dashicons{width:26px;height:26px;font-size:1.3em}#fs_account i.dashicons{font-size:1.2em;height:1.2em;width:1.2em}#fs_account .dashicons{vertical-align:middle}#fs_account .fs-header-actions{position:absolute;top:17px;right:15px;font-size:.9em}#fs_account .fs-header-actions ul{margin:0}#fs_account .fs-header-actions li{float:left}#fs_account .fs-header-actions li form{display:inline-block}#fs_account .fs-header-actions li a{text-decoration:none}#fs_account_details .button-group{float:right}.rtl #fs_account .fs-header-actions{left:15px;right:auto}.fs-key-value-table{width:100%}.fs-key-value-table form{display:inline-block}.fs-key-value-table tr td:first-child{text-align:right}.fs-key-value-table tr td:first-child nobr{font-weight:bold}.fs-key-value-table tr td:first-child form{display:block}.fs-key-value-table tr td.fs-right{text-align:right}.fs-key-value-table tr.fs-odd{background:#ebebeb}.fs-key-value-table td,.fs-key-value-table th{padding:10px}.fs-key-value-table code{line-height:28px}.fs-key-value-table var,.fs-key-value-table code,.fs-key-value-table input[type=text]{color:#0073aa;font-size:16px;background:none}.fs-key-value-table input[type=text]{width:100%;font-weight:bold}.fs-field-beta_program label{margin-left:7px}label.fs-tag{background:#ffba00;color:#fff;display:inline-block;border-radius:3px;padding:5px;font-size:11px;line-height:11px;vertical-align:baseline}label.fs-tag.fs-warn{background:#ffba00}label.fs-tag.fs-success{background:#46b450}label.fs-tag.fs-error{background:#dc3232}#fs_sites .fs-scrollable-table .fs-table-body{max-height:200px;overflow:auto;border:1px solid #e5e5e5}#fs_sites .fs-scrollable-table .fs-table-body>table.widefat{border:none !important}#fs_sites .fs-scrollable-table .fs-main-column{width:100%}#fs_sites .fs-scrollable-table .fs-site-details td:first-of-type{text-align:right;color:gray;width:1px}#fs_sites .fs-scrollable-table .fs-site-details td:last-of-type{text-align:right}#fs_sites .fs-scrollable-table .fs-install-details table tr td{width:1px;white-space:nowrap}#fs_sites .fs-scrollable-table .fs-install-details table tr td:last-of-type{width:auto}#fs_addons h3{border:none;margin-bottom:0;padding:4px 5px}#fs_addons td{vertical-align:middle}#fs_addons thead{white-space:nowrap}#fs_addons td:first-child,#fs_addons th:first-child{text-align:left;font-weight:bold}#fs_addons td:last-child,#fs_addons th:last-child{text-align:right}#fs_addons th{font-weight:bold}#fs_billing_address{width:100%}#fs_billing_address tr td{width:50%;padding:5px}#fs_billing_address tr:first-of-type td{padding-top:0}#fs_billing_address span{font-weight:bold}#fs_billing_address input,#fs_billing_address select{display:block;width:100%;margin-top:5px}#fs_billing_address input::-moz-placeholder,#fs_billing_address select::-moz-placeholder{color:rgba(0,0,0,0);opacity:1}#fs_billing_address input:-ms-input-placeholder,#fs_billing_address select:-ms-input-placeholder{color:rgba(0,0,0,0)}#fs_billing_address input::-webkit-input-placeholder,#fs_billing_address select::-webkit-input-placeholder{color:rgba(0,0,0,0)}#fs_billing_address input.fs-read-mode,#fs_billing_address select.fs-read-mode{border-color:rgba(0,0,0,0);color:#777;border-bottom:1px dashed #ccc;padding-left:0;background:none}#fs_billing_address.fs-read-mode td span{display:none}#fs_billing_address.fs-read-mode input,#fs_billing_address.fs-read-mode select{border-color:rgba(0,0,0,0);color:#777;border-bottom:1px dashed #ccc;padding-left:0;background:none}#fs_billing_address.fs-read-mode input::-moz-placeholder,#fs_billing_address.fs-read-mode select::-moz-placeholder{color:#ccc;opacity:1}#fs_billing_address.fs-read-mode input:-ms-input-placeholder,#fs_billing_address.fs-read-mode select:-ms-input-placeholder{color:#ccc}#fs_billing_address.fs-read-mode input::-webkit-input-placeholder,#fs_billing_address.fs-read-mode select::-webkit-input-placeholder{color:#ccc}#fs_billing_address button{display:block;width:100%}@media screen and (max-width: 639px){#fs_account .fs-header-actions{position:static;padding:0 15px 12px 15px;margin:0 0 12px 0}#fs_account .fs-header-actions li{float:none;display:inline-block}#fs_account #fs_account_details{display:block}#fs_account #fs_account_details tbody,#fs_account #fs_account_details tr,#fs_account #fs_account_details td,#fs_account #fs_account_details th{display:block}#fs_account #fs_account_details tr td:first-child{text-align:left}#fs_account #fs_account_details tr td:nth-child(2){padding:0 12px}#fs_account #fs_account_details tr td:nth-child(2) code{margin:0;padding:0}#fs_account #fs_account_details tr td:nth-child(2) label{margin-left:0}#fs_account #fs_account_details tr td:nth-child(3){text-align:left}#fs_account #fs_account_details tr.fs-field-plan td:nth-child(2) .button-group{float:none;margin:12px 0}}/*# sourceMappingURL=account.css.map */ diff --git a/assets/css/admin/account.css.map b/assets/css/admin/account.css.map index 8807fcd6..9d726e23 100644 --- a/assets/css/admin/account.css.map +++ b/assets/css/admin/account.css.map @@ -1 +1 @@ -{"version":3,"sourceRoot":"","sources":["../../scss/admin/_tag.scss","../../scss/admin/account.scss","../../scss/_mixins.scss"],"names":[],"mappings":"AAAA,yBAEI,mBACA,WACA,qBACA,kBACA,YACA,eACA,iBACA,wBAEA,yCAEI,mBAEJ,yCAEI,mBAEJ,+CAEI,mBAEJ,2CAEI,mBCrBJ,sGACI,cACA,0BAEA,kJACI,aAOR,0CAGI,gBAGJ,eAEI,gBACA,kBACA,kBACA,gBACA,gCAEA,0BACI,WACA,YACA,gBAIR,wBAEI,gBACA,aACA,YAGJ,uBAEI,sBAGJ,+BAEI,kBACA,SACA,WACA,eAEA,kCAEI,SAGJ,kCAOI,WALA,uCAEI,qBAIJ,oCAEI,qBAMhB,kCACI,YAGJ,oCAEI,UACA,WAGJ,oBAEI,WAEA,yBAEI,qBAKA,sCAOI,iBALA,2CAEI,iBAKJ,2CAEI,cAIR,mCAEI,iBAGJ,8BAEI,mBAIR,8CAEI,aAGJ,yBACI,iBAGJ,sFAEI,cACA,eACA,gBAGJ,qCACI,WACA,iBAIR,6BACI,gBAGJ,aAEI,mBACA,WACA,qBACA,kBACA,YACA,eACA,iBACA,wBAEA,qBAEI,mBAEJ,wBAEI,mBAEJ,sBAEI,mBAQA,8CACI,iBACA,cACA,yBAEA,4DACI,uBAIR,+CACI,WAKA,iEAEI,iBACA,WACA,UAGJ,gEAEI,iBAMJ,+DAEI,UACA,mBAEA,4EAEI,WAShB,cAEI,YACA,gBACA,gBAGJ,cAEI,sBAGJ,iBACI,mBAGJ,oDAGI,gBACA,iBAEJ,kDAGI,iBAEJ,cAEI,iBAIR,oBACI,WAGI,0BACI,UACA,YAIA,wCACI,cAaZ,yBACI,iBAGJ,qDAGI,cACA,WACA,eC7BJ,yFACI,MDwBqB,YCvBrB,UAEJ,uGDqByB,YCpBzB,iHDoByB,YAMrB,+EAlBA,yBACA,WACA,8BACA,eACA,gBAqBA,yCACI,aAGJ,+EA7BA,yBACA,WACA,8BACA,eACA,gBCjBJ,mHACI,MD4CyB,KC3CzB,UAEJ,iIDyC6B,KCxC7B,2IDwC6B,KAK7B,2BACI,cACA,WAOR,qCAGQ,+BACI,gBACA,yBACA,kBAEA,kCACI,WACA,qBAKR,gCACI,cAEA,+IACI,cAKI,kDACI,gBAGJ,mDACI,eACA,wDACI,SACA,UAGJ,yDACI,cAIR,mDACI,gBAMJ,+EACI,WACA","file":"account.css"} \ No newline at end of file +{"version":3,"sourceRoot":"","sources":["../../scss/admin/_tag.scss","../../scss/admin/account.scss","../../scss/_mixins.scss"],"names":[],"mappings":"AAAA,yBAEI,mBACA,WACA,qBACA,kBACA,YACA,eACA,iBACA,wBAEA,yCAEI,mBAEJ,yCAEI,mBAEJ,+CAEI,mBAEJ,2CAEI,mBCrBJ,sGACI,cACA,0BAEA,kJACI,aAOR,0CAGI,gBAGJ,eAEI,gBACA,kBACA,kBACA,gBACA,gCAEA,0BACI,WACA,YACA,gBAIR,wBAEI,gBACA,aACA,YAGJ,uBAEI,sBAGJ,+BAEI,kBACA,SACA,WACA,eAEA,kCAEI,SAGJ,kCAOI,WALA,uCAEI,qBAIJ,oCAEI,qBAMhB,kCACI,YAGJ,oCAEI,UACA,WAGJ,oBAEI,WAEA,yBAEI,qBAKA,sCAOI,iBALA,2CAEI,iBAKJ,2CAEI,cAIR,mCAEI,iBAGJ,8BAEI,mBAIR,8CAEI,aAGJ,yBACI,iBAGJ,sFAEI,cACA,eACA,gBAGJ,qCACI,WACA,iBAIR,6BACI,gBAGJ,aAEI,mBACA,WACA,qBACA,kBACA,YACA,eACA,iBACA,wBAEA,qBAEI,mBAEJ,wBAEI,mBAEJ,sBAEI,mBAQA,8CACI,iBACA,cACA,yBAEA,4DACI,uBAIR,+CACI,WAKA,iEAEI,iBACA,WACA,UAGJ,gEAEI,iBAMJ,+DAEI,UACA,mBAEA,4EAEI,WAShB,cAEI,YACA,gBACA,gBAGJ,cAEI,sBAGJ,iBACI,mBAGJ,oDAGI,gBACA,iBAEJ,kDAGI,iBAEJ,cAEI,iBAIR,oBACI,WAGI,0BACI,UACA,YAIA,wCACI,cAaZ,yBACI,iBAGJ,qDAGI,cACA,WACA,eC7BJ,yFACI,MDwBqB,cCvBrB,UAEJ,uGDqByB,cCpBzB,iHDoByB,cAMrB,+EAlBA,2BACA,WACA,8BACA,eACA,gBAqBA,yCACI,aAGJ,+EA7BA,2BACA,WACA,8BACA,eACA,gBCjBJ,mHACI,MD4CyB,KC3CzB,UAEJ,iIDyC6B,KCxC7B,2IDwC6B,KAK7B,2BACI,cACA,WAOR,qCAGQ,+BACI,gBACA,yBACA,kBAEA,kCACI,WACA,qBAKR,gCACI,cAEA,+IACI,cAKI,kDACI,gBAGJ,mDACI,eACA,wDACI,SACA,UAGJ,yDACI,cAIR,mDACI,gBAMJ,+EACI,WACA","file":"account.css"} \ No newline at end of file diff --git a/assets/css/admin/add-ons.css b/assets/css/admin/add-ons.css index dd718136..071e12d9 100644 --- a/assets/css/admin/add-ons.css +++ b/assets/css/admin/add-ons.css @@ -1 +1 @@ -.fs-badge{position:absolute;top:10px;right:0;background:#71ae00;color:#fff;text-transform:uppercase;padding:5px 10px;-moz-border-radius:3px 0 0 3px;-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;font-weight:bold;border-right:0;-moz-box-shadow:0 2px 1px -1px rgba(0,0,0,.3);-webkit-box-shadow:0 2px 1px -1px rgba(0,0,0,.3);box-shadow:0 2px 1px -1px rgba(0,0,0,.3)}#fs_addons .fs-cards-list{list-style:none}#fs_addons .fs-cards-list .fs-card{float:left;height:152px;width:310px;padding:0;margin:0 0 30px 30px;font-size:14px;list-style:none;border:1px solid #ddd;cursor:pointer;position:relative}#fs_addons .fs-cards-list .fs-card .fs-overlay{position:absolute;left:0;right:0;bottom:0;top:0;z-index:9}#fs_addons .fs-cards-list .fs-card .fs-inner{background-color:#fff;overflow:hidden;height:100%;position:relative}#fs_addons .fs-cards-list .fs-card .fs-inner>ul{-moz-transition:all,.15s;-o-transition:all,.15s;-ms-transition:all,.15s;-webkit-transition:all,.15s;transition:all,.15s;left:0;right:0;top:0;position:absolute}#fs_addons .fs-cards-list .fs-card .fs-inner>ul>li{list-style:none;line-height:18px;padding:0 15px;width:100%;display:block;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-card-banner{padding:0;margin:0;line-height:0;display:block;height:100px;background-repeat:repeat-x;background-size:100% 100%;-moz-transition:all,.15s;-o-transition:all,.15s;-ms-transition:all,.15s;-webkit-transition:all,.15s;transition:all,.15s}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-card-banner .fs-badge.fs-installed-addon-badge{font-size:1.02em;line-height:1.3em}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-title{margin:10px 0 0 0;height:18px;overflow:hidden;color:#000;white-space:nowrap;text-overflow:ellipsis;font-weight:bold}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-offer{font-size:.9em}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-description{background-color:#f9f9f9;padding:10px 15px 100px 15px;border-top:1px solid #eee;margin:0 0 10px 0;color:#777}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-tag{position:absolute;top:10px;right:0px;background:#adff2f;display:block;padding:2px 10px;-moz-box-shadow:1px 1px 1px rgba(0,0,0,.3);-webkit-box-shadow:1px 1px 1px rgba(0,0,0,.3);box-shadow:1px 1px 1px rgba(0,0,0,.3);text-transform:uppercase;font-size:.9em;font-weight:bold}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-cta .button,#fs_addons .fs-cards-list .fs-card .fs-inner .fs-cta .button-group{position:absolute;top:112px;right:10px}@media screen and (min-width: 960px){#fs_addons .fs-cards-list .fs-card:hover .fs-overlay{border:2px solid #29abe1;margin-left:-1px;margin-top:-1px}#fs_addons .fs-cards-list .fs-card:hover .fs-inner ul{top:-100px}#fs_addons .fs-cards-list .fs-card:hover .fs-inner .fs-title,#fs_addons .fs-cards-list .fs-card:hover .fs-inner .fs-offer{color:#29abe1}}#TB_window,#TB_window iframe{width:821px !important}#plugin-information .fyi{width:266px !important}#plugin-information #section-holder{margin-right:299px;clear:none}#plugin-information #section-description h2,#plugin-information #section-description h3,#plugin-information #section-description p,#plugin-information #section-description b,#plugin-information #section-description i,#plugin-information #section-description blockquote,#plugin-information #section-description li,#plugin-information #section-description ul,#plugin-information #section-description ol{clear:none}#plugin-information #section-description iframe{max-width:100%}#plugin-information #section-description .fs-selling-points{padding-bottom:10px;border-bottom:1px solid #ddd}#plugin-information #section-description .fs-selling-points ul{margin:0}#plugin-information #section-description .fs-selling-points ul li{padding:0;list-style:none outside none}#plugin-information #section-description .fs-selling-points ul li i.dashicons{color:#71ae00;font-size:3em;vertical-align:middle;line-height:30px;float:left;margin:0 0 0 -15px}#plugin-information #section-description .fs-selling-points ul li h3{margin:1em 30px !important}#plugin-information #section-description .fs-screenshots:after{content:"";display:table;clear:both}#plugin-information #section-description .fs-screenshots ul{list-style:none;margin:0}#plugin-information #section-description .fs-screenshots ul li{width:225px;height:225px;float:left;margin-bottom:20px;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}#plugin-information #section-description .fs-screenshots ul li a{display:block;width:100%;height:100%;border:1px solid;-moz-box-shadow:1px 1px 1px rgba(0,0,0,.2);-webkit-box-shadow:1px 1px 1px rgba(0,0,0,.2);box-shadow:1px 1px 1px rgba(0,0,0,.2);background-size:cover}#plugin-information #section-description .fs-screenshots ul li.odd{margin-right:20px}#plugin-information .plugin-information-pricing{margin:-16px;border-bottom:1px solid #ddd}#plugin-information .plugin-information-pricing .fs-plan h3{margin-top:0;padding:20px;font-size:16px}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper{border-bottom:1px solid #ddd}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper .nav-tab{cursor:pointer;position:relative;padding:0 10px;font-size:.9em}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper .nav-tab label{text-transform:uppercase;color:green;background:#adff2f;position:absolute;left:-1px;right:-1px;bottom:100%;border:1px solid #006400;padding:2px;text-align:center;font-size:.9em;line-height:1em}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper .nav-tab.nav-tab-active{cursor:default;background:#fffeec;border-bottom-color:#fffeec}#plugin-information .plugin-information-pricing .fs-plan.fs-single-cycle h3{background:#fffeec;margin:0;padding-bottom:0;color:#0073aa}#plugin-information .plugin-information-pricing .fs-plan.fs-single-cycle .nav-tab-wrapper,#plugin-information .plugin-information-pricing .fs-plan.fs-single-cycle .fs-billing-frequency{display:none}#plugin-information .plugin-information-pricing .fs-plan .fs-pricing-body{background:#fffeec;padding:20px}#plugin-information .plugin-information-pricing .fs-plan .button{width:100%;text-align:center;font-weight:bold;text-transform:uppercase;font-size:1.1em}#plugin-information .plugin-information-pricing .fs-plan label{white-space:nowrap}#plugin-information .plugin-information-pricing .fs-plan var{font-style:normal}#plugin-information .plugin-information-pricing .fs-plan .fs-billing-frequency,#plugin-information .plugin-information-pricing .fs-plan .fs-annual-discount{text-align:center;display:block;font-weight:bold;margin-bottom:10px;text-transform:uppercase;background:#f3f3f3;padding:2px;border:1px solid #ccc}#plugin-information .plugin-information-pricing .fs-plan .fs-annual-discount{text-transform:none;color:green;background:#adff2f}#plugin-information .plugin-information-pricing .fs-plan ul.fs-trial-terms{font-size:.9em}#plugin-information .plugin-information-pricing .fs-plan ul.fs-trial-terms i{float:left;margin:0 0 0 -15px}#plugin-information .plugin-information-pricing .fs-plan ul.fs-trial-terms li{margin:10px 0 0 0}#plugin-information #section-features .fs-features{margin:-20px -26px}#plugin-information #section-features table{width:100%;border-spacing:0;border-collapse:separate}#plugin-information #section-features table thead th{padding:10px 0}#plugin-information #section-features table thead .fs-price{color:#71ae00;font-weight:normal;display:block;text-align:center}#plugin-information #section-features table tbody td{border-top:1px solid #ccc;padding:10px 0;text-align:center;width:100px;color:#71ae00}#plugin-information #section-features table tbody td:first-child{text-align:left;width:auto;color:inherit;padding-left:26px}#plugin-information #section-features table tbody tr.fs-odd td{background:#fefefe}#plugin-information #section-features .dashicons-yes{width:30px;height:30px;font-size:30px}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .button-group .button,#plugin-information .fs-dropdown .button-group .button{position:relative;width:auto;top:0;right:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .button-group .button:focus,#plugin-information .fs-dropdown .button-group .button:focus{z-index:10}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .button-group .fs-dropdown-arrow,#plugin-information .fs-dropdown .button-group .fs-dropdown-arrow{border-top:6px solid #fff;border-right:4px solid transparent;border-left:4px solid transparent;top:12px;position:relative}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown.active:not(.up) .button:not(.fs-dropdown-arrow-button),#plugin-information .fs-dropdown.active:not(.up) .button:not(.fs-dropdown-arrow-button){border-bottom-left-radius:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown.active:not(.up) .fs-dropdown-arrow-button,#plugin-information .fs-dropdown.active:not(.up) .fs-dropdown-arrow-button{border-bottom-right-radius:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown.active.up .button:not(.fs-dropdown-arrow-button),#plugin-information .fs-dropdown.active.up .button:not(.fs-dropdown-arrow-button){border-top-left-radius:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown.active.up .fs-dropdown-arrow-button,#plugin-information .fs-dropdown.active.up .fs-dropdown-arrow-button{border-top-right-radius:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .fs-dropdown-list,#plugin-information .fs-dropdown .fs-dropdown-list{position:absolute;right:-1px;top:100%;margin-left:auto;padding:3px 0;border:1px solid #bfbfbf;background-color:#fff;z-index:1;width:230px;text-align:left;-moz-box-shadow:0px 2px 4px -1px rgba(0,0,0,.2),0px 4px 5px 0px rgba(0,0,0,.14),0px 1px 10px 0px rgba(0,0,0,.12);-webkit-box-shadow:0px 2px 4px -1px rgba(0,0,0,.2),0px 4px 5px 0px rgba(0,0,0,.14),0px 1px 10px 0px rgba(0,0,0,.12);box-shadow:0px 2px 4px -1px rgba(0,0,0,.2),0px 4px 5px 0px rgba(0,0,0,.14),0px 1px 10px 0px rgba(0,0,0,.12)}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .fs-dropdown-list li,#plugin-information .fs-dropdown .fs-dropdown-list li{margin:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .fs-dropdown-list li a,#plugin-information .fs-dropdown .fs-dropdown-list li a{display:block;padding:5px 10px;text-decoration:none;text-shadow:none}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .fs-dropdown-list li:hover,#plugin-information .fs-dropdown .fs-dropdown-list li:hover{background-color:#0074a3;color:#fff}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .fs-dropdown-list li:hover a,#plugin-information .fs-dropdown .fs-dropdown-list li:hover a{color:#fff}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown:not(.up) .fs-dropdown-list,#plugin-information .fs-dropdown:not(.up) .fs-dropdown-list{-moz-border-radius:3px 0 3px 3px;-webkit-border-radius:3px 0 3px 3px;border-radius:3px 0 3px 3px}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown.up .fs-dropdown-list,#plugin-information .fs-dropdown.up .fs-dropdown-list{-moz-border-radius:3px 3px 0 3px;-webkit-border-radius:3px 3px 0 3px;border-radius:3px 3px 0 3px}#plugin-information .fs-dropdown .button-group{width:100%}#plugin-information .fs-dropdown .button-group .button{float:none;font-size:14px;font-weight:normal;text-transform:none}#plugin-information .fs-dropdown .fs-dropdown-list{margin-top:1px}#plugin-information .fs-dropdown.up .fs-dropdown-list{top:auto;bottom:100%;margin-bottom:2px}#plugin-information.wp-core-ui .fs-pricing-body .fs-dropdown .button-group{text-align:center;display:table}#plugin-information.wp-core-ui .fs-pricing-body .fs-dropdown .button-group .button{display:table-cell}#plugin-information.wp-core-ui .fs-pricing-body .fs-dropdown .button-group .button:not(.fs-dropdown-arrow-button){left:1px;width:100%}#plugin-information-footer>.button,#plugin-information-footer .fs-dropdown{position:relative;top:3px}#plugin-information-footer>.button.left,#plugin-information-footer .fs-dropdown.left{float:left}#plugin-information-footer>.right,#plugin-information-footer .fs-dropdown{float:right}@media screen and (max-width: 961px){#fs_addons .fs-cards-list .fs-card{height:265px}} +.fs-badge{position:absolute;top:10px;right:0;background:#71ae00;color:#fff;text-transform:uppercase;padding:5px 10px;-moz-border-radius:3px 0 0 3px;-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;font-weight:bold;border-right:0;-moz-box-shadow:0 2px 1px -1px rgba(0,0,0,.3);-webkit-box-shadow:0 2px 1px -1px rgba(0,0,0,.3);box-shadow:0 2px 1px -1px rgba(0,0,0,.3)}#fs_addons .fs-cards-list{list-style:none}#fs_addons .fs-cards-list .fs-card{float:left;height:152px;width:310px;padding:0;margin:0 0 30px 30px;font-size:14px;list-style:none;border:1px solid #ddd;cursor:pointer;position:relative}#fs_addons .fs-cards-list .fs-card .fs-overlay{position:absolute;left:0;right:0;bottom:0;top:0;z-index:9}#fs_addons .fs-cards-list .fs-card .fs-inner{background-color:#fff;overflow:hidden;height:100%;position:relative}#fs_addons .fs-cards-list .fs-card .fs-inner>ul{-moz-transition:all,.15s;-o-transition:all,.15s;-ms-transition:all,.15s;-webkit-transition:all,.15s;transition:all,.15s;left:0;right:0;top:0;position:absolute}#fs_addons .fs-cards-list .fs-card .fs-inner>ul>li{list-style:none;line-height:18px;padding:0 15px;width:100%;display:block;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-card-banner{padding:0;margin:0;line-height:0;display:block;height:100px;background-repeat:repeat-x;background-size:100% 100%;-moz-transition:all,.15s;-o-transition:all,.15s;-ms-transition:all,.15s;-webkit-transition:all,.15s;transition:all,.15s}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-card-banner .fs-badge.fs-installed-addon-badge{font-size:1.02em;line-height:1.3em}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-title{margin:10px 0 0 0;height:18px;overflow:hidden;color:#000;white-space:nowrap;text-overflow:ellipsis;font-weight:bold}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-offer{font-size:.9em}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-description{background-color:#f9f9f9;padding:10px 15px 100px 15px;border-top:1px solid #eee;margin:0 0 10px 0;color:#777}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-tag{position:absolute;top:10px;right:0px;background:#adff2f;display:block;padding:2px 10px;-moz-box-shadow:1px 1px 1px rgba(0,0,0,.3);-webkit-box-shadow:1px 1px 1px rgba(0,0,0,.3);box-shadow:1px 1px 1px rgba(0,0,0,.3);text-transform:uppercase;font-size:.9em;font-weight:bold}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-cta .button,#fs_addons .fs-cards-list .fs-card .fs-inner .fs-cta .button-group{position:absolute;top:112px;right:10px}@media screen and (min-width: 960px){#fs_addons .fs-cards-list .fs-card:hover .fs-overlay{border:2px solid #29abe1;margin-left:-1px;margin-top:-1px}#fs_addons .fs-cards-list .fs-card:hover .fs-inner ul{top:-100px}#fs_addons .fs-cards-list .fs-card:hover .fs-inner .fs-title,#fs_addons .fs-cards-list .fs-card:hover .fs-inner .fs-offer{color:#29abe1}}#TB_window,#TB_window iframe{width:821px !important}#plugin-information .fyi{width:266px !important}#plugin-information #section-holder{margin-right:299px;clear:none}#plugin-information #section-description h2,#plugin-information #section-description h3,#plugin-information #section-description p,#plugin-information #section-description b,#plugin-information #section-description i,#plugin-information #section-description blockquote,#plugin-information #section-description li,#plugin-information #section-description ul,#plugin-information #section-description ol{clear:none}#plugin-information #section-description iframe{max-width:100%}#plugin-information #section-description .fs-selling-points{padding-bottom:10px;border-bottom:1px solid #ddd}#plugin-information #section-description .fs-selling-points ul{margin:0}#plugin-information #section-description .fs-selling-points ul li{padding:0;list-style:none outside none}#plugin-information #section-description .fs-selling-points ul li i.dashicons{color:#71ae00;font-size:3em;vertical-align:middle;line-height:30px;float:left;margin:0 0 0 -15px}#plugin-information #section-description .fs-selling-points ul li h3{margin:1em 30px !important}#plugin-information #section-description .fs-screenshots:after{content:"";display:table;clear:both}#plugin-information #section-description .fs-screenshots ul{list-style:none;margin:0}#plugin-information #section-description .fs-screenshots ul li{width:225px;height:225px;float:left;margin-bottom:20px;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}#plugin-information #section-description .fs-screenshots ul li a{display:block;width:100%;height:100%;border:1px solid;-moz-box-shadow:1px 1px 1px rgba(0,0,0,.2);-webkit-box-shadow:1px 1px 1px rgba(0,0,0,.2);box-shadow:1px 1px 1px rgba(0,0,0,.2);background-size:cover}#plugin-information #section-description .fs-screenshots ul li.odd{margin-right:20px}#plugin-information .plugin-information-pricing{margin:-16px;border-bottom:1px solid #ddd}#plugin-information .plugin-information-pricing .fs-plan h3{margin-top:0;padding:20px;font-size:16px}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper{border-bottom:1px solid #ddd}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper .nav-tab{cursor:pointer;position:relative;padding:0 10px;font-size:.9em}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper .nav-tab label{text-transform:uppercase;color:green;background:#adff2f;position:absolute;left:-1px;right:-1px;bottom:100%;border:1px solid #006400;padding:2px;text-align:center;font-size:.9em;line-height:1em}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper .nav-tab.nav-tab-active{cursor:default;background:#fffeec;border-bottom-color:#fffeec}#plugin-information .plugin-information-pricing .fs-plan.fs-single-cycle h3{background:#fffeec;margin:0;padding-bottom:0;color:#0073aa}#plugin-information .plugin-information-pricing .fs-plan.fs-single-cycle .nav-tab-wrapper,#plugin-information .plugin-information-pricing .fs-plan.fs-single-cycle .fs-billing-frequency{display:none}#plugin-information .plugin-information-pricing .fs-plan .fs-pricing-body{background:#fffeec;padding:20px}#plugin-information .plugin-information-pricing .fs-plan .button{width:100%;text-align:center;font-weight:bold;text-transform:uppercase;font-size:1.1em}#plugin-information .plugin-information-pricing .fs-plan label{white-space:nowrap}#plugin-information .plugin-information-pricing .fs-plan var{font-style:normal}#plugin-information .plugin-information-pricing .fs-plan .fs-billing-frequency,#plugin-information .plugin-information-pricing .fs-plan .fs-annual-discount{text-align:center;display:block;font-weight:bold;margin-bottom:10px;text-transform:uppercase;background:#f3f3f3;padding:2px;border:1px solid #ccc}#plugin-information .plugin-information-pricing .fs-plan .fs-annual-discount{text-transform:none;color:green;background:#adff2f}#plugin-information .plugin-information-pricing .fs-plan ul.fs-trial-terms{font-size:.9em}#plugin-information .plugin-information-pricing .fs-plan ul.fs-trial-terms i{float:left;margin:0 0 0 -15px}#plugin-information .plugin-information-pricing .fs-plan ul.fs-trial-terms li{margin:10px 0 0 0}#plugin-information #section-features .fs-features{margin:-20px -26px}#plugin-information #section-features table{width:100%;border-spacing:0;border-collapse:separate}#plugin-information #section-features table thead th{padding:10px 0}#plugin-information #section-features table thead .fs-price{color:#71ae00;font-weight:normal;display:block;text-align:center}#plugin-information #section-features table tbody td{border-top:1px solid #ccc;padding:10px 0;text-align:center;width:100px;color:#71ae00}#plugin-information #section-features table tbody td:first-child{text-align:left;width:auto;color:inherit;padding-left:26px}#plugin-information #section-features table tbody tr.fs-odd td{background:#fefefe}#plugin-information #section-features .dashicons-yes{width:30px;height:30px;font-size:30px}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .button-group .button,#plugin-information .fs-dropdown .button-group .button{position:relative;width:auto;top:0;right:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .button-group .button:focus,#plugin-information .fs-dropdown .button-group .button:focus{z-index:10}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .button-group .fs-dropdown-arrow,#plugin-information .fs-dropdown .button-group .fs-dropdown-arrow{border-top:6px solid #fff;border-right:4px solid rgba(0,0,0,0);border-left:4px solid rgba(0,0,0,0);top:12px;position:relative}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown.active:not(.up) .button:not(.fs-dropdown-arrow-button),#plugin-information .fs-dropdown.active:not(.up) .button:not(.fs-dropdown-arrow-button){border-bottom-left-radius:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown.active:not(.up) .fs-dropdown-arrow-button,#plugin-information .fs-dropdown.active:not(.up) .fs-dropdown-arrow-button{border-bottom-right-radius:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown.active.up .button:not(.fs-dropdown-arrow-button),#plugin-information .fs-dropdown.active.up .button:not(.fs-dropdown-arrow-button){border-top-left-radius:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown.active.up .fs-dropdown-arrow-button,#plugin-information .fs-dropdown.active.up .fs-dropdown-arrow-button{border-top-right-radius:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .fs-dropdown-list,#plugin-information .fs-dropdown .fs-dropdown-list{position:absolute;right:-1px;top:100%;margin-left:auto;padding:3px 0;border:1px solid #bfbfbf;background-color:#fff;z-index:1;width:230px;text-align:left;-moz-box-shadow:0px 2px 4px -1px rgba(0,0,0,.2),0px 4px 5px 0px rgba(0,0,0,.14),0px 1px 10px 0px rgba(0,0,0,.12);-webkit-box-shadow:0px 2px 4px -1px rgba(0,0,0,.2),0px 4px 5px 0px rgba(0,0,0,.14),0px 1px 10px 0px rgba(0,0,0,.12);box-shadow:0px 2px 4px -1px rgba(0,0,0,.2),0px 4px 5px 0px rgba(0,0,0,.14),0px 1px 10px 0px rgba(0,0,0,.12)}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .fs-dropdown-list li,#plugin-information .fs-dropdown .fs-dropdown-list li{margin:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .fs-dropdown-list li a,#plugin-information .fs-dropdown .fs-dropdown-list li a{display:block;padding:5px 10px;text-decoration:none;text-shadow:none}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .fs-dropdown-list li:hover,#plugin-information .fs-dropdown .fs-dropdown-list li:hover{background-color:#0074a3;color:#fff}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .fs-dropdown-list li:hover a,#plugin-information .fs-dropdown .fs-dropdown-list li:hover a{color:#fff}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown:not(.up) .fs-dropdown-list,#plugin-information .fs-dropdown:not(.up) .fs-dropdown-list{-moz-border-radius:3px 0 3px 3px;-webkit-border-radius:3px 0 3px 3px;border-radius:3px 0 3px 3px}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown.up .fs-dropdown-list,#plugin-information .fs-dropdown.up .fs-dropdown-list{-moz-border-radius:3px 3px 0 3px;-webkit-border-radius:3px 3px 0 3px;border-radius:3px 3px 0 3px}#plugin-information .fs-dropdown .button-group{width:100%}#plugin-information .fs-dropdown .button-group .button{float:none;font-size:14px;font-weight:normal;text-transform:none}#plugin-information .fs-dropdown .fs-dropdown-list{margin-top:1px}#plugin-information .fs-dropdown.up .fs-dropdown-list{top:auto;bottom:100%;margin-bottom:2px}#plugin-information.wp-core-ui .fs-pricing-body .fs-dropdown .button-group{text-align:center;display:table}#plugin-information.wp-core-ui .fs-pricing-body .fs-dropdown .button-group .button{display:table-cell}#plugin-information.wp-core-ui .fs-pricing-body .fs-dropdown .button-group .button:not(.fs-dropdown-arrow-button){left:1px;width:100%}#plugin-information-footer>.button,#plugin-information-footer .fs-dropdown{position:relative;top:3px}#plugin-information-footer>.button.left,#plugin-information-footer .fs-dropdown.left{float:left}#plugin-information-footer>.right,#plugin-information-footer .fs-dropdown{float:right}@media screen and (max-width: 961px){#fs_addons .fs-cards-list .fs-card{height:265px}}/*# sourceMappingURL=add-ons.css.map */ diff --git a/assets/css/admin/add-ons.css.map b/assets/css/admin/add-ons.css.map index d50098e0..d3165811 100644 --- a/assets/css/admin/add-ons.css.map +++ b/assets/css/admin/add-ons.css.map @@ -1 +1 @@ -{"version":3,"sourceRoot":"","sources":["../../scss/admin/_badge.scss","../../scss/_colors.scss","../../scss/_mixins.scss","../../scss/admin/add-ons.scss"],"names":[],"mappings":"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","file":"add-ons.css"} \ No newline at end of file +{"version":3,"sourceRoot":"","sources":["../../scss/admin/_badge.scss","../../scss/_colors.scss","../../scss/_mixins.scss","../../scss/admin/add-ons.scss"],"names":[],"mappings":"AAAA,UAEI,kBACA,SACA,QACA,WCckB,QDblB,WACA,yBACA,iBEuCC,mBFtCD,YEuCF,sBFvCE,YEwCM,cFxCN,YACA,iBACA,eE6CC,gBF5CD,8BE6CF,mBF7CE,8BE8CM,WF9CN,8BGPA,0BAEI,gBAEA,mCAEI,WAEA,aACA,YACA,UACA,qBACA,eACA,gBACA,sBACA,eACA,kBAEA,+CAEI,kBACA,OACA,QACA,SACA,MACA,UAGJ,6CAEI,sBACA,gBACA,YACA,kBAEA,gDDsIX,gBCpIe,SDqIb,cCrIa,SDsId,eCtIc,SDuIlB,mBCvIkB,SDwIV,WCxIU,SACA,OACA,QACA,MACA,kBAEA,mDAEI,gBACA,iBACA,eACA,WACA,cDoBnB,gBCnBuC,WDoB1C,mBCpB0C,WDqBlC,WCrBkC,WAI5B,6DAEI,UACA,SACA,cACA,cACA,aACA,2BACA,0BD2Gf,gBC1Ge,SD2Gb,cC3Ga,SD4Gd,eC5Gc,SD6GlB,mBC7GkB,SD8GV,WC9GU,SAEA,gGACI,iBACA,kBAIR,uDAEI,kBACA,YACA,gBACA,WACA,mBACA,uBACA,iBAGJ,uDAEI,eAGJ,6DAEI,yBACA,6BACA,0BACA,kBACA,WAGJ,qDAEI,kBACA,SACA,UACA,mBACA,cACA,iBDpDf,gBCqDe,2BDpDlB,mBCoDkB,2BDnDV,WCmDU,2BACA,yBACA,eACA,iBAKA,gIAEI,kBACA,UACA,WAKZ,qCAGQ,qDAEI,yBACA,iBACA,gBAKA,sDAEI,WAQJ,0HAGI,MFnJX,SE8Jb,6BAEI,uBAMJ,yBACI,uBAGJ,oCACI,mBACA,WAKA,iZAEI,WAGJ,gDAEI,eAGJ,4DAEI,oBACA,6BAEA,+DAEI,SAEA,kEAEI,UACA,6BAEA,8EAEI,MF5LF,QE6LE,cACA,sBACA,iBACA,WACA,mBAGJ,qEAEI,2BDoCpB,+DACI,WACA,cACA,WC9BI,4DAEI,gBACA,SAEA,+DAEI,YACA,aACA,WACA,mBDlKf,gBCmKmC,YDlKtC,mBCkKsC,YDjK9B,WCiK8B,YAEpB,iEAEI,cACA,WACA,YACA,iBD5LnB,gBC6LmB,2BD5LtB,mBC4LsB,2BD3Ld,WC2Lc,2BACA,sBAGJ,mEAEI,kBAOpB,gDAII,aAEA,6BAKI,4DAEI,aACA,aACA,eAGJ,0EAEI,6BAEA,mFAEI,eACA,kBACA,eACA,eAEA,yFAEI,yBACA,YACA,mBACA,kBACA,UACA,WACA,YACA,yBACA,YACA,kBACA,eACA,gBAGJ,kGAEI,eACA,WA9CA,QA+CA,oBA/CA,QAsDR,4EAEI,WAxDI,QAyDJ,SACA,iBACA,cAGJ,yLAGI,aAIR,0EAEI,WAvEQ,QAwER,aAGJ,iEAEI,WACA,kBACA,iBACA,yBACA,gBAGJ,+DAEI,mBAGJ,6DACI,kBAGJ,4JAGI,kBACA,cACA,iBACA,mBACA,yBACA,mBACA,YACA,sBAGJ,6EAEI,oBACA,YACA,mBAGJ,2EAEI,eAEA,6EAEI,WACA,mBAGJ,8EAEI,kBAQZ,mDAEI,mBAGJ,4CAEI,WACA,iBACA,yBAII,qDAEI,eAGJ,4DAEI,MF1YE,QE2YF,mBACA,cACA,kBAMJ,qDAEI,0BACA,eACA,kBACA,YACA,MFzZE,QE2ZF,iEAEI,gBACA,WACA,cACA,kBAKJ,+DAEI,mBAMhB,qDAEI,WACA,YACA,eAQN,uIACE,kBACA,WACA,MACA,QAEA,mJACE,WAIJ,6JACE,0BACA,qCACA,oCACA,SACA,kBAKF,yMACE,4BAGF,+KACE,6BAKF,6LACE,yBAGF,mKACE,0BAIJ,+HACE,kBACA,WACA,SACA,iBACA,cACA,yBACA,sBACA,UACA,YACA,gBDtcD,gBCucC,iGDtcJ,mBCscI,iGDrcI,WCqcJ,iGAEA,qIACE,SAEA,yIACE,cACA,iBACA,qBACA,iBAGF,iJACE,iBF/dU,QEgeV,WAEA,qJACE,WAON,iJDxeD,mBCyeG,cDxeN,sBCweM,cDveE,cCueF,cAKF,qID9eD,mBC+eG,cD9eN,sBC8eM,cD7eE,cC6eF,cAMJ,+CACE,WAEA,uDACE,WACA,eACA,mBACA,oBAIJ,mDACE,eAIA,sDACE,SACA,YACA,kBAMR,2EACE,kBAEA,cAEA,mFACE,mBAEA,kHACE,SACA,WAMJ,2EACE,kBACA,QAEA,qFACE,WAIJ,0EACE,YAIJ,qCAKY,mCAEI","file":"add-ons.css"} \ No newline at end of file diff --git a/assets/css/admin/affiliation.css b/assets/css/admin/affiliation.css index aae31ede..8b2aabb5 100644 --- a/assets/css/admin/affiliation.css +++ b/assets/css/admin/affiliation.css @@ -1 +1 @@ -#fs_affiliation_content_wrapper #messages{margin-top:25px}#fs_affiliation_content_wrapper h3{font-size:24px;padding:0;margin-left:0}#fs_affiliation_content_wrapper ul li{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;list-style-type:none}#fs_affiliation_content_wrapper ul li:before{content:"✓";margin-right:10px;font-weight:bold}#fs_affiliation_content_wrapper p:not(.description),#fs_affiliation_content_wrapper li,#fs_affiliation_content_wrapper label{font-size:16px !important;line-height:26px !important}#fs_affiliation_content_wrapper .button{margin-top:20px;margin-bottom:7px;line-height:35px;height:40px;font-size:16px}#fs_affiliation_content_wrapper .button#cancel_button{margin-right:5px}#fs_affiliation_content_wrapper form .input-container{margin-bottom:15px}#fs_affiliation_content_wrapper form .input-container .input-label{font-weight:bold;display:block;width:100%}#fs_affiliation_content_wrapper form .input-container.input-container-text label,#fs_affiliation_content_wrapper form .input-container.input-container-text input,#fs_affiliation_content_wrapper form .input-container.input-container-text textarea{display:block}#fs_affiliation_content_wrapper form .input-container #add_domain,#fs_affiliation_content_wrapper form .input-container .remove-domain{text-decoration:none;display:inline-block;margin-top:3px}#fs_affiliation_content_wrapper form .input-container #add_domain:focus,#fs_affiliation_content_wrapper form .input-container .remove-domain:focus{box-shadow:none}#fs_affiliation_content_wrapper form .input-container #add_domain.disabled,#fs_affiliation_content_wrapper form .input-container .remove-domain.disabled{color:#aaa;cursor:default}#fs_affiliation_content_wrapper form #extra_domains_container .description{margin-top:0;position:relative;top:-4px}#fs_affiliation_content_wrapper form #extra_domains_container .extra-domain-input-container{margin-bottom:15px}#fs_affiliation_content_wrapper form #extra_domains_container .extra-domain-input-container .domain{display:inline-block;margin-right:5px}#fs_affiliation_content_wrapper form #extra_domains_container .extra-domain-input-container .domain:last-of-type{margin-bottom:0} +#fs_affiliation_content_wrapper #messages{margin-top:25px}#fs_affiliation_content_wrapper h3{font-size:24px;padding:0;margin-left:0}#fs_affiliation_content_wrapper ul li{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;list-style-type:none}#fs_affiliation_content_wrapper ul li:before{content:"✓";margin-right:10px;font-weight:bold}#fs_affiliation_content_wrapper p:not(.description),#fs_affiliation_content_wrapper li,#fs_affiliation_content_wrapper label{font-size:16px !important;line-height:26px !important}#fs_affiliation_content_wrapper .button{margin-top:20px;margin-bottom:7px;line-height:35px;height:40px;font-size:16px}#fs_affiliation_content_wrapper .button#cancel_button{margin-right:5px}#fs_affiliation_content_wrapper form .input-container{margin-bottom:15px}#fs_affiliation_content_wrapper form .input-container .input-label{font-weight:bold;display:block;width:100%}#fs_affiliation_content_wrapper form .input-container.input-container-text label,#fs_affiliation_content_wrapper form .input-container.input-container-text input,#fs_affiliation_content_wrapper form .input-container.input-container-text textarea{display:block}#fs_affiliation_content_wrapper form .input-container #add_domain,#fs_affiliation_content_wrapper form .input-container .remove-domain{text-decoration:none;display:inline-block;margin-top:3px}#fs_affiliation_content_wrapper form .input-container #add_domain:focus,#fs_affiliation_content_wrapper form .input-container .remove-domain:focus{box-shadow:none}#fs_affiliation_content_wrapper form .input-container #add_domain.disabled,#fs_affiliation_content_wrapper form .input-container .remove-domain.disabled{color:#aaa;cursor:default}#fs_affiliation_content_wrapper form #extra_domains_container .description{margin-top:0;position:relative;top:-4px}#fs_affiliation_content_wrapper form #extra_domains_container .extra-domain-input-container{margin-bottom:15px}#fs_affiliation_content_wrapper form #extra_domains_container .extra-domain-input-container .domain{display:inline-block;margin-right:5px}#fs_affiliation_content_wrapper form #extra_domains_container .extra-domain-input-container .domain:last-of-type{margin-bottom:0}/*# sourceMappingURL=affiliation.css.map */ diff --git a/assets/css/admin/checkout.css b/assets/css/admin/checkout.css index 56515d27..1f187e66 100644 --- a/assets/css/admin/checkout.css +++ b/assets/css/admin/checkout.css @@ -1 +1 @@ -@media screen and (max-width: 782px){#wpbody-content{padding-bottom:0 !important}} +@media screen and (max-width: 782px){#wpbody-content{padding-bottom:0 !important}}/*# sourceMappingURL=checkout.css.map */ diff --git a/assets/css/admin/clone-resolution.css b/assets/css/admin/clone-resolution.css index 8f483262..608c6e42 100644 --- a/assets/css/admin/clone-resolution.css +++ b/assets/css/admin/clone-resolution.css @@ -1 +1 @@ -.fs-notice[data-id^=clone_resolution_options_notice]{padding:0;color:inherit !important}.fs-notice[data-id^=clone_resolution_options_notice] .fs-notice-body{padding:0;margin-bottom:0}.fs-notice[data-id^=clone_resolution_options_notice] .fs-notice-header{padding:5px 10px}.fs-notice[data-id^=clone_resolution_options_notice] ol{margin-top:0;margin-bottom:0}.fs-notice[data-id^=clone_resolution_options_notice] .fs-clone-resolution-options-container{display:flex;flex-direction:row;padding:0 10px 10px}@media(max-width: 750px){.fs-notice[data-id^=clone_resolution_options_notice] .fs-clone-resolution-options-container{flex-direction:column}}.fs-notice[data-id^=clone_resolution_options_notice] .fs-clone-resolution-option{border:1px solid #ccc;padding:10px 10px 15px 10px;flex:auto;margin:5px}.fs-notice[data-id^=clone_resolution_options_notice] .fs-clone-resolution-option:first-child{margin-left:0}.fs-notice[data-id^=clone_resolution_options_notice] .fs-clone-resolution-option:last-child{margin-right:0}.fs-notice[data-id^=clone_resolution_options_notice] .fs-clone-resolution-option strong{font-size:1.2em;padding:2px;line-height:1.5em}.fs-notice[data-id^=clone_resolution_options_notice] a{text-decoration:none}.fs-notice[data-id^=clone_resolution_options_notice] .button{margin-right:10px}.rtl .fs-notice[data-id^=clone_resolution_options_notice] .button{margin-right:0;margin-left:10px}.fs-notice[data-id^=clone_resolution_options_notice] .fs-clone-documentation-container{padding:0 10px 15px}.fs-notice[data-id=temporary_duplicate_notice] #fs_clone_resolution_error_message{border:1px solid #d3135a;background:#fee;color:#d3135a;padding:10px}.fs-notice[data-id=temporary_duplicate_notice] ol{margin-top:0} +.fs-notice[data-id^=clone_resolution_options_notice]{padding:0;color:inherit !important}.fs-notice[data-id^=clone_resolution_options_notice] .fs-notice-body{padding:0;margin-bottom:0}.fs-notice[data-id^=clone_resolution_options_notice] .fs-notice-header{padding:5px 10px}.fs-notice[data-id^=clone_resolution_options_notice] ol{margin-top:0;margin-bottom:0}.fs-notice[data-id^=clone_resolution_options_notice] .fs-clone-resolution-options-container{display:flex;flex-direction:row;padding:0 10px 10px}@media(max-width: 750px){.fs-notice[data-id^=clone_resolution_options_notice] .fs-clone-resolution-options-container{flex-direction:column}}.fs-notice[data-id^=clone_resolution_options_notice] .fs-clone-resolution-option{border:1px solid #ccc;padding:10px 10px 15px 10px;flex:auto;margin:5px}.fs-notice[data-id^=clone_resolution_options_notice] .fs-clone-resolution-option:first-child{margin-left:0}.fs-notice[data-id^=clone_resolution_options_notice] .fs-clone-resolution-option:last-child{margin-right:0}.fs-notice[data-id^=clone_resolution_options_notice] .fs-clone-resolution-option strong{font-size:1.2em;padding:2px;line-height:1.5em}.fs-notice[data-id^=clone_resolution_options_notice] a{text-decoration:none}.fs-notice[data-id^=clone_resolution_options_notice] .button{margin-right:10px}.rtl .fs-notice[data-id^=clone_resolution_options_notice] .button{margin-right:0;margin-left:10px}.fs-notice[data-id^=clone_resolution_options_notice] .fs-clone-documentation-container{padding:0 10px 15px}.fs-notice[data-id=temporary_duplicate_notice] #fs_clone_resolution_error_message{border:1px solid #d3135a;background:#fee;color:#d3135a;padding:10px}.fs-notice[data-id=temporary_duplicate_notice] ol{margin-top:0}.fs-notice[data-id=temporary_duplicate_notice] a{position:relative}.fs-notice[data-id=temporary_duplicate_notice] a:focus{box-shadow:none}.fs-notice[data-id=temporary_duplicate_notice] a.disabled{color:gray}.fs-notice[data-id=temporary_duplicate_notice] a .fs-ajax-spinner{position:absolute;left:8px;right:0;top:-1px;bottom:0;margin-left:100%}/*# sourceMappingURL=clone-resolution.css.map */ diff --git a/assets/css/admin/clone-resolution.css.map b/assets/css/admin/clone-resolution.css.map index c4d83206..f424a223 100644 --- a/assets/css/admin/clone-resolution.css.map +++ b/assets/css/admin/clone-resolution.css.map @@ -1 +1 @@ -{"version":3,"sourceRoot":"","sources":["../../scss/admin/clone-resolution.scss","../../scss/_colors.scss"],"names":[],"mappings":"AAEA,qDACI,UACA,yBAEA,qEACI,UACA,gBAGJ,uEACI,iBAGJ,wDACI,aACA,gBAGJ,4FACI,aACA,mBACA,oBAEA,yBALJ,4FAMQ,uBAIR,iFACI,sBACA,4BACA,UACA,WAEA,6FACI,cAGJ,4FACI,eAGJ,wFACI,gBACA,YACA,kBAIR,uDACI,qBAGJ,6DACI,kBAEA,kEACI,eACA,iBAIR,uFACI,oBAKJ,kFACI,yBACA,gBACA,MCrDgB,QDsDhB,aAGJ,kDACI","file":"clone-resolution.css"} \ No newline at end of file +{"version":3,"sourceRoot":"","sources":["../../scss/admin/clone-resolution.scss","../../scss/_colors.scss"],"names":[],"mappings":"AAEA,qDACI,UACA,yBAEA,qEACI,UACA,gBAGJ,uEACI,iBAGJ,wDACI,aACA,gBAGJ,4FACI,aACA,mBACA,oBAEA,yBALJ,4FAMQ,uBAIR,iFACI,sBACA,4BACA,UACA,WAEA,6FACI,cAGJ,4FACI,eAGJ,wFACI,gBACA,YACA,kBAIR,uDACI,qBAGJ,6DACI,kBAEA,kEACI,eACA,iBAIR,uFACI,oBAKJ,kFACI,yBACA,gBACA,MCrDgB,QDsDhB,aAGJ,kDACI,aAGJ,iDACI,kBAEA,uDACI,gBAGJ,0DACI,WAGJ,kEACI,kBACA,SACA,QACA,SACA,SACA","file":"clone-resolution.css"} \ No newline at end of file diff --git a/assets/css/admin/common.css b/assets/css/admin/common.css index 900103aa..4801111c 100644 --- a/assets/css/admin/common.css +++ b/assets/css/admin/common.css @@ -1 +1 @@ -.fs-badge{position:absolute;top:10px;right:0;background:#71ae00;color:#fff;text-transform:uppercase;padding:5px 10px;-moz-border-radius:3px 0 0 3px;-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;font-weight:bold;border-right:0;-moz-box-shadow:0 2px 1px -1px rgba(0,0,0,.3);-webkit-box-shadow:0 2px 1px -1px rgba(0,0,0,.3);box-shadow:0 2px 1px -1px rgba(0,0,0,.3)}.theme-browser .theme .fs-premium-theme-badge-container{position:absolute;right:0;top:0}.theme-browser .theme .fs-premium-theme-badge-container .fs-badge{position:relative;top:0;margin-top:10px;text-align:center}.theme-browser .theme .fs-premium-theme-badge-container .fs-badge.fs-premium-theme-badge{font-size:1.1em}.theme-browser .theme .fs-premium-theme-badge-container .fs-badge.fs-beta-theme-badge{background:#00a0d2}.fs-switch{position:relative;display:inline-block;color:#ccc;text-shadow:0 1px 1px rgba(255,255,255,.8);height:18px;padding:6px 6px 5px 6px;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);background:#ececec;box-shadow:0 0 4px rgba(0,0,0,.1),inset 0 1px 3px 0 rgba(0,0,0,.1);cursor:pointer}.fs-switch span{display:inline-block;width:35px;text-transform:uppercase}.fs-switch .fs-toggle{position:absolute;top:1px;width:37px;height:25px;border:1px solid #ccc;border:1px solid rgba(0,0,0,.3);border-radius:4px;background:#fff;background-color:#fff;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #ececec), color-stop(1, #fff));background-image:-webkit-linear-gradient(top, #ececec, #fff);background-image:-moz-linear-gradient(top, #ececec, #fff);background-image:-ms-linear-gradient(top, #ececec, #fff);background-image:-o-linear-gradient(top, #ececec, #fff);background-image:linear-gradient(top, bottom, #ececec, #fff);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.5);z-index:999;-moz-transition:.4s cubic-bezier(0.54, 1.6, 0.5, 1);-o-transition:.4s cubic-bezier(0.54, 1.6, 0.5, 1);-ms-transition:.4s cubic-bezier(0.54, 1.6, 0.5, 1);-webkit-transition:.4s cubic-bezier(0.54, 1.6, 0.5, 1);transition:.4s cubic-bezier(0.54, 1.6, 0.5, 1)}.fs-switch.fs-off .fs-toggle{left:2%}.fs-switch.fs-on .fs-toggle{left:54%}.fs-switch.fs-round{top:8px;padding:4px 25px;-moz-border-radius:24px;-webkit-border-radius:24px;border-radius:24px}.fs-switch.fs-round .fs-toggle{top:0;width:24px;height:24px;-moz-border-radius:24px;-webkit-border-radius:24px;border-radius:24px}.fs-switch.fs-round.fs-off .fs-toggle{left:-1px}.fs-switch.fs-round.fs-on{background:#0085ba}.fs-switch.fs-round.fs-on .fs-toggle{left:25px}.fs-switch.fs-small.fs-round{padding:1px 19px}.fs-switch.fs-small.fs-round .fs-toggle{top:0;width:18px;height:18px;-moz-border-radius:18px;-webkit-border-radius:18px;border-radius:18px}.fs-switch.fs-small.fs-round.fs-on .fs-toggle{left:19px}body.fs-loading,body.fs-loading *{cursor:wait !important}#fs_frame{line-height:0;font-size:0}.fs-full-size-wrapper{margin:40px 0 -65px -20px}@media(max-width: 600px){.fs-full-size-wrapper{margin:0 0 -65px -10px}}.fs-notice{position:relative}.fs-notice.fs-has-title{margin-bottom:30px !important}.fs-notice.success{color:green}.fs-notice.promotion{border-color:#00a0d2 !important;background-color:#f2fcff !important}.fs-notice .fs-notice-body{margin:.5em 0;padding:2px}.fs-notice .fs-close{cursor:pointer;color:#aaa;float:right}.fs-notice .fs-close:hover{color:#666}.fs-notice .fs-close>*{margin-top:7px;display:inline-block}.fs-notice label.fs-plugin-title{background:rgba(0,0,0,.3);color:#fff;padding:2px 10px;position:absolute;top:100%;bottom:auto;right:auto;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px;left:10px;font-size:12px;font-weight:bold;cursor:auto}div.fs-notice.updated,div.fs-notice.success,div.fs-notice.promotion{display:block !important}#fs_connect .fs-error ol,#fs_connect .fs-error .fs-api-request-error-show-details-link,#fs_connect .fs-error .fs-api-request-error-details,.fs-modal .notice-error ol,.fs-modal .notice-error .fs-api-request-error-show-details-link,.fs-modal .notice-error .fs-api-request-error-details,.fs-notice.error ol,.fs-notice.error .fs-api-request-error-show-details-link,.fs-notice.error .fs-api-request-error-details{text-align:left}#fs_connect .fs-error ol,.fs-modal .notice-error ol,.fs-notice.error ol{list-style-type:disc}#fs_connect .fs-error .fs-api-request-error-show-details-link,.fs-modal .notice-error .fs-api-request-error-show-details-link,.fs-notice.error .fs-api-request-error-show-details-link{text-decoration:none;color:#2271b1;box-shadow:none}#fs_connect .fs-error .fs-api-request-error-details,.fs-modal .notice-error .fs-api-request-error-details,.fs-notice.error .fs-api-request-error-details{border:1px solid #ccc;padding:5px;overflow:auto;max-height:150px}.rtl .fs-notice .fs-close{float:left}.fs-secure-notice{position:fixed;top:32px;left:160px;right:0;background:#ebfdeb;padding:10px 20px;color:green;z-index:9999;-moz-box-shadow:0 2px 2px rgba(6,113,6,.3);-webkit-box-shadow:0 2px 2px rgba(6,113,6,.3);box-shadow:0 2px 2px rgba(6,113,6,.3);opacity:.95;filter:alpha(opacity=95)}.fs-secure-notice:hover{opacity:1;filter:alpha(opacity=100)}.fs-secure-notice a.fs-security-proof{color:green;text-decoration:none}@media screen and (max-width: 960px){.fs-secure-notice{left:36px}}@media screen and (max-width: 600px){.fs-secure-notice{display:none}}@media screen and (max-width: 1250px){#fs_promo_tab{display:none}}@media screen and (max-width: 782px){.fs-secure-notice{left:0;top:46px;text-align:center}}span.fs-submenu-item.fs-sub:before{content:"↳";padding:0 5px}.rtl span.fs-submenu-item.fs-sub:before{content:"↲"}.fs-submenu-item.pricing.upgrade-mode{color:#adff2f}.fs-submenu-item.pricing.trial-mode{color:#83e2ff}#adminmenu .update-plugins.fs-trial{background-color:#00b9eb}.fs-ajax-spinner{border:0;width:20px;height:20px;margin-right:5px;vertical-align:sub;display:inline-block;background:url("/wp-admin/images/wpspin_light-2x.gif");background-size:contain;margin-bottom:-2px}.wrap.fs-section h2{text-align:left}.plugins p.fs-upgrade-notice{border:0;background-color:#d54e21;padding:10px;color:#f9f9f9;margin-top:10px} +.fs-badge{position:absolute;top:10px;right:0;background:#71ae00;color:#fff;text-transform:uppercase;padding:5px 10px;-moz-border-radius:3px 0 0 3px;-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;font-weight:bold;border-right:0;-moz-box-shadow:0 2px 1px -1px rgba(0,0,0,.3);-webkit-box-shadow:0 2px 1px -1px rgba(0,0,0,.3);box-shadow:0 2px 1px -1px rgba(0,0,0,.3)}.theme-browser .theme .fs-premium-theme-badge-container{position:absolute;right:0;top:0}.theme-browser .theme .fs-premium-theme-badge-container .fs-badge{position:relative;top:0;margin-top:10px;text-align:center}.theme-browser .theme .fs-premium-theme-badge-container .fs-badge.fs-premium-theme-badge{font-size:1.1em}.theme-browser .theme .fs-premium-theme-badge-container .fs-badge.fs-beta-theme-badge{background:#00a0d2}.fs-switch{position:relative;display:inline-block;color:#ccc;text-shadow:0 1px 1px rgba(255,255,255,.8);height:18px;padding:6px 6px 5px 6px;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);background:#ececec;box-shadow:0 0 4px rgba(0,0,0,.1),inset 0 1px 3px 0 rgba(0,0,0,.1);cursor:pointer}.fs-switch span{display:inline-block;width:35px;text-transform:uppercase}.fs-switch .fs-toggle{position:absolute;top:1px;width:37px;height:25px;border:1px solid #ccc;border:1px solid rgba(0,0,0,.3);border-radius:4px;background:#fff;background-color:#fff;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #ececec), color-stop(1, #fff));background-image:-webkit-linear-gradient(top, #ececec, #fff);background-image:-moz-linear-gradient(top, #ececec, #fff);background-image:-ms-linear-gradient(top, #ececec, #fff);background-image:-o-linear-gradient(top, #ececec, #fff);background-image:linear-gradient(top, bottom, #ececec, #fff);box-shadow:inset 0 1px 0 0 rgba(255,255,255,.5);z-index:999;-moz-transition:.4s cubic-bezier(0.54, 1.6, 0.5, 1);-o-transition:.4s cubic-bezier(0.54, 1.6, 0.5, 1);-ms-transition:.4s cubic-bezier(0.54, 1.6, 0.5, 1);-webkit-transition:.4s cubic-bezier(0.54, 1.6, 0.5, 1);transition:.4s cubic-bezier(0.54, 1.6, 0.5, 1)}.fs-switch.fs-off .fs-toggle{left:2%}.fs-switch.fs-on .fs-toggle{left:54%}.fs-switch.fs-round{top:8px;padding:4px 25px;-moz-border-radius:24px;-webkit-border-radius:24px;border-radius:24px}.fs-switch.fs-round .fs-toggle{top:0;width:24px;height:24px;-moz-border-radius:24px;-webkit-border-radius:24px;border-radius:24px}.fs-switch.fs-round.fs-off .fs-toggle{left:-1px}.fs-switch.fs-round.fs-on{background:#0085ba}.fs-switch.fs-round.fs-on .fs-toggle{left:25px}.fs-switch.fs-small.fs-round{padding:1px 19px}.fs-switch.fs-small.fs-round .fs-toggle{top:0;width:18px;height:18px;-moz-border-radius:18px;-webkit-border-radius:18px;border-radius:18px}.fs-switch.fs-small.fs-round.fs-on .fs-toggle{left:19px}body.fs-loading,body.fs-loading *{cursor:wait !important}#fs_frame{line-height:0;font-size:0}.fs-full-size-wrapper{margin:40px 0 -65px -20px}@media(max-width: 600px){.fs-full-size-wrapper{margin:0 0 -65px -10px}}.fs-notice{position:relative}.fs-notice.fs-has-title{margin-bottom:30px !important}.fs-notice.success{color:green}.fs-notice.promotion{border-color:#00a0d2 !important;background-color:#f2fcff !important}.fs-notice .fs-notice-body{margin:.5em 0;padding:2px}.fs-notice .fs-close{cursor:pointer;color:#aaa;float:right}.fs-notice .fs-close:hover{color:#666}.fs-notice .fs-close>*{margin-top:7px;display:inline-block}.fs-notice label.fs-plugin-title{background:rgba(0,0,0,.3);color:#fff;padding:2px 10px;position:absolute;top:100%;bottom:auto;right:auto;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px;left:10px;font-size:12px;font-weight:bold;cursor:auto}div.fs-notice.updated,div.fs-notice.success,div.fs-notice.promotion{display:block !important}#fs_connect .fs-error ol,#fs_connect .fs-error .fs-api-request-error-show-details-link,#fs_connect .fs-error .fs-api-request-error-details,.fs-modal .notice-error ol,.fs-modal .notice-error .fs-api-request-error-show-details-link,.fs-modal .notice-error .fs-api-request-error-details,.fs-notice.error ol,.fs-notice.error .fs-api-request-error-show-details-link,.fs-notice.error .fs-api-request-error-details{text-align:left}#fs_connect .fs-error ol,.fs-modal .notice-error ol,.fs-notice.error ol{list-style-type:disc}#fs_connect .fs-error .fs-api-request-error-show-details-link,.fs-modal .notice-error .fs-api-request-error-show-details-link,.fs-notice.error .fs-api-request-error-show-details-link{text-decoration:none;color:#2271b1;box-shadow:none}#fs_connect .fs-error .fs-api-request-error-details,.fs-modal .notice-error .fs-api-request-error-details,.fs-notice.error .fs-api-request-error-details{border:1px solid #ccc;padding:5px;overflow:auto;max-height:150px}.rtl .fs-notice .fs-close{float:left}.fs-secure-notice{position:fixed;top:32px;left:160px;right:0;background:#ebfdeb;padding:10px 20px;color:green;z-index:9999;-moz-box-shadow:0 2px 2px rgba(6,113,6,.3);-webkit-box-shadow:0 2px 2px rgba(6,113,6,.3);box-shadow:0 2px 2px rgba(6,113,6,.3);opacity:.95;filter:alpha(opacity=95)}.fs-secure-notice:hover{opacity:1;filter:alpha(opacity=100)}.fs-secure-notice a.fs-security-proof{color:green;text-decoration:none}@media screen and (max-width: 960px){.fs-secure-notice{left:36px}}@media screen and (max-width: 600px){.fs-secure-notice{display:none}}@media screen and (max-width: 1250px){#fs_promo_tab{display:none}}@media screen and (max-width: 782px){.fs-secure-notice{left:0;top:46px;text-align:center}}span.fs-submenu-item.fs-sub:before{content:"↳";padding:0 5px}.rtl span.fs-submenu-item.fs-sub:before{content:"↲"}.fs-submenu-item.pricing.upgrade-mode{color:#adff2f}.fs-submenu-item.pricing.trial-mode{color:#83e2ff}#adminmenu .update-plugins.fs-trial{background-color:#00b9eb}.fs-ajax-spinner{border:0;width:20px;height:20px;margin-right:5px;vertical-align:sub;display:inline-block;background:url("/wp-admin/images/wpspin_light-2x.gif");background-size:contain;margin-bottom:-2px}.wrap.fs-section h2{text-align:left}.plugins p.fs-upgrade-notice{border:0;background-color:#d54e21;padding:10px;color:#f9f9f9;margin-top:10px}/*# sourceMappingURL=common.css.map */ diff --git a/assets/css/admin/common.css.map b/assets/css/admin/common.css.map index c0bb4a6b..7a9ce61b 100644 --- a/assets/css/admin/common.css.map +++ b/assets/css/admin/common.css.map @@ -1 +1 @@ -{"version":3,"sourceRoot":"","sources":["../../scss/admin/_badge.scss","../../scss/_colors.scss","../../scss/_mixins.scss","../../scss/admin/_themes.scss","../../scss/admin/_switch.scss","../../scss/admin/common.scss","../../scss/admin/_plugin-upgrade-notice.scss"],"names":[],"mappings":"CAAA,UAEI,kBACA,SACA,QACA,WCckB,QDblB,WACA,yBACA,iBEuCC,mBFtCD,YEuCF,sBFvCE,YEwCM,cFxCN,YACA,iBACA,eE6CC,gBF5CD,8BE6CF,mBF7CE,8BE8CM,WF9CN,8BGNI,wDACI,kBACA,QACA,MAEA,kEACI,kBACA,MACA,gBACA,kBAEA,yFACI,gBAGJ,sFACI,mBClBpB,WAEI,kBACA,qBAGA,WACA,2CACA,YACA,wBACA,sBACA,gCAEA,mBACA,mEACA,eAEA,gBAEI,qBACA,WACA,yBAGJ,sBAEI,kBACA,QACA,WACA,YACA,sBACA,gCACA,kBACA,gBFoDS,iBEnDyB,KFqDxC,8GACA,6DACA,0DACA,yDACA,wDACA,6DEzDM,gDACA,YFsIH,gBErIG,oCFsID,cEtIC,oCFuIF,eEvIE,oCFwIN,mBExIM,oCFyIE,WEzIF,oCAGJ,6BAEI,QAEJ,4BAEI,SAIJ,oBAEI,QACA,iBFVH,mBEWG,KFVN,sBEUM,KFTE,cESF,KAEA,+BAEI,MACA,MA/DE,KAgEF,OAhEE,KF+CT,mBEkBO,KFjBV,sBEiBU,KFhBF,cEgBE,KAGJ,sCAEI,UAGJ,0BAEI,WHjByB,QGmBzB,qCAEI,UAOR,6BAEI,iBAEA,wCAEI,MACA,MA5FI,KA6FJ,OA7FI,KF8Cf,mBEgDW,KF/Cd,sBE+Cc,KF9CN,cE8CM,KAGJ,8CAEI,UC/FZ,kCACI,uBAIR,UAEI,cACA,YAGJ,sBAEI,0BAEA,yBAJJ,sBAKQ,wBAIR,WAEI,kBAEA,wBAEI,8BAGJ,mBAEI,YAIJ,qBAEI,gCACA,oCAGJ,2BAEI,cACA,YAGJ,qBASI,eACA,WACA,YAEA,2BAEI,WAIJ,uBAEI,eACA,qBAIR,iCAEI,0BACA,WACA,iBACA,kBACA,SACA,YACA,WHvCH,mBGwCG,YHvCN,sBGuCM,YHtCE,cGsCF,YACA,UACA,eACA,iBACA,YAMJ,oEAII,yBAMJ,0BAMI,WAIR,kBAEI,eACA,SACA,WACA,QACA,mBACA,kBACA,YACA,aHtEC,gBGuED,2BHtEF,mBGsEE,2BHrEM,WGqEN,2BHiHA,QGhHiB,IHkHjB,yBGhHA,wBH8GA,QG5GqB,EH8GrB,0BG3GA,sCAEI,YACA,qBAIR,qCACI,kBAEI,WAIR,qCACI,kBAEI,cAIR,sCACI,cAEI,cAIR,qCACI,kBAEI,OACA,SACA,mBAIR,mCAGI,YACA,cAKA,wCAGI,YAQA,sCAEI,cAGJ,oCAEI,cAKZ,oCAEI,yBAEJ,iBAEI,SACA,WACA,YACA,iBACA,mBACA,qBACA,uDACA,wBACA,mBAIA,oBACI,gBC/NR,6BAEI,SACA,yBACA,aACA,cACA","file":"common.css"} \ No newline at end of file +{"version":3,"sourceRoot":"","sources":["../../scss/admin/_badge.scss","../../scss/_colors.scss","../../scss/_mixins.scss","../../scss/admin/_themes.scss","../../scss/admin/_switch.scss","../../scss/admin/common.scss","../../scss/admin/_plugin-upgrade-notice.scss"],"names":[],"mappings":"CAAA,UAEI,kBACA,SACA,QACA,WCckB,QDblB,WACA,yBACA,iBEuCC,mBFtCD,YEuCF,sBFvCE,YEwCM,cFxCN,YACA,iBACA,eE6CC,gBF5CD,8BE6CF,mBF7CE,8BE8CM,WF9CN,8BGNI,wDACI,kBACA,QACA,MAEA,kEACI,kBACA,MACA,gBACA,kBAEA,yFACI,gBAGJ,sFACI,mBClBpB,WAEI,kBACA,qBAGA,WACA,2CACA,YACA,wBACA,sBACA,gCAEA,mBACA,mEACA,eAEA,gBAEI,qBACA,WACA,yBAGJ,sBAEI,kBACA,QACA,WACA,YACA,sBACA,gCACA,kBACA,gBFoDS,iBEnDyB,KFqDxC,8GACA,6DACA,0DACA,yDACA,wDACA,6DEzDM,gDACA,YFsIH,gBErIG,oCFsID,cEtIC,oCFuIF,eEvIE,oCFwIN,mBExIM,oCFyIE,WEzIF,oCAGJ,6BAEI,QAEJ,4BAEI,SAIJ,oBAEI,QACA,iBFVH,mBEWG,KFVN,sBEUM,KFTE,cESF,KAEA,+BAEI,MACA,MA/DE,KAgEF,OAhEE,KF+CT,mBEkBO,KFjBV,sBEiBU,KFhBF,cEgBE,KAGJ,sCAEI,UAGJ,0BAEI,WHjByB,QGmBzB,qCAEI,UAOR,6BAEI,iBAEA,wCAEI,MACA,MA5FI,KA6FJ,OA7FI,KF8Cf,mBEgDW,KF/Cd,sBE+Cc,KF9CN,cE8CM,KAGJ,8CAEI,UC/FZ,kCACI,uBAIR,UAEI,cACA,YAGJ,sBAEI,0BAEA,yBAJJ,sBAKQ,wBAIR,WAEI,kBAEA,wBAEI,8BAGJ,mBAEI,YAIJ,qBAEI,gCACA,oCAGJ,2BAEI,cACA,YAGJ,qBASI,eACA,WACA,YAEA,2BAEI,WAIJ,uBAEI,eACA,qBAIR,iCAEI,0BACA,WACA,iBACA,kBACA,SACA,YACA,WHvCH,mBGwCG,YHvCN,sBGuCM,YHtCE,cGsCF,YACA,UACA,eACA,iBACA,YAMJ,oEAII,yBAOJ,wZAGI,gBAGJ,wEACI,qBAGJ,uLACI,qBACA,cACA,gBAGJ,yJACI,sBACA,YACA,cACA,iBAMJ,0BAMI,WAIR,kBAEI,eACA,SACA,WACA,QACA,mBACA,kBACA,YACA,aHjGC,gBGkGD,2BHjGF,mBGiGE,2BHhGM,WGgGN,2BHsFA,QGrFiB,IHuFjB,yBGrFA,wBHmFA,QGjFqB,EHmFrB,0BGhFA,sCAEI,YACA,qBAIR,qCACI,kBAEI,WAIR,qCACI,kBAEI,cAIR,sCACI,cAEI,cAIR,qCACI,kBAEI,OACA,SACA,mBAIR,mCAGI,YACA,cAKA,wCAGI,YAQA,sCAEI,cAGJ,oCAEI,cAKZ,oCAEI,yBAEJ,iBAEI,SACA,WACA,YACA,iBACA,mBACA,qBACA,uDACA,wBACA,mBAIA,oBACI,gBC1PR,6BAEI,SACA,yBACA,aACA,cACA","file":"common.css"} \ No newline at end of file diff --git a/assets/css/admin/connect.css b/assets/css/admin/connect.css index 47a75d83..110013d4 100755 --- a/assets/css/admin/connect.css +++ b/assets/css/admin/connect.css @@ -1 +1 @@ -.fs-tooltip-trigger{position:relative}.fs-tooltip-trigger:not(a){cursor:help}.fs-tooltip-trigger .dashicons{float:none !important}.fs-tooltip-trigger .fs-tooltip{opacity:0;visibility:hidden;-moz-transition:opacity .3s ease-in-out;-o-transition:opacity .3s ease-in-out;-ms-transition:opacity .3s ease-in-out;-webkit-transition:opacity .3s ease-in-out;transition:opacity .3s ease-in-out;position:absolute;background:rgba(0,0,0,.8);color:#fff !important;font-family:"arial",serif;font-size:12px;padding:10px;z-index:999999;bottom:100%;margin-bottom:5px;left:-17px;right:0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;-moz-box-shadow:1px 1px 1px rgba(0,0,0,.2);-webkit-box-shadow:1px 1px 1px rgba(0,0,0,.2);box-shadow:1px 1px 1px rgba(0,0,0,.2);line-height:1.3em;font-weight:bold;text-align:left;text-transform:none !important}.rtl .fs-tooltip-trigger .fs-tooltip{text-align:right;left:auto;right:-17px}.fs-tooltip-trigger .fs-tooltip::after{content:" ";display:block;width:0;height:0;border-style:solid;border-width:5px 5px 0 5px;border-color:rgba(0,0,0,.8) transparent transparent transparent;position:absolute;top:100%;left:21px}.rtl .fs-tooltip-trigger .fs-tooltip::after{right:21px;left:auto}.fs-tooltip-trigger:hover .fs-tooltip{visibility:visible;opacity:1}#fs_connect{width:484px;margin:60px auto 20px auto}#fs_connect a{color:inherit}#fs_connect a:not(.button){text-decoration:underline}#fs_connect .fs-box-container{box-shadow:0 1px 2px rgba(0,0,0,.3);border-radius:3px;overflow:hidden;padding-top:40px;background:#f0f0f1}@media screen and (max-width: 483px){#fs_connect{width:auto;margin:30px 0 0 -10px}#fs_connect .fs-box-container{-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none}}#fs_connect .fs-content{background:#fff;padding:30px 20px}#fs_connect .fs-content .fs-error{background:snow;color:#d3135a;border:1px solid #d3135a;-moz-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1);text-align:center;padding:5px;margin-bottom:10px}#fs_connect .fs-content h2{line-height:1.5em}#fs_connect .fs-content p{margin:0;padding:0;font-size:1.2em}#fs_connect .fs-license-key-container{position:relative;width:280px;margin:10px auto 0 auto}#fs_connect .fs-license-key-container input{width:100%}#fs_connect .fs-license-key-container .dashicons{position:absolute;top:5px;right:5px}#fs_connect.require-license-key .fs-content{padding-bottom:10px}#fs_connect.require-license-key .fs-actions{border-top:none}#fs_connect.require-license-key .fs-sites-list-container td{cursor:pointer}#fs_connect #delegate_to_site_admins{margin-right:15px;float:right;height:26px;vertical-align:middle;line-height:37px;font-weight:bold;border-bottom:1px dashed;text-decoration:none}#fs_connect #delegate_to_site_admins.rtl{margin-left:15px;margin-right:0}#fs_connect .fs-actions{padding:10px 20px;background:#fff;border-width:1px 0;border-style:solid;border-color:#f1f1f1}#fs_connect .fs-actions .button{padding:0 10px 1px;line-height:35px;height:37px;font-size:16px;margin-bottom:0}#fs_connect .fs-actions .button .dashicons{font-size:37px;margin-left:-8px;margin-right:12px}#fs_connect .fs-actions .button.button-primary{padding-right:15px;padding-left:15px}#fs_connect .fs-actions .button.button-primary:after{content:" ➜"}#fs_connect .fs-actions .button.button-primary.fs-loading:after{content:""}#fs_connect .fs-actions .button.button-secondary{float:right}#fs_connect.fs-anonymous-disabled .fs-actions .button.button-primary{width:100%}#fs_connect .fs-permissions{padding:10px 20px;background:#fff;-moz-transition:background .5s ease;-o-transition:background .5s ease;-ms-transition:background .5s ease;-webkit-transition:background .5s ease;transition:background .5s ease}#fs_connect .fs-permissions .fs-license-sync-disclaimer{text-align:center;margin-top:0}#fs_connect .fs-permissions>.fs-trigger{font-size:.9em;text-decoration:none;text-align:center;display:block}#fs_connect .fs-permissions>.fs-trigger .fs-arrow::after{content:"→";width:20px;display:inline-block}#fs_connect .fs-permissions.fs-open>.fs-trigger .fs-arrow::after{content:"↓" !important}#fs_connect .fs-permissions ul li{padding-left:0;padding-right:0}@media screen and (max-width: 483px){#fs_connect .fs-permissions ul{height:auto;margin:20px}}#fs_connect .fs-freemium-licensing{padding:8px;background:#777;color:#fff}#fs_connect .fs-freemium-licensing p{text-align:center;display:block;margin:0;padding:0}#fs_connect .fs-freemium-licensing a{color:inherit;text-decoration:underline}#fs_connect .fs-header{padding:0;line-height:0;height:0;position:relative}#fs_connect .fs-header .fs-site-icon,#fs_connect .fs-header .fs-connect-logo{position:absolute;top:-8px;border-radius:50%}#fs_connect .fs-header .fs-site-icon{left:152px}#fs_connect .fs-header .fs-connect-logo{right:152px}#fs_connect .fs-header .fs-site-icon,#fs_connect .fs-header img,#fs_connect .fs-header object{width:50px;height:50px;border-radius:50%}#fs_connect .fs-header .fs-plugin-icon{position:absolute;overflow:hidden;top:-23px;left:50%;margin-left:-44px;border-radius:50%;z-index:1}#fs_connect .fs-header .fs-plugin-icon,#fs_connect .fs-header .fs-plugin-icon img{width:80px;height:80px}#fs_connect .fs-header .dashicons-wordpress-alt{font-size:40px;background:#01749a;color:#fff;width:40px;height:40px;padding:5px;border-radius:50%}#fs_connect .fs-header .dashicons-plus{position:absolute;top:50%;font-size:30px;margin-top:-10px;color:#bbb}#fs_connect .fs-header .dashicons-plus.fs-first{left:28%}#fs_connect .fs-header .dashicons-plus.fs-second{left:65%}#fs_connect .fs-header .fs-plugin-icon,#fs_connect .fs-header .fs-connect-logo,#fs_connect .fs-header .fs-site-icon{border:1px solid #efefef;padding:3px;background:#fff}#fs_connect .fs-terms{text-align:center;font-size:.85em;padding:10px 5px}#fs_connect .fs-terms,#fs_connect .fs-terms a{color:#999}#fs_connect .fs-terms a{text-decoration:none}.fs-multisite-options-container{margin-top:20px;border:1px solid #ccc;padding:5px}.fs-multisite-options-container a{text-decoration:none}.fs-multisite-options-container a:focus{box-shadow:none}.fs-multisite-options-container a.selected{font-weight:bold}.fs-multisite-options-container.fs-apply-on-all-sites{border:0 none;padding:0}.fs-multisite-options-container.fs-apply-on-all-sites .fs-all-sites-options{border-spacing:0}.fs-multisite-options-container.fs-apply-on-all-sites .fs-all-sites-options td:not(:first-child){display:none}.fs-multisite-options-container .fs-sites-list-container{display:none;overflow:auto}.fs-multisite-options-container .fs-sites-list-container table td{border-top:1px solid #ccc;padding:4px 2px}#fs_marketing_optin{display:none;margin-top:10px;border:1px solid #ccc;padding:10px;line-height:1.5em}#fs_marketing_optin .fs-message{display:block;margin-bottom:5px;font-size:1.05em;font-weight:600}#fs_marketing_optin.error{border:1px solid #d3135a;background:#fee}#fs_marketing_optin.error .fs-message{color:#d3135a}#fs_marketing_optin .fs-input-container{margin-top:5px}#fs_marketing_optin .fs-input-container label{margin-top:5px;display:block}#fs_marketing_optin .fs-input-container label input{float:left;margin:1px 0 0 0}#fs_marketing_optin .fs-input-container label:first-child{display:block;margin-bottom:2px}#fs_marketing_optin .fs-input-label{display:block;margin-left:20px}#fs_marketing_optin .fs-input-label .underlined{text-decoration:underline}.rtl #fs_marketing_optin .fs-input-container label input{float:right}.rtl #fs_marketing_optin .fs-input-label{margin-left:0;margin-right:20px}.rtl #fs_connect{border-radius:3px}.rtl #fs_connect .fs-actions{padding:10px 20px;background:#c0c7ca}.rtl #fs_connect .fs-actions .button .dashicons{font-size:37px;margin-left:-8px;margin-right:12px}.rtl #fs_connect .fs-actions .button.button-primary:after{content:" »"}.rtl #fs_connect .fs-actions .button.button-primary.fs-loading:after{content:""}.rtl #fs_connect .fs-actions .button.button-secondary{float:left}.rtl #fs_connect .fs-header .fs-site-icon{right:20px;left:auto}.rtl #fs_connect .fs-header .fs-connect-logo{right:auto;left:20px}.rtl #fs_connect .fs-permissions>.fs-trigger .fs-arrow::after{content:"←"}#fs_theme_connect_wrapper{position:fixed;top:0;height:100%;width:100%;z-index:99990;background:rgba(0,0,0,.75);text-align:center;overflow-y:auto}#fs_theme_connect_wrapper:before{content:"";display:inline-block;vertical-align:middle;height:100%}#fs_theme_connect_wrapper>button.close{color:#fff;cursor:pointer;height:40px;width:40px;position:absolute;right:0;border:0;background-color:transparent;top:32px}#fs_theme_connect_wrapper #fs_connect{top:0;text-align:left;display:inline-block;vertical-align:middle;margin-top:0;margin-bottom:20px}#fs_theme_connect_wrapper #fs_connect .fs-terms,#fs_theme_connect_wrapper #fs_connect .fs-terms a{color:#c5c5c5}.wp-pointer-content #fs_connect{margin:0;-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none}.fs-opt-in-pointer .wp-pointer-content{padding:0}.fs-opt-in-pointer.wp-pointer-top .wp-pointer-arrow{border-bottom-color:#dfdfdf}.fs-opt-in-pointer.wp-pointer-top .wp-pointer-arrow-inner{border-bottom-color:#fafafa}.fs-opt-in-pointer.wp-pointer-bottom .wp-pointer-arrow{border-top-color:#dfdfdf}.fs-opt-in-pointer.wp-pointer-bottom .wp-pointer-arrow-inner{border-top-color:#fafafa}.fs-opt-in-pointer.wp-pointer-left .wp-pointer-arrow{border-right-color:#dfdfdf}.fs-opt-in-pointer.wp-pointer-left .wp-pointer-arrow-inner{border-right-color:#fafafa}.fs-opt-in-pointer.wp-pointer-right .wp-pointer-arrow{border-left-color:#dfdfdf}.fs-opt-in-pointer.wp-pointer-right .wp-pointer-arrow-inner{border-left-color:#fafafa}#license_issues_link{display:block;text-align:center;font-size:.9em;margin-top:10px}.fs-tooltip-trigger{position:relative}.fs-tooltip-trigger:not(a){cursor:help}.fs-tooltip-trigger .dashicons{float:none !important}.fs-tooltip-trigger .fs-tooltip{opacity:0;visibility:hidden;-moz-transition:opacity .3s ease-in-out;-o-transition:opacity .3s ease-in-out;-ms-transition:opacity .3s ease-in-out;-webkit-transition:opacity .3s ease-in-out;transition:opacity .3s ease-in-out;position:absolute;background:rgba(0,0,0,.8);color:#fff !important;font-family:"arial",serif;font-size:12px;padding:10px;z-index:999999;bottom:100%;margin-bottom:5px;left:-17px;right:0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;-moz-box-shadow:1px 1px 1px rgba(0,0,0,.2);-webkit-box-shadow:1px 1px 1px rgba(0,0,0,.2);box-shadow:1px 1px 1px rgba(0,0,0,.2);line-height:1.3em;font-weight:bold;text-align:left;text-transform:none !important}.rtl .fs-tooltip-trigger .fs-tooltip{text-align:right;left:auto;right:-17px}.fs-tooltip-trigger .fs-tooltip::after{content:" ";display:block;width:0;height:0;border-style:solid;border-width:5px 5px 0 5px;border-color:rgba(0,0,0,.8) transparent transparent transparent;position:absolute;top:100%;left:21px}.rtl .fs-tooltip-trigger .fs-tooltip::after{right:21px;left:auto}.fs-tooltip-trigger:hover .fs-tooltip{visibility:visible;opacity:1}.fs-permissions .fs-permission.fs-disabled{color:#aaa}.fs-permissions .fs-permission.fs-disabled .fs-permission-description span{color:#aaa}.fs-permissions .fs-permission .fs-switch-feedback{position:absolute;right:15px;top:52px}.fs-permissions ul{height:0;overflow:hidden;margin:0}.fs-permissions ul li{padding:17px 15px;margin:0;position:relative}.fs-permissions ul li>i.dashicons{float:left;font-size:30px;width:30px;height:30px;padding:5px}.fs-permissions ul li .fs-switch{float:right}.fs-permissions ul li .fs-permission-description{margin-left:55px}.fs-permissions ul li .fs-permission-description span{font-size:14px;font-weight:500;color:#23282d}.fs-permissions ul li .fs-permission-description .fs-tooltip{font-size:13px;font-weight:bold}.fs-permissions ul li .fs-permission-description .fs-tooltip-trigger .dashicons{margin:-1px 2px 0 2px}.fs-permissions ul li .fs-permission-description p{margin:2px 0 0 0}.fs-permissions.fs-open{background:#fff}.fs-permissions.fs-open ul{overflow:initial;height:auto;margin:20px 0 10px 0}.fs-permissions .fs-switch-feedback .fs-ajax-spinner{margin-right:10px}.fs-permissions .fs-switch-feedback.success{color:#71ae00}.rtl .fs-permissions .fs-switch-feedback{right:auto;left:15px}.rtl .fs-permissions .fs-switch-feedback .fs-ajax-spinner{margin-left:10px;margin-right:0}.rtl .fs-permissions ul li .fs-permission-description{margin-right:55px;margin-left:0}.rtl .fs-permissions ul li .fs-switch{float:left}.rtl .fs-permissions ul li i.dashicons{float:right} +.fs-tooltip-trigger{position:relative}.fs-tooltip-trigger:not(a){cursor:help}.fs-tooltip-trigger .dashicons{float:none !important}.fs-tooltip-trigger .fs-tooltip{opacity:0;visibility:hidden;-moz-transition:opacity .3s ease-in-out;-o-transition:opacity .3s ease-in-out;-ms-transition:opacity .3s ease-in-out;-webkit-transition:opacity .3s ease-in-out;transition:opacity .3s ease-in-out;position:absolute;background:rgba(0,0,0,.8);color:#fff !important;font-family:"arial",serif;font-size:12px;padding:10px;z-index:999999;bottom:100%;margin-bottom:5px;left:-17px;right:0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;-moz-box-shadow:1px 1px 1px rgba(0,0,0,.2);-webkit-box-shadow:1px 1px 1px rgba(0,0,0,.2);box-shadow:1px 1px 1px rgba(0,0,0,.2);line-height:1.3em;font-weight:bold;text-align:left;text-transform:none !important}.rtl .fs-tooltip-trigger .fs-tooltip{text-align:right;left:auto;right:-17px}.fs-tooltip-trigger .fs-tooltip::after{content:" ";display:block;width:0;height:0;border-style:solid;border-width:5px 5px 0 5px;border-color:rgba(0,0,0,.8) rgba(0,0,0,0) rgba(0,0,0,0) rgba(0,0,0,0);position:absolute;top:100%;left:21px}.rtl .fs-tooltip-trigger .fs-tooltip::after{right:21px;left:auto}.fs-tooltip-trigger:hover .fs-tooltip{visibility:visible;opacity:1}#fs_connect{width:484px;margin:60px auto 20px auto}#fs_connect a{color:inherit}#fs_connect a:not(.button){text-decoration:underline}#fs_connect .fs-box-container{box-shadow:0 1px 2px rgba(0,0,0,.3);border-radius:3px;overflow:hidden;padding-top:40px;background:#f0f0f1}@media screen and (max-width: 483px){#fs_connect{width:auto;margin:30px 0 0 -10px}#fs_connect .fs-box-container{-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none}}#fs_connect .fs-content{background:#fff;padding:30px 20px}#fs_connect .fs-content .fs-error{background:snow;color:#d3135a;border:1px solid #d3135a;-moz-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1);text-align:center;padding:5px;margin-bottom:10px}#fs_connect .fs-content h2{line-height:1.5em}#fs_connect .fs-content p{margin:0;padding:0;font-size:1.2em}#fs_connect .fs-license-key-container{position:relative;width:280px;margin:10px auto 0 auto}#fs_connect .fs-license-key-container input{width:100%}#fs_connect .fs-license-key-container .dashicons{position:absolute;top:5px;right:5px}#fs_connect.require-license-key .fs-content{padding-bottom:10px}#fs_connect.require-license-key .fs-actions{border-top:none}#fs_connect.require-license-key .fs-sites-list-container td{cursor:pointer}#fs_connect #delegate_to_site_admins{margin-right:15px;float:right;height:26px;vertical-align:middle;line-height:37px;font-weight:bold;border-bottom:1px dashed;text-decoration:none}#fs_connect #delegate_to_site_admins.rtl{margin-left:15px;margin-right:0}#fs_connect .fs-actions{padding:10px 20px;background:#fff;border-width:1px 0;border-style:solid;border-color:#f1f1f1}#fs_connect .fs-actions .button{padding:0 10px 1px;line-height:35px;height:37px;font-size:16px;margin-bottom:0}#fs_connect .fs-actions .button .dashicons{font-size:37px;margin-left:-8px;margin-right:12px}#fs_connect .fs-actions .button.button-primary{padding-right:15px;padding-left:15px}#fs_connect .fs-actions .button.button-primary:after{content:" ➜"}#fs_connect .fs-actions .button.button-primary.fs-loading:after{content:""}#fs_connect .fs-actions .button.button-secondary{float:right}#fs_connect.fs-anonymous-disabled .fs-actions .button.button-primary{width:100%}#fs_connect .fs-permissions{padding:10px 20px;background:#fff;-moz-transition:background .5s ease;-o-transition:background .5s ease;-ms-transition:background .5s ease;-webkit-transition:background .5s ease;transition:background .5s ease}#fs_connect .fs-permissions .fs-license-sync-disclaimer{text-align:center;margin-top:0}#fs_connect .fs-permissions>.fs-trigger{font-size:.9em;text-decoration:none;text-align:center;display:block}#fs_connect .fs-permissions>.fs-trigger .fs-arrow::after{content:"→";width:20px;display:inline-block}#fs_connect .fs-permissions.fs-open>.fs-trigger .fs-arrow::after{content:"↓" !important}#fs_connect .fs-permissions ul li{padding-left:0;padding-right:0}@media screen and (max-width: 483px){#fs_connect .fs-permissions ul{height:auto;margin:20px}}#fs_connect .fs-freemium-licensing{padding:8px;background:#777;color:#fff}#fs_connect .fs-freemium-licensing p{text-align:center;display:block;margin:0;padding:0}#fs_connect .fs-freemium-licensing a{color:inherit;text-decoration:underline}#fs_connect .fs-header{padding:0;line-height:0;height:0;position:relative}#fs_connect .fs-header .fs-site-icon,#fs_connect .fs-header .fs-connect-logo{position:absolute;top:-8px;border-radius:50%}#fs_connect .fs-header .fs-site-icon{left:152px}#fs_connect .fs-header .fs-connect-logo{right:152px}#fs_connect .fs-header .fs-site-icon,#fs_connect .fs-header img,#fs_connect .fs-header object{width:50px;height:50px;border-radius:50%}#fs_connect .fs-header .fs-plugin-icon{position:absolute;overflow:hidden;top:-23px;left:50%;margin-left:-44px;border-radius:50%;z-index:1}#fs_connect .fs-header .fs-plugin-icon,#fs_connect .fs-header .fs-plugin-icon img{width:80px;height:80px}#fs_connect .fs-header .dashicons-wordpress-alt{font-size:40px;background:#01749a;color:#fff;width:40px;height:40px;padding:5px;border-radius:50%}#fs_connect .fs-header .dashicons-plus{position:absolute;top:50%;font-size:30px;margin-top:-10px;color:#bbb}#fs_connect .fs-header .dashicons-plus.fs-first{left:28%}#fs_connect .fs-header .dashicons-plus.fs-second{left:65%}#fs_connect .fs-header .fs-plugin-icon,#fs_connect .fs-header .fs-connect-logo,#fs_connect .fs-header .fs-site-icon{border:1px solid #efefef;padding:3px;background:#fff}#fs_connect .fs-terms{text-align:center;font-size:.85em;padding:10px 5px}#fs_connect .fs-terms,#fs_connect .fs-terms a{color:#999}#fs_connect .fs-terms a{text-decoration:none}.fs-multisite-options-container{margin-top:20px;border:1px solid #ccc;padding:5px}.fs-multisite-options-container a{text-decoration:none}.fs-multisite-options-container a:focus{box-shadow:none}.fs-multisite-options-container a.selected{font-weight:bold}.fs-multisite-options-container.fs-apply-on-all-sites{border:0 none;padding:0}.fs-multisite-options-container.fs-apply-on-all-sites .fs-all-sites-options{border-spacing:0}.fs-multisite-options-container.fs-apply-on-all-sites .fs-all-sites-options td:not(:first-child){display:none}.fs-multisite-options-container .fs-sites-list-container{display:none;overflow:auto}.fs-multisite-options-container .fs-sites-list-container table td{border-top:1px solid #ccc;padding:4px 2px}#fs_marketing_optin{display:none;margin-top:10px;border:1px solid #ccc;padding:10px;line-height:1.5em}#fs_marketing_optin .fs-message{display:block;margin-bottom:5px;font-size:1.05em;font-weight:600}#fs_marketing_optin.error{border:1px solid #d3135a;background:#fee}#fs_marketing_optin.error .fs-message{color:#d3135a}#fs_marketing_optin .fs-input-container{margin-top:5px}#fs_marketing_optin .fs-input-container label{margin-top:5px;display:block}#fs_marketing_optin .fs-input-container label input{float:left;margin:1px 0 0 0}#fs_marketing_optin .fs-input-container label:first-child{display:block;margin-bottom:2px}#fs_marketing_optin .fs-input-label{display:block;margin-left:20px}#fs_marketing_optin .fs-input-label .underlined{text-decoration:underline}.rtl #fs_marketing_optin .fs-input-container label input{float:right}.rtl #fs_marketing_optin .fs-input-label{margin-left:0;margin-right:20px}.rtl #fs_connect{border-radius:3px}.rtl #fs_connect .fs-actions{padding:10px 20px;background:#c0c7ca}.rtl #fs_connect .fs-actions .button .dashicons{font-size:37px;margin-left:-8px;margin-right:12px}.rtl #fs_connect .fs-actions .button.button-primary:after{content:" »"}.rtl #fs_connect .fs-actions .button.button-primary.fs-loading:after{content:""}.rtl #fs_connect .fs-actions .button.button-secondary{float:left}.rtl #fs_connect .fs-header .fs-site-icon{right:20px;left:auto}.rtl #fs_connect .fs-header .fs-connect-logo{right:auto;left:20px}.rtl #fs_connect .fs-permissions>.fs-trigger .fs-arrow::after{content:"←"}#fs_theme_connect_wrapper{position:fixed;top:0;height:100%;width:100%;z-index:99990;background:rgba(0,0,0,.75);text-align:center;overflow-y:auto}#fs_theme_connect_wrapper:before{content:"";display:inline-block;vertical-align:middle;height:100%}#fs_theme_connect_wrapper>button.close{color:#fff;cursor:pointer;height:40px;width:40px;position:absolute;right:0;border:0;background-color:rgba(0,0,0,0);top:32px}#fs_theme_connect_wrapper #fs_connect{top:0;text-align:left;display:inline-block;vertical-align:middle;margin-top:0;margin-bottom:20px}#fs_theme_connect_wrapper #fs_connect .fs-terms,#fs_theme_connect_wrapper #fs_connect .fs-terms a{color:#c5c5c5}.wp-pointer-content #fs_connect{margin:0;-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none}.fs-opt-in-pointer .wp-pointer-content{padding:0}.fs-opt-in-pointer.wp-pointer-top .wp-pointer-arrow{border-bottom-color:#dfdfdf}.fs-opt-in-pointer.wp-pointer-top .wp-pointer-arrow-inner{border-bottom-color:#fafafa}.fs-opt-in-pointer.wp-pointer-bottom .wp-pointer-arrow{border-top-color:#dfdfdf}.fs-opt-in-pointer.wp-pointer-bottom .wp-pointer-arrow-inner{border-top-color:#fafafa}.fs-opt-in-pointer.wp-pointer-left .wp-pointer-arrow{border-right-color:#dfdfdf}.fs-opt-in-pointer.wp-pointer-left .wp-pointer-arrow-inner{border-right-color:#fafafa}.fs-opt-in-pointer.wp-pointer-right .wp-pointer-arrow{border-left-color:#dfdfdf}.fs-opt-in-pointer.wp-pointer-right .wp-pointer-arrow-inner{border-left-color:#fafafa}#license_issues_link{display:block;text-align:center;font-size:.9em;margin-top:10px}.fs-tooltip-trigger{position:relative}.fs-tooltip-trigger:not(a){cursor:help}.fs-tooltip-trigger .dashicons{float:none !important}.fs-tooltip-trigger .fs-tooltip{opacity:0;visibility:hidden;-moz-transition:opacity .3s ease-in-out;-o-transition:opacity .3s ease-in-out;-ms-transition:opacity .3s ease-in-out;-webkit-transition:opacity .3s ease-in-out;transition:opacity .3s ease-in-out;position:absolute;background:rgba(0,0,0,.8);color:#fff !important;font-family:"arial",serif;font-size:12px;padding:10px;z-index:999999;bottom:100%;margin-bottom:5px;left:-17px;right:0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;-moz-box-shadow:1px 1px 1px rgba(0,0,0,.2);-webkit-box-shadow:1px 1px 1px rgba(0,0,0,.2);box-shadow:1px 1px 1px rgba(0,0,0,.2);line-height:1.3em;font-weight:bold;text-align:left;text-transform:none !important}.rtl .fs-tooltip-trigger .fs-tooltip{text-align:right;left:auto;right:-17px}.fs-tooltip-trigger .fs-tooltip::after{content:" ";display:block;width:0;height:0;border-style:solid;border-width:5px 5px 0 5px;border-color:rgba(0,0,0,.8) rgba(0,0,0,0) rgba(0,0,0,0) rgba(0,0,0,0);position:absolute;top:100%;left:21px}.rtl .fs-tooltip-trigger .fs-tooltip::after{right:21px;left:auto}.fs-tooltip-trigger:hover .fs-tooltip{visibility:visible;opacity:1}.fs-permissions .fs-permission.fs-disabled{color:#aaa}.fs-permissions .fs-permission.fs-disabled .fs-permission-description span{color:#aaa}.fs-permissions .fs-permission .fs-switch-feedback{position:absolute;right:15px;top:52px}.fs-permissions ul{height:0;overflow:hidden;margin:0}.fs-permissions ul li{padding:17px 15px;margin:0;position:relative}.fs-permissions ul li>i.dashicons{float:left;font-size:30px;width:30px;height:30px;padding:5px}.fs-permissions ul li .fs-switch{float:right}.fs-permissions ul li .fs-permission-description{margin-left:55px}.fs-permissions ul li .fs-permission-description span{font-size:14px;font-weight:500;color:#23282d}.fs-permissions ul li .fs-permission-description .fs-tooltip{font-size:13px;font-weight:bold}.fs-permissions ul li .fs-permission-description .fs-tooltip-trigger .dashicons{margin:-1px 2px 0 2px}.fs-permissions ul li .fs-permission-description p{margin:2px 0 0 0}.fs-permissions.fs-open{background:#fff}.fs-permissions.fs-open ul{overflow:initial;height:auto;margin:20px 0 10px 0}.fs-permissions .fs-switch-feedback .fs-ajax-spinner{margin-right:10px}.fs-permissions .fs-switch-feedback.success{color:#71ae00}.rtl .fs-permissions .fs-switch-feedback{right:auto;left:15px}.rtl .fs-permissions .fs-switch-feedback .fs-ajax-spinner{margin-left:10px;margin-right:0}.rtl .fs-permissions ul li .fs-permission-description{margin-right:55px;margin-left:0}.rtl .fs-permissions ul li .fs-switch{float:left}.rtl .fs-permissions ul li i.dashicons{float:right}/*# sourceMappingURL=connect.css.map */ diff --git a/assets/css/admin/connect.css.map b/assets/css/admin/connect.css.map index 811a8d1f..7658b2c5 100644 --- a/assets/css/admin/connect.css.map +++ b/assets/css/admin/connect.css.map @@ -1 +1 @@ -{"version":3,"sourceRoot":"","sources":["../../scss/admin/_tooltip.scss","../../scss/_mixins.scss","../../scss/_colors.scss","../../scss/admin/connect.scss","../../scss/admin/_multisite-options.scss","../../scss/admin/_gdpr-consent.scss","../../scss/admin/_permissions.scss"],"names":[],"mappings":"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","file":"connect.css"} \ No newline at end of file +{"version":3,"sourceRoot":"","sources":["../../scss/admin/_tooltip.scss","../../scss/_mixins.scss","../../scss/_colors.scss","../../scss/admin/connect.scss","../../scss/admin/_multisite-options.scss","../../scss/admin/_gdpr-consent.scss","../../scss/admin/_permissions.scss"],"names":[],"mappings":"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","file":"connect.css"} \ No newline at end of file diff --git a/assets/css/admin/debug.css b/assets/css/admin/debug.css index 3a2aadf6..c56bddff 100644 --- a/assets/css/admin/debug.css +++ b/assets/css/admin/debug.css @@ -1 +1 @@ -label.fs-tag,span.fs-tag{background:#ffba00;color:#fff;display:inline-block;border-radius:3px;padding:5px;font-size:11px;line-height:11px;vertical-align:baseline}label.fs-tag.fs-warn,span.fs-tag.fs-warn{background:#ffba00}label.fs-tag.fs-info,span.fs-tag.fs-info{background:#00a0d2}label.fs-tag.fs-success,span.fs-tag.fs-success{background:#46b450}label.fs-tag.fs-error,span.fs-tag.fs-error{background:#dc3232}.fs-switch-label{font-size:20px;line-height:31px;margin:0 5px}#fs_log_book table{font-family:Consolas,Monaco,monospace;font-size:12px}#fs_log_book table th{color:#ccc}#fs_log_book table tr{background:#232525}#fs_log_book table tr.alternate{background:#2b2b2b}#fs_log_book table tr td.fs-col--logger{color:#5a7435}#fs_log_book table tr td.fs-col--type{color:#ffc861}#fs_log_book table tr td.fs-col--function{color:#a7b7b1;font-weight:bold}#fs_log_book table tr td.fs-col--message,#fs_log_book table tr td.fs-col--message a{color:#9a73ac !important}#fs_log_book table tr td.fs-col--file{color:#d07922}#fs_log_book table tr td.fs-col--timestamp{color:#6596be} +label.fs-tag,span.fs-tag{background:#ffba00;color:#fff;display:inline-block;border-radius:3px;padding:5px;font-size:11px;line-height:11px;vertical-align:baseline}label.fs-tag.fs-warn,span.fs-tag.fs-warn{background:#ffba00}label.fs-tag.fs-info,span.fs-tag.fs-info{background:#00a0d2}label.fs-tag.fs-success,span.fs-tag.fs-success{background:#46b450}label.fs-tag.fs-error,span.fs-tag.fs-error{background:#dc3232}.fs-switch-label{font-size:20px;line-height:31px;margin:0 5px}#fs_log_book table{font-family:Consolas,Monaco,monospace;font-size:12px}#fs_log_book table th{color:#ccc}#fs_log_book table tr{background:#232525}#fs_log_book table tr.alternate{background:#2b2b2b}#fs_log_book table tr td.fs-col--logger{color:#5a7435}#fs_log_book table tr td.fs-col--type{color:#ffc861}#fs_log_book table tr td.fs-col--function{color:#a7b7b1;font-weight:bold}#fs_log_book table tr td.fs-col--message,#fs_log_book table tr td.fs-col--message a{color:#9a73ac !important}#fs_log_book table tr td.fs-col--file{color:#d07922}#fs_log_book table tr td.fs-col--timestamp{color:#6596be}/*# sourceMappingURL=debug.css.map */ diff --git a/assets/css/admin/dialog-boxes.css b/assets/css/admin/dialog-boxes.css index de7f8299..a0a228b0 100644 --- a/assets/css/admin/dialog-boxes.css +++ b/assets/css/admin/dialog-boxes.css @@ -1 +1 @@ -.fs-modal{position:fixed;overflow:auto;height:100%;width:100%;top:0;z-index:100000;display:none;background:rgba(0,0,0,.6)}@media(min-width: 961px){.fs-modal{padding-left:160px}.rtl .fs-modal{padding-left:0;padding-right:160px}}.fs-modal .dashicons{vertical-align:middle}.fs-modal .fs-modal-dialog{background:transparent;position:absolute;left:50%;margin-left:-298px;padding-bottom:30px;top:-100%;z-index:100001;width:596px}@media(max-width: 650px){.fs-modal .fs-modal-dialog{margin-left:-50%;box-sizing:border-box;padding-left:10px;padding-right:10px;width:100%}.fs-modal .fs-modal-dialog .fs-modal-panel>h3>strong{font-size:1.3em}}.fs-modal.active{display:block}.fs-modal.active:before{display:block}.fs-modal.active .fs-modal-dialog{top:10%}.fs-modal.fs-success .fs-modal-header{border-bottom-color:#46b450}.fs-modal.fs-success .fs-modal-body{background-color:#f7fff7}.fs-modal.fs-warn .fs-modal-header{border-bottom-color:#ffb900}.fs-modal.fs-warn .fs-modal-body{background-color:#fff8e5}.fs-modal.fs-error .fs-modal-header{border-bottom-color:#dc3232}.fs-modal.fs-error .fs-modal-body{background-color:#ffeaea}.fs-modal .fs-modal-body,.fs-modal .fs-modal-footer{border:0;background:#fefefe;padding:20px}.fs-modal .fs-modal-header{border-bottom:#eee solid 1px;background:#fbfbfb;padding:15px 20px;position:relative;margin-bottom:-10px}.fs-modal .fs-modal-header h4{margin:0;padding:0;text-transform:uppercase;font-size:1.2em;font-weight:bold;color:#cacaca;text-shadow:1px 1px 1px #fff;letter-spacing:.6px;-webkit-font-smoothing:antialiased}.fs-modal .fs-modal-header .fs-close{position:absolute;right:10px;top:12px;cursor:pointer;color:#bbb;-moz-border-radius:20px;-webkit-border-radius:20px;border-radius:20px;padding:3px;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;-ms-transition:all .2s ease-in-out;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.fs-modal .fs-modal-header .fs-close:hover{color:#fff;background:#aaa}.fs-modal .fs-modal-header .fs-close .dashicons,.fs-modal .fs-modal-header .fs-close:hover .dashicons{text-decoration:none}.fs-modal .fs-modal-body{border-bottom:0}.fs-modal .fs-modal-body p{font-size:14px}.fs-modal .fs-modal-body h2{font-size:20px;line-height:1.5em}.fs-modal .fs-modal-body>div{margin-top:10px}.fs-modal .fs-modal-body>div h2{font-weight:bold;font-size:20px;margin-top:0}.fs-modal .fs-modal-footer{border-top:#eee solid 1px;text-align:right}.fs-modal .fs-modal-footer>.button{margin:0 7px}.fs-modal .fs-modal-footer>.button:last-of-type{margin:0}.fs-modal .fs-modal-panel>.notice.inline{margin:0;display:none}.fs-modal .fs-modal-panel:not(.active){display:none}.rtl .fs-modal .fs-modal-header .fs-close{right:auto;left:20px}.rtl .fs-modal .fs-modal-footer{text-align:left}body.has-fs-modal{overflow:hidden}.fs-modal.fs-modal-deactivation-feedback .reason-input,.fs-modal.fs-modal-deactivation-feedback .internal-message{margin:3px 0 3px 22px}.fs-modal.fs-modal-deactivation-feedback .reason-input input,.fs-modal.fs-modal-deactivation-feedback .reason-input textarea,.fs-modal.fs-modal-deactivation-feedback .internal-message input,.fs-modal.fs-modal-deactivation-feedback .internal-message textarea{width:100%}.fs-modal.fs-modal-deactivation-feedback li.reason.has-internal-message .internal-message{border:1px solid #ccc;padding:7px;display:none}@media(max-width: 650px){.fs-modal.fs-modal-deactivation-feedback li.reason li.reason{margin-bottom:10px}.fs-modal.fs-modal-deactivation-feedback li.reason li.reason .reason-input,.fs-modal.fs-modal-deactivation-feedback li.reason li.reason .internal-message{margin-left:29px}.fs-modal.fs-modal-deactivation-feedback li.reason li.reason label{display:table}.fs-modal.fs-modal-deactivation-feedback li.reason li.reason label>span{display:table-cell;font-size:1.3em}}.fs-modal.fs-modal-deactivation-feedback .anonymous-feedback-label,.fs-modal.fs-modal-deactivation-feedback .feedback-from-snooze-label{float:left;line-height:30px}.rtl .fs-modal.fs-modal-deactivation-feedback .anonymous-feedback-label,.rtl .fs-modal.fs-modal-deactivation-feedback .feedback-from-snooze-label{float:right}.fs-modal.fs-modal-deactivation-feedback .fs-modal-panel{margin-top:0 !important}.fs-modal.fs-modal-deactivation-feedback .fs-modal-panel h3{margin-top:0;line-height:1.5em}#the-list .deactivate>.fs-slug{display:none}.fs-modal.fs-modal-subscription-cancellation .fs-price-increase-warning{color:red;font-weight:bold;padding:0 25px;margin-bottom:0}.fs-modal.fs-modal-subscription-cancellation ul.subscription-actions label input{float:left;top:5px;position:relative}.rtl .fs-modal.fs-modal-subscription-cancellation ul.subscription-actions label input{float:right}.fs-modal.fs-modal-subscription-cancellation ul.subscription-actions label span{display:block;margin-left:24px}.rtl .fs-modal.fs-modal-subscription-cancellation ul.subscription-actions label span{margin-left:0;margin-right:24px}.fs-modal.fs-modal-license-activation .fs-modal-body input.fs-license-key{width:100%}.fs-license-options-container table,.fs-license-options-container table select,.fs-license-options-container table .fs-available-license-key{width:100%}.fs-license-options-container table td:first-child{width:1%}.fs-license-options-container table .fs-other-license-key-container label{position:relative;top:6px;float:left;margin-right:5px}.fs-license-options-container table .fs-other-license-key-container div{overflow:hidden;width:auto;height:30px;display:block;top:2px;position:relative}.fs-license-options-container table .fs-other-license-key-container div input{margin:0}.fs-sites-list-container td{cursor:pointer}.fs-modal.fs-modal-user-change .fs-modal-body input#fs_other_email_address{width:100%}.fs-user-change-options-container table{width:100%;border-collapse:collapse}.fs-user-change-options-container table tr{display:block;margin-bottom:2px}.fs-user-change-options-container table .fs-email-address-container td{display:inline-block}.fs-user-change-options-container table .fs-email-address-container input[type=radio]{margin-bottom:0;margin-top:0}.fs-user-change-options-container table .fs-other-email-address-container{width:100%}.fs-user-change-options-container table .fs-other-email-address-container>div{display:table;width:100%}.fs-user-change-options-container table .fs-other-email-address-container>div label,.fs-user-change-options-container table .fs-other-email-address-container>div>div{display:table-cell}.fs-user-change-options-container table .fs-other-email-address-container>div label{width:1%;padding-left:3px;padding-right:3px}.fs-user-change-options-container table .fs-other-email-address-container>div>div{width:auto}.fs-user-change-options-container table .fs-other-email-address-container>div>div input{width:100%}.fs-modal.fs-modal-developer-license-debug-mode .fs-modal-body input.fs-license-or-user-key{width:100%}.fs-multisite-options-container{margin-top:20px;border:1px solid #ccc;padding:5px}.fs-multisite-options-container a{text-decoration:none}.fs-multisite-options-container a:focus{box-shadow:none}.fs-multisite-options-container a.selected{font-weight:bold}.fs-multisite-options-container.fs-apply-on-all-sites{border:0 none;padding:0}.fs-multisite-options-container.fs-apply-on-all-sites .fs-all-sites-options{border-spacing:0}.fs-multisite-options-container.fs-apply-on-all-sites .fs-all-sites-options td:not(:first-child){display:none}.fs-multisite-options-container .fs-sites-list-container{display:none;overflow:auto}.fs-multisite-options-container .fs-sites-list-container table td{border-top:1px solid #ccc;padding:4px 2px}.fs-modal.fs-modal-license-key-resend .email-address-container{overflow:hidden;padding-right:2px}.fs-modal.fs-modal-license-key-resend.fs-freemium input.email-address{width:300px}.fs-modal.fs-modal-license-key-resend.fs-freemium label{display:block;margin-bottom:10px}.fs-modal.fs-modal-license-key-resend.fs-premium input.email-address{width:100%}.fs-modal.fs-modal-license-key-resend.fs-premium .button-container{float:right;margin-left:7px}@media(max-width: 650px){.fs-modal.fs-modal-license-key-resend.fs-premium .button-container{margin-top:2px}}.rtl .fs-modal.fs-modal-license-key-resend .fs-modal-body .input-container>.email-address-container{padding-left:2px;padding-right:0}.rtl .fs-modal.fs-modal-license-key-resend .fs-modal-body .button-container{float:left;margin-right:7px;margin-left:0}a.show-license-resend-modal{margin-top:4px;display:inline-block}.fs-modal.fs-modal-email-address-update .fs-modal-body input[type=text]{width:100%}.fs-modal.fs-modal-email-address-update p{margin-bottom:0}.fs-modal.fs-modal-email-address-update ul{margin:1em .5em}.fs-modal.fs-modal-email-address-update ul li label span{float:left;margin-top:0}.fs-modal.fs-modal-email-address-update ul li label span:last-child{display:block;float:none;margin-left:20px}.fs-ajax-loader{position:relative;width:170px;height:20px;margin:auto}.fs-ajax-loader .fs-ajax-loader-bar{position:absolute;top:0;background-color:#0074a3;width:20px;height:20px;-webkit-animation-name:bounce_ajaxLoader;-moz-animation-name:bounce_ajaxLoader;-ms-animation-name:bounce_ajaxLoader;-o-animation-name:bounce_ajaxLoader;animation-name:bounce_ajaxLoader;-webkit-animation-duration:1.5s;-moz-animation-duration:1.5s;-ms-animation-duration:1.5s;-o-animation-duration:1.5s;animation-duration:1.5s;animation-iteration-count:infinite;-o-animation-iteration-count:infinite;-ms-animation-iteration-count:infinite;-webkit-animation-iteration-count:infinite;-moz-animation-iteration-count:infinite;-webkit-animation-direction:normal;-moz-animation-direction:normal;-ms-animation-direction:normal;-o-animation-direction:normal;animation-direction:normal;-moz-transform:.3;-o-transform:.3;-ms-transform:.3;-webkit-transform:.3;transform:.3}.fs-ajax-loader .fs-ajax-loader-bar-1{left:0px;animation-delay:0.6s;-o-animation-delay:0.6s;-ms-animation-delay:0.6s;-webkit-animation-delay:0.6s;-moz-animation-delay:0.6s}.fs-ajax-loader .fs-ajax-loader-bar-2{left:19px;animation-delay:0.75s;-o-animation-delay:0.75s;-ms-animation-delay:0.75s;-webkit-animation-delay:0.75s;-moz-animation-delay:0.75s}.fs-ajax-loader .fs-ajax-loader-bar-3{left:38px;animation-delay:0.9s;-o-animation-delay:0.9s;-ms-animation-delay:0.9s;-webkit-animation-delay:0.9s;-moz-animation-delay:0.9s}.fs-ajax-loader .fs-ajax-loader-bar-4{left:57px;animation-delay:1.05s;-o-animation-delay:1.05s;-ms-animation-delay:1.05s;-webkit-animation-delay:1.05s;-moz-animation-delay:1.05s}.fs-ajax-loader .fs-ajax-loader-bar-5{left:76px;animation-delay:1.2s;-o-animation-delay:1.2s;-ms-animation-delay:1.2s;-webkit-animation-delay:1.2s;-moz-animation-delay:1.2s}.fs-ajax-loader .fs-ajax-loader-bar-6{left:95px;animation-delay:1.35s;-o-animation-delay:1.35s;-ms-animation-delay:1.35s;-webkit-animation-delay:1.35s;-moz-animation-delay:1.35s}.fs-ajax-loader .fs-ajax-loader-bar-7{left:114px;animation-delay:1.5s;-o-animation-delay:1.5s;-ms-animation-delay:1.5s;-webkit-animation-delay:1.5s;-moz-animation-delay:1.5s}.fs-ajax-loader .fs-ajax-loader-bar-8{left:133px;animation-delay:1.65s;-o-animation-delay:1.65s;-ms-animation-delay:1.65s;-webkit-animation-delay:1.65s;-moz-animation-delay:1.65s}@-moz-keyframes bounce_ajaxLoader{0%{-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1);background-color:#0074a3}100%{-moz-transform:scale(0.3);-o-transform:scale(0.3);-ms-transform:scale(0.3);-webkit-transform:scale(0.3);transform:scale(0.3);background-color:#fff}}@-ms-keyframes bounce_ajaxLoader{0%{-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1);background-color:#0074a3}100%{-moz-transform:scale(0.3);-o-transform:scale(0.3);-ms-transform:scale(0.3);-webkit-transform:scale(0.3);transform:scale(0.3);background-color:#fff}}@-o-keyframes bounce_ajaxLoader{0%{-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1);background-color:#0074a3}100%{-moz-transform:scale(0.3);-o-transform:scale(0.3);-ms-transform:scale(0.3);-webkit-transform:scale(0.3);transform:scale(0.3);background-color:#fff}}@-webkit-keyframes bounce_ajaxLoader{0%{-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1);background-color:#0074a3}100%{-moz-transform:scale(0.3);-o-transform:scale(0.3);-ms-transform:scale(0.3);-webkit-transform:scale(0.3);transform:scale(0.3);background-color:#fff}}@keyframes bounce_ajaxLoader{0%{-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1);background-color:#0074a3}100%{-moz-transform:scale(0.3);-o-transform:scale(0.3);-ms-transform:scale(0.3);-webkit-transform:scale(0.3);transform:scale(0.3);background-color:#fff}}.fs-modal-auto-install #request-filesystem-credentials-form h2,.fs-modal-auto-install #request-filesystem-credentials-form .request-filesystem-credentials-action-buttons{display:none}.fs-modal-auto-install #request-filesystem-credentials-form input[type=password],.fs-modal-auto-install #request-filesystem-credentials-form input[type=email],.fs-modal-auto-install #request-filesystem-credentials-form input[type=text]{-webkit-appearance:none;padding:10px 10px 5px 10px;width:300px;max-width:100%}.fs-modal-auto-install #request-filesystem-credentials-form>div,.fs-modal-auto-install #request-filesystem-credentials-form label,.fs-modal-auto-install #request-filesystem-credentials-form fieldset{width:300px;max-width:100%;margin:0 auto;display:block}.button-primary.warn{box-shadow:0 1px 0 #d2593c;text-shadow:0 -1px 1px #d2593c,1px 0 1px #d2593c,0 1px 1px #d2593c,-1px 0 1px #d2593c;background:#f56a48;border-color:#ec6544 #d2593c #d2593c}.button-primary.warn:hover{background:#fd6d4a;border-color:#d2593c}.button-primary.warn:focus{box-shadow:0 1px 0 #dd6041,0 0 2px 1px #e4a796}.button-primary.warn:active{background:#dd6041;border-color:#d2593c;box-shadow:inset 0 2px 0 #d2593c}.button-primary.warn.disabled{color:#f5b3a1 !important;background:#e76444 !important;border-color:#d85e40 !important;text-shadow:0 -1px 0 rgba(0,0,0,.1) !important} +.fs-modal{position:fixed;overflow:auto;height:100%;width:100%;top:0;z-index:100000;display:none;background:rgba(0,0,0,.6)}@media(min-width: 961px){.fs-modal{padding-left:160px}.rtl .fs-modal{padding-left:0;padding-right:160px}}.fs-modal .dashicons{vertical-align:middle}.fs-modal .fs-modal-dialog{background:rgba(0,0,0,0);position:absolute;left:50%;margin-left:-298px;padding-bottom:30px;top:-100%;z-index:100001;width:596px}@media(max-width: 650px){.fs-modal .fs-modal-dialog{margin-left:-50%;box-sizing:border-box;padding-left:10px;padding-right:10px;width:100%}.fs-modal .fs-modal-dialog .fs-modal-panel>h3>strong{font-size:1.3em}}.fs-modal.active{display:block}.fs-modal.active:before{display:block}.fs-modal.active .fs-modal-dialog{top:10%}.fs-modal.fs-success .fs-modal-header{border-bottom-color:#46b450}.fs-modal.fs-success .fs-modal-body{background-color:#f7fff7}.fs-modal.fs-warn .fs-modal-header{border-bottom-color:#ffb900}.fs-modal.fs-warn .fs-modal-body{background-color:#fff8e5}.fs-modal.fs-error .fs-modal-header{border-bottom-color:#dc3232}.fs-modal.fs-error .fs-modal-body{background-color:#ffeaea}.fs-modal .fs-modal-body,.fs-modal .fs-modal-footer{border:0;background:#fefefe;padding:20px}.fs-modal .fs-modal-header{border-bottom:#eee solid 1px;background:#fbfbfb;padding:15px 20px;position:relative;margin-bottom:-10px}.fs-modal .fs-modal-header h4{margin:0;padding:0;text-transform:uppercase;font-size:1.2em;font-weight:bold;color:#cacaca;text-shadow:1px 1px 1px #fff;letter-spacing:.6px;-webkit-font-smoothing:antialiased}.fs-modal .fs-modal-header .fs-close{position:absolute;right:10px;top:12px;cursor:pointer;color:#bbb;-moz-border-radius:20px;-webkit-border-radius:20px;border-radius:20px;padding:3px;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;-ms-transition:all .2s ease-in-out;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.fs-modal .fs-modal-header .fs-close:hover{color:#fff;background:#aaa}.fs-modal .fs-modal-header .fs-close .dashicons,.fs-modal .fs-modal-header .fs-close:hover .dashicons{text-decoration:none}.fs-modal .fs-modal-body{border-bottom:0}.fs-modal .fs-modal-body p{font-size:14px}.fs-modal .fs-modal-body h2{font-size:20px;line-height:1.5em}.fs-modal .fs-modal-body>div{margin-top:10px}.fs-modal .fs-modal-body>div h2{font-weight:bold;font-size:20px;margin-top:0}.fs-modal .fs-modal-footer{border-top:#eee solid 1px;text-align:right}.fs-modal .fs-modal-footer>.button{margin:0 7px}.fs-modal .fs-modal-footer>.button:last-of-type{margin:0}.fs-modal .fs-modal-panel>.notice.inline{margin:0;display:none}.fs-modal .fs-modal-panel:not(.active){display:none}.rtl .fs-modal .fs-modal-header .fs-close{right:auto;left:20px}.rtl .fs-modal .fs-modal-footer{text-align:left}body.has-fs-modal{overflow:hidden}.fs-modal.fs-modal-deactivation-feedback .reason-input,.fs-modal.fs-modal-deactivation-feedback .internal-message{margin:3px 0 3px 22px}.fs-modal.fs-modal-deactivation-feedback .reason-input input,.fs-modal.fs-modal-deactivation-feedback .reason-input textarea,.fs-modal.fs-modal-deactivation-feedback .internal-message input,.fs-modal.fs-modal-deactivation-feedback .internal-message textarea{width:100%}.fs-modal.fs-modal-deactivation-feedback li.reason.has-internal-message .internal-message{border:1px solid #ccc;padding:7px;display:none}@media(max-width: 650px){.fs-modal.fs-modal-deactivation-feedback li.reason li.reason{margin-bottom:10px}.fs-modal.fs-modal-deactivation-feedback li.reason li.reason .reason-input,.fs-modal.fs-modal-deactivation-feedback li.reason li.reason .internal-message{margin-left:29px}.fs-modal.fs-modal-deactivation-feedback li.reason li.reason label{display:table}.fs-modal.fs-modal-deactivation-feedback li.reason li.reason label>span{display:table-cell;font-size:1.3em}}.fs-modal.fs-modal-deactivation-feedback .anonymous-feedback-label,.fs-modal.fs-modal-deactivation-feedback .feedback-from-snooze-label{float:left;line-height:30px}.rtl .fs-modal.fs-modal-deactivation-feedback .anonymous-feedback-label,.rtl .fs-modal.fs-modal-deactivation-feedback .feedback-from-snooze-label{float:right}.fs-modal.fs-modal-deactivation-feedback .fs-modal-panel{margin-top:0 !important}.fs-modal.fs-modal-deactivation-feedback .fs-modal-panel h3{margin-top:0;line-height:1.5em}#the-list .deactivate>.fs-slug{display:none}.fs-modal.fs-modal-subscription-cancellation .fs-price-increase-warning{color:red;font-weight:bold;padding:0 25px;margin-bottom:0}.fs-modal.fs-modal-subscription-cancellation ul.subscription-actions label input{float:left;top:5px;position:relative}.rtl .fs-modal.fs-modal-subscription-cancellation ul.subscription-actions label input{float:right}.fs-modal.fs-modal-subscription-cancellation ul.subscription-actions label span{display:block;margin-left:24px}.rtl .fs-modal.fs-modal-subscription-cancellation ul.subscription-actions label span{margin-left:0;margin-right:24px}.fs-modal.fs-modal-license-activation .fs-modal-body input.fs-license-key{width:100%}.fs-license-options-container table,.fs-license-options-container table select,.fs-license-options-container table .fs-available-license-key{width:100%}.fs-license-options-container table td:first-child{width:1%}.fs-license-options-container table .fs-other-license-key-container label{position:relative;top:6px;float:left;margin-right:5px}.fs-license-options-container table .fs-other-license-key-container div{overflow:hidden;width:auto;height:30px;display:block;top:2px;position:relative}.fs-license-options-container table .fs-other-license-key-container div input{margin:0}.fs-sites-list-container td{cursor:pointer}.fs-modal.fs-modal-user-change .fs-modal-body input#fs_other_email_address{width:100%}.fs-user-change-options-container table{width:100%;border-collapse:collapse}.fs-user-change-options-container table tr{display:block;margin-bottom:2px}.fs-user-change-options-container table .fs-email-address-container td{display:inline-block}.fs-user-change-options-container table .fs-email-address-container input[type=radio]{margin-bottom:0;margin-top:0}.fs-user-change-options-container table .fs-other-email-address-container{width:100%}.fs-user-change-options-container table .fs-other-email-address-container>div{display:table;width:100%}.fs-user-change-options-container table .fs-other-email-address-container>div label,.fs-user-change-options-container table .fs-other-email-address-container>div>div{display:table-cell}.fs-user-change-options-container table .fs-other-email-address-container>div label{width:1%;padding-left:3px;padding-right:3px}.fs-user-change-options-container table .fs-other-email-address-container>div>div{width:auto}.fs-user-change-options-container table .fs-other-email-address-container>div>div input{width:100%}.fs-modal.fs-modal-developer-license-debug-mode .fs-modal-body input.fs-license-or-user-key{width:100%}.fs-multisite-options-container{margin-top:20px;border:1px solid #ccc;padding:5px}.fs-multisite-options-container a{text-decoration:none}.fs-multisite-options-container a:focus{box-shadow:none}.fs-multisite-options-container a.selected{font-weight:bold}.fs-multisite-options-container.fs-apply-on-all-sites{border:0 none;padding:0}.fs-multisite-options-container.fs-apply-on-all-sites .fs-all-sites-options{border-spacing:0}.fs-multisite-options-container.fs-apply-on-all-sites .fs-all-sites-options td:not(:first-child){display:none}.fs-multisite-options-container .fs-sites-list-container{display:none;overflow:auto}.fs-multisite-options-container .fs-sites-list-container table td{border-top:1px solid #ccc;padding:4px 2px}.fs-modal.fs-modal-license-key-resend .email-address-container{overflow:hidden;padding-right:2px}.fs-modal.fs-modal-license-key-resend.fs-freemium input.email-address{width:300px}.fs-modal.fs-modal-license-key-resend.fs-freemium label{display:block;margin-bottom:10px}.fs-modal.fs-modal-license-key-resend.fs-premium input.email-address{width:100%}.fs-modal.fs-modal-license-key-resend.fs-premium .button-container{float:right;margin-left:7px}@media(max-width: 650px){.fs-modal.fs-modal-license-key-resend.fs-premium .button-container{margin-top:2px}}.rtl .fs-modal.fs-modal-license-key-resend .fs-modal-body .input-container>.email-address-container{padding-left:2px;padding-right:0}.rtl .fs-modal.fs-modal-license-key-resend .fs-modal-body .button-container{float:left;margin-right:7px;margin-left:0}a.show-license-resend-modal{margin-top:4px;display:inline-block}.fs-modal.fs-modal-email-address-update .fs-modal-body input[type=text]{width:100%}.fs-modal.fs-modal-email-address-update p{margin-bottom:0}.fs-modal.fs-modal-email-address-update ul{margin:1em .5em}.fs-modal.fs-modal-email-address-update ul li label span{float:left;margin-top:0}.fs-modal.fs-modal-email-address-update ul li label span:last-child{display:block;float:none;margin-left:20px}.fs-ajax-loader{position:relative;width:170px;height:20px;margin:auto}.fs-ajax-loader .fs-ajax-loader-bar{position:absolute;top:0;background-color:#0074a3;width:20px;height:20px;-webkit-animation-name:bounce_ajaxLoader;-moz-animation-name:bounce_ajaxLoader;-ms-animation-name:bounce_ajaxLoader;-o-animation-name:bounce_ajaxLoader;animation-name:bounce_ajaxLoader;-webkit-animation-duration:1.5s;-moz-animation-duration:1.5s;-ms-animation-duration:1.5s;-o-animation-duration:1.5s;animation-duration:1.5s;animation-iteration-count:infinite;-o-animation-iteration-count:infinite;-ms-animation-iteration-count:infinite;-webkit-animation-iteration-count:infinite;-moz-animation-iteration-count:infinite;-webkit-animation-direction:normal;-moz-animation-direction:normal;-ms-animation-direction:normal;-o-animation-direction:normal;animation-direction:normal;-moz-transform:.3;-o-transform:.3;-ms-transform:.3;-webkit-transform:.3;transform:.3}.fs-ajax-loader .fs-ajax-loader-bar-1{left:0px;animation-delay:0.6s;-o-animation-delay:0.6s;-ms-animation-delay:0.6s;-webkit-animation-delay:0.6s;-moz-animation-delay:0.6s}.fs-ajax-loader .fs-ajax-loader-bar-2{left:19px;animation-delay:0.75s;-o-animation-delay:0.75s;-ms-animation-delay:0.75s;-webkit-animation-delay:0.75s;-moz-animation-delay:0.75s}.fs-ajax-loader .fs-ajax-loader-bar-3{left:38px;animation-delay:0.9s;-o-animation-delay:0.9s;-ms-animation-delay:0.9s;-webkit-animation-delay:0.9s;-moz-animation-delay:0.9s}.fs-ajax-loader .fs-ajax-loader-bar-4{left:57px;animation-delay:1.05s;-o-animation-delay:1.05s;-ms-animation-delay:1.05s;-webkit-animation-delay:1.05s;-moz-animation-delay:1.05s}.fs-ajax-loader .fs-ajax-loader-bar-5{left:76px;animation-delay:1.2s;-o-animation-delay:1.2s;-ms-animation-delay:1.2s;-webkit-animation-delay:1.2s;-moz-animation-delay:1.2s}.fs-ajax-loader .fs-ajax-loader-bar-6{left:95px;animation-delay:1.35s;-o-animation-delay:1.35s;-ms-animation-delay:1.35s;-webkit-animation-delay:1.35s;-moz-animation-delay:1.35s}.fs-ajax-loader .fs-ajax-loader-bar-7{left:114px;animation-delay:1.5s;-o-animation-delay:1.5s;-ms-animation-delay:1.5s;-webkit-animation-delay:1.5s;-moz-animation-delay:1.5s}.fs-ajax-loader .fs-ajax-loader-bar-8{left:133px;animation-delay:1.65s;-o-animation-delay:1.65s;-ms-animation-delay:1.65s;-webkit-animation-delay:1.65s;-moz-animation-delay:1.65s}@-moz-keyframes bounce_ajaxLoader{0%{-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1);background-color:#0074a3}100%{-moz-transform:scale(0.3);-o-transform:scale(0.3);-ms-transform:scale(0.3);-webkit-transform:scale(0.3);transform:scale(0.3);background-color:#fff}}@-ms-keyframes bounce_ajaxLoader{0%{-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1);background-color:#0074a3}100%{-moz-transform:scale(0.3);-o-transform:scale(0.3);-ms-transform:scale(0.3);-webkit-transform:scale(0.3);transform:scale(0.3);background-color:#fff}}@-o-keyframes bounce_ajaxLoader{0%{-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1);background-color:#0074a3}100%{-moz-transform:scale(0.3);-o-transform:scale(0.3);-ms-transform:scale(0.3);-webkit-transform:scale(0.3);transform:scale(0.3);background-color:#fff}}@-webkit-keyframes bounce_ajaxLoader{0%{-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1);background-color:#0074a3}100%{-moz-transform:scale(0.3);-o-transform:scale(0.3);-ms-transform:scale(0.3);-webkit-transform:scale(0.3);transform:scale(0.3);background-color:#fff}}@keyframes bounce_ajaxLoader{0%{-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1);background-color:#0074a3}100%{-moz-transform:scale(0.3);-o-transform:scale(0.3);-ms-transform:scale(0.3);-webkit-transform:scale(0.3);transform:scale(0.3);background-color:#fff}}.fs-modal-auto-install #request-filesystem-credentials-form h2,.fs-modal-auto-install #request-filesystem-credentials-form .request-filesystem-credentials-action-buttons{display:none}.fs-modal-auto-install #request-filesystem-credentials-form input[type=password],.fs-modal-auto-install #request-filesystem-credentials-form input[type=email],.fs-modal-auto-install #request-filesystem-credentials-form input[type=text]{-webkit-appearance:none;padding:10px 10px 5px 10px;width:300px;max-width:100%}.fs-modal-auto-install #request-filesystem-credentials-form>div,.fs-modal-auto-install #request-filesystem-credentials-form label,.fs-modal-auto-install #request-filesystem-credentials-form fieldset{width:300px;max-width:100%;margin:0 auto;display:block}.button-primary.warn{box-shadow:0 1px 0 #d2593c;text-shadow:0 -1px 1px #d2593c,1px 0 1px #d2593c,0 1px 1px #d2593c,-1px 0 1px #d2593c;background:#f56a48;border-color:#ec6544 #d2593c #d2593c}.button-primary.warn:hover{background:#fd6d4a;border-color:#d2593c}.button-primary.warn:focus{box-shadow:0 1px 0 #dd6041,0 0 2px 1px #e4a796}.button-primary.warn:active{background:#dd6041;border-color:#d2593c;box-shadow:inset 0 2px 0 #d2593c}.button-primary.warn.disabled{color:#f5b3a1 !important;background:#e76444 !important;border-color:#d85e40 !important;text-shadow:0 -1px 0 rgba(0,0,0,.1) !important}/*# sourceMappingURL=dialog-boxes.css.map */ diff --git a/assets/css/admin/dialog-boxes.css.map b/assets/css/admin/dialog-boxes.css.map index 5ab26e5a..fd37b06d 100644 --- a/assets/css/admin/dialog-boxes.css.map +++ b/assets/css/admin/dialog-boxes.css.map @@ -1 +1 @@ -{"version":3,"sourceRoot":"","sources":["../../scss/admin/_modal-common.scss","../../scss/_colors.scss","../../scss/_mixins.scss","../../scss/admin/_deactivation-feedback.scss","../../scss/admin/_subscription-cancellation.scss","../../scss/admin/_license-activation.scss","../../scss/admin/_user-change.scss","../../scss/admin/_data-debug-mode.scss","../../scss/admin/_multisite-options.scss","../../scss/admin/_license-key-resend.scss","../../scss/admin/_email-address-update.scss","../../scss/admin/_ajax-loader.scss","../../scss/admin/_auto-install.scss","../../scss/admin/_buttons.scss"],"names":[],"mappings":"AAGA,UACC,eACA,cACA,YACA,WACA,MACA,eACA,aACA,0BAEA,yBAVD,UAWE,mBAEA,eACC,eACA,qBAIF,qBAEC,sBAGD,2BACC,uBACA,kBACA,SACA,mBACA,oBACA,UACA,eACA,YAEA,yBAVD,2BAWE,iBACA,sBACA,kBACA,mBACA,WAEA,qDACC,iBAKH,iBACC,cAEA,wBACC,cAGD,kCACC,QAKD,sCACC,oBCjC4B,QDoC7B,oCACC,iBCtCuB,QD2CxB,mCACC,oBCvCyB,QD0C1B,iCACC,iBC5CoB,QDiDrB,oCACC,oBCnD0B,QDsD3B,kCACC,iBCxDqB,QD6DvB,oDAEC,SACA,mBACA,aAGE,2BACI,6BACA,mBACA,kBACA,kBACN,oBAGM,8BACI,SACA,UACA,yBACA,gBACA,iBACA,cACA,6BACA,oBACA,mCAGJ,qCACI,kBACA,WACA,SACA,eACA,WE9EP,mBF+EO,KE9EV,sBF8EU,KE7EF,cF6EE,KACA,YE+CP,gBF9CO,oBE+CL,cF/CK,oBEgDN,eFhDM,oBEiDV,mBFjDU,oBEkDF,WFlDE,oBAEA,2CACI,WACA,gBAKZ,sGAEC,qBAMJ,yBACC,gBAEA,2BACC,eAGD,4BACC,eACA,kBAGD,6BACC,gBAEA,gCACC,iBACA,eACA,aAKH,2BACC,0BACA,iBAEA,mCACC,aAEA,gDACC,SAMF,yCACC,SACA,aAGD,uCACC,aASS,0CACI,WACA,UAId,gCACC,gBAKH,kBACC,gBG/MA,kHACC,sBAEA,kQACC,WAKD,0FACC,sBACA,YACA,aAGD,yBACC,6DACC,mBAEA,0JACC,iBAGD,mEACC,cAEA,wEACC,mBACA,iBAOL,wIAEC,WACA,iBAEA,kJACC,YAIC,yDACI,wBAEA,4DACI,aACA,kBAKZ,+BACC,aC1DA,wEACC,UACA,iBACA,eACA,gBAIM,iFACI,WACA,QACA,kBAEA,sFACI,YAIR,gFACI,cACA,iBAEA,qFACI,cACA,kBCvBd,0EACC,WAOD,6IACC,WAGD,mDACC,SAIA,0EACC,kBACA,QACA,WACA,iBAGD,wEACC,gBACA,WACA,YACA,cACA,QACA,kBAEA,8EACC,SAQJ,4BACC,eC1CA,2EACC,WAMF,wCACC,WACA,yBAEA,2CACC,cACA,kBAIA,uEACC,qBAGD,sFACC,gBACA,aAIF,0EACC,WAEA,8EACC,cACA,WAEA,sKACC,mBAGD,oFACC,SACA,iBACA,kBAGD,kFACC,WAEA,wFACC,WChDJ,4FACC,WCHH,gCACI,gBACA,sBACA,YAEA,kCACI,qBAEA,wCACI,gBAGJ,2CACI,iBAIR,sDACI,cACA,UAEA,4EACI,iBAEA,iGACI,aAKZ,yDACI,aACA,cAEA,kEACI,0BACA,gBClCR,+DAEI,gBACA,kBAKA,sEAEI,YAGJ,wDAEI,cACA,mBAMJ,qEAEI,WAGJ,mEAEI,YACA,gBAEA,yBALJ,mEAMQ,gBAYJ,oGAEI,iBACA,gBAGJ,4EAEI,WACA,iBACA,cAMhB,4BAEI,eACA,qBChEI,wEACI,WAIR,0CACI,gBAGJ,2CACI,gBAGI,yDACI,WACA,aAEA,oEACI,cACA,WACA,iBClBpB,gBAEI,kBACA,YACA,YACA,YAEA,oCAEI,kBACA,MACA,iBV8BY,QU7BZ,WACA,YT6KJ,yCACA,sCACA,qCACA,oCACA,iCAIA,gCACA,6BACA,4BACA,2BACA,wBAoBA,mCACA,sCACA,uCACA,2CACA,wCApBA,mCACA,gCACA,+BACA,8BACA,2BAhEA,eS5HuB,GT6HrB,aS7HqB,GT8HtB,cS9HsB,GT+H1B,kBS/H0B,GTgIjB,UShIiB,GAKnB,sCAEI,STyLR,qBACA,wBACA,yBACA,6BACA,0BS/LI,sCAEI,UTyLR,sBACA,yBACA,0BACA,8BACA,2BS/LI,sCAEI,UTyLR,qBACA,wBACA,yBACA,6BACA,0BS/LI,sCAEI,UTyLR,sBACA,yBACA,0BACA,8BACA,2BS/LI,sCAEI,UTyLR,qBACA,wBACA,yBACA,6BACA,0BS/LI,sCAEI,UTyLR,sBACA,yBACA,0BACA,8BACA,2BS/LI,sCAEI,WTyLR,qBACA,wBACA,yBACA,6BACA,0BS/LI,sCAEI,WTyLR,sBACA,yBACA,0BACA,8BACA,2BAzIC,kCS5CD,GT6GA,eS3GuB,ST4GrB,aS5GqB,ST6GtB,cS7GsB,ST8G1B,kBS9G0B,ST+GjB,US/GiB,SACnB,iBVKY,QUFhB,KTuGA,eSrGuB,WTsGrB,aStGqB,WTuGtB,cSvGsB,WTwG1B,kBSxG0B,WTyGjB,USzGiB,WACnB,iBA7CI,MTiFN,iCS7CF,GT6GA,eS3GuB,ST4GrB,aS5GqB,ST6GtB,cS7GsB,ST8G1B,kBS9G0B,ST+GjB,US/GiB,SACnB,iBVKY,QUFhB,KTuGA,eSrGuB,WTsGrB,aStGqB,WTuGtB,cSvGsB,WTwG1B,kBSxG0B,WTyGjB,USzGiB,WACnB,iBA7CI,MTkFL,gCS9CH,GT6GA,eS3GuB,ST4GrB,aS5GqB,ST6GtB,cS7GsB,ST8G1B,kBS9G0B,ST+GjB,US/GiB,SACnB,iBVKY,QUFhB,KTuGA,eSrGuB,WTsGrB,aStGqB,WTuGtB,cSvGsB,WTwG1B,kBSxG0B,WTyGjB,USzGiB,WACnB,iBA7CI,MTmFV,qCS/CE,GT6GA,eS3GuB,ST4GrB,aS5GqB,ST6GtB,cS7GsB,ST8G1B,kBS9G0B,ST+GjB,US/GiB,SACnB,iBVKY,QUFhB,KTuGA,eSrGuB,WTsGrB,aStGqB,WTuGtB,cSvGsB,WTwG1B,kBSxG0B,WTyGjB,USzGiB,WACnB,iBA7CI,MToFF,6BShDN,GT6GA,eS3GuB,ST4GrB,aS5GqB,ST6GtB,cS7GsB,ST8G1B,kBS9G0B,ST+GjB,US/GiB,SACnB,iBVKY,QUFhB,KTuGA,eSrGuB,WTsGrB,aStGqB,WTuGtB,cSvGsB,WTwG1B,kBSxG0B,WTyGjB,USzGiB,WACnB,iBA7CI,MCKJ,0KAGI,aAGJ,4OAII,wBACA,2BACA,MAhBI,MAiBJ,eAGJ,uMAII,MAxBI,MAyBJ,eACA,cACA,cC7BZ,qBACI,2BACA,sFACA,WZgD+B,QY/C/B,qCAEA,2BACI,WZ6CmC,QY5CnC,aZsCuB,QYnC3B,2BACI,+CAGJ,4BACI,WZqCkC,QYpClC,aZ6BuB,QY5BvB,iCAGJ,8BACI,yBACA,8BACA,gCACA","file":"dialog-boxes.css"} \ No newline at end of file +{"version":3,"sourceRoot":"","sources":["../../scss/admin/_modal-common.scss","../../scss/_colors.scss","../../scss/_mixins.scss","../../scss/admin/_deactivation-feedback.scss","../../scss/admin/_subscription-cancellation.scss","../../scss/admin/_license-activation.scss","../../scss/admin/_user-change.scss","../../scss/admin/_data-debug-mode.scss","../../scss/admin/_multisite-options.scss","../../scss/admin/_license-key-resend.scss","../../scss/admin/_email-address-update.scss","../../scss/admin/_ajax-loader.scss","../../scss/admin/_auto-install.scss","../../scss/admin/_buttons.scss"],"names":[],"mappings":"AAGA,UACC,eACA,cACA,YACA,WACA,MACA,eACA,aACA,0BAEA,yBAVD,UAWE,mBAEA,eACC,eACA,qBAIF,qBAEC,sBAGD,2BACC,yBACA,kBACA,SACA,mBACA,oBACA,UACA,eACA,YAEA,yBAVD,2BAWE,iBACA,sBACA,kBACA,mBACA,WAEA,qDACC,iBAKH,iBACC,cAEA,wBACC,cAGD,kCACC,QAKD,sCACC,oBCjC4B,QDoC7B,oCACC,iBCtCuB,QD2CxB,mCACC,oBCvCyB,QD0C1B,iCACC,iBC5CoB,QDiDrB,oCACC,oBCnD0B,QDsD3B,kCACC,iBCxDqB,QD6DvB,oDAEC,SACA,mBACA,aAGE,2BACI,6BACA,mBACA,kBACA,kBACN,oBAGM,8BACI,SACA,UACA,yBACA,gBACA,iBACA,cACA,6BACA,oBACA,mCAGJ,qCACI,kBACA,WACA,SACA,eACA,WE9EP,mBF+EO,KE9EV,sBF8EU,KE7EF,cF6EE,KACA,YE+CP,gBF9CO,oBE+CL,cF/CK,oBEgDN,eFhDM,oBEiDV,mBFjDU,oBEkDF,WFlDE,oBAEA,2CACI,WACA,gBAKZ,sGAEC,qBAMJ,yBACC,gBAEA,2BACC,eAGD,4BACC,eACA,kBAGD,6BACC,gBAEA,gCACC,iBACA,eACA,aAKH,2BACC,0BACA,iBAEA,mCACC,aAEA,gDACC,SAMF,yCACC,SACA,aAGD,uCACC,aASS,0CACI,WACA,UAId,gCACC,gBAKH,kBACC,gBG/MA,kHACC,sBAEA,kQACC,WAKD,0FACC,sBACA,YACA,aAGD,yBACC,6DACC,mBAEA,0JACC,iBAGD,mEACC,cAEA,wEACC,mBACA,iBAOL,wIAEC,WACA,iBAEA,kJACC,YAIC,yDACI,wBAEA,4DACI,aACA,kBAKZ,+BACC,aC1DA,wEACC,UACA,iBACA,eACA,gBAIM,iFACI,WACA,QACA,kBAEA,sFACI,YAIR,gFACI,cACA,iBAEA,qFACI,cACA,kBCvBd,0EACC,WAOD,6IACC,WAGD,mDACC,SAIA,0EACC,kBACA,QACA,WACA,iBAGD,wEACC,gBACA,WACA,YACA,cACA,QACA,kBAEA,8EACC,SAQJ,4BACC,eC1CA,2EACC,WAMF,wCACC,WACA,yBAEA,2CACC,cACA,kBAIA,uEACC,qBAGD,sFACC,gBACA,aAIF,0EACC,WAEA,8EACC,cACA,WAEA,sKACC,mBAGD,oFACC,SACA,iBACA,kBAGD,kFACC,WAEA,wFACC,WChDJ,4FACC,WCHH,gCACI,gBACA,sBACA,YAEA,kCACI,qBAEA,wCACI,gBAGJ,2CACI,iBAIR,sDACI,cACA,UAEA,4EACI,iBAEA,iGACI,aAKZ,yDACI,aACA,cAEA,kEACI,0BACA,gBClCR,+DAEI,gBACA,kBAKA,sEAEI,YAGJ,wDAEI,cACA,mBAMJ,qEAEI,WAGJ,mEAEI,YACA,gBAEA,yBALJ,mEAMQ,gBAYJ,oGAEI,iBACA,gBAGJ,4EAEI,WACA,iBACA,cAMhB,4BAEI,eACA,qBChEI,wEACI,WAIR,0CACI,gBAGJ,2CACI,gBAGI,yDACI,WACA,aAEA,oEACI,cACA,WACA,iBClBpB,gBAEI,kBACA,YACA,YACA,YAEA,oCAEI,kBACA,MACA,iBV8BY,QU7BZ,WACA,YT6KJ,yCACA,sCACA,qCACA,oCACA,iCAIA,gCACA,6BACA,4BACA,2BACA,wBAoBA,mCACA,sCACA,uCACA,2CACA,wCApBA,mCACA,gCACA,+BACA,8BACA,2BAhEA,eS5HuB,GT6HrB,aS7HqB,GT8HtB,cS9HsB,GT+H1B,kBS/H0B,GTgIjB,UShIiB,GAKnB,sCAEI,STyLR,qBACA,wBACA,yBACA,6BACA,0BS/LI,sCAEI,UTyLR,sBACA,yBACA,0BACA,8BACA,2BS/LI,sCAEI,UTyLR,qBACA,wBACA,yBACA,6BACA,0BS/LI,sCAEI,UTyLR,sBACA,yBACA,0BACA,8BACA,2BS/LI,sCAEI,UTyLR,qBACA,wBACA,yBACA,6BACA,0BS/LI,sCAEI,UTyLR,sBACA,yBACA,0BACA,8BACA,2BS/LI,sCAEI,WTyLR,qBACA,wBACA,yBACA,6BACA,0BS/LI,sCAEI,WTyLR,sBACA,yBACA,0BACA,8BACA,2BAzIC,kCS5CD,GT6GA,eS3GuB,ST4GrB,aS5GqB,ST6GtB,cS7GsB,ST8G1B,kBS9G0B,ST+GjB,US/GiB,SACnB,iBVKY,QUFhB,KTuGA,eSrGuB,WTsGrB,aStGqB,WTuGtB,cSvGsB,WTwG1B,kBSxG0B,WTyGjB,USzGiB,WACnB,iBA7CI,MTiFN,iCS7CF,GT6GA,eS3GuB,ST4GrB,aS5GqB,ST6GtB,cS7GsB,ST8G1B,kBS9G0B,ST+GjB,US/GiB,SACnB,iBVKY,QUFhB,KTuGA,eSrGuB,WTsGrB,aStGqB,WTuGtB,cSvGsB,WTwG1B,kBSxG0B,WTyGjB,USzGiB,WACnB,iBA7CI,MTkFL,gCS9CH,GT6GA,eS3GuB,ST4GrB,aS5GqB,ST6GtB,cS7GsB,ST8G1B,kBS9G0B,ST+GjB,US/GiB,SACnB,iBVKY,QUFhB,KTuGA,eSrGuB,WTsGrB,aStGqB,WTuGtB,cSvGsB,WTwG1B,kBSxG0B,WTyGjB,USzGiB,WACnB,iBA7CI,MTmFV,qCS/CE,GT6GA,eS3GuB,ST4GrB,aS5GqB,ST6GtB,cS7GsB,ST8G1B,kBS9G0B,ST+GjB,US/GiB,SACnB,iBVKY,QUFhB,KTuGA,eSrGuB,WTsGrB,aStGqB,WTuGtB,cSvGsB,WTwG1B,kBSxG0B,WTyGjB,USzGiB,WACnB,iBA7CI,MToFF,6BShDN,GT6GA,eS3GuB,ST4GrB,aS5GqB,ST6GtB,cS7GsB,ST8G1B,kBS9G0B,ST+GjB,US/GiB,SACnB,iBVKY,QUFhB,KTuGA,eSrGuB,WTsGrB,aStGqB,WTuGtB,cSvGsB,WTwG1B,kBSxG0B,WTyGjB,USzGiB,WACnB,iBA7CI,MCKJ,0KAGI,aAGJ,4OAII,wBACA,2BACA,MAhBI,MAiBJ,eAGJ,uMAII,MAxBI,MAyBJ,eACA,cACA,cC7BZ,qBACI,2BACA,sFACA,WZgD+B,QY/C/B,qCAEA,2BACI,WZ6CmC,QY5CnC,aZsCuB,QYnC3B,2BACI,+CAGJ,4BACI,WZqCkC,QYpClC,aZ6BuB,QY5BvB,iCAGJ,8BACI,yBACA,8BACA,gCACA","file":"dialog-boxes.css"} \ No newline at end of file diff --git a/assets/css/admin/gdpr-optin-notice.css b/assets/css/admin/gdpr-optin-notice.css index fb934ff5..9085c7a8 100644 --- a/assets/css/admin/gdpr-optin-notice.css +++ b/assets/css/admin/gdpr-optin-notice.css @@ -1 +1 @@ -.fs-notice[data-id^=gdpr_optin_actions] .underlined{text-decoration:underline}.fs-notice[data-id^=gdpr_optin_actions] ul .button,.fs-notice[data-id^=gdpr_optin_actions] ul .action-description{vertical-align:middle}.fs-notice[data-id^=gdpr_optin_actions] ul .action-description{display:inline-block;margin-left:3px} +.fs-notice[data-id^=gdpr_optin_actions] .underlined{text-decoration:underline}.fs-notice[data-id^=gdpr_optin_actions] ul .button,.fs-notice[data-id^=gdpr_optin_actions] ul .action-description{vertical-align:middle}.fs-notice[data-id^=gdpr_optin_actions] ul .action-description{display:inline-block;margin-left:3px}/*# sourceMappingURL=gdpr-optin-notice.css.map */ diff --git a/assets/css/admin/optout.css b/assets/css/admin/optout.css index 6b0d5e26..ae885056 100644 --- a/assets/css/admin/optout.css +++ b/assets/css/admin/optout.css @@ -1 +1 @@ -.fs-tooltip-trigger{position:relative}.fs-tooltip-trigger:not(a){cursor:help}.fs-tooltip-trigger .dashicons{float:none !important}.fs-tooltip-trigger .fs-tooltip{opacity:0;visibility:hidden;-moz-transition:opacity .3s ease-in-out;-o-transition:opacity .3s ease-in-out;-ms-transition:opacity .3s ease-in-out;-webkit-transition:opacity .3s ease-in-out;transition:opacity .3s ease-in-out;position:absolute;background:rgba(0,0,0,.8);color:#fff !important;font-family:"arial",serif;font-size:12px;padding:10px;z-index:999999;bottom:100%;margin-bottom:5px;left:-17px;right:0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;-moz-box-shadow:1px 1px 1px rgba(0,0,0,.2);-webkit-box-shadow:1px 1px 1px rgba(0,0,0,.2);box-shadow:1px 1px 1px rgba(0,0,0,.2);line-height:1.3em;font-weight:bold;text-align:left;text-transform:none !important}.rtl .fs-tooltip-trigger .fs-tooltip{text-align:right;left:auto;right:-17px}.fs-tooltip-trigger .fs-tooltip::after{content:" ";display:block;width:0;height:0;border-style:solid;border-width:5px 5px 0 5px;border-color:rgba(0,0,0,.8) transparent transparent transparent;position:absolute;top:100%;left:21px}.rtl .fs-tooltip-trigger .fs-tooltip::after{right:21px;left:auto}.fs-tooltip-trigger:hover .fs-tooltip{visibility:visible;opacity:1}.fs-permissions .fs-permission.fs-disabled{color:#aaa}.fs-permissions .fs-permission.fs-disabled .fs-permission-description span{color:#aaa}.fs-permissions .fs-permission .fs-switch-feedback{position:absolute;right:15px;top:52px}.fs-permissions ul{height:0;overflow:hidden;margin:0}.fs-permissions ul li{padding:17px 15px;margin:0;position:relative}.fs-permissions ul li>i.dashicons{float:left;font-size:30px;width:30px;height:30px;padding:5px}.fs-permissions ul li .fs-switch{float:right}.fs-permissions ul li .fs-permission-description{margin-left:55px}.fs-permissions ul li .fs-permission-description span{font-size:14px;font-weight:500;color:#23282d}.fs-permissions ul li .fs-permission-description .fs-tooltip{font-size:13px;font-weight:bold}.fs-permissions ul li .fs-permission-description .fs-tooltip-trigger .dashicons{margin:-1px 2px 0 2px}.fs-permissions ul li .fs-permission-description p{margin:2px 0 0 0}.fs-permissions.fs-open{background:#fff}.fs-permissions.fs-open ul{overflow:initial;height:auto;margin:20px 0 10px 0}.fs-permissions .fs-switch-feedback .fs-ajax-spinner{margin-right:10px}.fs-permissions .fs-switch-feedback.success{color:#71ae00}.rtl .fs-permissions .fs-switch-feedback{right:auto;left:15px}.rtl .fs-permissions .fs-switch-feedback .fs-ajax-spinner{margin-left:10px;margin-right:0}.rtl .fs-permissions ul li .fs-permission-description{margin-right:55px;margin-left:0}.rtl .fs-permissions ul li .fs-switch{float:left}.rtl .fs-permissions ul li i.dashicons{float:right}.fs-modal-opt-out .fs-modal-footer .fs-opt-out-button{line-height:30px;margin-right:10px}.fs-modal-opt-out .fs-permissions{margin-top:0 !important}.fs-modal-opt-out .fs-permissions .fs-permissions-section--header .fs-group-opt-out-button{float:right;line-height:1.1em}.fs-modal-opt-out .fs-permissions .fs-permissions-section--header .fs-switch-feedback{float:right;line-height:1.1em;margin-right:10px}.fs-modal-opt-out .fs-permissions .fs-permissions-section--header .fs-switch-feedback .fs-ajax-spinner{margin:-2px 0 0}.fs-modal-opt-out .fs-permissions .fs-permissions-section--header-title{font-size:1.1em;font-weight:600;text-transform:uppercase;display:block;line-height:1.1em;margin:.5em 0}.fs-modal-opt-out .fs-permissions .fs-permissions-section--desc{margin-top:0}.fs-modal-opt-out .fs-permissions hr{border:0;border-top:#eee solid 1px;margin:25px 0 20px 0}.fs-modal-opt-out .fs-permissions ul{border:1px solid #c3c4c7;border-radius:3px;margin:10px 0 0 0;box-shadow:0 1px 1px rgba(0,0,0,.04)}.fs-modal-opt-out .fs-permissions ul li{border-bottom:1px solid #d7dde1;border-left:4px solid #72aee6}.rtl .fs-modal-opt-out .fs-permissions ul li{border-left:none;border-right:4px solid #72aee6}.fs-modal-opt-out .fs-permissions ul li.fs-disabled{border-left-color:rgba(114,174,230,0)}.fs-modal-opt-out .fs-permissions ul li:last-child{border-bottom:none} +.fs-tooltip-trigger{position:relative}.fs-tooltip-trigger:not(a){cursor:help}.fs-tooltip-trigger .dashicons{float:none !important}.fs-tooltip-trigger .fs-tooltip{opacity:0;visibility:hidden;-moz-transition:opacity .3s ease-in-out;-o-transition:opacity .3s ease-in-out;-ms-transition:opacity .3s ease-in-out;-webkit-transition:opacity .3s ease-in-out;transition:opacity .3s ease-in-out;position:absolute;background:rgba(0,0,0,.8);color:#fff !important;font-family:"arial",serif;font-size:12px;padding:10px;z-index:999999;bottom:100%;margin-bottom:5px;left:-17px;right:0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;-moz-box-shadow:1px 1px 1px rgba(0,0,0,.2);-webkit-box-shadow:1px 1px 1px rgba(0,0,0,.2);box-shadow:1px 1px 1px rgba(0,0,0,.2);line-height:1.3em;font-weight:bold;text-align:left;text-transform:none !important}.rtl .fs-tooltip-trigger .fs-tooltip{text-align:right;left:auto;right:-17px}.fs-tooltip-trigger .fs-tooltip::after{content:" ";display:block;width:0;height:0;border-style:solid;border-width:5px 5px 0 5px;border-color:rgba(0,0,0,.8) rgba(0,0,0,0) rgba(0,0,0,0) rgba(0,0,0,0);position:absolute;top:100%;left:21px}.rtl .fs-tooltip-trigger .fs-tooltip::after{right:21px;left:auto}.fs-tooltip-trigger:hover .fs-tooltip{visibility:visible;opacity:1}.fs-permissions .fs-permission.fs-disabled{color:#aaa}.fs-permissions .fs-permission.fs-disabled .fs-permission-description span{color:#aaa}.fs-permissions .fs-permission .fs-switch-feedback{position:absolute;right:15px;top:52px}.fs-permissions ul{height:0;overflow:hidden;margin:0}.fs-permissions ul li{padding:17px 15px;margin:0;position:relative}.fs-permissions ul li>i.dashicons{float:left;font-size:30px;width:30px;height:30px;padding:5px}.fs-permissions ul li .fs-switch{float:right}.fs-permissions ul li .fs-permission-description{margin-left:55px}.fs-permissions ul li .fs-permission-description span{font-size:14px;font-weight:500;color:#23282d}.fs-permissions ul li .fs-permission-description .fs-tooltip{font-size:13px;font-weight:bold}.fs-permissions ul li .fs-permission-description .fs-tooltip-trigger .dashicons{margin:-1px 2px 0 2px}.fs-permissions ul li .fs-permission-description p{margin:2px 0 0 0}.fs-permissions.fs-open{background:#fff}.fs-permissions.fs-open ul{overflow:initial;height:auto;margin:20px 0 10px 0}.fs-permissions .fs-switch-feedback .fs-ajax-spinner{margin-right:10px}.fs-permissions .fs-switch-feedback.success{color:#71ae00}.rtl .fs-permissions .fs-switch-feedback{right:auto;left:15px}.rtl .fs-permissions .fs-switch-feedback .fs-ajax-spinner{margin-left:10px;margin-right:0}.rtl .fs-permissions ul li .fs-permission-description{margin-right:55px;margin-left:0}.rtl .fs-permissions ul li .fs-switch{float:left}.rtl .fs-permissions ul li i.dashicons{float:right}.fs-modal-opt-out .fs-modal-footer .fs-opt-out-button{line-height:30px;margin-right:10px}.fs-modal-opt-out .fs-permissions{margin-top:0 !important}.fs-modal-opt-out .fs-permissions .fs-permissions-section--header .fs-group-opt-out-button{float:right;line-height:1.1em}.fs-modal-opt-out .fs-permissions .fs-permissions-section--header .fs-switch-feedback{float:right;line-height:1.1em;margin-right:10px}.fs-modal-opt-out .fs-permissions .fs-permissions-section--header .fs-switch-feedback .fs-ajax-spinner{margin:-2px 0 0}.fs-modal-opt-out .fs-permissions .fs-permissions-section--header-title{font-size:1.1em;font-weight:600;text-transform:uppercase;display:block;line-height:1.1em;margin:.5em 0}.fs-modal-opt-out .fs-permissions .fs-permissions-section--desc{margin-top:0}.fs-modal-opt-out .fs-permissions hr{border:0;border-top:#eee solid 1px;margin:25px 0 20px 0}.fs-modal-opt-out .fs-permissions ul{border:1px solid #c3c4c7;border-radius:3px;margin:10px 0 0 0;box-shadow:0 1px 1px rgba(0,0,0,.04)}.fs-modal-opt-out .fs-permissions ul li{border-bottom:1px solid #d7dde1;border-left:4px solid #72aee6}.rtl .fs-modal-opt-out .fs-permissions ul li{border-left:none;border-right:4px solid #72aee6}.fs-modal-opt-out .fs-permissions ul li.fs-disabled{border-left-color:rgba(114,174,230,0)}.fs-modal-opt-out .fs-permissions ul li:last-child{border-bottom:none}/*# sourceMappingURL=optout.css.map */ diff --git a/assets/css/admin/optout.css.map b/assets/css/admin/optout.css.map index 81931a41..6d768db7 100644 --- a/assets/css/admin/optout.css.map +++ b/assets/css/admin/optout.css.map @@ -1 +1 @@ -{"version":3,"sourceRoot":"","sources":["../../scss/admin/_tooltip.scss","../../scss/_mixins.scss","../../scss/_colors.scss","../../scss/admin/_permissions.scss","../../scss/admin/optout.scss"],"names":[],"mappings":"AAEA,oBAOI,kBALA,2BAEI,YAKJ,+BACI,sBAGJ,gCAEI,UACA,kBC4JH,gBD3JG,wBC4JD,cD5JC,wBC6JF,eD7JE,wBC8JN,mBD9JM,wBC+JE,WD/JF,wBACA,kBACA,WE+DY,eF9DZ,sBACA,0BACA,eACA,aACA,eACA,YACA,kBACA,WACA,QCiBH,mBDhBG,ICiBN,sBDjBM,ICkBE,cDlBF,ICyBH,gBDxBG,2BCyBN,mBDzBM,2BC0BE,WD1BF,2BACA,kBACA,iBACA,gBACA,+BAEA,qCAEI,iBACA,UACA,YAGJ,uCAEI,YACA,cACA,QACA,SACA,mBACA,2BACA,gEACA,kBACA,SACA,UAEA,4CAEI,WACA,UAOR,sCAEI,mBACA,UGhEJ,2CACI,WAEA,2EACI,WAIR,mDACI,kBACA,WACA,SAIR,mBACI,SACA,gBACA,SAEA,sBACI,kBACA,SACA,kBAEA,kCACI,WACA,UA/BO,KAgCP,MAhCO,KAiCP,OAjCO,KAkCP,YAGJ,iCACI,YAGJ,iDACI,iBAEA,sDACI,eACA,gBACA,cAGJ,6DACI,eACA,iBAGJ,gFACI,sBAGJ,mDACI,iBAMhB,wBACI,gBAEA,2BACI,iBACA,YACA,qBAKJ,qDACI,kBAGJ,4CACI,MDlEU,QCqEd,yCAEI,WACA,UAEA,0DACI,iBACA,eAUA,sDACI,kBACA,cAGJ,sCACI,WAGJ,uCACI,YC3GZ,sDACI,iBACA,kBAIR,kCACI,wBAEA,2FACI,YACA,kBAGJ,sFACI,YACA,kBACA,kBAEA,uGACI,gBAIR,wEACI,gBACA,gBACA,yBACA,cACA,kBACA,cAGJ,gEACI,aAGJ,qCACI,SACA,0BACA,qBAGJ,qCACI,yBACA,kBACA,kBACA,qCAEA,wCACI,gCACA,8BAEA,6CACI,iBACA,+BAGJ,oDACI,sCAGJ,mDACI","file":"optout.css"} \ No newline at end of file +{"version":3,"sourceRoot":"","sources":["../../scss/admin/_tooltip.scss","../../scss/_mixins.scss","../../scss/_colors.scss","../../scss/admin/_permissions.scss","../../scss/admin/optout.scss"],"names":[],"mappings":"AAEA,oBAOI,kBALA,2BAEI,YAKJ,+BACI,sBAGJ,gCAEI,UACA,kBC4JH,gBD3JG,wBC4JD,cD5JC,wBC6JF,eD7JE,wBC8JN,mBD9JM,wBC+JE,WD/JF,wBACA,kBACA,WE+DY,eF9DZ,sBACA,0BACA,eACA,aACA,eACA,YACA,kBACA,WACA,QCiBH,mBDhBG,ICiBN,sBDjBM,ICkBE,cDlBF,ICyBH,gBDxBG,2BCyBN,mBDzBM,2BC0BE,WD1BF,2BACA,kBACA,iBACA,gBACA,+BAEA,qCAEI,iBACA,UACA,YAGJ,uCAEI,YACA,cACA,QACA,SACA,mBACA,2BACA,sEACA,kBACA,SACA,UAEA,4CAEI,WACA,UAOR,sCAEI,mBACA,UGhEJ,2CACI,WAEA,2EACI,WAIR,mDACI,kBACA,WACA,SAIR,mBACI,SACA,gBACA,SAEA,sBACI,kBACA,SACA,kBAEA,kCACI,WACA,UA/BO,KAgCP,MAhCO,KAiCP,OAjCO,KAkCP,YAGJ,iCACI,YAGJ,iDACI,iBAEA,sDACI,eACA,gBACA,cAGJ,6DACI,eACA,iBAGJ,gFACI,sBAGJ,mDACI,iBAMhB,wBACI,gBAEA,2BACI,iBACA,YACA,qBAKJ,qDACI,kBAGJ,4CACI,MDlEU,QCqEd,yCAEI,WACA,UAEA,0DACI,iBACA,eAUA,sDACI,kBACA,cAGJ,sCACI,WAGJ,uCACI,YC3GZ,sDACI,iBACA,kBAIR,kCACI,wBAEA,2FACI,YACA,kBAGJ,sFACI,YACA,kBACA,kBAEA,uGACI,gBAIR,wEACI,gBACA,gBACA,yBACA,cACA,kBACA,cAGJ,gEACI,aAGJ,qCACI,SACA,0BACA,qBAGJ,qCACI,yBACA,kBACA,kBACA,qCAEA,wCACI,gCACA,8BAEA,6CACI,iBACA,+BAGJ,oDACI,sCAGJ,mDACI","file":"optout.css"} \ No newline at end of file diff --git a/assets/css/admin/plugins.css b/assets/css/admin/plugins.css index 8d76fa3f..3c786d5c 100644 --- a/assets/css/admin/plugins.css +++ b/assets/css/admin/plugins.css @@ -1 +1 @@ -label.fs-tag,span.fs-tag{background:#ffba00;color:#fff;display:inline-block;border-radius:3px;padding:5px;font-size:11px;line-height:11px;vertical-align:baseline}label.fs-tag.fs-warn,span.fs-tag.fs-warn{background:#ffba00}label.fs-tag.fs-info,span.fs-tag.fs-info{background:#00a0d2}label.fs-tag.fs-success,span.fs-tag.fs-success{background:#46b450}label.fs-tag.fs-error,span.fs-tag.fs-error{background:#dc3232}.wp-list-table.plugins .plugin-title span.fs-tag{display:inline-block;margin-left:5px;line-height:10px} +label.fs-tag,span.fs-tag{background:#ffba00;color:#fff;display:inline-block;border-radius:3px;padding:5px;font-size:11px;line-height:11px;vertical-align:baseline}label.fs-tag.fs-warn,span.fs-tag.fs-warn{background:#ffba00}label.fs-tag.fs-info,span.fs-tag.fs-info{background:#00a0d2}label.fs-tag.fs-success,span.fs-tag.fs-success{background:#46b450}label.fs-tag.fs-error,span.fs-tag.fs-error{background:#dc3232}.wp-list-table.plugins .plugin-title span.fs-tag{display:inline-block;margin-left:5px;line-height:10px}/*# sourceMappingURL=plugins.css.map */ diff --git a/assets/css/customizer.css b/assets/css/customizer.css index d59b381c..bac44a70 100644 --- a/assets/css/customizer.css +++ b/assets/css/customizer.css @@ -1 +1 @@ -#fs_customizer_upsell .fs-customizer-plan{padding:10px 20px 20px 20px;border-radius:3px;background:#fff}#fs_customizer_upsell .fs-customizer-plan h2{position:relative;margin:0;line-height:2em;text-transform:uppercase}#fs_customizer_upsell .fs-customizer-plan h2 .button-link{top:-2px}#fs_customizer_upsell .fs-feature{position:relative}#fs_customizer_upsell .dashicons-yes{color:#0085ba;font-size:2em;vertical-align:bottom;margin-left:-7px;margin-right:10px}.rtl #fs_customizer_upsell .dashicons-yes{margin-left:10px;margin-right:-7px}#fs_customizer_upsell .dashicons-editor-help{color:#bbb;cursor:help}#fs_customizer_upsell .dashicons-editor-help .fs-feature-desc{opacity:0;visibility:hidden;-moz-transition:opacity .3s ease-in-out;-o-transition:opacity .3s ease-in-out;-ms-transition:opacity .3s ease-in-out;-webkit-transition:opacity .3s ease-in-out;transition:opacity .3s ease-in-out;position:absolute;background:#000;color:#fff;font-family:"arial",serif;font-size:12px;padding:10px;z-index:999999;bottom:100%;margin-bottom:5px;left:0;right:0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;-moz-box-shadow:1px 1px 1px rgba(0,0,0,.2);-webkit-box-shadow:1px 1px 1px rgba(0,0,0,.2);box-shadow:1px 1px 1px rgba(0,0,0,.2);line-height:1.3em;font-weight:bold;text-align:left}.rtl #fs_customizer_upsell .dashicons-editor-help .fs-feature-desc{text-align:right}#fs_customizer_upsell .dashicons-editor-help .fs-feature-desc::after{content:" ";display:block;width:0;height:0;border-style:solid;border-width:5px 5px 0 5px;border-color:#000 transparent transparent transparent;position:absolute;top:100%;left:21px}.rtl #fs_customizer_upsell .dashicons-editor-help .fs-feature-desc::after{right:21px;left:auto}#fs_customizer_upsell .dashicons-editor-help:hover .fs-feature-desc{visibility:visible;opacity:1}#fs_customizer_upsell .button-primary{display:block;text-align:center;margin-top:10px}#fs_customizer_support{display:block !important}#fs_customizer_support .button{float:right}#fs_customizer_support .button-group{width:100%;display:block;margin-top:10px}#fs_customizer_support .button-group .button{float:none;width:50%;text-align:center}#customize-theme-controls #accordion-section-freemius_upsell{border-top:1px solid #0085ba !important;border-bottom:1px solid #0085ba !important}#customize-theme-controls #accordion-section-freemius_upsell h3.accordion-section-title{color:#fff;background-color:#0085ba;border-left:4px solid #0085ba;transition:.15s background-color ease-in-out,.15s border-color ease-in-out;outline:none;border-bottom:none !important}#customize-theme-controls #accordion-section-freemius_upsell h3.accordion-section-title:hover{background-color:#008ec2;border-left-color:#0073aa}#customize-theme-controls #accordion-section-freemius_upsell h3.accordion-section-title:after{color:#fff}#customize-theme-controls #accordion-section-freemius_upsell .rtl h3.accordion-section-title{border-left:none;border-right:4px solid #0085ba}#customize-theme-controls #accordion-section-freemius_upsell .rtl h3.accordion-section-title:hover{border-right-color:#0073aa} +#fs_customizer_upsell .fs-customizer-plan{padding:10px 20px 20px 20px;border-radius:3px;background:#fff}#fs_customizer_upsell .fs-customizer-plan h2{position:relative;margin:0;line-height:2em;text-transform:uppercase}#fs_customizer_upsell .fs-customizer-plan h2 .button-link{top:-2px}#fs_customizer_upsell .fs-feature{position:relative}#fs_customizer_upsell .dashicons-yes{color:#0085ba;font-size:2em;vertical-align:bottom;margin-left:-7px;margin-right:10px}.rtl #fs_customizer_upsell .dashicons-yes{margin-left:10px;margin-right:-7px}#fs_customizer_upsell .dashicons-editor-help{color:#bbb;cursor:help}#fs_customizer_upsell .dashicons-editor-help .fs-feature-desc{opacity:0;visibility:hidden;-moz-transition:opacity .3s ease-in-out;-o-transition:opacity .3s ease-in-out;-ms-transition:opacity .3s ease-in-out;-webkit-transition:opacity .3s ease-in-out;transition:opacity .3s ease-in-out;position:absolute;background:#000;color:#fff;font-family:"arial",serif;font-size:12px;padding:10px;z-index:999999;bottom:100%;margin-bottom:5px;left:0;right:0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;-moz-box-shadow:1px 1px 1px rgba(0,0,0,.2);-webkit-box-shadow:1px 1px 1px rgba(0,0,0,.2);box-shadow:1px 1px 1px rgba(0,0,0,.2);line-height:1.3em;font-weight:bold;text-align:left}.rtl #fs_customizer_upsell .dashicons-editor-help .fs-feature-desc{text-align:right}#fs_customizer_upsell .dashicons-editor-help .fs-feature-desc::after{content:" ";display:block;width:0;height:0;border-style:solid;border-width:5px 5px 0 5px;border-color:#000 rgba(0,0,0,0) rgba(0,0,0,0) rgba(0,0,0,0);position:absolute;top:100%;left:21px}.rtl #fs_customizer_upsell .dashicons-editor-help .fs-feature-desc::after{right:21px;left:auto}#fs_customizer_upsell .dashicons-editor-help:hover .fs-feature-desc{visibility:visible;opacity:1}#fs_customizer_upsell .button-primary{display:block;text-align:center;margin-top:10px}#fs_customizer_support{display:block !important}#fs_customizer_support .button{float:right}#fs_customizer_support .button-group{width:100%;display:block;margin-top:10px}#fs_customizer_support .button-group .button{float:none;width:50%;text-align:center}#customize-theme-controls #accordion-section-freemius_upsell{border-top:1px solid #0085ba !important;border-bottom:1px solid #0085ba !important}#customize-theme-controls #accordion-section-freemius_upsell h3.accordion-section-title{color:#fff;background-color:#0085ba;border-left:4px solid #0085ba;transition:.15s background-color ease-in-out,.15s border-color ease-in-out;outline:none;border-bottom:none !important}#customize-theme-controls #accordion-section-freemius_upsell h3.accordion-section-title:hover{background-color:#008ec2;border-left-color:#0073aa}#customize-theme-controls #accordion-section-freemius_upsell h3.accordion-section-title:after{color:#fff}#customize-theme-controls #accordion-section-freemius_upsell .rtl h3.accordion-section-title{border-left:none;border-right:4px solid #0085ba}#customize-theme-controls #accordion-section-freemius_upsell .rtl h3.accordion-section-title:hover{border-right-color:#0073aa}/*# sourceMappingURL=customizer.css.map */ diff --git a/assets/css/customizer.css.map b/assets/css/customizer.css.map index c5cb8c7e..9bc02c88 100644 --- a/assets/css/customizer.css.map +++ b/assets/css/customizer.css.map @@ -1 +1 @@ -{"version":3,"sourceRoot":"","sources":["../scss/customizer.scss","../scss/_mixins.scss","../scss/_colors.scss"],"names":[],"mappings":"AAGI,0CACI,4BACA,kBACA,gBAEA,6CACI,kBACA,SACA,gBACA,yBAEA,0DACI,SAKZ,kCACI,kBAGJ,qCACI,cACA,cACA,sBACA,iBACA,kBAEA,0CACI,iBACA,kBAIR,6CAEI,WACA,YAIA,8DACI,UACA,kBCgIP,gBD/HO,wBCgIL,cDhIK,wBCiIN,eDjIM,wBCkIV,mBDlIU,wBCmIF,WDnIE,wBAEA,kBACA,WARY,KASZ,WACA,0BACA,eACA,aACA,eACA,YACA,kBACA,OACA,QCZP,mBDaO,ICZV,sBDYU,ICXF,cDWE,ICJP,gBDKO,2BCJV,mBDIU,2BCHF,WDGE,2BACA,kBACA,iBACA,gBAEA,mEAEI,iBAGJ,qEACI,YACA,cACA,QACA,SACA,mBACA,2BACA,sDACA,kBACA,SACA,UAEA,0EACI,WACA,UAMR,oEACI,mBACA,UAKZ,sCACI,cACA,kBACA,gBAIR,uBAEI,yBAEA,+BACI,YAGJ,qCACI,WACA,cACA,gBAEA,6CACI,WACA,UACA,kBAKZ,6DAEI,wCACA,2CAEA,wFAEI,ME5EkB,KF6ElB,iBE5E6B,QF6E7B,8BACA,2EACA,aACA,8BAEA,8FAEI,iBEnF+B,QFoF/B,kBElFgC,QFqFpC,8FACI,ME1Fc,KFgGlB,6FAEI,iBACA,+BAEA,mGAEI,mBEnG4B","file":"customizer.css"} \ No newline at end of file +{"version":3,"sourceRoot":"","sources":["../scss/customizer.scss","../scss/_mixins.scss","../scss/_colors.scss"],"names":[],"mappings":"AAGI,0CACI,4BACA,kBACA,gBAEA,6CACI,kBACA,SACA,gBACA,yBAEA,0DACI,SAKZ,kCACI,kBAGJ,qCACI,cACA,cACA,sBACA,iBACA,kBAEA,0CACI,iBACA,kBAIR,6CAEI,WACA,YAIA,8DACI,UACA,kBCgIP,gBD/HO,wBCgIL,cDhIK,wBCiIN,eDjIM,wBCkIV,mBDlIU,wBCmIF,WDnIE,wBAEA,kBACA,WARY,KASZ,WACA,0BACA,eACA,aACA,eACA,YACA,kBACA,OACA,QCZP,mBDaO,ICZV,sBDYU,ICXF,cDWE,ICJP,gBDKO,2BCJV,mBDIU,2BCHF,WDGE,2BACA,kBACA,iBACA,gBAEA,mEAEI,iBAGJ,qEACI,YACA,cACA,QACA,SACA,mBACA,2BACA,4DACA,kBACA,SACA,UAEA,0EACI,WACA,UAMR,oEACI,mBACA,UAKZ,sCACI,cACA,kBACA,gBAIR,uBAEI,yBAEA,+BACI,YAGJ,qCACI,WACA,cACA,gBAEA,6CACI,WACA,UACA,kBAKZ,6DAEI,wCACA,2CAEA,wFAEI,ME5EkB,KF6ElB,iBE5E6B,QF6E7B,8BACA,2EACA,aACA,8BAEA,8FAEI,iBEnF+B,QFoF/B,kBElFgC,QFqFpC,8FACI,ME1Fc,KFgGlB,6FAEI,iBACA,+BAEA,mGAEI,mBEnG4B","file":"customizer.css"} \ No newline at end of file From cced4c25f49ec7d00bae92ecee992fb37586f297 Mon Sep 17 00:00:00 2001 From: Swashata Ghosh Date: Tue, 26 Sep 2023 16:57:38 +0530 Subject: [PATCH 21/24] [garbage-collector] [configuration] Make garbage collector expiration time configurable. --- includes/class-freemius.php | 4 ++-- includes/class-fs-garbage-collector.php | 4 +++- includes/fs-core-functions.php | 17 +++++++++++++++++ 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/includes/class-freemius.php b/includes/class-freemius.php index b776c209..c7cdcd87 100755 --- a/includes/class-freemius.php +++ b/includes/class-freemius.php @@ -1357,8 +1357,8 @@ function _plugins_loaded() { } function _run_garbage_collector() { - // @todo - Remove this check once the garbage collector is ready. - if ( ! defined( 'WP_FS__ENABLE_GARBAGE_COLLECTOR' ) || true !== WP_FS__ENABLE_GARBAGE_COLLECTOR ) { + // @todo - Remove this check once the garbage collector is ready to be out of beta. + if ( true !== fs_get_optional_constant( 'WP_FS__ENABLE_GARBAGE_COLLECTOR', false ) ) { return; } diff --git a/includes/class-fs-garbage-collector.php b/includes/class-fs-garbage-collector.php index 1c5d413d..ad7f451e 100755 --- a/includes/class-fs-garbage-collector.php +++ b/includes/class-fs-garbage-collector.php @@ -195,7 +195,9 @@ private function is_product_active( $slug ) { } } - if ( $this->get_last_load_timestamp( $slug ) > ( time() - ( WP_FS__TIME_WEEK_IN_SEC * 4 ) ) ) { + $expiration_time = fs_get_optional_constant( 'WP_FS__GARBAGE_COLLECTOR_EXPIRATION_TIME_SECS', ( WP_FS__TIME_WEEK_IN_SEC * 4 ) ); + + if ( $this->get_last_load_timestamp( $slug ) > ( time() - $expiration_time ) ) { // Last activation was within the last 4 weeks. return true; } diff --git a/includes/fs-core-functions.php b/includes/fs-core-functions.php index 108e4ba0..0fe92f78 100755 --- a/includes/fs-core-functions.php +++ b/includes/fs-core-functions.php @@ -1485,4 +1485,21 @@ function fs_apply_filter( $module_unique_affix, $tag, $value ) { array_slice( $args, 2 ) ) ); } + } + + if ( ! function_exists( 'fs_get_optional_constant' ) ) { + /** + * Gets the value of an optional constant. If the constant is not defined, the default value will be returned. + * + * @author Swashata Ghosh (@swashata) + * @since 2.5.12.5 + * + * @param string $constant_name + * @param mixed $default_value + * + * @return mixed + */ + function fs_get_optional_constant( $constant_name, $default_value = null ) { + return defined( $constant_name ) ? constant( $constant_name ) : $default_value; + } } \ No newline at end of file From 23a5b0a2ac443225d2a8c49ec68deeceb5a4fc79 Mon Sep 17 00:00:00 2001 From: Swashata Ghosh Date: Tue, 26 Sep 2023 17:01:00 +0530 Subject: [PATCH 22/24] [version] [bump] 2.5.12.7 --- start.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/start.php b/start.php index d87816db..f7bf98e0 100644 --- a/start.php +++ b/start.php @@ -15,7 +15,7 @@ * * @var string */ - $this_sdk_version = '2.5.12.6'; + $this_sdk_version = '2.5.12.7'; #region SDK Selection Logic -------------------------------------------------------------------- From febd07c137a23ed1293a7dafc06d03c4c798b135 Mon Sep 17 00:00:00 2001 From: Swashata Ghosh Date: Wed, 27 Sep 2023 11:12:46 +0530 Subject: [PATCH 23/24] [export] [optimization] Ignore build related files from the export zip. Fixes #659 --- .gitattributes | 3 +++ .travis.yml | 11 ----------- 2 files changed, 3 insertions(+), 11 deletions(-) delete mode 100644 .travis.yml diff --git a/.gitattributes b/.gitattributes index 35b45749..95596f33 100644 --- a/.gitattributes +++ b/.gitattributes @@ -12,6 +12,9 @@ composer.lock export-ignore *.css.map export-ignore phpcs.xml export-ignore .phpstan export-ignore +phpcompat.xml export-ignore +phpstan.neon export-ignore +.editorconfig export-ignore # Declare files that will always have CRLF line endings on checkout. #*.php text eol=crlf diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 44d812ca..00000000 --- a/.travis.yml +++ /dev/null @@ -1,11 +0,0 @@ -sudo: false - -language: php - -php: - - 5.3 - - 5.4 - - 5.5 - - 5.6 - - 7.0 - - hhvm From 952ad24b5a53fb493e304ba29b09727d312a64ba Mon Sep 17 00:00:00 2001 From: Swashata Ghosh Date: Sun, 29 Oct 2023 17:14:55 +0530 Subject: [PATCH 24/24] [version] [release] Prepare v2.6.0. --- start.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/start.php b/start.php index f7bf98e0..76df0bd7 100644 --- a/start.php +++ b/start.php @@ -15,7 +15,7 @@ * * @var string */ - $this_sdk_version = '2.5.12.7'; + $this_sdk_version = '2.6.0'; #region SDK Selection Logic --------------------------------------------------------------------