From 3f0c8fb540064f2915d5173040aee21a37a940ed Mon Sep 17 00:00:00 2001 From: Sapayth Hossain Date: Fri, 5 Jan 2024 04:30:27 +0600 Subject: [PATCH 1/2] final tweaks --- Lib/Appsero/Client.php | 258 +++++ Lib/Appsero/Insights.php | 1295 +++++++++++++++++++++++ Lib/Appsero/License.php | 809 ++++++++++++++ Lib/WeDevs_Insights.php | 19 +- composer.json | 1 - composer.lock | 431 +++++--- includes/Admin/Subscription.php | 3 +- includes/Ajax/Frontend_Form_Ajax.php | 2 +- includes/Traits/TaxableTrait.php | 10 +- includes/class-frontend-render-form.php | 2 +- wpuf-functions.php | 5 +- wpuf.php | 2 +- 12 files changed, 2686 insertions(+), 151 deletions(-) create mode 100644 Lib/Appsero/Client.php create mode 100644 Lib/Appsero/Insights.php create mode 100644 Lib/Appsero/License.php diff --git a/Lib/Appsero/Client.php b/Lib/Appsero/Client.php new file mode 100644 index 000000000..08b7f654d --- /dev/null +++ b/Lib/Appsero/Client.php @@ -0,0 +1,258 @@ +hash = $hash; + $this->name = $name; + $this->file = $file; + + $this->set_basename_and_slug(); + } + + /** + * Initialize insights class + * + * @return Appsero\Insights + */ + public function insights() { + if ( ! class_exists( __NAMESPACE__ . '\Insights' ) ) { + require_once __DIR__ . '/Insights.php'; + } + + // if already instantiated, return the cached one + if ( $this->insights ) { + return $this->insights; + } + + $this->insights = new Insights( $this ); + + return $this->insights; + } + + /** + * Initialize license checker + * + * @return Appsero\License + */ + public function license() { + if ( ! class_exists( __NAMESPACE__ . '\License' ) ) { + require_once __DIR__ . '/License.php'; + } + + // if already instantiated, return the cached one + if ( $this->license ) { + return $this->license; + } + + $this->license = new License( $this ); + + return $this->license; + } + + /** + * API Endpoint + * + * @return string + */ + public function endpoint() { + $endpoint = apply_filters( 'appsero_endpoint', 'https://api.appsero.com' ); + + return trailingslashit( $endpoint ); + } + + /** + * Set project basename, slug and version + * + * @return void + */ + protected function set_basename_and_slug() { + if ( strpos( $this->file, WP_CONTENT_DIR . '/themes/' ) === false ) { + $this->basename = plugin_basename( $this->file ); + + list( $this->slug, $mainfile ) = explode( '/', $this->basename ); + + require_once ABSPATH . 'wp-admin/includes/plugin.php'; + + $plugin_data = get_plugin_data( $this->file ); + + $this->project_version = $plugin_data['Version']; + $this->type = 'plugin'; + } else { + $this->basename = str_replace( WP_CONTENT_DIR . '/themes/', '', $this->file ); + + list( $this->slug, $mainfile ) = explode( '/', $this->basename ); + + $theme = wp_get_theme( $this->slug ); + + $this->project_version = $theme->version; + $this->type = 'theme'; + } + + $this->textdomain = $this->slug; + } + + /** + * Send request to remote endpoint + * + * @param array $params + * @param string $route + * + * @return array|WP_Error array of results including HTTP headers or WP_Error if the request failed + */ + public function send_request( $params, $route, $blocking = false ) { + $url = $this->endpoint() . $route; + + $headers = [ + 'user-agent' => 'Appsero/' . md5( esc_url( home_url() ) ) . ';', + 'Accept' => 'application/json', + ]; + + $response = wp_remote_post( + $url, + [ + 'method' => 'POST', + 'timeout' => 30, + 'redirection' => 5, + 'httpversion' => '1.0', + 'blocking' => $blocking, + 'headers' => $headers, + 'body' => array_merge( $params, [ 'client' => $this->version ] ), + 'cookies' => [], + ] + ); + + return $response; + } + + /** + * Check if the current server is localhost + * + * @return bool + */ + public function is_local_server() { + $is_local = isset( $_SERVER['REMOTE_ADDR'] ) && in_array( $_SERVER['REMOTE_ADDR'], [ '127.0.0.1', '::1' ], true ); + + return apply_filters( 'appsero_is_local', $is_local ); + } + + /** + * Translate function _e() + */ + // phpcs:ignore + public function _etrans( $text ) { + call_user_func( '_e', $text, $this->textdomain ); + } + + /** + * Translate function __() + */ + // phpcs:ignore + public function __trans( $text ) { + return call_user_func( '__', $text, $this->textdomain ); + } + + /** + * Set project textdomain + */ + public function set_textdomain( $textdomain ) { + $this->textdomain = $textdomain; + } +} diff --git a/Lib/Appsero/Insights.php b/Lib/Appsero/Insights.php new file mode 100644 index 000000000..95f4e59b9 --- /dev/null +++ b/Lib/Appsero/Insights.php @@ -0,0 +1,1295 @@ +client = $client; + } + } + + /** + * Don't show the notice + * + * @return \self + */ + public function hide_notice() + { + $this->show_notice = false; + + return $this; + } + + /** + * Add plugin data if needed + * + * @return \self + */ + public function add_plugin_data() + { + $this->plugin_data = true; + + return $this; + } + + /** + * Add extra data if needed + * + * @param array $data + * + * @return \self + */ + public function add_extra($data = []) + { + $this->extra_data = $data; + + return $this; + } + + /** + * Set custom notice text + * + * @param string $text + * + * @return \self + */ + public function notice($text = '') + { + $this->notice = $text; + + return $this; + } + + /** + * Initialize insights + * + * @return void + */ + public function init() + { + if ($this->client->type === 'plugin') { + $this->init_plugin(); + } elseif ($this->client->type === 'theme') { + $this->init_theme(); + } + } + + /** + * Initialize theme hooks + * + * @return void + */ + public function init_theme() + { + $this->init_common(); + + add_action('switch_theme', [$this, 'deactivation_cleanup']); + add_action('switch_theme', [$this, 'theme_deactivated'], 12, 3); + } + + /** + * Initialize plugin hooks + * + * @return void + */ + public function init_plugin() + { + // plugin deactivate popup + // if ( ! $this->is_local_server() ) { + // add_filter( 'plugin_action_links_' . $this->client->basename, [ $this, 'plugin_action_links' ] ); + // add_action( 'admin_footer', [ $this, 'deactivate_scripts' ] ); + // } + + add_filter('plugin_action_links_' . $this->client->basename, [$this, 'plugin_action_links']); + add_action('admin_footer', [$this, 'deactivate_scripts']); + + $this->init_common(); + + register_activation_hook($this->client->file, [$this, 'activate_plugin']); + register_deactivation_hook($this->client->file, [$this, 'deactivation_cleanup']); + } + + /** + * Initialize common hooks + * + * @return void + */ + protected function init_common() + { + if ($this->show_notice) { + // tracking notice + add_action('admin_notices', [$this, 'admin_notice']); + } + + add_action('admin_init', [$this, 'handle_optin_optout']); + + // uninstall reason + add_action('wp_ajax_' . $this->client->slug . '_submit-uninstall-reason', [$this, 'uninstall_reason_submission']); + + // cron events + add_filter('cron_schedules', [$this, 'add_weekly_schedule']); + add_action($this->client->slug . '_tracker_send_event', [$this, 'send_tracking_data']); + // add_action( 'admin_init', array( $this, 'send_tracking_data' ) ); // test + } + + /** + * Send tracking data to AppSero server + * + * @param bool $override + * + * @return void + */ + public function send_tracking_data($override = false) + { + if (!$this->tracking_allowed() && !$override) { + return; + } + + // Send a maximum of once per week + $last_send = $this->get_last_send(); + + if ($last_send && $last_send > strtotime('-1 week')) { + return; + } + + $tracking_data = $this->get_tracking_data(); + + $response = $this->client->send_request($tracking_data, 'track'); + + update_option($this->client->slug . '_tracking_last_send', time()); + } + + /** + * Get the tracking data points + * + * @return array + */ + protected function get_tracking_data() + { + $all_plugins = $this->get_all_plugins(); + + $users = get_users( + [ + 'role' => 'administrator', + 'orderby' => 'ID', + 'order' => 'ASC', + 'number' => 1, + 'paged' => 1, + ] + ); + + $admin_user = (is_array($users) && !empty($users)) ? $users[0] : false; + $first_name = ''; + $last_name = ''; + + if ($admin_user) { + $first_name = $admin_user->first_name ? $admin_user->first_name : $admin_user->display_name; + $last_name = $admin_user->last_name; + } + + $data = [ + 'url' => esc_url(home_url()), + 'site' => $this->get_site_name(), + 'admin_email' => get_option('admin_email'), + 'first_name' => $first_name, + 'last_name' => $last_name, + 'hash' => $this->client->hash, + 'server' => $this->get_server_info(), + 'wp' => $this->get_wp_info(), + 'users' => $this->get_user_counts(), + 'active_plugins' => count($all_plugins['active_plugins']), + 'inactive_plugins' => count($all_plugins['inactive_plugins']), + 'ip_address' => $this->get_user_ip_address(), + 'project_version' => $this->client->project_version, + 'tracking_skipped' => false, + 'is_local' => $this->is_local_server(), + ]; + + // Add Plugins + if ($this->plugin_data) { + $plugins_data = []; + + foreach ($all_plugins['active_plugins'] as $slug => $plugin) { + $slug = strstr($slug, '/', true); + + if (!$slug) { + continue; + } + + $plugins_data[$slug] = [ + 'name' => isset($plugin['name']) ? $plugin['name'] : '', + 'version' => isset($plugin['version']) ? $plugin['version'] : '', + ]; + } + + if (array_key_exists($this->client->slug, $plugins_data)) { + unset($plugins_data[$this->client->slug]); + } + + $data['plugins'] = $plugins_data; + } + + // Add Metadata + $extra = $this->get_extra_data(); + + if ($extra) { + $data['extra'] = $extra; + } + + // Check this has previously skipped tracking + $skipped = get_option($this->client->slug . '_tracking_skipped'); + + if ($skipped === 'yes') { + delete_option($this->client->slug . '_tracking_skipped'); + + $data['tracking_skipped'] = true; + } + + return apply_filters($this->client->slug . '_tracker_data', $data); + } + + /** + * If a child class wants to send extra data + * + * @return mixed + */ + protected function get_extra_data() + { + if (is_callable($this->extra_data)) { + return call_user_func($this->extra_data); + } + + if (is_array($this->extra_data)) { + return $this->extra_data; + } + + return []; + } + + /** + * Explain the user which data we collect + * + * @return array + */ + protected function data_we_collect() + { + $data = [ + 'Server environment details (php, mysql, server, WordPress versions)', + 'Number of users in your site', + 'Site language', + 'Number of active and inactive plugins', + 'Site name and URL', + 'Your name and email address', + ]; + + if ($this->plugin_data) { + array_splice($data, 4, 0, ["active plugins' name"]); + } + + return $data; + } + + /** + * Check if the user has opted into tracking + * + * @return bool + */ + public function tracking_allowed() + { + $allow_tracking = get_option($this->client->slug . '_allow_tracking', 'no'); + + return $allow_tracking === 'yes'; + } + + /** + * Get the last time a tracking was sent + * + * @return false|string + */ + private function get_last_send() + { + return get_option($this->client->slug . '_tracking_last_send', false); + } + + /** + * Check if the notice has been dismissed or enabled + * + * @return bool + */ + public function notice_dismissed() + { + $hide_notice = get_option($this->client->slug . '_tracking_notice', null); + + if ('hide' === $hide_notice) { + return true; + } + + return false; + } + + /** + * Check if the current server is localhost + * + * @return bool + */ + private function is_local_server() + { + $host = isset($_SERVER['HTTP_HOST']) ? sanitize_text_field(wp_unslash($_SERVER['HTTP_HOST'])) : 'localhost'; + $ip = isset($_SERVER['SERVER_ADDR']) ? sanitize_text_field(wp_unslash($_SERVER['SERVER_ADDR'])) : '127.0.0.1'; + $is_local = false; + + if ( + in_array($ip, ['127.0.0.1', '::1'], true) + || !strpos($host, '.') + || in_array(strrchr($host, '.'), ['.test', '.testing', '.local', '.localhost', '.localdomain'], true) + ) { + $is_local = true; + } + + return apply_filters('appsero_is_local', $is_local); + } + + /** + * Schedule the event weekly + * + * @return void + */ + private function schedule_event() + { + $hook_name = wp_unslash($this->client->slug . '_tracker_send_event'); + + if (!wp_next_scheduled($hook_name)) { + wp_schedule_event(time(), 'weekly', $hook_name); + } + } + + /** + * Clear any scheduled hook + * + * @return void + */ + private function clear_schedule_event() + { + wp_clear_scheduled_hook($this->client->slug . '_tracker_send_event'); + } + + /** + * Display the admin notice to users that have not opted-in or out + * + * @return void + */ + public function admin_notice() + { + if ($this->notice_dismissed()) { + return; + } + + if ($this->tracking_allowed()) { + return; + } + + if (!current_user_can('manage_options')) { + return; + } + + // don't show tracking if a local server + // if ( $this->is_local_server() ) { + // return; + // } + + $optin_url = wp_nonce_url(add_query_arg($this->client->slug . '_tracker_optin', 'true'), '_wpnonce'); + $optout_url = wp_nonce_url(add_query_arg($this->client->slug . '_tracker_optout', 'true'), '_wpnonce'); + + if (empty($this->notice)) { + $notice = sprintf($this->client->__trans('Want to help make %1$s even more awesome? Allow %1$s to collect diagnostic data and usage information.'), $this->client->name); + } else { + $notice = $this->notice; + } + + $policy_url = 'https://appsero.com/privacy-policy/'; + + $notice .= ' (' . $this->client->__trans('what we collect') . ')'; + $notice .= ''; + + echo '

'; + echo $notice; + echo '

'; + echo ' ' . $this->client->__trans('Allow') . ''; + echo ' ' . $this->client->__trans('No thanks') . ''; + echo '

'; + + echo " + "; + } + + /** + * Handle the optin/optout + * + * @return void + */ + public function handle_optin_optout() + { + if (!isset($_GET['_wpnonce'])) { + return; + } + + if (!wp_verify_nonce(sanitize_key($_GET['_wpnonce']), '_wpnonce')) { + return; + } + + if (isset($_GET[$this->client->slug . '_tracker_optin']) && $_GET[$this->client->slug . '_tracker_optin'] === 'true') { + $this->optin(); + + wp_safe_redirect(remove_query_arg($this->client->slug . '_tracker_optin')); + exit; + } + + if (isset($_GET[$this->client->slug . '_tracker_optout']) && isset($_GET[$this->client->slug . '_tracker_optout']) && $_GET[$this->client->slug . '_tracker_optout'] === 'true') { + $this->optout(); + + wp_safe_redirect(remove_query_arg($this->client->slug . '_tracker_optout')); + exit; + } + } + + /** + * Tracking optin + * + * @return void + */ + public function optin() + { + update_option($this->client->slug . '_allow_tracking', 'yes'); + update_option($this->client->slug . '_tracking_notice', 'hide'); + + $this->clear_schedule_event(); + $this->schedule_event(); + $this->send_tracking_data(); + + /* + * Fires when the user has opted in tracking. + */ + do_action($this->client->slug . '_tracker_optin', $this->get_tracking_data()); + } + + /** + * Optout from tracking + * + * @return void + */ + public function optout() + { + update_option($this->client->slug . '_allow_tracking', 'no'); + update_option($this->client->slug . '_tracking_notice', 'hide'); + + $this->send_tracking_skipped_request(); + + $this->clear_schedule_event(); + + /* + * Fires when the user has opted out tracking. + */ + do_action($this->client->slug . '_tracker_optout'); + } + + /** + * Get the number of post counts + * + * @param string $post_type + * + * @return int + */ + public function get_post_count($post_type) + { + global $wpdb; + + return (int) $wpdb->get_var( + $wpdb->prepare( + "SELECT count(ID) FROM $wpdb->posts WHERE post_type = %s and post_status = %s", + [$post_type, 'publish'] + ) + ); + } + + /** + * Get server related info. + * + * @return array + */ + private static function get_server_info() + { + global $wpdb; + + $server_data = []; + + if (isset($_SERVER['SERVER_SOFTWARE']) && !empty($_SERVER['SERVER_SOFTWARE'])) { + // phpcs:ignore + $server_data['software'] = $_SERVER['SERVER_SOFTWARE']; + } + + if (function_exists('phpversion')) { + $server_data['php_version'] = phpversion(); + } + + $server_data['mysql_version'] = $wpdb->db_version(); + + $server_data['php_max_upload_size'] = size_format(wp_max_upload_size()); + $server_data['php_default_timezone'] = date_default_timezone_get(); + $server_data['php_soap'] = class_exists('SoapClient') ? 'Yes' : 'No'; + $server_data['php_fsockopen'] = function_exists('fsockopen') ? 'Yes' : 'No'; + $server_data['php_curl'] = function_exists('curl_init') ? 'Yes' : 'No'; + + return $server_data; + } + + /** + * Get WordPress related data. + * + * @return array + */ + private function get_wp_info() + { + $wp_data = []; + + $wp_data['memory_limit'] = WP_MEMORY_LIMIT; + $wp_data['debug_mode'] = (defined('WP_DEBUG') && WP_DEBUG) ? 'Yes' : 'No'; + $wp_data['locale'] = get_locale(); + $wp_data['version'] = get_bloginfo('version'); + $wp_data['multisite'] = is_multisite() ? 'Yes' : 'No'; + $wp_data['theme_slug'] = get_stylesheet(); + + $theme = wp_get_theme($wp_data['theme_slug']); + + $wp_data['theme_name'] = $theme->get('Name'); + $wp_data['theme_version'] = $theme->get('Version'); + $wp_data['theme_uri'] = $theme->get('ThemeURI'); + $wp_data['theme_author'] = $theme->get('Author'); + + return $wp_data; + } + + /** + * Get the list of active and inactive plugins + * + * @return array + */ + private function get_all_plugins() + { + // Ensure get_plugins function is loaded + if (!function_exists('get_plugins')) { + include ABSPATH . '/wp-admin/includes/plugin.php'; + } + + $plugins = get_plugins(); + $active_plugins_keys = get_option('active_plugins', []); + $active_plugins = []; + + foreach ($plugins as $k => $v) { + // Take care of formatting the data how we want it. + $formatted = []; + $formatted['name'] = wp_strip_all_tags($v['Name']); + + if (isset($v['Version'])) { + $formatted['version'] = wp_strip_all_tags($v['Version']); + } + + if (isset($v['Author'])) { + $formatted['author'] = wp_strip_all_tags($v['Author']); + } + + if (isset($v['Network'])) { + $formatted['network'] = wp_strip_all_tags($v['Network']); + } + + if (isset($v['PluginURI'])) { + $formatted['plugin_uri'] = wp_strip_all_tags($v['PluginURI']); + } + + if (in_array($k, $active_plugins_keys, true)) { + // Remove active plugins from list so we can show active and inactive separately + unset($plugins[$k]); + $active_plugins[$k] = $formatted; + } else { + $plugins[$k] = $formatted; + } + } + + return [ + 'active_plugins' => $active_plugins, + 'inactive_plugins' => $plugins, + ]; + } + + /** + * Get user totals based on user role. + * + * @return array + */ + public function get_user_counts() + { + $user_count = []; + $user_count_data = count_users(); + $user_count['total'] = $user_count_data['total_users']; + + // Get user count based on user role + foreach ($user_count_data['avail_roles'] as $role => $count) { + if (!$count) { + continue; + } + + $user_count[$role] = $count; + } + + return $user_count; + } + + /** + * Add weekly cron schedule + * + * @param array $schedules + * + * @return array + */ + public function add_weekly_schedule($schedules) + { + $schedules['weekly'] = [ + 'interval' => DAY_IN_SECONDS * 7, + 'display' => 'Once Weekly', + ]; + + return $schedules; + } + + /** + * Plugin activation hook + * + * @return void + */ + public function activate_plugin() + { + $allowed = get_option($this->client->slug . '_allow_tracking', 'no'); + + // if it wasn't allowed before, do nothing + if ('yes' !== $allowed) { + return; + } + + // re-schedule and delete the last sent time so we could force send again + $hook_name = $this->client->slug . '_tracker_send_event'; + + if (!wp_next_scheduled($hook_name)) { + wp_schedule_event(time(), 'weekly', $hook_name); + } + + delete_option($this->client->slug . '_tracking_last_send'); + + $this->send_tracking_data(true); + } + + /** + * Clear our options upon deactivation + * + * @return void + */ + public function deactivation_cleanup() + { + $this->clear_schedule_event(); + + if ('theme' === $this->client->type) { + delete_option($this->client->slug . '_tracking_last_send'); + delete_option($this->client->slug . '_allow_tracking'); + } + + delete_option($this->client->slug . '_tracking_notice'); + } + + /** + * Hook into action links and modify the deactivate link + * + * @param array $links + * + * @return array + */ + public function plugin_action_links($links) + { + if (array_key_exists('deactivate', $links)) { + $links['deactivate'] = str_replace(' 'could-not-understand', + 'text' => $this->client->__trans("Couldn't understand"), + 'placeholder' => $this->client->__trans('Would you like us to assist you?'), + 'icon' => '', + ], + [ + 'id' => 'found-better-plugin', + 'text' => $this->client->__trans('Found a better plugin'), + 'placeholder' => $this->client->__trans('Which plugin?'), + 'icon' => '', + ], + [ + 'id' => 'not-have-that-feature', + 'text' => $this->client->__trans('Missing a specific feature'), + 'placeholder' => $this->client->__trans('Could you tell us more about that feature?'), + 'icon' => '', + ], + [ + 'id' => 'is-not-working', + 'text' => $this->client->__trans('Not working'), + 'placeholder' => $this->client->__trans('Could you tell us a bit more whats not working?'), + 'icon' => '', + ], + [ + 'id' => 'looking-for-other', + 'text' => $this->client->__trans('Not what I was looking'), + 'placeholder' => $this->client->__trans('Could you tell us a bit more?'), + 'icon' => '', + ], + [ + 'id' => 'did-not-work-as-expected', + 'text' => $this->client->__trans("Didn't work as expected"), + 'placeholder' => $this->client->__trans('What did you expect?'), + 'icon' => '', + ], + [ + 'id' => 'other', + 'text' => $this->client->__trans('Others'), + 'placeholder' => $this->client->__trans('Could you tell us a bit more?'), + 'icon' => '', + ], + ]; + + return $reasons; + } + + /** + * Plugin deactivation uninstall reason submission + * + * @return void + */ + public function uninstall_reason_submission() + { + if (!isset($_POST['nonce'])) { + return; + } + + if (!isset($_POST['reason_id'])) { + wp_send_json_error(); + } + + if (!wp_verify_nonce(sanitize_key(wp_unslash($_POST['nonce'])), 'appsero-security-nonce')) { + wp_send_json_error('Nonce verification failed'); + } + + if (!current_user_can('manage_options')) { + wp_send_json_error('You are not allowed for this task'); + } + + $data = $this->get_tracking_data(); + $data['reason_id'] = sanitize_text_field(wp_unslash($_POST['reason_id'])); + $data['reason_info'] = isset($_REQUEST['reason_info']) ? trim(sanitize_text_field(wp_unslash($_REQUEST['reason_info']))) : ''; + + $this->client->send_request($data, 'deactivate'); + + /* + * Fire after the plugin _uninstall_reason_submitted + */ + do_action($this->client->slug . '_uninstall_reason_submitted', $data); + + wp_send_json_success(); + } + + /** + * Handle the plugin deactivation feedback + * + * @return void + */ + public function deactivate_scripts() + { + global $pagenow; + + if ('plugins.php' !== $pagenow) { + return; + } + + $this->deactivation_modal_styles(); + $reasons = $this->get_uninstall_reasons(); + $custom_reasons = apply_filters('appsero_custom_deactivation_reasons', [], $this->client); + ?> + +
+
+
+

client->_etrans('Goodbyes are always hard. If you have a moment, please let us know how we can improve.'); ?>

+
+ +
+
    + +
  • + +
  • + +
+ +
    + +
  • + +
  • + +
+ +
+

+ client->__trans('We share your data with Appsero to troubleshoot problems & make product improvements. Learn more about how Appsero handles your data.'), + esc_url('https://appsero.com/'), + esc_url('https://appsero.com/privacy-policy') + ); + ?> +

