Plugin Directory

Changeset 3444264


Ignore:
Timestamp:
01/21/2026 04:39:02 PM (7 weeks ago)
Author:
checkview
Message:

Update to version 2.0.27 from GitHub

Location:
checkview
Files:
10 edited
1 copied

Legend:

Unmodified
Added
Removed
  • checkview/tags/2.0.27/README.txt

    r3423240 r3444264  
    88License: GPLv3
    99License URI: http://www.gnu.org/licenses/gpl-3.0.html
    10 Stable tag: 2.0.26
     10Stable tag: 2.0.27
    1111
    1212[CheckView](https://checkview.io/) automates WordPress form and WooCommerce testing, monitoring key flows to catch failures early before they cost you leads or sales everyday.
     
    1616Websites rarely fail loudly. Forms stop submitting. Leads disappear. Emails never send. Checkout buttons break quietly in the background. These issues often go unnoticed until sales or leads are lost.
    1717
    18 CheckView automatically tests your WordPress forms on a schedule, using real browser sessions to verify that submissions complete successfully, emails are sent, and integrations work as expected. It also supports testing logins, carts, and WooCommerce checkout flows.
     18CheckView automatically tests your WordPress forms on a schedule, using real browser sessions to verify that submissions complete successfully and emails are sent. It also supports testing logins, carts, and WooCommerce checkout flows.
    1919
    2020Built specifically for WordPress and WooCommerce, CheckView helps site owners, developers, and agencies detect problems early and resolve them faster, without writing code or setting up complex testing infrastructure.
     
    3333
    3434   * Run real browser-based tests on WordPress forms, including multi-step and dynamic forms
    35    * Validate form submissions from start to finish, including email notifications and integrations
     35   * Validate form submissions from start to finish, including email notifications
    3636   * Test WooCommerce checkout flows alongside forms for the most complete coverage
    3737   * Verify full form submissions, including email notifications and stored entries
     
    205205
    206206== Changelog ==
     207
     208= 2.0.27 =
     209* Add support for Fluent Forms fields: Terms and Conditions, GDPR Acceptance.
     210* Delay deletion of cloned form results by one day.
     211* Improved logging for scheduled deletion.
    207212
    208213= 2.0.26 =
     
    518523== Upgrade Notice ==
    519524
     525= 2.0.27 =
     526* Add support for Fluent Forms fields: Terms and Conditions, GDPR Acceptance.
     527* Delay deletion of cloned form results by one day.
     528* Improved logging for scheduled deletion.
     529
    520530= 2.0.26 =
    521531* Add logging for email submissions and headers across all form helper classes.
  • checkview/tags/2.0.27/checkview.php

    r3423240 r3444264  
    1212 * Plugin URI:        https://checkview.io
    1313 * Description:       CheckView is the #1 fully automated solution to test your WordPress forms and detect form problems fast.  Automatically test your WordPress forms to ensure you never miss a lead again.
    14  * Version:           2.0.26
     14 * Version:           2.0.27
    1515 * Author:            CheckView
    1616 * Author URI:        https://checkview.io/
     
    3636 * @link https://semver.org
    3737 */
    38 define( 'CHECKVIEW_VERSION', '2.0.26' );
     38define( 'CHECKVIEW_VERSION', '2.0.27' );
    3939
    4040if ( ! defined( 'CHECKVIEW_BASE_DIR' ) ) {
  • checkview/tags/2.0.27/includes/checkview-functions.php

    r3421974 r3444264  
    10151015        global $wpdb;
    10161016
    1017         // Delete all entries from 'cv_entry' table.
     1017        Checkview_Admin_Logs::add( 'ip-logs', 'Running scheduled deletion of CheckView rows...' );
     1018
    10181019        $table_entry = esc_sql( $wpdb->prefix . 'cv_entry' );
    1019         $wpdb->query( "DELETE FROM $table_entry" );
    1020 
    1021         // Delete all entries from 'cv_entry_meta' table.
    10221020        $table_entry_meta = esc_sql( $wpdb->prefix . 'cv_entry_meta' );
    1023         $wpdb->query( "DELETE FROM $table_entry_meta" );
     1021
     1022        // Delete entries older than 1 day from 'cv_entry_meta' table.
     1023        $wpdb->query(
     1024            "DELETE FROM $table_entry_meta
     1025            WHERE entry_id IN (
     1026                SELECT id FROM $table_entry
     1027                WHERE date_created < DATE_SUB(NOW(), INTERVAL 1 DAY)
     1028            )"
     1029        );
     1030
     1031        // Delete entries older than 1 day from 'cv_entry' table.
     1032        $wpdb->query(
     1033            "DELETE FROM $table_entry
     1034            WHERE date_created < DATE_SUB(NOW(), INTERVAL 1 DAY)"
     1035        );
     1036
     1037        Checkview_Admin_Logs::add( 'ip-logs', 'Done.' );
    10241038    }
    10251039
  • checkview/tags/2.0.27/includes/class-checkview.php

    r3423240 r3444264  
    8181            $this->version = CHECKVIEW_VERSION;
    8282        } else {
    83             $this->version = '2.0.26';
     83            $this->version = '2.0.27';
    8484        }
    8585        $this->plugin_name = 'checkview';
     
    133133     */
    134134    public static function is_bot(): bool {
    135         $visitor_ip = checkview_get_visitor_ip();
    136         $cv_bot_ip = checkview_get_api_ip();
    137         $ip_verified = is_array( $cv_bot_ip ) && in_array( $visitor_ip, $cv_bot_ip );
     135        $visitor_ip  = checkview_get_visitor_ip();
     136        $cv_bot_ip   = checkview_get_api_ip();
     137        $is_local    = defined( 'WP_ENVIRONMENT_TYPE' ) && WP_ENVIRONMENT_TYPE === 'local';
     138        $ip_verified = $is_local || ( is_array( $cv_bot_ip ) && in_array( $visitor_ip, $cv_bot_ip ) );
    138139
    139140        if ( isset( $_REQUEST['checkview_test_id'] ) && ! $ip_verified ) {
  • checkview/tags/2.0.27/includes/formhelpers/class-checkview-fluent-forms-helper.php

    r3423240 r3444264  
    3636
    3737        /**
     38         * Checkable inputs counter.
     39         *
     40         * @var int $counter Number of checkable inputs iterated over during rendering.
     41         */
     42        private static $counter = 0;
     43
     44        /**
    3845         * Constructor.
    3946         *
     
    148155                '__return_true',
    149156                999
     157            );
     158
     159            add_filter(
     160                'fluentform/rendering_field_html_input_checkbox',
     161                array($this, 'static_ids'),
     162                99
     163            );
     164
     165            add_filter(
     166                'fluentform/rendering_field_html_terms_and_condition',
     167                array($this, 'static_ids'),
     168                99
     169            );
     170
     171            add_filter(
     172                'fluentform/rendering_field_html_gdpr_agreement',
     173                array($this, 'static_ids'),
     174                99
     175            );
     176
     177            add_filter(
     178                'fluentform/rendering_field_html_input_radio',
     179                array($this, 'static_ids'),
     180                99
    150181            );
    151182        }
     
    320351            return $notifications;
    321352        }
     353
     354        /**
     355         * Replace IDs for checkbox/radio inputs & labels with static IDs based on incremental counter.
     356         *
     357         * @param $html Input's HTML.
     358         *
     359         * @return string Modified HTML.
     360         */
     361        public static function static_ids($html) {
     362            $map = [];
     363
     364            // Build map of old IDs to new IDs
     365            preg_match_all('/\bid=[\'"]([^\'"]+)[\'"]/', $html, $matches);
     366            foreach ($matches[1] as $oldId) {
     367                if (!isset($map[$oldId])) {
     368                    $map[$oldId] = 'ff_checkable_' . (++self::$counter);
     369                }
     370            }
     371
     372            // Replace both id= and for= attributes
     373            foreach ($map as $oldId => $newId) {
     374                $html = str_replace(
     375                    ['id="' . $oldId . '"', "id='" . $oldId . "'", 'for="' . $oldId . '"', "for='" . $oldId . "'"],
     376                    ['id="' . $newId . '"', "id='" . $newId . "'", 'for="' . $newId . '"', "for='" . $newId . "'"],
     377                    $html
     378                );
     379            }
     380
     381            return $html;
     382        }
    322383    }
    323384
  • checkview/trunk/README.txt

    r3423240 r3444264  
    88License: GPLv3
    99License URI: http://www.gnu.org/licenses/gpl-3.0.html
    10 Stable tag: 2.0.26
     10Stable tag: 2.0.27
    1111
    1212[CheckView](https://checkview.io/) automates WordPress form and WooCommerce testing, monitoring key flows to catch failures early before they cost you leads or sales everyday.
     
    1616Websites rarely fail loudly. Forms stop submitting. Leads disappear. Emails never send. Checkout buttons break quietly in the background. These issues often go unnoticed until sales or leads are lost.
    1717
    18 CheckView automatically tests your WordPress forms on a schedule, using real browser sessions to verify that submissions complete successfully, emails are sent, and integrations work as expected. It also supports testing logins, carts, and WooCommerce checkout flows.
     18CheckView automatically tests your WordPress forms on a schedule, using real browser sessions to verify that submissions complete successfully and emails are sent. It also supports testing logins, carts, and WooCommerce checkout flows.
    1919
    2020Built specifically for WordPress and WooCommerce, CheckView helps site owners, developers, and agencies detect problems early and resolve them faster, without writing code or setting up complex testing infrastructure.
     
    3333
    3434   * Run real browser-based tests on WordPress forms, including multi-step and dynamic forms
    35    * Validate form submissions from start to finish, including email notifications and integrations
     35   * Validate form submissions from start to finish, including email notifications
    3636   * Test WooCommerce checkout flows alongside forms for the most complete coverage
    3737   * Verify full form submissions, including email notifications and stored entries
     
    205205
    206206== Changelog ==
     207
     208= 2.0.27 =
     209* Add support for Fluent Forms fields: Terms and Conditions, GDPR Acceptance.
     210* Delay deletion of cloned form results by one day.
     211* Improved logging for scheduled deletion.
    207212
    208213= 2.0.26 =
     
    518523== Upgrade Notice ==
    519524
     525= 2.0.27 =
     526* Add support for Fluent Forms fields: Terms and Conditions, GDPR Acceptance.
     527* Delay deletion of cloned form results by one day.
     528* Improved logging for scheduled deletion.
     529
    520530= 2.0.26 =
    521531* Add logging for email submissions and headers across all form helper classes.
  • checkview/trunk/checkview.php

    r3423240 r3444264  
    1212 * Plugin URI:        https://checkview.io
    1313 * Description:       CheckView is the #1 fully automated solution to test your WordPress forms and detect form problems fast.  Automatically test your WordPress forms to ensure you never miss a lead again.
    14  * Version:           2.0.26
     14 * Version:           2.0.27
    1515 * Author:            CheckView
    1616 * Author URI:        https://checkview.io/
     
    3636 * @link https://semver.org
    3737 */
    38 define( 'CHECKVIEW_VERSION', '2.0.26' );
     38define( 'CHECKVIEW_VERSION', '2.0.27' );
    3939
    4040if ( ! defined( 'CHECKVIEW_BASE_DIR' ) ) {
  • checkview/trunk/includes/checkview-functions.php

    r3421974 r3444264  
    10151015        global $wpdb;
    10161016
    1017         // Delete all entries from 'cv_entry' table.
     1017        Checkview_Admin_Logs::add( 'ip-logs', 'Running scheduled deletion of CheckView rows...' );
     1018
    10181019        $table_entry = esc_sql( $wpdb->prefix . 'cv_entry' );
    1019         $wpdb->query( "DELETE FROM $table_entry" );
    1020 
    1021         // Delete all entries from 'cv_entry_meta' table.
    10221020        $table_entry_meta = esc_sql( $wpdb->prefix . 'cv_entry_meta' );
    1023         $wpdb->query( "DELETE FROM $table_entry_meta" );
     1021
     1022        // Delete entries older than 1 day from 'cv_entry_meta' table.
     1023        $wpdb->query(
     1024            "DELETE FROM $table_entry_meta
     1025            WHERE entry_id IN (
     1026                SELECT id FROM $table_entry
     1027                WHERE date_created < DATE_SUB(NOW(), INTERVAL 1 DAY)
     1028            )"
     1029        );
     1030
     1031        // Delete entries older than 1 day from 'cv_entry' table.
     1032        $wpdb->query(
     1033            "DELETE FROM $table_entry
     1034            WHERE date_created < DATE_SUB(NOW(), INTERVAL 1 DAY)"
     1035        );
     1036
     1037        Checkview_Admin_Logs::add( 'ip-logs', 'Done.' );
    10241038    }
    10251039
  • checkview/trunk/includes/class-checkview.php

    r3423240 r3444264  
    8181            $this->version = CHECKVIEW_VERSION;
    8282        } else {
    83             $this->version = '2.0.26';
     83            $this->version = '2.0.27';
    8484        }
    8585        $this->plugin_name = 'checkview';
     
    133133     */
    134134    public static function is_bot(): bool {
    135         $visitor_ip = checkview_get_visitor_ip();
    136         $cv_bot_ip = checkview_get_api_ip();
    137         $ip_verified = is_array( $cv_bot_ip ) && in_array( $visitor_ip, $cv_bot_ip );
     135        $visitor_ip  = checkview_get_visitor_ip();
     136        $cv_bot_ip   = checkview_get_api_ip();
     137        $is_local    = defined( 'WP_ENVIRONMENT_TYPE' ) && WP_ENVIRONMENT_TYPE === 'local';
     138        $ip_verified = $is_local || ( is_array( $cv_bot_ip ) && in_array( $visitor_ip, $cv_bot_ip ) );
    138139
    139140        if ( isset( $_REQUEST['checkview_test_id'] ) && ! $ip_verified ) {
  • checkview/trunk/includes/formhelpers/class-checkview-fluent-forms-helper.php

    r3423240 r3444264  
    3636
    3737        /**
     38         * Checkable inputs counter.
     39         *
     40         * @var int $counter Number of checkable inputs iterated over during rendering.
     41         */
     42        private static $counter = 0;
     43
     44        /**
    3845         * Constructor.
    3946         *
     
    148155                '__return_true',
    149156                999
     157            );
     158
     159            add_filter(
     160                'fluentform/rendering_field_html_input_checkbox',
     161                array($this, 'static_ids'),
     162                99
     163            );
     164
     165            add_filter(
     166                'fluentform/rendering_field_html_terms_and_condition',
     167                array($this, 'static_ids'),
     168                99
     169            );
     170
     171            add_filter(
     172                'fluentform/rendering_field_html_gdpr_agreement',
     173                array($this, 'static_ids'),
     174                99
     175            );
     176
     177            add_filter(
     178                'fluentform/rendering_field_html_input_radio',
     179                array($this, 'static_ids'),
     180                99
    150181            );
    151182        }
     
    320351            return $notifications;
    321352        }
     353
     354        /**
     355         * Replace IDs for checkbox/radio inputs & labels with static IDs based on incremental counter.
     356         *
     357         * @param $html Input's HTML.
     358         *
     359         * @return string Modified HTML.
     360         */
     361        public static function static_ids($html) {
     362            $map = [];
     363
     364            // Build map of old IDs to new IDs
     365            preg_match_all('/\bid=[\'"]([^\'"]+)[\'"]/', $html, $matches);
     366            foreach ($matches[1] as $oldId) {
     367                if (!isset($map[$oldId])) {
     368                    $map[$oldId] = 'ff_checkable_' . (++self::$counter);
     369                }
     370            }
     371
     372            // Replace both id= and for= attributes
     373            foreach ($map as $oldId => $newId) {
     374                $html = str_replace(
     375                    ['id="' . $oldId . '"', "id='" . $oldId . "'", 'for="' . $oldId . '"', "for='" . $oldId . "'"],
     376                    ['id="' . $newId . '"', "id='" . $newId . "'", 'for="' . $newId . '"', "for='" . $newId . "'"],
     377                    $html
     378                );
     379            }
     380
     381            return $html;
     382        }
    322383    }
    323384
Note: See TracChangeset for help on using the changeset viewer.