PluginProbe
Double Opt-In for Contact Form 7 – Secure, GDPR-Compliant Email Verification / 5.6.3
Double Opt-In for Contact Form 7 – Secure, GDPR-Compliant Email Verification v5.6.3
5.6.2 5.6.3 5.6.1 5.6.0 5.5.0 5.4.0 5.3.2 5.3.1 5.1.6 5.1.5 trunk 2.1.5 2.11 2.12 2.13 2.15 3.0.0 3.0.1 3.0.2 3.0.3 3.0.5 3.0.51 3.0.60 3.0.61 3.0.62 All 38 releases
← All changes | CF7DoubleOptIn.class.php +45 -4 5.1.6 → 5.6.3 View file →
@@ -14,9 +14,9 @@
14 14 * Plugin URI: https://www.forge12.com/blog/so-verwendest-du-das-double-opt-in-fuer-contact-form-7/
15 15 * Description: This plugin allows you to add a double OptIn System to your Contact Form 7 & Avada Forms.
16 16 * Text Domain: double-opt-in
17 17 * Domain Path: /languages
18 - * Version: 5.1.6
18 + * Version: 5.6.3
19 19 * Requires at least: 6.0
20 20 * Requires PHP: 7.4
21 21 * Author: Forge12 Interactive GmbH
22 22 * Author URI: https://www.forge12.com
@@ -56,9 +56,9 @@
56 56 return;
57 57 }
58 58
59 59 if ( ! defined( 'FORGE12_OPTIN_VERSION' ) ) {
60 - define( 'FORGE12_OPTIN_VERSION', '5.1.6' );
60 + define( 'FORGE12_OPTIN_VERSION', '5.6.3' );
61 61 }
62 62
63 63 // Addon API version — semver-independent from the plugin's marketing
64 64 // version. Bumped only on breaking changes to the Addon API surface
@@ -64,10 +64,20 @@
64 64 // version. Bumped only on breaking changes to the Addon API surface
65 65 // (AddonInterface, AddonRegistry, AddonLicenseRegistry, FormIntegrationInterface,
66 66 // event payloads). Addons declare their requirement against this constant,
67 67 // not FORGE12_OPTIN_VERSION.
68 + //
69 + // 4.4.0 (additive): FollowUp\FollowUpAdapterInterface, FollowUpCoordinator,
70 + // FollowUpAdapterRegistry. Addons that implement follow-up adapters
71 + // require ^4.4; everything else keeps working against 4.3.
72 + //
73 + // 4.5.0 (additive): AbstractFormIntegration::refusedConsentBeforeSubmit(),
74 + // OptInError::isAlwaysShown()/shouldShowToVisitor(),
75 + // OptInFrontend::getLastCreationError(), ErrorNotification::forget().
76 + // The Elementor, WPForms and Gravity Forms add-ons call them only when they
77 + // exist (method_exists), so their requirement stays ^4.4.
68 78 if ( ! defined( 'F12_DOI_CORE_API_VERSION' ) ) {
69 - define( 'F12_DOI_CORE_API_VERSION', '4.3.0' );
79 + define( 'F12_DOI_CORE_API_VERSION', '4.5.0' );
70 80 }
71 81 if ( ! defined( 'FORGE12_OPTIN_SLUG' ) ) {
72 82 define( 'FORGE12_OPTIN_SLUG', 'f12-cf7-doubleoptin' );
73 83 }
@@ -84,14 +94,25 @@
84 94 */
85 95 require_once 'logger/logger.php';
86 96 require_once 'core/helpers/uuid.php';
87 97 require_once 'core/telemetry.php';
98 + // feedback.php first: review.php, credit_nudge.php and the deactivation
99 + // survey all build their links with it.
100 + require_once 'core/feedback.php';
88 101 require_once 'core/review.php';
102 + require_once 'core/confirmation_output.php';
103 + require_once 'core/credit_link.php';
104 + require_once 'core/credit_nudge.php';
105 + require_once 'core/deactivation_survey.php';
106 + require_once 'core/admin_links.php';
89 107 require_once 'core/cron.php';
90 108 require_once 'core/BaseController.class.php';
91 109
92 110 require_once 'OnActivation.php';
93 111 require_once 'OnDeactivation.php';
112 + // OnUpdate runs at include time, before autoload.php is registered
113 + // further down — load the one PSR-4 class it needs explicitly.
114 + require_once 'src/Repository/FollowUpSchema.php';
94 115 require_once 'OnUpdate.php';
95 116 require_once 'compatibility/OptInFrontend.class.php';
96 117 require_once 'core/SpamMechanics.class.php';
97 118
@@ -434,11 +455,22 @@
434 455
435 456 // Register migration registry (v4.3.0+ — runs pending DB migrations on admin_init)
436 457 $container->addProvider( new \Forge12\DoubleOptIn\Providers\MigrationServiceProvider() );
437 458
459 + // Register follow-up coordinator (v5.6.0+ — status + retry of
460 + // post-confirmation actions). Before AddonServiceProvider so
461 + // the adapter registry exists when the form addons boot.
462 + $container->addProvider( new \Forge12\DoubleOptIn\Providers\FollowUpServiceProvider() );
463 +
438 464 // Register addon system (v4.3.0+ — public Addon API)
439 465 $container->addProvider( new \Forge12\DoubleOptIn\Providers\AddonServiceProvider() );
440 466
467 + // Register health checks (v5.3.0+ — Site Health surfaces for
468 + // broken runtime preconditions such as a missing DB table).
469 + // After AddonServiceProvider so addon-contributed checks are
470 + // picked up by the registry's filter pass.
471 + $container->addProvider( new \Forge12\DoubleOptIn\Providers\HealthServiceProvider() );
472 +
441 473 // Register RateLimiter as singleton
442 474 $container->singleton(
443 475 \Forge12\DoubleOptIn\Service\RateLimiter::class,
444 476 function () {
@@ -548,8 +580,17 @@
548 580 'delete_unconfirmed' => 7,
549 581 'delete_period' => 'months',
550 582 'delete_unconfirmed_period' => 'months',
551 583 'privacy_policy_page' => 0,
584 + // Must be listed even though the opt-out addon owns the
585 + // feature: getSettings() rebuilds its return value from
586 + // THIS array and silently drops any stored key that is
587 + // missing here. Without the entry, every consumer of
588 + // getSettings()['optout_page'] — OptInLinkGenerator and
589 + // OptIn::get_link_optout(), i.e. the `[doubleoptoutlink]`
590 + // placeholder — fell back to home_url() no matter what
591 + // the admin had configured.
592 + 'optout_page' => 0,
552 593 'token_expiry_hours' => 48,
553 594 'rate_limit_ip' => 5,
554 595 'rate_limit_email' => 3,
555 596 'rate_limit_window' => 60,
@@ -683,9 +724,9 @@
683 724 // Show warning for major/minor version changes
684 725 if ( version_compare( $new_minor, $current_minor, '>' ) ) {
685 726 $upgrade_notice = sprintf(
686 727 '</p><div class="notice inline notice-warning notice-alt" style="margin: 10px 0; padding: 10px; border-left-color: #ffb900;"><p><strong>%s</strong></p><p>%s</p></div><p style="display:none;">',
687 - esc_html__( '⚠️ Important: Major Update – Please backup before updating!', 'double-opt-in' ),
728 + esc_html__( 'Important: Major Update – Please backup before updating!', 'double-opt-in' ),
688 729 esc_html__( 'This version includes significant changes to the form management system, email templates, and database structure. We strongly recommend creating a full site backup before updating.', 'double-opt-in' )
689 730 );
690 731
691 732 echo wp_kses_post( $upgrade_notice );