+
+ + +
+
+ + + + get_template() === $this->client->slug) { + $this->client->send_request($this->get_tracking_data(), 'deactivate'); + } + } + + /** + * Get user IP Address + */ + private function get_user_ip_address() + { + $response = wp_remote_get('https://icanhazip.com/'); + + if (is_wp_error($response)) { + return ''; + } + + $ip = trim(wp_remote_retrieve_body($response)); + + if (!filter_var($ip, FILTER_VALIDATE_IP)) { + return ''; + } + + return $ip; + } + + /** + * Get site name + */ + private function get_site_name() + { + $site_name = get_bloginfo('name'); + + if (empty($site_name)) { + $site_name = get_bloginfo('description'); + $site_name = wp_trim_words($site_name, 3, ''); + } + + if (empty($site_name)) { + $site_name = esc_url(home_url()); + } + + return $site_name; + } + + /** + * Send request to appsero if user skip to send tracking data + */ + private function send_tracking_skipped_request() + { + $skipped = get_option($this->client->slug . '_tracking_skipped'); + + $data = [ + 'hash' => $this->client->hash, + 'previously_skipped' => false, + ]; + + if ($skipped === 'yes') { + $data['previously_skipped'] = true; + } else { + update_option($this->client->slug . '_tracking_skipped', 'yes'); + } + + $this->client->send_request($data, 'tracking-skipped'); + } + + /** + * Deactivation modal styles + */ + private function deactivation_modal_styles() + { + ?> + + client = $client; + + $this->option_key = 'appsero_' . md5( $this->client->slug ) . '_manage_license'; + + $this->schedule_hook = $this->client->slug . '_license_check_event'; + + // Creating WP Ajax Endpoint to refresh license remotely + add_action( 'wp_ajax_appsero_refresh_license_' . $this->client->hash, [ $this, 'refresh_license_api' ] ); + + // Run hook to check license status daily + add_action( $this->schedule_hook, [ $this, 'check_license_status' ] ); + + // Active/Deactive corn schedule + $this->run_schedule(); + } + + /** + * Set the license option key. + * + * If someone wants to override the default generated key. + * + * @param string $key + * + * @since 1.3.0 + * + * @return License + */ + public function set_option_key( $key ) { + $this->option_key = $key; + + return $this; + } + + /** + * Get the license key + * + * @since 1.3.0 + * + * @return string|null + */ + public function get_license() { + return get_option( $this->option_key, null ); + } + + /** + * Check license + * + * @return array + */ + public function check( $license_key ) { + $route = 'public/license/' . $this->client->hash . '/check'; + + return $this->send_request( $license_key, $route ); + } + + /** + * Active a license + * + * @return array + */ + public function activate( $license_key ) { + $route = 'public/license/' . $this->client->hash . '/activate'; + + return $this->send_request( $license_key, $route ); + } + + /** + * Deactivate a license + * + * @return array + */ + public function deactivate( $license_key ) { + $route = 'public/license/' . $this->client->hash . '/deactivate'; + + return $this->send_request( $license_key, $route ); + } + + /** + * Send common request + * + * @return array + */ + protected function send_request( $license_key, $route ) { + $params = [ + 'license_key' => $license_key, + 'url' => esc_url( home_url() ), + 'is_local' => $this->client->is_local_server(), + ]; + + $response = $this->client->send_request( $params, $route, true ); + + if ( is_wp_error( $response ) ) { + return [ + 'success' => false, + 'error' => $response->get_error_message(), + ]; + } + + $response = json_decode( wp_remote_retrieve_body( $response ), true ); + + if ( empty( $response ) || isset( $response['exception'] ) ) { + return [ + 'success' => false, + 'error' => $this->client->__trans( 'Unknown error occurred, Please try again.' ), + ]; + } + + if ( isset( $response['errors'] ) && isset( $response['errors']['license_key'] ) ) { + $response = [ + 'success' => false, + 'error' => $response['errors']['license_key'][0], + ]; + } + + return $response; + } + + /** + * License Refresh Endpoint + */ + public function refresh_license_api() { + $this->check_license_status(); + + wp_send_json_success( + [ + 'message' => 'License refreshed successfully.', + ], + 200 + ); + } + + /** + * Add settings page for license + * + * @param array $args + * + * @return void + */ + public function add_settings_page( $args = [] ) { + $defaults = [ + 'type' => 'menu', // Can be: menu, options, submenu + 'page_title' => 'Manage License', + 'menu_title' => 'Manage License', + 'capability' => 'manage_options', + 'menu_slug' => $this->client->slug . '-manage-license', + 'icon_url' => '', + 'position' => null, + 'parent_slug' => '', + ]; + + $this->menu_args = wp_parse_args( $args, $defaults ); + + add_action( 'admin_menu', [ $this, 'admin_menu' ], 99 ); + } + + /** + * Admin Menu hook + * + * @return void + */ + public function admin_menu() { + switch ( $this->menu_args['type'] ) { + case 'menu': + $this->create_menu_page(); + break; + + case 'submenu': + $this->create_submenu_page(); + break; + + case 'options': + $this->create_options_page(); + break; + } + } + + /** + * License menu output + */ + public function menu_output() { + // process form data if submitted + if ( isset( $_POST['_nonce'] ) && wp_verify_nonce( sanitize_key( wp_unslash( $_POST['_nonce'] ) ), $this->client->name ) ) { + $form_data = [ + '_nonce' => sanitize_key( wp_unslash( $_POST['_nonce'] ) ), + '_action' => isset( $_POST['_action'] ) ? sanitize_text_field( wp_unslash( $_POST['_action'] ) ) : '', + 'license_key' => isset( $_POST['license_key'] ) ? sanitize_text_field( wp_unslash( $_POST['license_key'] ) ) : '', + ]; + $this->license_form_submit( $form_data ); + } + + $license = $this->get_license(); + $action = ( $license && isset( $license['status'] ) && 'activate' === $license['status'] ) ? 'deactive' : 'active'; + $this->licenses_style(); + ?> + +
+

License Settings

+ + show_license_page_notices(); + do_action( 'before_appsero_license_section' ); + ?> + +
+ show_license_page_card_header( $license ); ?> + +
+

+ client->__trans( 'Activate %s by your license key to get professional support and automatic update from your WordPress dashboard.' ), $this->client->name ); ?> +

+
+ + +
+
+ + + + + /> +
+ +
+
+ + show_active_license_info( $license ); + } + ?> +
+
+ + +
+ client->name ) ) { + $this->error = $this->client->__trans( 'Nonce vefification failed.' ); + + return; + } + + if ( ! current_user_can( 'manage_options' ) ) { + $this->error = $this->client->__trans( 'You don\'t have permission to manage license.' ); + + return; + } + + $license_key = ! empty( $form_data['license_key'] ) ? sanitize_text_field( wp_unslash( $form_data['license_key'] ) ) : ''; + $action = ! empty( $form_data['_action'] ) ? sanitize_text_field( wp_unslash( $form_data['_action'] ) ) : ''; + + switch ( $action ) { + case 'active': + $this->active_client_license( $license_key ); + break; + + case 'deactive': + $this->deactive_client_license(); + break; + + case 'refresh': + $this->refresh_client_license(); + break; + } + } + + /** + * Check license status on schedule + */ + public function check_license_status() { + $license = $this->get_license(); + + if ( isset( $license['key'] ) && ! empty( $license['key'] ) ) { + $response = $this->check( $license['key'] ); + + if ( isset( $response['success'] ) && $response['success'] ) { + $license['status'] = 'activate'; + $license['remaining'] = $response['remaining']; + $license['activation_limit'] = $response['activation_limit']; + $license['expiry_days'] = $response['expiry_days']; + $license['title'] = $response['title']; + $license['source_id'] = $response['source_identifier']; + $license['recurring'] = $response['recurring']; + } else { + $license['status'] = 'deactivate'; + $license['expiry_days'] = 0; + } + + update_option( $this->option_key, $license, false ); + } + } + + /** + * Check this is a valid license + */ + public function is_valid() { + if ( null !== $this->is_valid_license ) { + return $this->is_valid_license; + } + + $license = $this->get_license(); + + if ( ! empty( $license['key'] ) && isset( $license['status'] ) && $license['status'] === 'activate' ) { + $this->is_valid_license = true; + } else { + $this->is_valid_license = false; + } + + return $this->is_valid_license; + } + + /** + * Check this is a valid license + */ + public function is_valid_by( $option, $value ) { + $license = $this->get_license(); + + if ( ! empty( $license['key'] ) && isset( $license['status'] ) && $license['status'] === 'activate' ) { + if ( isset( $license[ $option ] ) && $license[ $option ] === $value ) { + return true; + } + } + + return false; + } + + /** + * Styles for licenses page + */ + private function licenses_style() { + ?> + + +
+
+

client->_etrans( 'Activations Remaining' ); ?>

+ +

client->_etrans( 'Unlimited' ); ?>

+ +

+ client->__trans( '%1$d out of %2$d' ), $license['remaining'], $license['activation_limit'] ); ?> +

+ +
+
+

client->_etrans( 'Expires in' ); ?>

+ 21 ? '' : 'occupied'; + echo '

' . $license['expiry_days'] . ' days

'; + } else { + echo '

' . $this->client->__trans( 'Never' ) . '

'; + } + ?> +
+
+ error ) ) { + ?> +
+

error; ?>

+
+ success ) ) { + ?> +
+

success; ?>

+
+ '; + } + + /** + * Card header + */ + private function show_license_page_card_header( $license ) { + ?> +
+ + + + + + client->__trans( 'Activate License' ); ?> + + +
+ + + +
+ + +
+ error = $this->client->__trans( 'The license key field is required.' ); + + return; + } + + $response = $this->activate( $license_key ); + + if ( ! $response['success'] ) { + $this->error = $response['error'] ? $response['error'] : $this->client->__trans( 'Unknown error occurred.' ); + + return; + } + + $data = [ + 'key' => $license_key, + 'status' => 'activate', + 'remaining' => $response['remaining'], + 'activation_limit' => $response['activation_limit'], + 'expiry_days' => $response['expiry_days'], + 'title' => $response['title'], + 'source_id' => $response['source_identifier'], + 'recurring' => $response['recurring'], + ]; + + update_option( $this->option_key, $data, false ); + + $this->success = $this->client->__trans( 'License activated successfully.' ); + } + + /** + * Deactive client license + */ + private function deactive_client_license() { + $license = $this->get_license(); + + if ( empty( $license['key'] ) ) { + $this->error = $this->client->__trans( 'License key not found.' ); + + return; + } + + $response = $this->deactivate( $license['key'] ); + + $data = [ + 'key' => '', + 'status' => 'deactivate', + ]; + + update_option( $this->option_key, $data, false ); + + if ( ! $response['success'] ) { + $this->error = $response['error'] ? $response['error'] : $this->client->__trans( 'Unknown error occurred.' ); + + return; + } + + $this->success = $this->client->__trans( 'License deactivated successfully.' ); + } + + /** + * Refresh Client License + */ + private function refresh_client_license() { + $license = $this->get_license(); + + if ( ! $license || ! isset( $license['key'] ) || empty( $license['key'] ) ) { + $this->error = $this->client->__trans( 'License key not found' ); + + return; + } + + $this->check_license_status(); + + $this->success = $this->client->__trans( 'License refreshed successfully.' ); + } + + /** + * Add license menu page + */ + private function create_menu_page() { + call_user_func( + 'add_menu_page', + $this->menu_args['page_title'], + $this->menu_args['menu_title'], + $this->menu_args['capability'], + $this->menu_args['menu_slug'], + [ $this, 'menu_output' ], + $this->menu_args['icon_url'], + $this->menu_args['position'] + ); + } + + /** + * Add submenu page + */ + private function create_submenu_page() { + call_user_func( + 'add_submenu_page', + $this->menu_args['parent_slug'], + $this->menu_args['page_title'], + $this->menu_args['menu_title'], + $this->menu_args['capability'], + $this->menu_args['menu_slug'], + [ $this, 'menu_output' ], + $this->menu_args['position'] + ); + } + + /** + * Add submenu page + */ + private function create_options_page() { + call_user_func( + 'add_options_page', + $this->menu_args['page_title'], + $this->menu_args['menu_title'], + $this->menu_args['capability'], + $this->menu_args['menu_slug'], + [ $this, 'menu_output' ], + $this->menu_args['position'] + ); + } + + /** + * Schedule daily sicense checker event + */ + public function schedule_cron_event() { + if ( ! wp_next_scheduled( $this->schedule_hook ) ) { + wp_schedule_event( time(), 'daily', $this->schedule_hook ); + + wp_schedule_single_event( time() + 20, $this->schedule_hook ); + } + } + + /** + * Clear any scheduled hook + */ + public function clear_scheduler() { + wp_clear_scheduled_hook( $this->schedule_hook ); + } + + /** + * Enable/Disable schedule + */ + private function run_schedule() { + switch ( $this->client->type ) { + case 'plugin': + register_activation_hook( $this->client->file, [ $this, 'schedule_cron_event' ] ); + register_deactivation_hook( $this->client->file, [ $this, 'clear_scheduler' ] ); + break; + + case 'theme': + add_action( 'after_switch_theme', [ $this, 'schedule_cron_event' ] ); + add_action( 'switch_theme', [ $this, 'clear_scheduler' ] ); + break; + } + } + + /** + * Get input license key + * + * @return $license + */ + private function get_input_license_value( $action, $license ) { + if ( 'active' === $action ) { + return isset( $license['key'] ) ? $license['key'] : ''; + } + + if ( 'deactive' === $action ) { + $key_length = strlen( $license['key'] ); + + return str_pad( + substr( $license['key'], 0, $key_length / 2 ), + $key_length, + '*' + ); + } + + return ''; + } +} diff --git a/Lib/WeDevs_Insights.php b/Lib/WeDevs_Insights.php index 8f23c129d..ce65e5052 100644 --- a/Lib/WeDevs_Insights.php +++ b/Lib/WeDevs_Insights.php @@ -2,8 +2,6 @@ namespace WeDevs\Wpuf\Lib; -use Appsero\Client; - if ( ! class_exists( 'WPUF_WeDevs_Insights' ) ) : /** @@ -18,19 +16,28 @@ * @author Tareq Hasan */ class WeDevs_Insights { + /** + * @var object|Appsero\Insights|Insights + */ + private $insights; /** * Initialize the class */ public function __construct( $file ) { - $client = new Client( '958afc63-99f8-4b98-b321-fcbc5cf95694', 'WP User Frontend', $file ); + if ( ! class_exists( 'Appsero\Client' ) ) { + require_once WPUF_ROOT . '/Lib/Appsero/Client.php'; + } + $client = new Appsero\Client( '958afc63-99f8-4b98-b321-fcbc5cf95694', 'WP User Frontend', $file ); $this->insights = $client->insights(); - - // Active insights + $this->insights->client = $client; $this->insights->init(); - } +// $client = new Appsero\Client( '958afc63-99f8-4b98-b321-fcbc5cf95694', 'WP User Frontend', $file ); +// $this->insights = $client->insights(); +// $this->insights->init(); + } } endif; diff --git a/composer.json b/composer.json index 3cb34580f..76241e547 100644 --- a/composer.json +++ b/composer.json @@ -13,7 +13,6 @@ "require": { "php": ">=5.5", "composer/installers": ">=1.4", - "appsero/client": "dev-develop", "wedevs/wp-utils": "dev-main" }, "require-dev": { diff --git a/composer.lock b/composer.lock index daa2e744d..26e877181 100644 --- a/composer.lock +++ b/composer.lock @@ -4,63 +4,8 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "ea0d08ae2fe247c29bd8ad86c16be401", + "content-hash": "1fa30eae591844494a2c8a0926763809", "packages": [ - { - "name": "appsero/client", - "version": "dev-develop", - "source": { - "type": "git", - "url": "https://github.com/Appsero/client.git", - "reference": "985363ac0bd17d8cfaa45b0e6780ad68ccfe3ca8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Appsero/client/zipball/985363ac0bd17d8cfaa45b0e6780ad68ccfe3ca8", - "reference": "985363ac0bd17d8cfaa45b0e6780ad68ccfe3ca8", - "shasum": "" - }, - "require": { - "php": ">=5.6" - }, - "require-dev": { - "dealerdirect/phpcodesniffer-composer-installer": "^0.7.2", - "phpcompatibility/phpcompatibility-wp": "dev-master", - "phpunit/phpunit": "^8.5.31", - "squizlabs/php_codesniffer": "^3.7", - "tareq1988/wp-php-cs-fixer": "dev-master", - "wp-coding-standards/wpcs": "dev-develop" - }, - "default-branch": true, - "type": "library", - "autoload": { - "psr-4": { - "Appsero\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Tareq Hasan", - "email": "tareq@appsero.com" - } - ], - "description": "Appsero Client", - "keywords": [ - "analytics", - "plugin", - "theme", - "wordpress" - ], - "support": { - "issues": "https://github.com/Appsero/client/issues", - "source": "https://github.com/Appsero/client/tree/develop" - }, - "time": "2023-03-30T06:42:02+00:00" - }, { "name": "composer/installers", "version": "dev-main", @@ -333,29 +278,34 @@ }, { "name": "doctrine/deprecations", - "version": "v1.0.0", + "version": "1.1.x-dev", "source": { "type": "git", "url": "https://github.com/doctrine/deprecations.git", - "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de" + "reference": "4f2d4f2836e7ec4e7a8625e75c6aa916004db931" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de", - "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/4f2d4f2836e7ec4e7a8625e75c6aa916004db931", + "reference": "4f2d4f2836e7ec4e7a8625e75c6aa916004db931", "shasum": "" }, "require": { - "php": "^7.1|^8.0" + "php": "^7.1 || ^8.0" }, "require-dev": { "doctrine/coding-standard": "^9", - "phpunit/phpunit": "^7.5|^8.5|^9.5", - "psr/log": "^1|^2|^3" + "phpstan/phpstan": "1.4.10 || 1.10.15", + "phpstan/phpstan-phpunit": "^1.0", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "psalm/plugin-phpunit": "0.18.4", + "psr/log": "^1 || ^2 || ^3", + "vimeo/psalm": "4.30.0 || 5.12.0" }, "suggest": { "psr/log": "Allows logging deprecations via PSR-3 logger implementation" }, + "default-branch": true, "type": "library", "autoload": { "psr-4": { @@ -370,9 +320,9 @@ "homepage": "https://www.doctrine-project.org/", "support": { "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/v1.0.0" + "source": "https://github.com/doctrine/deprecations/tree/1.1.2" }, - "time": "2022-05-02T15:47:09+00:00" + "time": "2023-09-27T20:04:15+00:00" }, { "name": "doctrine/instantiator", @@ -380,25 +330,25 @@ "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b" + "reference": "12be2483e1f0e850b353e26869e4e6c038459501" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/0a0fa9780f5d4e507415a065172d26a98d02047b", - "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/12be2483e1f0e850b353e26869e4e6c038459501", + "reference": "12be2483e1f0e850b353e26869e4e6c038459501", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^9 || ^11", + "doctrine/coding-standard": "^9 || ^12", "ext-pdo": "*", "ext-phar": "*", "phpbench/phpbench": "^0.16 || ^1", "phpstan/phpstan": "^1.4", "phpstan/phpstan-phpunit": "^1", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6", "vimeo/psalm": "^4.30 || ^5.4" }, "type": "library", @@ -426,7 +376,7 @@ ], "support": { "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/1.5.0" + "source": "https://github.com/doctrine/instantiator/tree/1.5.x" }, "funding": [ { @@ -442,7 +392,7 @@ "type": "tidelift" } ], - "time": "2022-12-30T00:15:36+00:00" + "time": "2023-12-09T14:16:53+00:00" }, { "name": "myclabs/deep-copy", @@ -450,12 +400,12 @@ "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "928a96f585b86224ebc78f8f09d0482cf15b04f5" + "reference": "202aaf6b7c2e1e0a622b0298e9f3f537e4d84018" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/928a96f585b86224ebc78f8f09d0482cf15b04f5", - "reference": "928a96f585b86224ebc78f8f09d0482cf15b04f5", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/202aaf6b7c2e1e0a622b0298e9f3f537e4d84018", + "reference": "202aaf6b7c2e1e0a622b0298e9f3f537e4d84018", "shasum": "" }, "require": { @@ -503,7 +453,7 @@ "type": "tidelift" } ], - "time": "2023-03-08T17:24:01+00:00" + "time": "2023-11-01T08:01:43+00:00" }, { "name": "phar-io/manifest", @@ -740,12 +690,12 @@ "source": { "type": "git", "url": "https://github.com/PHPCompatibility/PHPCompatibilityWP.git", - "reference": "262f9d81273932315d15d704f69b9d678b939cb3" + "reference": "02e4bf7d1f6b64f09abd93cae49166f1dae1f701" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibilityWP/zipball/262f9d81273932315d15d704f69b9d678b939cb3", - "reference": "262f9d81273932315d15d704f69b9d678b939cb3", + "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibilityWP/zipball/02e4bf7d1f6b64f09abd93cae49166f1dae1f701", + "reference": "02e4bf7d1f6b64f09abd93cae49166f1dae1f701", "shasum": "" }, "require": { @@ -786,9 +736,178 @@ ], "support": { "issues": "https://github.com/PHPCompatibility/PHPCompatibilityWP/issues", + "security": "https://github.com/PHPCompatibility/PHPCompatibilityWP/security/policy", "source": "https://github.com/PHPCompatibility/PHPCompatibilityWP" }, - "time": "2023-01-05T13:34:27+00:00" + "time": "2023-12-08T17:31:57+00:00" + }, + { + "name": "phpcsstandards/phpcsextra", + "version": "dev-develop", + "source": { + "type": "git", + "url": "https://github.com/PHPCSStandards/PHPCSExtra.git", + "reference": "11d387c6642b6e4acaf0bd9bf5203b8cca1ec489" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHPCSStandards/PHPCSExtra/zipball/11d387c6642b6e4acaf0bd9bf5203b8cca1ec489", + "reference": "11d387c6642b6e4acaf0bd9bf5203b8cca1ec489", + "shasum": "" + }, + "require": { + "php": ">=5.4", + "phpcsstandards/phpcsutils": "^1.0.9", + "squizlabs/php_codesniffer": "^3.8.0" + }, + "require-dev": { + "php-parallel-lint/php-console-highlighter": "^1.0", + "php-parallel-lint/php-parallel-lint": "^1.3.2", + "phpcsstandards/phpcsdevcs": "^1.1.6", + "phpcsstandards/phpcsdevtools": "^1.2.1", + "phpunit/phpunit": "^4.5 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.0" + }, + "default-branch": true, + "type": "phpcodesniffer-standard", + "extra": { + "branch-alias": { + "dev-stable": "1.x-dev", + "dev-develop": "1.x-dev" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0-or-later" + ], + "authors": [ + { + "name": "Juliette Reinders Folmer", + "homepage": "https://github.com/jrfnl", + "role": "lead" + }, + { + "name": "Contributors", + "homepage": "https://github.com/PHPCSStandards/PHPCSExtra/graphs/contributors" + } + ], + "description": "A collection of sniffs and standards for use with PHP_CodeSniffer.", + "keywords": [ + "PHP_CodeSniffer", + "phpcbf", + "phpcodesniffer-standard", + "phpcs", + "standards", + "static analysis" + ], + "support": { + "issues": "https://github.com/PHPCSStandards/PHPCSExtra/issues", + "security": "https://github.com/PHPCSStandards/PHPCSExtra/security/policy", + "source": "https://github.com/PHPCSStandards/PHPCSExtra" + }, + "funding": [ + { + "url": "https://github.com/PHPCSStandards", + "type": "github" + }, + { + "url": "https://github.com/jrfnl", + "type": "github" + }, + { + "url": "https://opencollective.com/php_codesniffer", + "type": "open_collective" + } + ], + "time": "2023-12-08T16:49:07+00:00" + }, + { + "name": "phpcsstandards/phpcsutils", + "version": "dev-develop", + "source": { + "type": "git", + "url": "https://github.com/PHPCSStandards/PHPCSUtils.git", + "reference": "da4c4da18b430eacdc6a6016009475951f9b1434" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHPCSStandards/PHPCSUtils/zipball/da4c4da18b430eacdc6a6016009475951f9b1434", + "reference": "da4c4da18b430eacdc6a6016009475951f9b1434", + "shasum": "" + }, + "require": { + "dealerdirect/phpcodesniffer-composer-installer": "^0.4.1 || ^0.5 || ^0.6.2 || ^0.7 || ^1.0", + "php": ">=5.4", + "squizlabs/php_codesniffer": "^3.8.0 || 4.0.x-dev@dev" + }, + "require-dev": { + "ext-filter": "*", + "php-parallel-lint/php-console-highlighter": "^1.0", + "php-parallel-lint/php-parallel-lint": "^1.3.2", + "phpcsstandards/phpcsdevcs": "^1.1.6", + "yoast/phpunit-polyfills": "^1.1.0 || ^2.0.0" + }, + "default-branch": true, + "type": "phpcodesniffer-standard", + "extra": { + "branch-alias": { + "dev-stable": "1.x-dev", + "dev-develop": "1.x-dev" + } + }, + "autoload": { + "classmap": [ + "PHPCSUtils/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0-or-later" + ], + "authors": [ + { + "name": "Juliette Reinders Folmer", + "homepage": "https://github.com/jrfnl", + "role": "lead" + }, + { + "name": "Contributors", + "homepage": "https://github.com/PHPCSStandards/PHPCSUtils/graphs/contributors" + } + ], + "description": "A suite of utility functions for use with PHP_CodeSniffer", + "homepage": "https://phpcsutils.com/", + "keywords": [ + "PHP_CodeSniffer", + "phpcbf", + "phpcodesniffer-standard", + "phpcs", + "phpcs3", + "standards", + "static analysis", + "tokens", + "utility" + ], + "support": { + "docs": "https://phpcsutils.com/", + "issues": "https://github.com/PHPCSStandards/PHPCSUtils/issues", + "security": "https://github.com/PHPCSStandards/PHPCSUtils/security/policy", + "source": "https://github.com/PHPCSStandards/PHPCSUtils" + }, + "funding": [ + { + "url": "https://github.com/PHPCSStandards", + "type": "github" + }, + { + "url": "https://github.com/jrfnl", + "type": "github" + }, + { + "url": "https://opencollective.com/php_codesniffer", + "type": "open_collective" + } + ], + "time": "2024-01-02T16:59:15+00:00" }, { "name": "phpdocumentor/reflection-common", @@ -849,12 +968,12 @@ "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "7b217217725dc991a0ae7b995041cee1d5019561" + "reference": "c86c8d449b863bdaed15861a32dc4c50f8e3a832" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/7b217217725dc991a0ae7b995041cee1d5019561", - "reference": "7b217217725dc991a0ae7b995041cee1d5019561", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/c86c8d449b863bdaed15861a32dc4c50f8e3a832", + "reference": "c86c8d449b863bdaed15861a32dc4c50f8e3a832", "shasum": "" }, "require": { @@ -905,7 +1024,7 @@ "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/master" }, - "time": "2023-03-12T10:50:44+00:00" + "time": "2023-10-13T06:34:03+00:00" }, { "name": "phpdocumentor/type-resolver", @@ -913,12 +1032,12 @@ "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "dfc078e8af9c99210337325ff5aa152872c98714" + "reference": "e03361ca67e7e88452c46c28caca34309be40f53" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/dfc078e8af9c99210337325ff5aa152872c98714", - "reference": "dfc078e8af9c99210337325ff5aa152872c98714", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/e03361ca67e7e88452c46c28caca34309be40f53", + "reference": "e03361ca67e7e88452c46c28caca34309be40f53", "shasum": "" }, "require": { @@ -962,9 +1081,9 @@ "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", "support": { "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.7.1" + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.x" }, - "time": "2023-03-27T19:02:04+00:00" + "time": "2023-12-24T20:03:22+00:00" }, { "name": "phpspec/prophecy", @@ -972,17 +1091,17 @@ "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "84c981450d81f03ec8eb64380ab32cac98093bde" + "reference": "d4f454f7e1193933f04e6500de3e79191648ed0c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/84c981450d81f03ec8eb64380ab32cac98093bde", - "reference": "84c981450d81f03ec8eb64380ab32cac98093bde", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/d4f454f7e1193933f04e6500de3e79191648ed0c", + "reference": "d4f454f7e1193933f04e6500de3e79191648ed0c", "shasum": "" }, "require": { "doctrine/instantiator": "^1.2 || ^2.0", - "php": "^7.2 || 8.0.* || 8.1.* || 8.2.*", + "php": "^7.2 || 8.0.* || 8.1.* || 8.2.* || 8.3.*", "phpdocumentor/reflection-docblock": "^5.2", "sebastian/comparator": "^3.0 || ^4.0 || ^5.0", "sebastian/recursion-context": "^3.0 || ^4.0 || ^5.0" @@ -1024,6 +1143,7 @@ "keywords": [ "Double", "Dummy", + "dev", "fake", "mock", "spy", @@ -1031,28 +1151,29 @@ ], "support": { "issues": "https://github.com/phpspec/prophecy/issues", - "source": "https://github.com/phpspec/prophecy/tree/master" + "source": "https://github.com/phpspec/prophecy/tree/v1.18.0" }, - "time": "2023-04-12T15:43:51+00:00" + "time": "2023-12-07T16:22:33+00:00" }, { "name": "phpstan/phpdoc-parser", - "version": "1.21.x-dev", + "version": "1.25.0", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "7f78fd1ff463a7884a331fdb84a25f724dbfd9ea" + "reference": "bd84b629c8de41aa2ae82c067c955e06f1b00240" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/7f78fd1ff463a7884a331fdb84a25f724dbfd9ea", - "reference": "7f78fd1ff463a7884a331fdb84a25f724dbfd9ea", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/bd84b629c8de41aa2ae82c067c955e06f1b00240", + "reference": "bd84b629c8de41aa2ae82c067c955e06f1b00240", "shasum": "" }, "require": { "php": "^7.2 || ^8.0" }, "require-dev": { + "doctrine/annotations": "^2.0", "nikic/php-parser": "^4.15", "php-parallel-lint/php-parallel-lint": "^1.2", "phpstan/extension-installer": "^1.0", @@ -1062,7 +1183,6 @@ "phpunit/phpunit": "^9.5", "symfony/process": "^5.2" }, - "default-branch": true, "type": "library", "autoload": { "psr-4": { @@ -1078,9 +1198,9 @@ "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/1.21.x" + "source": "https://github.com/phpstan/phpdoc-parser/tree/1.25.0" }, - "time": "2023-05-17T16:44:57+00:00" + "time": "2024-01-04T17:06:16+00:00" }, { "name": "phpunit/php-code-coverage", @@ -2130,13 +2250,13 @@ "version": "dev-master", "source": { "type": "git", - "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", - "reference": "a26c071d00b415bba26cedd8f835fca6288cf6b9" + "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git", + "reference": "0c9a88b3cd01a476f163332fb959326a8f00826b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/a26c071d00b415bba26cedd8f835fca6288cf6b9", - "reference": "a26c071d00b415bba26cedd8f835fca6288cf6b9", + "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/0c9a88b3cd01a476f163332fb959326a8f00826b", + "reference": "0c9a88b3cd01a476f163332fb959326a8f00826b", "shasum": "" }, "require": { @@ -2146,12 +2266,12 @@ "php": ">=5.4.0" }, "require-dev": { - "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.0" }, "default-branch": true, "bin": [ - "bin/phpcs", - "bin/phpcbf" + "bin/phpcbf", + "bin/phpcs" ], "type": "library", "extra": { @@ -2166,22 +2286,45 @@ "authors": [ { "name": "Greg Sherwood", - "role": "lead" + "role": "Former lead" + }, + { + "name": "Juliette Reinders Folmer", + "role": "Current lead" + }, + { + "name": "Contributors", + "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer/graphs/contributors" } ], "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", - "homepage": "https://github.com/squizlabs/PHP_CodeSniffer", + "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer", "keywords": [ "phpcs", "standards", "static analysis" ], "support": { - "issues": "https://github.com/squizlabs/PHP_CodeSniffer/issues", - "source": "https://github.com/squizlabs/PHP_CodeSniffer", - "wiki": "https://github.com/squizlabs/PHP_CodeSniffer/wiki" + "issues": "https://github.com/PHPCSStandards/PHP_CodeSniffer/issues", + "security": "https://github.com/PHPCSStandards/PHP_CodeSniffer/security/policy", + "source": "https://github.com/PHPCSStandards/PHP_CodeSniffer", + "wiki": "https://github.com/PHPCSStandards/PHP_CodeSniffer/wiki" }, - "time": "2023-05-07T04:45:11+00:00" + "funding": [ + { + "url": "https://github.com/PHPCSStandards", + "type": "github" + }, + { + "url": "https://github.com/jrfnl", + "type": "github" + }, + { + "url": "https://opencollective.com/php_codesniffer", + "type": "open_collective" + } + ], + "time": "2024-01-04T17:01:36+00:00" }, { "name": "tareq1988/wp-php-cs-fixer", @@ -2189,12 +2332,12 @@ "source": { "type": "git", "url": "https://github.com/tareq1988/wp-php-cs-fixer.git", - "reference": "eeef65598ae7bac55a09073e666ec0eabf303a12" + "reference": "465ea717d0894942bbba260051f0df955286e617" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tareq1988/wp-php-cs-fixer/zipball/eeef65598ae7bac55a09073e666ec0eabf303a12", - "reference": "eeef65598ae7bac55a09073e666ec0eabf303a12", + "url": "https://api.github.com/repos/tareq1988/wp-php-cs-fixer/zipball/465ea717d0894942bbba260051f0df955286e617", + "reference": "465ea717d0894942bbba260051f0df955286e617", "shasum": "" }, "default-branch": true, @@ -2219,20 +2362,20 @@ "issues": "https://github.com/tareq1988/wp-php-cs-fixer/issues", "source": "https://github.com/tareq1988/wp-php-cs-fixer/tree/master" }, - "time": "2022-08-26T09:36:52+00:00" + "time": "2023-06-19T06:26:04+00:00" }, { "name": "theseer/tokenizer", - "version": "1.2.1", + "version": "1.2.2", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" + "reference": "b2ad5003ca10d4ee50a12da31de12a5774ba6b96" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/b2ad5003ca10d4ee50a12da31de12a5774ba6b96", + "reference": "b2ad5003ca10d4ee50a12da31de12a5774ba6b96", "shasum": "" }, "require": { @@ -2261,7 +2404,7 @@ "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", "support": { "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/1.2.1" + "source": "https://github.com/theseer/tokenizer/tree/1.2.2" }, "funding": [ { @@ -2269,7 +2412,7 @@ "type": "github" } ], - "time": "2021-07-28T10:34:58+00:00" + "time": "2023-11-20T00:12:19+00:00" }, { "name": "webmozart/assert", @@ -2331,31 +2474,40 @@ }, { "name": "wp-coding-standards/wpcs", - "version": "dev-master", + "version": "dev-develop", "source": { "type": "git", "url": "https://github.com/WordPress/WordPress-Coding-Standards.git", - "reference": "7da1894633f168fe244afc6de00d141f27517b62" + "reference": "eaa70fe99e8aa5f7fc444b67ae7b8401688f2d5c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/WordPress/WordPress-Coding-Standards/zipball/7da1894633f168fe244afc6de00d141f27517b62", - "reference": "7da1894633f168fe244afc6de00d141f27517b62", + "url": "https://api.github.com/repos/WordPress/WordPress-Coding-Standards/zipball/eaa70fe99e8aa5f7fc444b67ae7b8401688f2d5c", + "reference": "eaa70fe99e8aa5f7fc444b67ae7b8401688f2d5c", "shasum": "" }, "require": { + "ext-filter": "*", + "ext-libxml": "*", + "ext-tokenizer": "*", + "ext-xmlreader": "*", "php": ">=5.4", - "squizlabs/php_codesniffer": "^3.3.1" + "phpcsstandards/phpcsextra": "^1.2.1", + "phpcsstandards/phpcsutils": "^1.0.9", + "squizlabs/php_codesniffer": "^3.8.0" }, "require-dev": { - "dealerdirect/phpcodesniffer-composer-installer": "^0.5 || ^0.6", + "php-parallel-lint/php-console-highlighter": "^1.0.0", + "php-parallel-lint/php-parallel-lint": "^1.3.2", "phpcompatibility/php-compatibility": "^9.0", - "phpcsstandards/phpcsdevtools": "^1.0", - "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" + "phpcsstandards/phpcsdevtools": "^1.2.0", + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.0" }, "suggest": { - "dealerdirect/phpcodesniffer-composer-installer": "^0.6 || This Composer plugin will sort out the PHPCS 'installed_paths' automatically." + "ext-iconv": "For improved results", + "ext-mbstring": "For improved results" }, + "default-branch": true, "type": "phpcodesniffer-standard", "notification-url": "https://packagist.org/downloads/", "license": [ @@ -2371,6 +2523,7 @@ "keywords": [ "phpcs", "standards", + "static analysis", "wordpress" ], "support": { @@ -2378,13 +2531,19 @@ "source": "https://github.com/WordPress/WordPress-Coding-Standards", "wiki": "https://github.com/WordPress/WordPress-Coding-Standards/wiki" }, - "time": "2020-05-13T23:57:56+00:00" + "funding": [ + { + "url": "https://opencollective.com/php_codesniffer", + "type": "custom" + } + ], + "time": "2024-01-03T15:33:57+00:00" } ], "aliases": [], "minimum-stability": "dev", "stability-flags": { - "appsero/client": 20, + "wedevs/wp-utils": 20, "wp-coding-standards/wpcs": 20, "tareq1988/wp-php-cs-fixer": 20, "phpcompatibility/phpcompatibility-wp": 20 diff --git a/includes/Admin/Subscription.php b/includes/Admin/Subscription.php index 719a82535..89bd78ff6 100644 --- a/includes/Admin/Subscription.php +++ b/includes/Admin/Subscription.php @@ -502,13 +502,14 @@ public static function get_subscription( $sub_id ) { */ public function set_pending( $postdata, $form_id, $form_settings, $form_vars ) { $form = new Form( $form_id ); + $post_type = ! empty( $form_settings['post_type'] ) ? $form_settings['post_type'] : 'post'; $payment_options = $form->is_charging_enabled(); $force_pack = $form->is_enabled_force_pack(); $pay_per_post = $form->is_enabled_pay_per_post(); $fallback_cost = $form->is_enabled_fallback_cost(); $current_user = wpuf_get_user(); $current_pack = $current_user->subscription()->current_pack(); - $has_post = $current_user->subscription()->has_post_count( $form_settings['post_type'] ); + $has_post = $current_user->subscription()->has_post_count( $post_type ); if ( $payment_options && $force_pack && ! is_wp_error( $current_pack ) && $fallback_cost && ! $has_post ) { $postdata['post_status'] = 'pending'; diff --git a/includes/Ajax/Frontend_Form_Ajax.php b/includes/Ajax/Frontend_Form_Ajax.php index dcc678196..cb6173ba8 100644 --- a/includes/Ajax/Frontend_Form_Ajax.php +++ b/includes/Ajax/Frontend_Form_Ajax.php @@ -151,7 +151,7 @@ public function submit_post() { $allowed_tags = wp_kses_allowed_html( 'post' ); $postarr = [ - 'post_type' => $this->form_settings['post_type'], + 'post_type' => ! empty( $this->form_settings['post_type'] ) ? $this->form_settings['post_type'] : 'post', 'post_status' => isset( $this->form_settings['post_status'] ) ? $this->form_settings['post_status'] : 'publish', 'post_author' => $post_author, 'post_title' => isset( $_POST['post_title'] ) ? sanitize_text_field( wp_unslash( $_POST['post_title'] ) ) : '', diff --git a/includes/Traits/TaxableTrait.php b/includes/Traits/TaxableTrait.php index 34e583485..287c87029 100644 --- a/includes/Traits/TaxableTrait.php +++ b/includes/Traits/TaxableTrait.php @@ -337,10 +337,16 @@ function wpuf_current_tax_rate() { if ( ! empty( $woo_address ) && ! empty( $rates ) ) { foreach ( $rates as $rate ) { - if ( $rate['rate'] === '' ) { + $rate_str = ! empty( $rate['rate'] ) ? $rate['rate'] : ''; + $state = ! empty( $rate['state'] ) ? $rate['state'] : ''; + $woo_state = ! empty( $woo_address['state'] ) ? $woo_address['state'] : ''; + $country = ! empty( $rate['country'] ) ? $rate['country'] : ''; + $woo_country = ! empty( $woo_address['country'] ) ? $woo_address['country'] : ''; + + if ( '' === $rate_str ) { return $tax_amount; } - if ( $rate['state'] === $woo_address['state'] && $rate['country'] === $woo_address['country'] ) { + if ( $state === $woo_state && $country === $woo_country ) { $tax_amount = $rate['rate']; return $tax_amount; } diff --git a/includes/class-frontend-render-form.php b/includes/class-frontend-render-form.php index 955b2c317..00f46932d 100644 --- a/includes/class-frontend-render-form.php +++ b/includes/class-frontend-render-form.php @@ -9,7 +9,7 @@ public function __construct() { public function wpuf_upgrade_notice() { // check whether the version of wpuf pro is prior to the code restructure if ( defined( 'WPUF_PRO_VERSION' ) && version_compare( WPUF_PRO_VERSION, '4', '<' ) ) { - deactivate_plugins( WPUF_PRO_FILE ); + // deactivate_plugins( WPUF_PRO_FILE ); ?>

diff --git a/wpuf-functions.php b/wpuf-functions.php index a4bf7c7ec..2c86f0b6c 100644 --- a/wpuf-functions.php +++ b/wpuf-functions.php @@ -3957,9 +3957,10 @@ function wpuf_show_form_limit_message( $form_id ) { * @return void */ function wpuf_frontend_post_revision( $post_id, $form_settings ) { - $post = get_post( $post_id ); + $post = get_post( $post_id ); + $post_type = ! empty( $form_settings['post_type'] ) ? $form_settings['post_type'] : 'post'; - if ( post_type_supports( $form_settings['post_type'], 'revisions' ) ) { + if ( post_type_supports( $post_type, 'revisions' ) ) { $revisions = wp_get_post_revisions( $post_id, [ 'order' => 'ASC', diff --git a/wpuf.php b/wpuf.php index d8adac03d..fcaf76c6a 100644 --- a/wpuf.php +++ b/wpuf.php @@ -219,7 +219,7 @@ public function plugin_upgrades() { public function process_wpuf_pro_version() { // check whether the version of wpuf pro is prior to the code restructure if ( defined( 'WPUF_PRO_VERSION' ) && version_compare( WPUF_PRO_VERSION, '4', '<' ) ) { - deactivate_plugins( WPUF_PRO_FILE ); + // deactivate_plugins( WPUF_PRO_FILE ); add_action( 'admin_notices', [ $this, 'wpuf_upgrade_notice' ] ); } From 4401c2aa13a729ea54184f718332c6eef7e67796 Mon Sep 17 00:00:00 2001 From: Sapayth Hossain Date: Fri, 5 Jan 2024 19:06:20 +0600 Subject: [PATCH 2/2] chor: bump version to 4.0.3 --- admin/html/whats-new.php | 22 + changelog.txt | 6 + languages/wp-user-frontend.pot | 858 ++++++++++++++++----------------- package-lock.json | 4 +- package.json | 2 +- readme.md | 8 +- readme.txt | 8 +- wpuf.php | 4 +- 8 files changed, 476 insertions(+), 436 deletions(-) diff --git a/admin/html/whats-new.php b/admin/html/whats-new.php index 9bf7cb425..ecddda2d7 100644 --- a/admin/html/whats-new.php +++ b/admin/html/whats-new.php @@ -1,5 +1,27 @@ 'Version 4.0.3', + 'released' => '2024-01-05', + 'changes' => [ + [ + 'title' => __( 'Restructure plugin codes', 'wp-user-frontend' ), + 'type' => 'Enhance', + ], + [ + 'title' => __( 'Error when editing the featured post', 'wp-user-frontend' ), + 'type' => 'Fix', + ], + [ + 'title' => __( 'add/edit post forms if the site language is set to Simplified Chinese', 'wp-user-frontend' ), + 'type' => 'Fix', + ], + [ + 'title' => __( 'Errors with Post Form Conditional Logic', 'wp-user-frontend' ), + 'type' => 'Fix', + ], + ], + ], [ 'version' => 'Version 4.0.2', 'released' => '2024-01-03', diff --git a/changelog.txt b/changelog.txt index 91f6396e2..7f7c4d913 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,9 @@ += v4.0.3 (05 Jan, 2024) = +* Enhance - Restructure plugin codes +* Fix - Error when editing the featured post +* Fix - add/edit post forms if the site language is set to Simplified Chinese +* Fix - Errors with Post Form Conditional Logic + = v4.0.2 (03 Jan, 2024) = * Enhance - Restructure plugin codes * Fix - Error when editing the featured post diff --git a/languages/wp-user-frontend.pot b/languages/wp-user-frontend.pot index 27df4cc36..f0b7c5eb1 100644 --- a/languages/wp-user-frontend.pot +++ b/languages/wp-user-frontend.pot @@ -2,9 +2,9 @@ # This file is distributed under the GPL2 or later. msgid "" msgstr "" -"Project-Id-Version: WP User Frontend 4.0.2\n" +"Project-Id-Version: WP User Frontend 4.0.3\n" "Report-Msgid-Bugs-To: https://wedevs.com/contact/\n" -"POT-Creation-Date: 2024-01-03 05:03:22+00:00\n" +"POT-Creation-Date: 2024-01-05 13:05:45+00:00\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -797,1083 +797,1083 @@ msgid "Limit Reached Message" msgstr "" #: admin/html/whats-new.php:8 admin/html/whats-new.php:30 -#: admin/html/whats-new.php:52 +#: admin/html/whats-new.php:52 admin/html/whats-new.php:74 msgid "Restructure plugin codes" msgstr "" #: admin/html/whats-new.php:12 admin/html/whats-new.php:34 -#: admin/html/whats-new.php:56 +#: admin/html/whats-new.php:56 admin/html/whats-new.php:78 msgid "Error when editing the featured post" msgstr "" #: admin/html/whats-new.php:16 admin/html/whats-new.php:38 -#: admin/html/whats-new.php:60 +#: admin/html/whats-new.php:60 admin/html/whats-new.php:82 msgid "add/edit post forms if the site language is set to Simplified Chinese" msgstr "" #: admin/html/whats-new.php:20 admin/html/whats-new.php:42 -#: admin/html/whats-new.php:64 +#: admin/html/whats-new.php:64 admin/html/whats-new.php:86 msgid "Errors with Post Form Conditional Logic" msgstr "" -#: admin/html/whats-new.php:74 +#: admin/html/whats-new.php:96 msgid "Add capabilities check on AJAX actions" msgstr "" -#: admin/html/whats-new.php:84 +#: admin/html/whats-new.php:106 msgid "Delete upload file even after clicking cancel button" msgstr "" -#: admin/html/whats-new.php:88 +#: admin/html/whats-new.php:110 msgid "Taxonomy data not showing for checkbox" msgstr "" -#: admin/html/whats-new.php:92 +#: admin/html/whats-new.php:114 msgid "Some validation for AJAX actions" msgstr "" -#: admin/html/whats-new.php:102 +#: admin/html/whats-new.php:124 msgid "conflicts with Advanced Custom Fields Pro Plugin" msgstr "" -#: admin/html/whats-new.php:106 +#: admin/html/whats-new.php:128 msgid "conflicts with the Classic Editor Plugin" msgstr "" -#: admin/html/whats-new.php:110 +#: admin/html/whats-new.php:132 msgid "multiple HTML field inside column field" msgstr "" -#: admin/html/whats-new.php:120 +#: admin/html/whats-new.php:142 msgid "Restrict shortcode in post form" msgstr "" -#: admin/html/whats-new.php:124 +#: admin/html/whats-new.php:146 msgid "Add custom note on plugin update page" msgstr "" -#: admin/html/whats-new.php:134 +#: admin/html/whats-new.php:156 msgid "Revamp registration page design" msgstr "" -#: admin/html/whats-new.php:138 +#: admin/html/whats-new.php:160 msgid "Expiration time not showing for admin" msgstr "" -#: admin/html/whats-new.php:142 +#: admin/html/whats-new.php:164 msgid "Error when editing user profile" msgstr "" -#: admin/html/whats-new.php:152 +#: admin/html/whats-new.php:174 msgid "Post submission for dokan vendors" msgstr "" -#: admin/html/whats-new.php:156 +#: admin/html/whats-new.php:178 msgid "Paypal transaction not showing" msgstr "" -#: admin/html/whats-new.php:160 +#: admin/html/whats-new.php:182 msgid "Predefined category field not working" msgstr "" -#: admin/html/whats-new.php:164 +#: admin/html/whats-new.php:186 msgid "Field visibility not working" msgstr "" -#: admin/html/whats-new.php:174 +#: admin/html/whats-new.php:196 msgid "Error if Dokan not installed" msgstr "" -#: admin/html/whats-new.php:178 +#: admin/html/whats-new.php:200 msgid "Style conflict with LearnPress" msgstr "" -#: admin/html/whats-new.php:188 +#: admin/html/whats-new.php:210 msgid "Post submission for the Dokan Vendors" msgstr "" -#: admin/html/whats-new.php:198 +#: admin/html/whats-new.php:220 msgid "Add responsiveness to the upgrade-to-pro popup widget" msgstr "" -#: admin/html/whats-new.php:202 +#: admin/html/whats-new.php:224 msgid "Update Appsero SDK to the latest version" msgstr "" -#: admin/html/whats-new.php:206 +#: admin/html/whats-new.php:228 msgid "warning before updating a subscription package" msgstr "" -#: admin/html/whats-new.php:210 +#: admin/html/whats-new.php:232 msgid "Subscription shouldn't be editable from user's profile" msgstr "" -#: admin/html/whats-new.php:214 +#: admin/html/whats-new.php:236 msgid "Text field append '0' when character exceeds content restriction limit" msgstr "" -#: admin/html/whats-new.php:218 +#: admin/html/whats-new.php:240 msgid "Fields within column doesn't behave as expected in forms" msgstr "" -#: admin/html/whats-new.php:222 +#: admin/html/whats-new.php:244 msgid "Change sweetalert2 to v11.4.19 to remove anti-war message" msgstr "" -#: admin/html/whats-new.php:232 +#: admin/html/whats-new.php:254 msgid "Admin dashboard news and update meta-box added" msgstr "" -#: admin/html/whats-new.php:236 +#: admin/html/whats-new.php:258 msgid "Upgrade prompts design" msgstr "" -#: admin/html/whats-new.php:240 +#: admin/html/whats-new.php:262 msgid "Email style handled" msgstr "" -#: admin/html/whats-new.php:244 +#: admin/html/whats-new.php:266 msgid "" "text-area type selection(Normal, Rich text-area, Teeny Rich text-area) bug " "in field options" msgstr "" -#: admin/html/whats-new.php:248 +#: admin/html/whats-new.php:270 msgid "Frontend form validation" msgstr "" -#: admin/html/whats-new.php:252 +#: admin/html/whats-new.php:274 msgid "Default value not saving for radio, dropdown, checkbox" msgstr "" -#: admin/html/whats-new.php:256 +#: admin/html/whats-new.php:278 msgid "sweetalert2 version" msgstr "" -#: admin/html/whats-new.php:266 +#: admin/html/whats-new.php:288 msgid "Short-code encryption updated for registration page" msgstr "" -#: admin/html/whats-new.php:276 +#: admin/html/whats-new.php:298 msgid "Updated compatibility with the latest version of WordPress 6.0" msgstr "" -#: admin/html/whats-new.php:280 +#: admin/html/whats-new.php:302 msgid "Improved some backend implementations" msgstr "" -#: admin/html/whats-new.php:290 +#: admin/html/whats-new.php:312 msgid "Email template enhanced for after activation" msgstr "" -#: admin/html/whats-new.php:294 +#: admin/html/whats-new.php:316 msgid "Read only option for custom field" msgstr "" -#: admin/html/whats-new.php:298 +#: admin/html/whats-new.php:320 msgid "Editor toolbar exclude option enhanced" msgstr "" -#: admin/html/whats-new.php:302 +#: admin/html/whats-new.php:324 msgid "Preview option enhanced for user profile" msgstr "" -#: admin/html/whats-new.php:306 +#: admin/html/whats-new.php:328 msgid "Meta key enhanced for user email notification" msgstr "" -#: admin/html/whats-new.php:310 +#: admin/html/whats-new.php:332 msgid "Global option for disable post edit on account" msgstr "" -#: admin/html/whats-new.php:314 +#: admin/html/whats-new.php:336 msgid "Filter for conditional logic for fields added" msgstr "" -#: admin/html/whats-new.php:318 +#: admin/html/whats-new.php:340 msgid "PHP 8 compatibility handled" msgstr "" -#: admin/html/whats-new.php:322 +#: admin/html/whats-new.php:344 msgid "Address / Billing address inconsistency handled" msgstr "" -#: admin/html/whats-new.php:326 +#: admin/html/whats-new.php:348 msgid "Content restriction several issue fixed" msgstr "" -#: admin/html/whats-new.php:330 +#: admin/html/whats-new.php:352 msgid "Tax calculation properly handled for all areas" msgstr "" -#: admin/html/whats-new.php:334 +#: admin/html/whats-new.php:356 msgid "Validation added for invalid email and URL formats" msgstr "" -#: admin/html/whats-new.php:338 +#: admin/html/whats-new.php:360 msgid "Special character password handled for login" msgstr "" -#: admin/html/whats-new.php:342 +#: admin/html/whats-new.php:364 msgid "Reset password handled for sidebar widget" msgstr "" -#: admin/html/whats-new.php:346 +#: admin/html/whats-new.php:368 msgid "Required google map issues handled" msgstr "" -#: admin/html/whats-new.php:350 +#: admin/html/whats-new.php:372 msgid "Translation related issue handled for admin menu" msgstr "" -#: admin/html/whats-new.php:354 +#: admin/html/whats-new.php:376 msgid "Label & query enhanced for transaction table" msgstr "" -#: admin/html/whats-new.php:358 +#: admin/html/whats-new.php:380 msgid "Template override for child theme fixed" msgstr "" -#: admin/html/whats-new.php:362 +#: admin/html/whats-new.php:384 msgid "Custom field modal handled for registration form" msgstr "" -#: admin/html/whats-new.php:366 +#: admin/html/whats-new.php:388 msgid "Redundant CSS issues handled" msgstr "" -#: admin/html/whats-new.php:370 +#: admin/html/whats-new.php:392 msgid "Address field inconsistency fixed" msgstr "" -#: admin/html/whats-new.php:374 +#: admin/html/whats-new.php:396 msgid "Plugin page spin loading issue handled" msgstr "" -#: admin/html/whats-new.php:378 +#: admin/html/whats-new.php:400 msgid "Warning on exit for draft post fixed" msgstr "" -#: admin/html/whats-new.php:382 +#: admin/html/whats-new.php:404 msgid "Unlimited expire on admin user profile handled" msgstr "" -#: admin/html/whats-new.php:386 +#: admin/html/whats-new.php:408 msgid "No value checkbox issue handled" msgstr "" -#: admin/html/whats-new.php:390 +#: admin/html/whats-new.php:412 msgid "Tag search security Vulnerability handled" msgstr "" -#: admin/html/whats-new.php:394 +#: admin/html/whats-new.php:416 msgid "Multi dropdown field error handled" msgstr "" -#: admin/html/whats-new.php:405 +#: admin/html/whats-new.php:427 msgid "Promotion notice enhanced through api" msgstr "" -#: admin/html/whats-new.php:416 +#: admin/html/whats-new.php:438 msgid "Security Vulnerability fixed" msgstr "" -#: admin/html/whats-new.php:427 +#: admin/html/whats-new.php:449 msgid "Featured item for subscriber" msgstr "" -#: admin/html/whats-new.php:431 +#: admin/html/whats-new.php:453 msgid "Warning added for unsaved form data on frontend" msgstr "" -#: admin/html/whats-new.php:435 +#: admin/html/whats-new.php:457 msgid "Settings page search implemented" msgstr "" -#: admin/html/whats-new.php:439 +#: admin/html/whats-new.php:461 msgid "Editor added for registration form email template" msgstr "" -#: admin/html/whats-new.php:443 +#: admin/html/whats-new.php:465 msgid "Fallback pay per post not working with when draft enabled" msgstr "" -#: admin/html/whats-new.php:447 +#: admin/html/whats-new.php:469 msgid "User Dashboard responsive issues fixed" msgstr "" -#: admin/html/whats-new.php:451 +#: admin/html/whats-new.php:473 msgid "Showing wrong license expire message handled" msgstr "" -#: admin/html/whats-new.php:455 +#: admin/html/whats-new.php:477 msgid "Remove expire cron handled for once daily" msgstr "" -#: admin/html/whats-new.php:459 +#: admin/html/whats-new.php:481 msgid "Billing address validation handled" msgstr "" -#: admin/html/whats-new.php:463 +#: admin/html/whats-new.php:485 msgid "Promotion notice restricted for WPUF menu" msgstr "" -#: admin/html/whats-new.php:474 +#: admin/html/whats-new.php:496 msgid "reCaptcha issue with other plugin handled" msgstr "" -#: admin/html/whats-new.php:478 +#: admin/html/whats-new.php:500 msgid "Multiple post type for wpuf dashboard not working fixed" msgstr "" -#: admin/html/whats-new.php:482 +#: admin/html/whats-new.php:504 msgid "Billing address ajax request issue handled" msgstr "" -#: admin/html/whats-new.php:486 +#: admin/html/whats-new.php:508 msgid "Halloween promotion notice added" msgstr "" -#: admin/html/whats-new.php:497 +#: admin/html/whats-new.php:519 msgid "Content restriction for minimum, maximum value enhanced" msgstr "" -#: admin/html/whats-new.php:501 +#: admin/html/whats-new.php:523 msgid "New option for redirection after pay per post payment in form setting" msgstr "" -#: admin/html/whats-new.php:505 +#: admin/html/whats-new.php:527 msgid "Controller added for various email notification" msgstr "" -#: admin/html/whats-new.php:509 +#: admin/html/whats-new.php:531 msgid "Placeholder added for unauth message option" msgstr "" -#: admin/html/whats-new.php:513 +#: admin/html/whats-new.php:535 msgid "Subscription Post expiration option change to input field" msgstr "" -#: admin/html/whats-new.php:517 +#: admin/html/whats-new.php:539 msgid "Content restriction message translatable" msgstr "" -#: admin/html/whats-new.php:521 +#: admin/html/whats-new.php:543 msgid "ACF integration inconsistency handled" msgstr "" -#: admin/html/whats-new.php:525 +#: admin/html/whats-new.php:547 msgid "Enable payment checkbox handled for child option" msgstr "" -#: admin/html/whats-new.php:529 +#: admin/html/whats-new.php:551 msgid "Broken asset link handled for custom field popup" msgstr "" -#: admin/html/whats-new.php:533 +#: admin/html/whats-new.php:555 msgid "Rollback inconsistency for CPT handled" msgstr "" -#: admin/html/whats-new.php:537 +#: admin/html/whats-new.php:559 msgid "Login form loaded after resetting password" msgstr "" -#: admin/html/whats-new.php:541 +#: admin/html/whats-new.php:563 msgid "Billing address inconsistency handled" msgstr "" -#: admin/html/whats-new.php:545 +#: admin/html/whats-new.php:567 msgid "Form duplication on creation handled" msgstr "" -#: admin/html/whats-new.php:549 +#: admin/html/whats-new.php:571 msgid "Field Dragging inconsistency fixed" msgstr "" -#: admin/html/whats-new.php:560 +#: admin/html/whats-new.php:582 msgid "Google Map field enhanced along with acf google map" msgstr "" -#: admin/html/whats-new.php:564 +#: admin/html/whats-new.php:586 msgid "Filter added for dashboard account menu" msgstr "" -#: admin/html/whats-new.php:568 +#: admin/html/whats-new.php:590 msgid "Fallback Pay Per Post inconsistency handled" msgstr "" -#: admin/html/whats-new.php:572 +#: admin/html/whats-new.php:594 msgid "Google map search field not showing" msgstr "" -#: admin/html/whats-new.php:576 +#: admin/html/whats-new.php:598 msgid "Form preview page inconsistency with builder" msgstr "" -#: admin/html/whats-new.php:580 +#: admin/html/whats-new.php:602 msgid "Category not showing as hierarchy" msgstr "" -#: admin/html/whats-new.php:584 +#: admin/html/whats-new.php:606 msgid "TOC field randering issue with registration form" msgstr "" -#: admin/html/whats-new.php:588 +#: admin/html/whats-new.php:610 msgid "Custom plupload filter inconsistency with file upload handled" msgstr "" -#: admin/html/whats-new.php:592 +#: admin/html/whats-new.php:614 msgid "Guest Pay Per Post inconsistency handled" msgstr "" -#: admin/html/whats-new.php:596 +#: admin/html/whats-new.php:618 msgid "Responsive and font issue handled" msgstr "" -#: admin/html/whats-new.php:607 +#: admin/html/whats-new.php:629 msgid "Preview page added for post form and registration form" msgstr "" -#: admin/html/whats-new.php:611 +#: admin/html/whats-new.php:633 msgid "Post types menu on account page added" msgstr "" -#: admin/html/whats-new.php:615 +#: admin/html/whats-new.php:637 msgid "Dashboard shortcode attributes enhanced" msgstr "" -#: admin/html/whats-new.php:619 +#: admin/html/whats-new.php:641 msgid "Account page post type list new design" msgstr "" -#: admin/html/whats-new.php:623 +#: admin/html/whats-new.php:645 msgid "Payment page restricted from direct unauthenticated access" msgstr "" -#: admin/html/whats-new.php:627 +#: admin/html/whats-new.php:649 msgid "Timepicker conflict with dokan handled" msgstr "" -#: admin/html/whats-new.php:631 +#: admin/html/whats-new.php:653 msgid "Trial inconsistency with paypal fixed" msgstr "" -#: admin/html/whats-new.php:635 +#: admin/html/whats-new.php:657 msgid "Subscription does not cancel with paypal due to profile missing id" msgstr "" -#: admin/html/whats-new.php:639 +#: admin/html/whats-new.php:661 msgid "Subscription email notification inconsistency fixed" msgstr "" -#: admin/html/whats-new.php:643 +#: admin/html/whats-new.php:665 msgid "Various issues on payment page for non-logged in user handled" msgstr "" -#: admin/html/whats-new.php:647 +#: admin/html/whats-new.php:669 msgid "Column inner field cloning inconsistency fixed" msgstr "" -#: admin/html/whats-new.php:651 +#: admin/html/whats-new.php:673 msgid "Popup z-index changed due to other plugin z-index" msgstr "" -#: admin/html/whats-new.php:663 +#: admin/html/whats-new.php:685 msgid "Added Mauritian Rupee for currency" msgstr "" -#: admin/html/whats-new.php:667 +#: admin/html/whats-new.php:689 msgid "Added eid promotional offer notice" msgstr "" -#: admin/html/whats-new.php:671 +#: admin/html/whats-new.php:693 msgid "Multiple google map validation for same form" msgstr "" -#: admin/html/whats-new.php:675 +#: admin/html/whats-new.php:697 msgid "Various issues on verification, autologin payments & address field" msgstr "" -#: admin/html/whats-new.php:679 +#: admin/html/whats-new.php:701 msgid "Docs update for file & attachments feature which is pro only" msgstr "" -#: admin/html/whats-new.php:690 +#: admin/html/whats-new.php:712 msgid "Overflow footer on form builder page" msgstr "" -#: admin/html/whats-new.php:694 +#: admin/html/whats-new.php:716 msgid "WordPress 5.7 compatibility" msgstr "" -#: admin/html/whats-new.php:698 +#: admin/html/whats-new.php:720 msgid "Limited time promotion for weDevs birthday" msgstr "" -#: admin/html/whats-new.php:709 +#: admin/html/whats-new.php:731 msgid "Meta key will not change if label update" msgstr "" -#: admin/html/whats-new.php:713 +#: admin/html/whats-new.php:735 msgid "Login redirect empty previous url" msgstr "" -#: admin/html/whats-new.php:717 +#: admin/html/whats-new.php:739 msgid "Email doesnt set as username" msgstr "" -#: admin/html/whats-new.php:721 +#: admin/html/whats-new.php:743 msgid "Post redirection to payment doesn't work" msgstr "" -#: admin/html/whats-new.php:725 +#: admin/html/whats-new.php:747 msgid "Address field not working when used with conditional logic" msgstr "" -#: admin/html/whats-new.php:729 +#: admin/html/whats-new.php:751 msgid "Ajax type category child of not working" msgstr "" -#: admin/html/whats-new.php:733 +#: admin/html/whats-new.php:755 msgid "Non recurring subscription did not work" msgstr "" -#: admin/html/whats-new.php:744 +#: admin/html/whats-new.php:766 msgid "Menu position has chenged due to dokan has same menu position" msgstr "" -#: admin/html/whats-new.php:748 +#: admin/html/whats-new.php:770 msgid "Drag and drop not working properly for new field" msgstr "" -#: admin/html/whats-new.php:759 +#: admin/html/whats-new.php:781 msgid "QR and math captcha added to pro feature list" msgstr "" -#: admin/html/whats-new.php:763 +#: admin/html/whats-new.php:785 msgid "Tooltip for category navigate" msgstr "" -#: admin/html/whats-new.php:767 +#: admin/html/whats-new.php:789 msgid "Understandable guest payment notice" msgstr "" -#: admin/html/whats-new.php:771 +#: admin/html/whats-new.php:793 msgid "Paypal non recurring pack id does not set" msgstr "" -#: admin/html/whats-new.php:782 +#: admin/html/whats-new.php:804 msgid "Once trial subscription is used, it couldn't reset" msgstr "" -#: admin/html/whats-new.php:786 +#: admin/html/whats-new.php:808 msgid "Subscription cancel doesn't work" msgstr "" -#: admin/html/whats-new.php:790 +#: admin/html/whats-new.php:812 msgid "The tax rate was not calculated with the total amount" msgstr "" -#: admin/html/whats-new.php:794 +#: admin/html/whats-new.php:816 msgid "The width of the column field was breaking" msgstr "" -#: admin/html/whats-new.php:798 +#: admin/html/whats-new.php:820 msgid "Paypal recurring payment" msgstr "" -#: admin/html/whats-new.php:809 +#: admin/html/whats-new.php:831 msgid "Updated codebase to fix timezone mismatch" msgstr "" -#: admin/html/whats-new.php:820 +#: admin/html/whats-new.php:842 msgid "Custom html content field's width" msgstr "" -#: admin/html/whats-new.php:824 +#: admin/html/whats-new.php:846 msgid "All states of New Zealand are added" msgstr "" -#: admin/html/whats-new.php:835 +#: admin/html/whats-new.php:857 msgid "Get appropriate user id when role based conditions are present" msgstr "" -#: admin/html/whats-new.php:839 +#: admin/html/whats-new.php:861 msgid "Show Invalid subscription message if wrong pack id passed" msgstr "" -#: admin/html/whats-new.php:843 +#: admin/html/whats-new.php:865 msgid "URL field new window not working" msgstr "" -#: admin/html/whats-new.php:847 +#: admin/html/whats-new.php:869 msgid "Option label not working when & use" msgstr "" -#: admin/html/whats-new.php:851 +#: admin/html/whats-new.php:873 msgid "Ajax type category not showing on edit" msgstr "" -#: admin/html/whats-new.php:855 +#: admin/html/whats-new.php:877 msgid "Multiple file image can't select" msgstr "" -#: admin/html/whats-new.php:859 +#: admin/html/whats-new.php:881 msgid "Subscription pack PayPal Checkout gets \"Error: Access Denied\"" msgstr "" -#: admin/html/whats-new.php:863 +#: admin/html/whats-new.php:885 msgid "Conflict image field with acf image field" msgstr "" -#: admin/html/whats-new.php:867 +#: admin/html/whats-new.php:889 msgid "Missing Auckland State for New Zealand country" msgstr "" -#: admin/html/whats-new.php:871 +#: admin/html/whats-new.php:893 msgid "Added support for WooCommerce product category value replacemen" msgstr "" -#: admin/html/whats-new.php:881 +#: admin/html/whats-new.php:903 msgid "Add character restriction feature" msgstr "" -#: admin/html/whats-new.php:885 +#: admin/html/whats-new.php:907 msgid "Make sure post author edit link works only in frontend" msgstr "" -#: admin/html/whats-new.php:889 +#: admin/html/whats-new.php:911 msgid "Inconsistency in lost password reset email message" msgstr "" -#: admin/html/whats-new.php:893 +#: admin/html/whats-new.php:915 msgid "Saving custom taxonomy terms when input type is text" msgstr "" -#: admin/html/whats-new.php:897 +#: admin/html/whats-new.php:919 msgid "Taxonomy field JS error in builder" msgstr "" -#: admin/html/whats-new.php:901 +#: admin/html/whats-new.php:923 msgid "Showing WPUF edit link for WP default roles" msgstr "" -#: admin/html/whats-new.php:905 +#: admin/html/whats-new.php:927 msgid "Upload button unresponsive issue in iOS" msgstr "" -#: admin/html/whats-new.php:915 +#: admin/html/whats-new.php:937 msgid "Add post edit link for post authors in single or archive pages" msgstr "" -#: admin/html/whats-new.php:919 +#: admin/html/whats-new.php:941 msgid "Enhance post delete message" msgstr "" -#: admin/html/whats-new.php:923 +#: admin/html/whats-new.php:945 msgid "Refactor control buttons visibility in form builder" msgstr "" -#: admin/html/whats-new.php:927 +#: admin/html/whats-new.php:949 msgid "Add missing colons after field label" msgstr "" -#: admin/html/whats-new.php:931 +#: admin/html/whats-new.php:953 msgid "Post edit map capability condition" msgstr "" -#: admin/html/whats-new.php:935 +#: admin/html/whats-new.php:957 msgid "Role based permission for accessing a post form" msgstr "" -#: admin/html/whats-new.php:939 +#: admin/html/whats-new.php:961 msgid "Section-break field alignment" msgstr "" -#: admin/html/whats-new.php:943 +#: admin/html/whats-new.php:965 msgid "Pay per post doesn't work if subscription pack is activated" msgstr "" -#: admin/html/whats-new.php:947 +#: admin/html/whats-new.php:969 msgid "Mime type for uploading JSON files" msgstr "" -#: admin/html/whats-new.php:951 +#: admin/html/whats-new.php:973 msgid "File upload with same file name" msgstr "" -#: admin/html/whats-new.php:955 +#: admin/html/whats-new.php:977 msgid "Post preview missing fields" msgstr "" -#: admin/html/whats-new.php:959 +#: admin/html/whats-new.php:981 msgid "Illigal variable declartion" msgstr "" -#: admin/html/whats-new.php:963 +#: admin/html/whats-new.php:985 msgid "Featured image updating issue" msgstr "" -#: admin/html/whats-new.php:967 +#: admin/html/whats-new.php:989 msgid "Conflict with Phlox theme" msgstr "" -#: admin/html/whats-new.php:971 +#: admin/html/whats-new.php:993 msgid "Textarea custom field data sanitization" msgstr "" -#: admin/html/whats-new.php:975 +#: admin/html/whats-new.php:997 msgid "exclude_type warning in wpuf_category_checklist" msgstr "" -#: admin/html/whats-new.php:979 +#: admin/html/whats-new.php:1001 msgid "Category field not showing all child categories for selection type child of" msgstr "" -#: admin/html/whats-new.php:983 +#: admin/html/whats-new.php:1005 msgid "Conflict between image and file upload custom fields" msgstr "" -#: admin/html/whats-new.php:987 +#: admin/html/whats-new.php:1009 msgid "Login url when login page is not set" msgstr "" -#: admin/html/whats-new.php:997 +#: admin/html/whats-new.php:1019 msgid "" "Use common names for Ivory Coast, North Korea and Sourth Korea instead of " "their official names" msgstr "" -#: admin/html/whats-new.php:1001 +#: admin/html/whats-new.php:1023 msgid "Fix condition to use default avatar" msgstr "" -#: admin/html/whats-new.php:1005 +#: admin/html/whats-new.php:1027 msgid "Make Email and URL fields clickable" msgstr "" -#: admin/html/whats-new.php:1009 +#: admin/html/whats-new.php:1031 msgid "Fix redirect after user login" msgstr "" -#: admin/html/whats-new.php:1013 +#: admin/html/whats-new.php:1035 msgid "Sanitize textarea field data" msgstr "" -#: admin/html/whats-new.php:1017 +#: admin/html/whats-new.php:1039 msgid "" "Fix missing colon to email, URL, text and textarea labels when renders " "their data" msgstr "" -#: admin/html/whats-new.php:1021 +#: admin/html/whats-new.php:1043 msgid "Prevent showing empty labels for fields that have render_field_data method" msgstr "" -#: admin/html/whats-new.php:1031 +#: admin/html/whats-new.php:1053 msgid "Add Namibian Dollar in currency list" msgstr "" -#: admin/html/whats-new.php:1035 +#: admin/html/whats-new.php:1057 msgid "Add sync values option for option data fields" msgstr "" -#: admin/html/whats-new.php:1039 +#: admin/html/whats-new.php:1061 msgid "Allow uploading image that having filesize meets php ini settings" msgstr "" -#: admin/html/whats-new.php:1043 +#: admin/html/whats-new.php:1065 msgid "Limit the selection of one image at a time" msgstr "" -#: admin/html/whats-new.php:1047 +#: admin/html/whats-new.php:1069 msgid "Use file name and size to generate hash to prevent duplicant image upload" msgstr "" -#: admin/html/whats-new.php:1051 +#: admin/html/whats-new.php:1073 msgid "Sanitize text and textarea field data" msgstr "" -#: admin/html/whats-new.php:1055 +#: admin/html/whats-new.php:1077 msgid "" "Show label instead of values for radio, checkbox, dropdown and multiselect " "data" msgstr "" -#: admin/html/whats-new.php:1059 +#: admin/html/whats-new.php:1081 msgid "Saving custom taxonomies for type text input" msgstr "" -#: admin/html/whats-new.php:1063 +#: admin/html/whats-new.php:1085 msgid "Admin settings link for recaptcha helper text" msgstr "" -#: admin/html/whats-new.php:1067 +#: admin/html/whats-new.php:1089 msgid "Undefined name property for Custom HTML fields" msgstr "" -#: admin/html/whats-new.php:1071 +#: admin/html/whats-new.php:1093 msgid "Delete attachment process" msgstr "" -#: admin/html/whats-new.php:1075 +#: admin/html/whats-new.php:1097 msgid "Missing billing address in invoice PDF" msgstr "" -#: admin/html/whats-new.php:1079 +#: admin/html/whats-new.php:1101 msgid "Showing country field value in frontend post content" msgstr "" -#: admin/html/whats-new.php:1083 +#: admin/html/whats-new.php:1105 msgid "Avatar size display not complying with admin settings size" msgstr "" -#: admin/html/whats-new.php:1087 +#: admin/html/whats-new.php:1109 msgid "Display default avatars on admin settings discussion page" msgstr "" -#: admin/html/whats-new.php:1091 +#: admin/html/whats-new.php:1113 msgid "Redirect to subscription page at registration" msgstr "" -#: admin/html/whats-new.php:1095 +#: admin/html/whats-new.php:1117 msgid "Error notice regarding registration page redirect" msgstr "" -#: admin/html/whats-new.php:1099 +#: admin/html/whats-new.php:1121 msgid "Escaping html in registration errors" msgstr "" -#: admin/html/whats-new.php:1103 +#: admin/html/whats-new.php:1125 msgid "Default login redirect link" msgstr "" -#: admin/html/whats-new.php:1107 +#: admin/html/whats-new.php:1129 msgid "Implementing default WP login page override option" msgstr "" -#: admin/html/whats-new.php:1111 +#: admin/html/whats-new.php:1133 msgid "Transparent background of autosuggestion dropdown" msgstr "" -#: admin/html/whats-new.php:1121 +#: admin/html/whats-new.php:1143 msgid "Import forms system" msgstr "" -#: admin/html/whats-new.php:1125 +#: admin/html/whats-new.php:1147 msgid "Password reset system" msgstr "" -#: admin/html/whats-new.php:1129 +#: admin/html/whats-new.php:1151 msgid "Updated url validation regex to support modern tlds" msgstr "" -#: admin/html/whats-new.php:1133 +#: admin/html/whats-new.php:1155 msgid "Export WPUF forms individually from admin tools page" msgstr "" -#: admin/html/whats-new.php:1137 +#: admin/html/whats-new.php:1159 msgid "Subscription cycle label translation issue" msgstr "" -#: admin/html/whats-new.php:1141 +#: admin/html/whats-new.php:1163 msgid "ACF integration for checkbox fields" msgstr "" -#: admin/html/whats-new.php:1145 +#: admin/html/whats-new.php:1167 msgid "Illegal string offset warning while updating settings" msgstr "" -#: admin/html/whats-new.php:1149 +#: admin/html/whats-new.php:1171 msgid "Conditional logic for Section Break field" msgstr "" -#: admin/html/whats-new.php:1153 +#: admin/html/whats-new.php:1175 msgid "Subscriptions cannot be deleted from backend" msgstr "" -#: admin/html/whats-new.php:1157 +#: admin/html/whats-new.php:1179 msgid "A regression regarding saving checkbox data" msgstr "" -#: admin/html/whats-new.php:1161 +#: admin/html/whats-new.php:1183 msgid "Default value of multi-select fields is not showing" msgstr "" -#: admin/html/whats-new.php:1171 +#: admin/html/whats-new.php:1193 msgid "Hide post edit option when subscription is expired" msgstr "" -#: admin/html/whats-new.php:1173 +#: admin/html/whats-new.php:1195 msgid "Hide post edit option from users whose subscription pack is expired." msgstr "" -#: admin/html/whats-new.php:1176 +#: admin/html/whats-new.php:1198 msgid "Check files to prevent duplicity in media upload" msgstr "" -#: admin/html/whats-new.php:1178 +#: admin/html/whats-new.php:1200 msgid "" "A simple measure has been taken to prevent maliciously flooding the site by " "uploading same file multiple times. Though this won't work with already " "uploaded medias." msgstr "" -#: admin/html/whats-new.php:1181 +#: admin/html/whats-new.php:1203 msgid "Refactor address fields in Account section" msgstr "" -#: admin/html/whats-new.php:1183 +#: admin/html/whats-new.php:1205 msgid "Address edit section from Account section has been rewritten to improve UX." msgstr "" -#: admin/html/whats-new.php:1186 +#: admin/html/whats-new.php:1208 msgid "Update Paypal payment gateway" msgstr "" -#: admin/html/whats-new.php:1188 +#: admin/html/whats-new.php:1210 msgid "Paypal payment gateway has seen some improvements." msgstr "" -#: admin/html/whats-new.php:1191 +#: admin/html/whats-new.php:1213 msgid "Default Category selection improvements" msgstr "" -#: admin/html/whats-new.php:1193 +#: admin/html/whats-new.php:1215 msgid "" "An intuitive way of selecting default category of a selected post type has " "been introduced." msgstr "" -#: admin/html/whats-new.php:1196 +#: admin/html/whats-new.php:1218 msgid "Compatibility issue with ACF date time field" msgstr "" -#: admin/html/whats-new.php:1198 +#: admin/html/whats-new.php:1220 msgid "A Compatibility issue with ACF date time field has been addressed." msgstr "" -#: admin/html/whats-new.php:1201 +#: admin/html/whats-new.php:1223 msgid "Media title, caption & description not saving" msgstr "" -#: admin/html/whats-new.php:1203 +#: admin/html/whats-new.php:1225 msgid "" "Media title, caption & description were not saving from frontend. They will " "now." msgstr "" -#: admin/html/whats-new.php:1206 +#: admin/html/whats-new.php:1228 msgid "" "The Events Calendar venue and organizer fields issue in WPUF Custom Fields " "metabox" msgstr "" -#: admin/html/whats-new.php:1208 +#: admin/html/whats-new.php:1230 msgid "" "A workaround has been introduced to save The Events Calendar Venue and " "Organizer fields properly from WPUF Custom Fields metabox." msgstr "" -#: admin/html/whats-new.php:1211 +#: admin/html/whats-new.php:1233 msgid "Checkbox data not saving from WPUF Custom Fields metabox" msgstr "" -#: admin/html/whats-new.php:1213 +#: admin/html/whats-new.php:1235 msgid "" "Checkboxe data from WPUF Custom Fields metabox were not saving. It has been " "fixed." msgstr "" -#: admin/html/whats-new.php:1216 +#: admin/html/whats-new.php:1238 msgid "Multi-column Repeater field data saving issue" msgstr "" -#: admin/html/whats-new.php:1218 +#: admin/html/whats-new.php:1240 msgid "" "Multi-column Repeater field data from a form was not saving. It has been " "fixed." msgstr "" -#: admin/html/whats-new.php:1221 +#: admin/html/whats-new.php:1243 msgid "Multistep form conflict with Elementor" msgstr "" -#: admin/html/whats-new.php:1223 +#: admin/html/whats-new.php:1245 msgid "Multistep form had a conflict with Elementor. It has been fixed." msgstr "" -#: admin/html/whats-new.php:1226 +#: admin/html/whats-new.php:1248 msgid "Multiple images showing issue in frontend" msgstr "" -#: admin/html/whats-new.php:1228 +#: admin/html/whats-new.php:1250 msgid "Multiple images in a post were not showing in frontend. Now they will." msgstr "" -#: admin/html/whats-new.php:1237 +#: admin/html/whats-new.php:1259 msgid "Nonce not verify on login" msgstr "" -#: admin/html/whats-new.php:1239 +#: admin/html/whats-new.php:1261 msgid "Return of function wp_verify_nonce() was ignored." msgstr "" -#: admin/html/whats-new.php:1248 +#: admin/html/whats-new.php:1270 msgid "Option to set which tab shows as active on the account page" msgstr "" -#: admin/html/whats-new.php:1250 +#: admin/html/whats-new.php:1272 msgid "" "Option to set which tab shows as active on the account page. To configure " "this setting navigate to wp-admin->User Frontend->Settings->My " "Account->Active Tab " msgstr "" -#: admin/html/whats-new.php:1253 +#: admin/html/whats-new.php:1275 msgid "Unlock option was unavailable after the post being locked" msgstr "" -#: admin/html/whats-new.php:1255 +#: admin/html/whats-new.php:1277 msgid "Unlock option was unavailable after the post being locked." msgstr "" -#: admin/html/whats-new.php:1258 +#: admin/html/whats-new.php:1280 msgid "Gutenberg block of WPUF didn't work on bedrock installation" msgstr "" -#: admin/html/whats-new.php:1260 +#: admin/html/whats-new.php:1282 msgid "Gutenberg block of WPUF didn't work on bedrock installation." msgstr "" -#: admin/html/whats-new.php:1263 +#: admin/html/whats-new.php:1285 msgid "Sending admin payment received email twice" msgstr "" -#: admin/html/whats-new.php:1265 +#: admin/html/whats-new.php:1287 msgid "" "After processing payment admin & user was receiving payment received email " "twice." msgstr "" -#: admin/html/whats-new.php:1268 +#: admin/html/whats-new.php:1290 msgid "" "Add shortcode support to display post information in the Post Expiration " "Message" msgstr "" -#: admin/html/whats-new.php:1270 +#: admin/html/whats-new.php:1292 msgid "" "Add shortcode support to display post information in the Post Expiration " "Message. You can use: {post_author} {post_url} {blogname} " "{post_title} {post_status}" msgstr "" -#: admin/html/whats-new.php:1273 +#: admin/html/whats-new.php:1295 msgid "Add optin on the setup wizard" msgstr "" -#: admin/html/whats-new.php:1275 +#: admin/html/whats-new.php:1297 msgid "" "Added optin on the setup wizard, admin can choose whether he/she wants to " "share server environment details (php, mysql, server, WordPress versions), " @@ -1881,126 +1881,126 @@ msgid "" "name and url, admin name and email address. No sensitive data is tracked" msgstr "" -#: admin/html/whats-new.php:1284 +#: admin/html/whats-new.php:1306 msgid "Post Owner problem" msgstr "" -#: admin/html/whats-new.php:1286 +#: admin/html/whats-new.php:1308 msgid "" "Posts were not assigned to the selected default post owner, this issue has " "been fixed." msgstr "" -#: admin/html/whats-new.php:1289 +#: admin/html/whats-new.php:1311 msgid "Google reCaptcha was not working" msgstr "" -#: admin/html/whats-new.php:1291 +#: admin/html/whats-new.php:1313 msgid "" "Google reCaptcha was not working, users could submit the form without " "reCaptcha validation." msgstr "" -#: admin/html/whats-new.php:1300 +#: admin/html/whats-new.php:1322 msgid "Added column field" msgstr "" -#: admin/html/whats-new.php:1305 +#: admin/html/whats-new.php:1327 msgid "Unable to render the events on the front-end dashboard" msgstr "" -#: admin/html/whats-new.php:1307 +#: admin/html/whats-new.php:1329 msgid "" "On the frontend dashboard, the submitted events were not showing, you will " "get it fixed in this version." msgstr "" -#: admin/html/whats-new.php:1310 +#: admin/html/whats-new.php:1332 msgid "Page order getting 0(zero) after editing from the frontend" msgstr "" -#: admin/html/whats-new.php:1312 +#: admin/html/whats-new.php:1334 msgid "" "Page order was not saving while editing a post using WPUF form, it has been " "fixed." msgstr "" -#: admin/html/whats-new.php:1315 +#: admin/html/whats-new.php:1337 msgid "Text input field for taxonomies not working" msgstr "" -#: admin/html/whats-new.php:1317 +#: admin/html/whats-new.php:1339 msgid "" "When taxonomy field type is set to `Text Input` then a fatal error was " "showing on the frontend, no error with taxonomy field in the latest version." msgstr "" -#: admin/html/whats-new.php:1320 +#: admin/html/whats-new.php:1342 msgid "" "In radio and checkbox field use conditional logic that value does not save " "in database" msgstr "" -#: admin/html/whats-new.php:1322 +#: admin/html/whats-new.php:1344 msgid "" "The selected value of radio and checkbox field were not showing while " "editing posts from the backend or frontend, you can see the selected value " "in this version." msgstr "" -#: admin/html/whats-new.php:1325 +#: admin/html/whats-new.php:1347 msgid "The args param not working with get_avatar filter" msgstr "" -#: admin/html/whats-new.php:1327 +#: admin/html/whats-new.php:1349 msgid "The args parameter did not exist with get_avatar filter, which now exists." msgstr "" -#: admin/html/whats-new.php:1330 +#: admin/html/whats-new.php:1352 msgid "The item in ajax taxonomy field was not selected" msgstr "" -#: admin/html/whats-new.php:1332 +#: admin/html/whats-new.php:1354 msgid "" "When the taxonomy field type is set to Ajax, the submitted terms were not " "showing in the backend and frontend which have been fixed." msgstr "" -#: admin/html/whats-new.php:1341 +#: admin/html/whats-new.php:1363 msgid "Unable to send new user registration email" msgstr "" -#: admin/html/whats-new.php:1343 +#: admin/html/whats-new.php:1365 msgid "" "WP User Frontend default registration form `[wpuf-registration]` was unable " "to send the new user registration email." msgstr "" -#: admin/html/whats-new.php:1346 +#: admin/html/whats-new.php:1368 msgid "WPUF forms block compatibility issue with the latest WP version" msgstr "" -#: admin/html/whats-new.php:1348 +#: admin/html/whats-new.php:1370 msgid "" "With the latest version of WordPress the gutenberg block of WP User " "Frontend were not working. In this version, you will get it fixed." msgstr "" -#: admin/html/whats-new.php:1351 +#: admin/html/whats-new.php:1373 msgid "Page not update where `[wpuf_dashboard]` shortcode exist" msgstr "" -#: admin/html/whats-new.php:1353 +#: admin/html/whats-new.php:1375 msgid "" "While using Gutenberg, the page were not being updated with WPUF shortcode " "[wpuf dashboard]" msgstr "" -#: admin/html/whats-new.php:1356 +#: admin/html/whats-new.php:1378 msgid "Retain default when determining whether to display the admin bar" msgstr "" -#: admin/html/whats-new.php:1358 +#: admin/html/whats-new.php:1380 msgid "" "From the User Frontend Settings, set that Administrator, Editor, Vendor can " "see the admin bar. Now, the super admin want, one specific user ( who has " @@ -2010,11 +2010,11 @@ msgid "" "frontend." msgstr "" -#: admin/html/whats-new.php:1361 +#: admin/html/whats-new.php:1383 msgid "Fatal error when use PHP lower version (5.4 or lower)" msgstr "" -#: admin/html/whats-new.php:1363 +#: admin/html/whats-new.php:1385 msgid "" "It was unable to install WP User Frontend with PHP 5.4 or lower version. " "Here is the error details:

Fatal error: Can't use method " @@ -2022,42 +2022,42 @@ msgid "" "/wp-user-frontend/class/frontend-form-post.php on line 194" msgstr "" -#: admin/html/whats-new.php:1366 +#: admin/html/whats-new.php:1388 msgid "Product form was unable to show the single gallery image" msgstr "" -#: admin/html/whats-new.php:1368 +#: admin/html/whats-new.php:1390 msgid "" "When user upload single image for product gallery using WPUF WooCommerce " "product form, that image were not showing on the frontend." msgstr "" -#: admin/html/whats-new.php:1377 +#: admin/html/whats-new.php:1399 msgid "WooCommerce gallery images not getting saved" msgstr "" -#: admin/html/whats-new.php:1379 +#: admin/html/whats-new.php:1401 msgid "" "After releasing version 2.9.3, WooCommerce gallery image field stopped " "working. You will get it fixed in this version." msgstr "" -#: admin/html/whats-new.php:1388 +#: admin/html/whats-new.php:1410 msgid "The Events Calendar Integration Form" msgstr "" -#: admin/html/whats-new.php:1390 +#: admin/html/whats-new.php:1412 msgid "" "Now admin can allow users to create event from the frontend. Currently WPUF " "has a one click pre-build event form that has been integrated with The " "Events Calendar plugin" msgstr "" -#: admin/html/whats-new.php:1393 +#: admin/html/whats-new.php:1415 msgid "Post Submission Facility From Account Page" msgstr "" -#: admin/html/whats-new.php:1395 +#: admin/html/whats-new.php:1417 msgid "" "On the frontend account page, added a new menu item named Submit " "Post. Now admin can allow users to submit post from their default " @@ -2066,504 +2066,504 @@ msgid "" "you can assign any post form that will use to submit posts." msgstr "" -#: admin/html/whats-new.php:1398 +#: admin/html/whats-new.php:1420 msgid "Login/Lost Password Link Under Registration Form" msgstr "" -#: admin/html/whats-new.php:1400 +#: admin/html/whats-new.php:1422 msgid "Added Login/Lost Password link under registration form" msgstr "" -#: admin/html/whats-new.php:1409 +#: admin/html/whats-new.php:1431 msgid "Added drag and drop image ordering on image upload" msgstr "" -#: admin/html/whats-new.php:1411 +#: admin/html/whats-new.php:1433 msgid "" "Now frontend users can drag & drop the images/files to change the order " "while uploading." msgstr "" -#: admin/html/whats-new.php:1414 +#: admin/html/whats-new.php:1436 msgid "Added reCAPTCHA field in login form" msgstr "" -#: admin/html/whats-new.php:1416 +#: admin/html/whats-new.php:1438 msgid "" "Admin has the option to show reCAPTCHA field in login form. Check the " "related settings from User Frontend > Settings > " "Login/Registration" msgstr "" -#: admin/html/whats-new.php:1419 +#: admin/html/whats-new.php:1441 msgid "Added preview option in forms" msgstr "" -#: admin/html/whats-new.php:1421 +#: admin/html/whats-new.php:1443 msgid "" "You can see a nice Preview button with Save " "Form button, admin can take a quick look of the form without using " "shortcode" msgstr "" -#: admin/html/whats-new.php:1424 +#: admin/html/whats-new.php:1446 msgid "Fixed hiding “Select Image” button while uploading multiple images." msgstr "" -#: admin/html/whats-new.php:1426 +#: admin/html/whats-new.php:1448 msgid "" "The upload button will not be hidden until the user selects max number of " "files " msgstr "" -#: admin/html/whats-new.php:1429 +#: admin/html/whats-new.php:1451 msgid "Added form limit notice before form submission" msgstr "" -#: admin/html/whats-new.php:1431 +#: admin/html/whats-new.php:1453 msgid "" "Limit notice message was showing after submission, now it is showing when " "rendering the form" msgstr "" -#: admin/html/whats-new.php:1434 +#: admin/html/whats-new.php:1456 msgid "Fixed: default post category not saving" msgstr "" -#: admin/html/whats-new.php:1436 +#: admin/html/whats-new.php:1458 msgid "" "From the form Settings > Post Settings, default post " "category options were not saving. Now, it's fixed." msgstr "" -#: admin/html/whats-new.php:1439 +#: admin/html/whats-new.php:1461 msgid "" "WPUF dashboard shortcode with form_id attribute was not showing posts " "properly" msgstr "" -#: admin/html/whats-new.php:1441 +#: admin/html/whats-new.php:1463 msgid "" "Now you can list posts on the frontend by using form_id " "attribute with [wpuf_dashboard] shortcode" msgstr "" -#: admin/html/whats-new.php:1450 +#: admin/html/whats-new.php:1472 msgid "Changed text domain to `wp-user-frontend` from `wpuf` " msgstr "" -#: admin/html/whats-new.php:1452 +#: admin/html/whats-new.php:1474 msgid "" "If you are using other language than English. Please rename your " ".po and .mo files to `wp-user-frontend_` from `wpuf_`
This " "change was made to support translations from translate.wordpress.org" msgstr "" -#: admin/html/whats-new.php:1455 +#: admin/html/whats-new.php:1477 msgid "Added WP User Frontend Data export and erase functionality." msgstr "" -#: admin/html/whats-new.php:1457 +#: admin/html/whats-new.php:1479 msgid "Added functionality to export WP User Frontend Data to comply with GDPR." msgstr "" -#: admin/html/whats-new.php:1460 +#: admin/html/whats-new.php:1482 msgid "Added billing address customizer." msgstr "" -#: admin/html/whats-new.php:1462 +#: admin/html/whats-new.php:1484 msgid "Added customizer options for billing address in payment page." msgstr "" -#: admin/html/whats-new.php:1465 +#: admin/html/whats-new.php:1487 msgid "Make the payment page responsive." msgstr "" -#: admin/html/whats-new.php:1467 +#: admin/html/whats-new.php:1489 msgid "Some css adjustments are made in payment page to make it responsive." msgstr "" -#: admin/html/whats-new.php:1470 +#: admin/html/whats-new.php:1492 msgid "Fixed image upload issue in Safari." msgstr "" -#: admin/html/whats-new.php:1472 +#: admin/html/whats-new.php:1494 msgid "Images were not showing after upload in safari, it is fixed now." msgstr "" -#: admin/html/whats-new.php:1475 +#: admin/html/whats-new.php:1497 msgid "Post update issue after updating or removing post images." msgstr "" -#: admin/html/whats-new.php:1477 +#: admin/html/whats-new.php:1499 msgid "" "Posts cannot be updated after updating or removing post images, it is fixed " "now." msgstr "" -#: admin/html/whats-new.php:1486 +#: admin/html/whats-new.php:1508 msgid "Allow overriding form input styles using theme styling." msgstr "" -#: admin/html/whats-new.php:1488 +#: admin/html/whats-new.php:1510 msgid "Overriding form input styles using theme style is now possible." msgstr "" -#: admin/html/whats-new.php:1491 +#: admin/html/whats-new.php:1513 msgid "Fixed Auto Login after registration." msgstr "" -#: admin/html/whats-new.php:1493 +#: admin/html/whats-new.php:1515 msgid "Auto Login after registration was not working is fixed now." msgstr "" -#: admin/html/whats-new.php:1496 +#: admin/html/whats-new.php:1518 msgid "Fixed fallback cost calculation" msgstr "" -#: admin/html/whats-new.php:1498 +#: admin/html/whats-new.php:1520 msgid "Fallback cost calculation was inaccurate for some cases, it is fixed now." msgstr "" -#: admin/html/whats-new.php:1501 +#: admin/html/whats-new.php:1523 msgid "Removal of subscription from User Profile gets reverted if updated" msgstr "" -#: admin/html/whats-new.php:1503 +#: admin/html/whats-new.php:1525 msgid "User subscription deletion gets reverted if updated is fixed." msgstr "" -#: admin/html/whats-new.php:1506 +#: admin/html/whats-new.php:1528 msgid "Show Free pack users in subscribers list." msgstr "" -#: admin/html/whats-new.php:1508 +#: admin/html/whats-new.php:1530 msgid "Free pack users were not showing in subscribers list, now they will." msgstr "" -#: admin/html/whats-new.php:1517 +#: admin/html/whats-new.php:1539 msgid "WP User Frontend Guten Block is added" msgstr "" -#: admin/html/whats-new.php:1519 +#: admin/html/whats-new.php:1541 msgid "" "WPUF Form Block is now available to be used within gutenberg editor with " "preview of the form. " msgstr "" -#: admin/html/whats-new.php:1522 +#: admin/html/whats-new.php:1544 msgid "Advanced Custom Fields plugin compatibility" msgstr "" -#: admin/html/whats-new.php:1524 +#: admin/html/whats-new.php:1546 msgid "Now all your ACF fields can be used within WPUF Post forms. " msgstr "" -#: admin/html/whats-new.php:1527 +#: admin/html/whats-new.php:1549 msgid "Taxonomy Terms not showing for custom post types" msgstr "" -#: admin/html/whats-new.php:1529 +#: admin/html/whats-new.php:1551 msgid "" "Fixed an issue with taxonomy terms not appearing for Custom Post types " "within Form Settings and Dashboard Post Listing" msgstr "" -#: admin/html/whats-new.php:1532 +#: admin/html/whats-new.php:1554 msgid "Various other code optimizations" msgstr "" -#: admin/html/whats-new.php:1534 admin/html/whats-new.php:1591 +#: admin/html/whats-new.php:1556 admin/html/whats-new.php:1613 msgid "Code structure organization and optimization for better performance" msgstr "" -#: admin/html/whats-new.php:1543 +#: admin/html/whats-new.php:1565 msgid "WoooCommerce billing address Sync" msgstr "" -#: admin/html/whats-new.php:1545 +#: admin/html/whats-new.php:1567 msgid "" "If an existing customer has previously set his billing address, that will " "be imported into WPUF Billing address " msgstr "" -#: admin/html/whats-new.php:1548 +#: admin/html/whats-new.php:1570 msgid "Trial subscription message not showing properly" msgstr "" -#: admin/html/whats-new.php:1550 +#: admin/html/whats-new.php:1572 msgid "Subscriptions with Trial now shows trial notices" msgstr "" -#: admin/html/whats-new.php:1553 +#: admin/html/whats-new.php:1575 msgid "Reset email Key not working" msgstr "" -#: admin/html/whats-new.php:1555 +#: admin/html/whats-new.php:1577 msgid "Reset Email key was not working in some cases" msgstr "" -#: admin/html/whats-new.php:1558 +#: admin/html/whats-new.php:1580 msgid "Post count not showing on the frontend dashboard" msgstr "" -#: admin/html/whats-new.php:1560 +#: admin/html/whats-new.php:1582 msgid "" "Dashboard with multiple post type was not showing post counts properly, is " "now fixed and shows count for each post type" msgstr "" -#: admin/html/whats-new.php:1563 +#: admin/html/whats-new.php:1585 msgid "Login Redirect showing blank page is fixed" msgstr "" -#: admin/html/whats-new.php:1565 +#: admin/html/whats-new.php:1587 msgid "" "If \"Previous Page\" was set for redirection, login redirect was " "redirecting to blank page for users who hit login page directly" msgstr "" -#: admin/html/whats-new.php:1574 +#: admin/html/whats-new.php:1596 msgid "Enhanced Login Redirect to redirect users to previous page" msgstr "" -#: admin/html/whats-new.php:1576 +#: admin/html/whats-new.php:1598 msgid "" "You can choose Previous Page as Login Redirect page settings now to " "redirect users to the page from which they went for Login. " msgstr "" -#: admin/html/whats-new.php:1579 +#: admin/html/whats-new.php:1601 msgid "Email HTML links not Rendreing properly issue is fixed" msgstr "" -#: admin/html/whats-new.php:1581 +#: admin/html/whats-new.php:1603 msgid "" "For some clients emails were not rendering the HTML links properly, this is " "now fixed" msgstr "" -#: admin/html/whats-new.php:1584 +#: admin/html/whats-new.php:1606 msgid "Form Builder : Form Field's Help text styles not showing properly" msgstr "" -#: admin/html/whats-new.php:1586 +#: admin/html/whats-new.php:1608 msgid "Help texts styling is now fixed and much easier to read and understand" msgstr "" -#: admin/html/whats-new.php:1589 +#: admin/html/whats-new.php:1611 msgid "Various other code improvements" msgstr "" -#: admin/html/whats-new.php:1600 +#: admin/html/whats-new.php:1622 msgid "Dashboard Post Listing now supports multiple post types" msgstr "" -#: admin/html/whats-new.php:1602 +#: admin/html/whats-new.php:1624 msgid "" "Now you can show multiple post type in user dashboard using shortcode like " "this :
[wpuf_dashboard post_type=\"post,page,custom_type\"] " msgstr "" -#: admin/html/whats-new.php:1605 +#: admin/html/whats-new.php:1627 msgid "Added Login Redirect Settings" msgstr "" -#: admin/html/whats-new.php:1607 +#: admin/html/whats-new.php:1629 msgid "" "You can now set a page from WPUF Settings > Login/Registration > " "Redirect after Login. When login redirection is active the user will be " "redirected to this page after login." msgstr "" -#: admin/html/whats-new.php:1610 +#: admin/html/whats-new.php:1632 msgid "Image Upload field button text can be changed" msgstr "" -#: admin/html/whats-new.php:1612 +#: admin/html/whats-new.php:1634 msgid "" "The upload button text can now be changed for image upload fields which " "defaults to \"Select Image\" if not set. " msgstr "" -#: admin/html/whats-new.php:1615 +#: admin/html/whats-new.php:1637 msgid "Multi Step Form styles made compatible with more themes" msgstr "" -#: admin/html/whats-new.php:1617 +#: admin/html/whats-new.php:1639 msgid "Multi Step form can now be styled more easily with other themes " msgstr "" -#: admin/html/whats-new.php:1620 +#: admin/html/whats-new.php:1642 msgid "Required field condition for google map not working is fixed" msgstr "" -#: admin/html/whats-new.php:1622 +#: admin/html/whats-new.php:1644 msgid "" "If Google Map field was set as required users were able to submit form " "without changing the default value." msgstr "" -#: admin/html/whats-new.php:1631 +#: admin/html/whats-new.php:1653 msgid "Admin form builder is now fully responsive." msgstr "" -#: admin/html/whats-new.php:1633 +#: admin/html/whats-new.php:1655 msgid "" "Now you can edit forms from your mobile devices directly. Our improved " "responsive layouts of form builder makes it easy for you to build forms on " "the go." msgstr "" -#: admin/html/whats-new.php:1636 +#: admin/html/whats-new.php:1658 msgid "Added color schemes for creating attractive form layouts." msgstr "" -#: admin/html/whats-new.php:1638 +#: admin/html/whats-new.php:1660 msgid "" "We have added 3 new color schemes for the form layouts which you can choose " "from each form's new display settings." msgstr "" -#: admin/html/whats-new.php:1641 +#: admin/html/whats-new.php:1663 msgid "Restrict Free subscription pack to be enabled multiple times " msgstr "" -#: admin/html/whats-new.php:1643 +#: admin/html/whats-new.php:1665 msgid "" "Free subscription packs now can only be purchased once and the limit " "applies properly" msgstr "" -#: admin/html/whats-new.php:1646 +#: admin/html/whats-new.php:1668 msgid "Various other bug fixes and improvements were made " msgstr "" -#: admin/html/whats-new.php:1648 +#: admin/html/whats-new.php:1670 msgid "Please see the change log to see full details." msgstr "" -#: admin/html/whats-new.php:1657 +#: admin/html/whats-new.php:1679 msgid "Added upgrade function for default category" msgstr "" -#: admin/html/whats-new.php:1659 +#: admin/html/whats-new.php:1681 msgid "Upgrader added to upgrade previously set default post category." msgstr "" -#: admin/html/whats-new.php:1662 +#: admin/html/whats-new.php:1684 msgid "Subscription pack cannot be canceled" msgstr "" -#: admin/html/whats-new.php:1664 +#: admin/html/whats-new.php:1686 msgid "" "Fixed recurring subscription pack cannot be canceled from my account page " "in subscription details section." msgstr "" -#: admin/html/whats-new.php:1667 +#: admin/html/whats-new.php:1689 msgid "page installer admin notice logic issue" msgstr "" -#: admin/html/whats-new.php:1669 +#: admin/html/whats-new.php:1691 msgid "" "Fixed page installer admin notice logic problem due to new payment settings " "default value not set." msgstr "" -#: admin/html/whats-new.php:1679 +#: admin/html/whats-new.php:1701 msgid "Setup Wizard" msgstr "" -#: admin/html/whats-new.php:1681 +#: admin/html/whats-new.php:1703 msgid "Setup Wizard added to turn off payment options and install pages." msgstr "" -#: admin/html/whats-new.php:1685 +#: admin/html/whats-new.php:1707 msgid "Multi-select Category" msgstr "" -#: admin/html/whats-new.php:1687 +#: admin/html/whats-new.php:1709 msgid "Add multi-select to default category in post form settings." msgstr "" -#: admin/html/whats-new.php:1691 +#: admin/html/whats-new.php:1713 msgid "Select Text option for Taxonomy" msgstr "" -#: admin/html/whats-new.php:1693 +#: admin/html/whats-new.php:1715 msgid "" "Add Select Text option for taxonomy fields. Now you can add default text " "with empty value as first option for Taxonomy dropdown." msgstr "" -#: admin/html/whats-new.php:1696 +#: admin/html/whats-new.php:1718 msgid "Taxonomy Checkbox Inline" msgstr "" -#: admin/html/whats-new.php:1698 +#: admin/html/whats-new.php:1720 msgid "" "Added checkbox inline option to taxonomy checkbox. You can now display " "Taxonomy checkbox fields inline." msgstr "" -#: admin/html/whats-new.php:1708 +#: admin/html/whats-new.php:1730 msgid "Manage schedule for form submission" msgstr "" -#: admin/html/whats-new.php:1710 +#: admin/html/whats-new.php:1732 msgid "" "Do not accept form submission if the current date is not between the date " "range of the schedule." msgstr "" -#: admin/html/whats-new.php:1714 +#: admin/html/whats-new.php:1736 msgid "Restrict form submission based on the user roles" msgstr "" -#: admin/html/whats-new.php:1716 +#: admin/html/whats-new.php:1738 msgid "" "Restrict form submission based on the user roles. Now you can manage user " "role base permission on form submission." msgstr "" -#: admin/html/whats-new.php:1720 +#: admin/html/whats-new.php:1742 msgid "Limit how many entries a form will accept" msgstr "" -#: admin/html/whats-new.php:1722 +#: admin/html/whats-new.php:1744 msgid "" "Limit how many entries a form will accept and display a custom message when " "that limit is reached." msgstr "" -#: admin/html/whats-new.php:1726 +#: admin/html/whats-new.php:1748 msgid "Show/hide Admin Bar" msgstr "" -#: admin/html/whats-new.php:1728 +#: admin/html/whats-new.php:1750 msgid "Control the admin bar visibility based on user roles." msgstr "" -#: admin/html/whats-new.php:1732 +#: admin/html/whats-new.php:1754 msgid "Ajax Login widget" msgstr "" -#: admin/html/whats-new.php:1734 +#: admin/html/whats-new.php:1756 msgid "" "Login user is more simple now with Ajax Login Widget. The simple ajax login " "form do not required page loading for login." msgstr "" -#: admin/html/whats-new.php:1738 +#: admin/html/whats-new.php:1760 msgid "Form submission with Captcha field" msgstr "" -#: admin/html/whats-new.php:1740 +#: admin/html/whats-new.php:1762 msgid "Form field validation process updated if form submits with captcha field." msgstr "" -#: admin/html/whats-new.php:1754 +#: admin/html/whats-new.php:1776 msgid "What's New in WPUF?" msgstr "" @@ -3279,96 +3279,96 @@ msgstr "" msgid "Parent Subscription" msgstr "" -#: class/subscription.php:829 includes/Admin/Subscription.php:829 +#: class/subscription.php:829 includes/Admin/Subscription.php:830 msgid "Payment is complete" msgstr "" -#: class/subscription.php:829 includes/Admin/Subscription.php:829 +#: class/subscription.php:829 includes/Admin/Subscription.php:830 msgid "Congratulations, your payment has been completed!" msgstr "" #: class/subscription.php:833 class/subscription.php:837 -#: includes/Admin/Subscription.php:833 includes/Admin/Subscription.php:837 +#: includes/Admin/Subscription.php:834 includes/Admin/Subscription.php:838 msgid "Please buy a subscription pack to post" msgstr "" -#: class/subscription.php:856 includes/Admin/Subscription.php:856 +#: class/subscription.php:856 includes/Admin/Subscription.php:857 msgid "

You have a subscription pack activated.

" msgstr "" -#: class/subscription.php:858 includes/Admin/Subscription.php:858 +#: class/subscription.php:858 includes/Admin/Subscription.php:859 #. translators: %s: pack title msgid "

Pack name: %s

" msgstr "" -#: class/subscription.php:860 includes/Admin/Subscription.php:860 +#: class/subscription.php:860 includes/Admin/Subscription.php:861 msgid "To cancel the pack, press the following cancel button" msgstr "" #: class/subscription.php:867 includes/Admin/Admin_Subscription.php:812 #: includes/Admin/Forms/Admin_Form_Builder.php:293 #: includes/Admin/List_Table_Subscribers.php:142 -#: includes/Admin/Subscription.php:867 includes/Frontend/Payment.php:244 +#: includes/Admin/Subscription.php:868 includes/Frontend/Payment.php:244 #: templates/dashboard/subscription.php:68 msgid "Cancel" msgstr "" -#: class/subscription.php:907 includes/Admin/Subscription.php:907 +#: class/subscription.php:907 includes/Admin/Subscription.php:908 msgid "Day" msgid_plural "Days" msgstr[0] "" msgstr[1] "" -#: class/subscription.php:908 includes/Admin/Subscription.php:908 +#: class/subscription.php:908 includes/Admin/Subscription.php:909 msgid "Week" msgid_plural "Weeks" msgstr[0] "" msgstr[1] "" -#: class/subscription.php:909 includes/Admin/Subscription.php:909 +#: class/subscription.php:909 includes/Admin/Subscription.php:910 msgid "Month" msgid_plural "Months" msgstr[0] "" msgstr[1] "" -#: class/subscription.php:910 includes/Admin/Subscription.php:910 +#: class/subscription.php:910 includes/Admin/Subscription.php:911 msgid "Year" msgid_plural "Years" msgstr[0] "" msgstr[1] "" -#: class/subscription.php:942 includes/Admin/Subscription.php:940 +#: class/subscription.php:942 includes/Admin/Subscription.php:941 msgid "One time payment" msgstr "" -#: class/subscription.php:949 includes/Admin/Subscription.php:947 +#: class/subscription.php:949 includes/Admin/Subscription.php:948 msgid "Every" msgstr "" -#: class/subscription.php:950 includes/Admin/Subscription.php:948 +#: class/subscription.php:950 includes/Admin/Subscription.php:949 msgid "for" msgstr "" -#: class/subscription.php:950 includes/Admin/Subscription.php:948 +#: class/subscription.php:950 includes/Admin/Subscription.php:949 msgid "installments" msgstr "" -#: class/subscription.php:958 includes/Admin/Subscription.php:956 +#: class/subscription.php:958 includes/Admin/Subscription.php:957 #. translators: %s: trial days msgid "Trial available for first %1$s %2$s" msgstr "" -#: class/subscription.php:962 includes/Admin/Subscription.php:960 +#: class/subscription.php:962 includes/Admin/Subscription.php:961 msgid "Buy Now" msgstr "" -#: class/subscription.php:966 includes/Admin/Subscription.php:964 +#: class/subscription.php:966 includes/Admin/Subscription.php:965 msgid "Sign Up" msgstr "" #: class/subscription.php:969 includes/Admin/Admin_Subscription.php:210 #: includes/Admin/Admin_Subscription.php:607 -#: includes/Admin/Subscription.php:967 +#: includes/Admin/Subscription.php:968 #: includes/Free/templates/page-registration-form.php:94 #: includes/Frontend/Frontend_Account.php:218 #: includes/User_Subscription.php:314 @@ -3376,19 +3376,19 @@ msgstr "" msgid "Free" msgstr "" -#: class/subscription.php:1034 includes/Admin/Subscription.php:1030 +#: class/subscription.php:1034 includes/Admin/Subscription.php:1031 #. translators: %s: amount msgid "There is a %s charge to add a new post." msgstr "" -#: class/subscription.php:1051 includes/Admin/Subscription.php:1047 +#: class/subscription.php:1051 includes/Admin/Subscription.php:1048 #. translators: %s: amount msgid "" "Your Subscription pack is exhausted. There is a %s charge " "to add a new post." msgstr "" -#: class/subscription.php:1097 includes/Admin/Subscription.php:1093 +#: class/subscription.php:1097 includes/Admin/Subscription.php:1094 #. translators: %s: subscription link msgid "You must purchase a pack before posting" msgstr "" @@ -4332,7 +4332,7 @@ msgid "Subtotal" msgstr "" #: includes/Admin/List_Table_Transactions.php:50 -#: includes/Free/Free_Loader.php:194 includes/Traits/TaxableTrait.php:495 +#: includes/Free/Free_Loader.php:194 includes/Traits/TaxableTrait.php:501 #: includes/WPUF_Privacy.php:337 msgid "Tax" msgstr "" diff --git a/package-lock.json b/package-lock.json index a2b5aec72..d9c40b990 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "wp-user-frontend", - "version": "4.0.2", + "version": "4.0.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "wp-user-frontend", - "version": "4.0.2", + "version": "4.0.3", "license": "GPL", "dependencies": { "cli": "^1.0.1" diff --git a/package.json b/package.json index 91ec02ae6..7311b8afa 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "wp-user-frontend", - "version": "4.0.2", + "version": "4.0.3", "description": "A Frontend Plugin for WordPress", "author": "Tareq Hasan", "license": "GPL", diff --git a/readme.md b/readme.md index b6a250630..babcaf4dd 100644 --- a/readme.md +++ b/readme.md @@ -4,7 +4,7 @@ **Tags:** frontend post, content restriction, registration, user profile, membership, login, forms, user directory, profile builder **Requires at least:** 4.0 **Tested up to:** 6.4.2 -**Stable tag:** 4.0.2 +**Stable tag:** 4.0.3 **Requires PHP:** 5.6 **License:** GPLv2 **License URI:** https://www.gnu.org/licenses/gpl-2.0.html @@ -268,6 +268,12 @@ redirected to the edit page with that post id. Then you'll see the edit post for 18. Set Payment Related Options ## Changelog ## +### v4.0.3 (05 Jan, 2024) ### +* Enhance - Restructure plugin codes +* Fix - Error when editing the featured post +* Fix - add/edit post forms if the site language is set to Simplified Chinese +* Fix - Errors with Post Form Conditional Logic + ### v4.0.2 (03 Jan, 2024) ### * Enhance - Restructure plugin codes * Fix - Error when editing the featured post diff --git a/readme.txt b/readme.txt index d92fbb927..ccff05f23 100644 --- a/readme.txt +++ b/readme.txt @@ -4,7 +4,7 @@ Donate link: https://tareq.co/donate/ Tags: frontend post, content restriction, registration, user profile, membership, login, forms, user directory, profile builder Requires at least: 4.0 Tested up to: 6.4.2 -Stable tag: 4.0.2 +Stable tag: 4.0.3 Requires PHP: 5.6 License: GPLv2 License URI: https://www.gnu.org/licenses/gpl-2.0.html @@ -268,6 +268,12 @@ redirected to the edit page with that post id. Then you'll see the edit post for 18. Set Payment Related Options == Changelog == += v4.0.3 (05 Jan, 2024) = +* Enhance - Restructure plugin codes +* Fix - Error when editing the featured post +* Fix - add/edit post forms if the site language is set to Simplified Chinese +* Fix - Errors with Post Form Conditional Logic + = v4.0.2 (03 Jan, 2024) = * Enhance - Restructure plugin codes * Fix - Error when editing the featured post diff --git a/wpuf.php b/wpuf.php index fcaf76c6a..47f2f8d06 100644 --- a/wpuf.php +++ b/wpuf.php @@ -4,7 +4,7 @@ Plugin URI: https://wordpress.org/plugins/wp-user-frontend/ Description: Create, edit, delete, manages your post, pages or custom post types from frontend. Create registration forms, frontend profile and more... Author: weDevs -Version: 4.0.2 +Version: 4.0.3 Author URI: https://wedevs.com/?utm_source=WPUF_Author_URI License: GPL2 or later License URI: https://www.gnu.org/licenses/gpl-2.0.html @@ -25,7 +25,7 @@ wp_die( __( 'There was a problem installing the plugin' ), __( 'Problem installing plugin' ) ); } -define( 'WPUF_VERSION', '4.0.2' ); +define( 'WPUF_VERSION', '4.0.3' ); define( 'WPUF_FILE', __FILE__ ); define( 'WPUF_ROOT', __DIR__ ); define( 'WPUF_ROOT_URI', plugins_url( '', __FILE__ ) );