Changeset 3464354
- Timestamp:
- 02/18/2026 01:18:01 PM (5 weeks ago)
- Location:
- mass-email-notifications-for-gravity-forms
- Files:
-
- 22 added
- 6 deleted
- 42 edited
- 1 copied
-
tags/1.3.8 (copied) (copied from mass-email-notifications-for-gravity-forms/trunk)
-
tags/1.3.8/class-mass-email-notifications-for-gravity-forms.php (modified) (13 diffs)
-
tags/1.3.8/mass-email-notifications-for-gf.php (modified) (4 diffs)
-
tags/1.3.8/readme.txt (modified) (3 diffs)
-
tags/1.3.8/vendor/MENFGF/autoload.php (modified) (1 diff)
-
tags/1.3.8/vendor/MENFGF/composer/autoload_classmap.php (modified) (1 diff)
-
tags/1.3.8/vendor/MENFGF/composer/autoload_files.php (deleted)
-
tags/1.3.8/vendor/MENFGF/composer/autoload_real.php (modified) (2 diffs)
-
tags/1.3.8/vendor/MENFGF/composer/autoload_static.php (modified) (3 diffs)
-
tags/1.3.8/vendor/MENFGF/composer/installed.json (modified) (3 diffs)
-
tags/1.3.8/vendor/MENFGF/composer/installed.php (modified) (2 diffs)
-
tags/1.3.8/vendor/MENFGF/gravityops/core/assets/css/admin.css (modified) (2 diffs)
-
tags/1.3.8/vendor/MENFGF/gravityops/core/assets/js/admin.js (modified) (4 diffs)
-
tags/1.3.8/vendor/MENFGF/gravityops/core/composer.json (modified) (1 diff)
-
tags/1.3.8/vendor/MENFGF/gravityops/core/src/Admin (deleted)
-
tags/1.3.8/vendor/MENFGF/gravityops/core/src/SuiteCore (added)
-
tags/1.3.8/vendor/MENFGF/gravityops/core/src/SuiteCore/Admin (added)
-
tags/1.3.8/vendor/MENFGF/gravityops/core/src/SuiteCore/Admin/AdminShell.php (added)
-
tags/1.3.8/vendor/MENFGF/gravityops/core/src/SuiteCore/Admin/ReviewPrompter.php (added)
-
tags/1.3.8/vendor/MENFGF/gravityops/core/src/SuiteCore/Admin/SuiteMenu.php (added)
-
tags/1.3.8/vendor/MENFGF/gravityops/core/src/SuiteCore/Admin/SurveyPrompter.php (added)
-
tags/1.3.8/vendor/MENFGF/gravityops/core/src/SuiteCore/Admin/TrustedLogin.php (added)
-
tags/1.3.8/vendor/MENFGF/gravityops/core/src/SuiteCore/AdminAssetHelper.php (added)
-
tags/1.3.8/vendor/MENFGF/gravityops/core/src/SuiteCore/Config.php (added)
-
tags/1.3.8/vendor/MENFGF/gravityops/core/src/SuiteCore/SuiteCatalog.php (added)
-
tags/1.3.8/vendor/MENFGF/gravityops/core/src/SuiteCore/SuiteCore.php (added)
-
tags/1.3.8/vendor/MENFGF/gravityops/core/src/SuiteRegistry.php (deleted)
-
tags/1.3.8/vendor/MENFGF/trustedlogin/client/src/Config.php (modified) (2 diffs)
-
tags/1.3.8/vendor/MENFGF/trustedlogin/client/src/Utils.php (modified) (1 diff)
-
tags/1.3.8/vendor/MENFGF/trustedlogin/client/tests/bootstrap.php (modified) (1 diff)
-
tags/1.3.8/vendor/autoload.php (modified) (1 diff)
-
tags/1.3.8/vendor/composer/autoload_aliases.php (modified) (2 diffs)
-
tags/1.3.8/vendor/composer/autoload_real.php (modified) (2 diffs)
-
tags/1.3.8/vendor/composer/autoload_static.php (modified) (2 diffs)
-
tags/1.3.8/vendor/composer/installed.json (modified) (2 diffs)
-
tags/1.3.8/vendor/composer/installed.php (modified) (3 diffs)
-
trunk/class-mass-email-notifications-for-gravity-forms.php (modified) (13 diffs)
-
trunk/mass-email-notifications-for-gf.php (modified) (4 diffs)
-
trunk/readme.txt (modified) (3 diffs)
-
trunk/vendor/MENFGF/autoload.php (modified) (1 diff)
-
trunk/vendor/MENFGF/composer/autoload_classmap.php (modified) (1 diff)
-
trunk/vendor/MENFGF/composer/autoload_files.php (deleted)
-
trunk/vendor/MENFGF/composer/autoload_real.php (modified) (2 diffs)
-
trunk/vendor/MENFGF/composer/autoload_static.php (modified) (3 diffs)
-
trunk/vendor/MENFGF/composer/installed.json (modified) (3 diffs)
-
trunk/vendor/MENFGF/composer/installed.php (modified) (2 diffs)
-
trunk/vendor/MENFGF/gravityops/core/assets/css/admin.css (modified) (2 diffs)
-
trunk/vendor/MENFGF/gravityops/core/assets/js/admin.js (modified) (4 diffs)
-
trunk/vendor/MENFGF/gravityops/core/composer.json (modified) (1 diff)
-
trunk/vendor/MENFGF/gravityops/core/src/Admin (deleted)
-
trunk/vendor/MENFGF/gravityops/core/src/SuiteCore (added)
-
trunk/vendor/MENFGF/gravityops/core/src/SuiteCore/Admin (added)
-
trunk/vendor/MENFGF/gravityops/core/src/SuiteCore/Admin/AdminShell.php (added)
-
trunk/vendor/MENFGF/gravityops/core/src/SuiteCore/Admin/ReviewPrompter.php (added)
-
trunk/vendor/MENFGF/gravityops/core/src/SuiteCore/Admin/SuiteMenu.php (added)
-
trunk/vendor/MENFGF/gravityops/core/src/SuiteCore/Admin/SurveyPrompter.php (added)
-
trunk/vendor/MENFGF/gravityops/core/src/SuiteCore/Admin/TrustedLogin.php (added)
-
trunk/vendor/MENFGF/gravityops/core/src/SuiteCore/AdminAssetHelper.php (added)
-
trunk/vendor/MENFGF/gravityops/core/src/SuiteCore/Config.php (added)
-
trunk/vendor/MENFGF/gravityops/core/src/SuiteCore/SuiteCatalog.php (added)
-
trunk/vendor/MENFGF/gravityops/core/src/SuiteCore/SuiteCore.php (added)
-
trunk/vendor/MENFGF/gravityops/core/src/SuiteRegistry.php (deleted)
-
trunk/vendor/MENFGF/trustedlogin/client/src/Config.php (modified) (2 diffs)
-
trunk/vendor/MENFGF/trustedlogin/client/src/Utils.php (modified) (1 diff)
-
trunk/vendor/MENFGF/trustedlogin/client/tests/bootstrap.php (modified) (1 diff)
-
trunk/vendor/autoload.php (modified) (1 diff)
-
trunk/vendor/composer/autoload_aliases.php (modified) (2 diffs)
-
trunk/vendor/composer/autoload_real.php (modified) (2 diffs)
-
trunk/vendor/composer/autoload_static.php (modified) (2 diffs)
-
trunk/vendor/composer/installed.json (modified) (2 diffs)
-
trunk/vendor/composer/installed.php (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
mass-email-notifications-for-gravity-forms/tags/1.3.8/class-mass-email-notifications-for-gravity-forms.php
r3444395 r3464354 2 2 3 3 use Gravity_Forms\Gravity_Forms\Settings\Settings; 4 use MENFGF\GravityOps\Core\Admin\ReviewPrompter; 5 use MENFGF\GravityOps\Core\Admin\SuiteMenu; 6 use MENFGF\GravityOps\Core\Admin\SurveyPrompter; 4 use MENFGF\GravityOps\Core\SuiteCore\SuiteCore; 7 5 use MENFGF\GravityOps\Core\Traits\SingletonTrait; 8 6 use MENFGF\GravityOps\Core\Utils\AssetHelper; 9 use MENFGF\GravityOps\Core\Admin\AdminShell;10 use function MENFGF\GravityOps\Core\Admin\gravityops_shell;11 7 if ( !defined( 'ABSPATH' ) ) { 12 8 exit; … … 207 203 parent::init_admin(); 208 204 // Register the new GravityOps AdminShell page under the parent menu. 209 gravityops_shell()->register_plugin_page( $this->_slug, [205 SuiteCore::instance()->shell()->register_plugin_page( $this->_slug, [ 210 206 'title' => $this->_title, 211 207 'menu_title' => $this->_short_title, … … 249 245 add_action( 'admin_post_menfgf_unsuppress', [$this, 'handle_unsuppress'] ); 250 246 $param = 'https://wordpress.org/support/plugin/mass-email-notifications-for-gravity-forms/reviews/#new-post'; 251 $review_prompter = new ReviewPrompter($this->prefix, $this->_title, $param);247 $review_prompter = SuiteCore::instance()->review_prompter( $this->prefix, $this->_title, $param ); 252 248 $review_prompter->init(); 253 249 $review_prompter->maybe_show_review_request( $this->get_number_emails_sent(), 500 ); 254 $survey_prompter = new SurveyPrompter(250 $survey_prompter = SuiteCore::instance()->survey_prompter( 255 251 $this->prefix, 256 252 $this->_title, … … 316 312 ]; 317 313 } 318 $workflow_steps = []; 319 if ( class_exists( AdminShell::class ) ) { 320 $workflow_steps = AdminShell::get_workflow_steps_by_type( 'menfgf_create_batch' ); 321 } 322 AdminShell::render_feeds_list( 314 $workflow_steps = SuiteCore::instance()->shell()->get_workflow_steps_by_type( 'menfgf_create_batch' ); 315 SuiteCore::instance()->shell()->render_feeds_list( 323 316 $feeds_and_forms, 324 317 $this->_slug, … … 404 397 */ 405 398 public function handle_toggle_feed() { 406 AdminShell::process_feed_toggle( 'menfgf_toggle_feed', 'admin.php?page=mass_email_notifications_for_gf&tab=feeds' );399 SuiteCore::instance()->shell()->process_feed_toggle( 'menfgf_toggle_feed', 'admin.php?page=mass_email_notifications_for_gf&tab=feeds' ); 407 400 } 408 401 … … 413 406 */ 414 407 public function handle_toggle_workflow_step() { 415 AdminShell::process_feed_toggle( 'menfgf_toggle_workflow_step', 'admin.php?page=mass_email_notifications_for_gf&tab=feeds' );408 SuiteCore::instance()->shell()->process_feed_toggle( 'menfgf_toggle_workflow_step', 'admin.php?page=mass_email_notifications_for_gf&tab=feeds' ); 416 409 } 417 410 … … 437 430 exit; 438 431 } 439 if ( !current_user_can( Suite Menu::get_parent_capability() ) ) {432 if ( !current_user_can( SuiteCore::instance()->suite_menu()->get_parent_capability() ) ) { 440 433 wp_safe_redirect( admin_url( 'admin.php?page=mass_email_notifications_for_gf&tab=suppressions' ) ); 441 434 exit; … … 450 443 */ 451 444 public function gops_render_help() { 452 AdminShell::render_help_tab( [445 SuiteCore::instance()->shell()->render_help_tab( [ 453 446 'Learn More' => 'https://brightleafdigital.io/mass-email-notifications-for-gravity-forms/', 454 447 'Docs' => 'https://brightleafdigital.io/mass-email-notifications-for-gravity-forms/#docs', … … 475 468 */ 476 469 private function get_freemius_tabs() { 477 $tabs = AdminShell::freemius_tabs( $this->_slug );470 $tabs = SuiteCore::instance()->shell()->freemius_tabs( $this->_slug ); 478 471 if ( !menfgf_fs()->is_registered() ) { 479 472 unset($tabs['account']); … … 565 558 */ 566 559 public function get_menu_icon() { 567 return ( Suite Menu::get_plugin_icon_url( $this->_slug ) ?: $this->get_base_url() . '/includes/images/icon.svg' );560 return ( SuiteCore::instance()->suite_menu()->get_plugin_icon_url( $this->_slug ) ?: $this->get_base_url() . '/includes/images/icon.svg' ); 568 561 } 569 562 … … 577 570 */ 578 571 public function get_app_menu_icon() { 579 return ( Suite Menu::get_plugin_icon_url( $this->_slug ) ?: SuiteMenu::get_icon() );572 return ( SuiteCore::instance()->suite_menu()->get_plugin_icon_url( $this->_slug ) ?: SuiteCore::instance()->suite_menu()->get_icon() ); 580 573 } 581 574 … … 588 581 */ 589 582 public function uninstall() { 583 parent::uninstall(); 590 584 delete_option( self::PREFIX . 'email_count' ); 591 585 delete_option( self::PREFIX . 'rating_asked' ); … … 593 587 delete_option( self::PREFIX . 'table_version' ); 594 588 delete_option( self::PREFIX . 'suppressions_table_version' ); 589 delete_option( self::PREFIX . 'review_prompter_usage_count' ); 590 delete_option( self::PREFIX . 'survey_status' ); 595 591 // Clear transients used for throttling and locking. 596 592 delete_transient( self::PREFIX . 'next_send_ready' ); -
mass-email-notifications-for-gravity-forms/tags/1.3.8/mass-email-notifications-for-gf.php
r3444395 r3464354 6 6 * Author URI: https://brightleafdigital.io/ 7 7 * Description: Allows you to send notifications to everyone who filled out any of your forms. 8 * Version: 1.3. 78 * Version: 1.3.8 9 9 * Author: BrightLeaf Digital 10 10 * License: GPL-2.0+ … … 13 13 * @package MassEmailNotificationsForGravityForms 14 14 */ 15 use function MENFGF\GravityOps\Core\Admin\gravityops_shell;15 use MENFGF\GravityOps\Core\SuiteCore\SuiteCore; 16 16 if ( !defined( 'ABSPATH' ) ) { 17 17 exit; 18 18 // Exit if accessed directly. 19 19 } 20 define( 'MASS_EMAIL_NOTIFICATIONS_FOR_GRAVITY_FORMS_VERSION', '1.3.8' ); 21 define( 'MASS_EMAIL_NOTIFICATIONS_FOR_GRAVITY_FORMS_BASENAME', plugin_basename( __FILE__ ) ); 20 22 require_once __DIR__ . '/vendor/autoload.php'; 21 23 if ( file_exists( __DIR__ . '/vendor/MENFGF/autoload.php' ) ) { 22 24 require_once __DIR__ . '/vendor/MENFGF/autoload.php'; 23 25 } 24 // Instantiate this plugin's copy of the AdminShell early so provider negotiation can happen on plugins_loaded.26 // Register this plugin with SuiteCore early so the latest provider can be selected. 25 27 add_action( 'plugins_loaded', function () { 26 gravityops_shell(); 28 $assets_base_url = ''; 29 if ( file_exists( __DIR__ . '/vendor/MENFGF/gravityops/core/assets/' ) ) { 30 $assets_base_url = plugins_url( 'vendor/MENFGF/gravityops/core/assets/', __FILE__ ); 31 } else { 32 $assets_base_url = plugins_url( 'vendor/gravityops/core/assets/', __FILE__ ); 33 } 34 SuiteCore::register( [ 35 'assets_base_url' => $assets_base_url, 36 ] ); 27 37 }, 1 ); 28 38 if ( function_exists( 'menfgf_fs' ) ) { … … 74 84 } 75 85 menfgf_fs()->add_filter( 'enable_cpt_advanced_menu_logic', '__return_true' ); 76 define( 'MASS_EMAIL_NOTIFICATIONS_FOR_GRAVITY_FORMS_VERSION', '1.3.7' );77 define( 'MASS_EMAIL_NOTIFICATIONS_FOR_GRAVITY_FORMS_BASENAME', plugin_basename( __FILE__ ) );78 86 add_action( 'admin_notices', function () { 79 87 if ( !class_exists( 'GFForms' ) ) { … … 101 109 } 102 110 }, 5 ); 103 // Ensure GravityOps shared assets resolve when library is vendor-installed in this plugin.104 add_filter( 'gravityops_assets_base_url', function ( $url ) {105 if ( $url ) {106 return $url;107 }108 if ( file_exists( __DIR__ . '/vendor/MENFGF/gravityops/core/assets/' ) ) {109 return plugins_url( 'vendor/MENFGF/gravityops/core/assets/', __FILE__ );110 }111 return plugins_url( 'vendor/gravityops/core/assets/', __FILE__ );112 } );113 111 add_action( 114 112 'gravityflow_loaded', -
mass-email-notifications-for-gravity-forms/tags/1.3.8/readme.txt
r3444395 r3464354 2 2 Tested up to: 6.9 3 3 Tags: GravityForms, notifications, email, task management, automation 4 Stable tag: 1.3. 74 Stable tag: 1.3.8 5 5 Requires PHP: 8.0 6 6 License: GPLv2 or later … … 44 44 == Changelog == 45 45 46 = 1.3.8 | Feb 18, 2026 = 47 - Fixed uninstall process to properly clear everything 48 - Updated core GravityOps library to improve the update plugin process among other small fixes 49 - Add support to run workflows on double opt-in 50 46 51 = 1.3.7 | Jan 21, 2026 = 47 52 * Bumped version of core GravityOps library to fix some bugs regarding the plugin admin menus and integrate [TrustedLogin](https://www.trustedlogin.com/about/easy-and-safe/) … … 58 63 = 1.3.4 | Dec 15, 2025 = 59 64 * Fixed a bug with the Feed tab in the new admin menu. 60 61 = 1.3.3 | Dec 15, 2025 =62 * We've upgraded the plugin's core components for smoother compatibility and a more reliable experience overall.63 * Improved the way feeds are displayed in the admin area, making it easier to see related forms and manage your email lists with clearer, more consistent layouts.64 * Streamlined the admin interface with new tabs and centralized tools, so navigating settings, suppressions, and feeds feels more intuitive and efficient.65 * Enhanced email sending reliability with smarter scheduling and automatic checks to ensure your campaigns run without interruptions, even if something goes off track.66 * Made unsubscribe handling simpler and more secure, with better options for managing preferences and viewing suppression lists.67 * Added better support for viewing email content previews in the admin panel and strengthened CSV file handling for more accurate imports.68 * Tweaked permissions and review prompts to make the plugin even more user-friendly, plus a few behind-the-scenes updates for better performance. -
mass-email-notifications-for-gravity-forms/tags/1.3.8/vendor/MENFGF/autoload.php
r3444395 r3464354 20 20 require_once __DIR__ . '/composer/autoload_real.php'; 21 21 22 return ComposerAutoloaderInit 576698bb6db496a6b33a55636c894704::getLoader();22 return ComposerAutoloaderInit704fe92fa45ad4083a7bc7b91cb59fae::getLoader(); -
mass-email-notifications-for-gravity-forms/tags/1.3.8/vendor/MENFGF/composer/autoload_classmap.php
r3444395 r3464354 8 8 return array( 9 9 'MENFGF\\Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php', 10 'MENFGF\\GravityOps\\Core\\Admin\\AdminShell' => $vendorDir . '/gravityops/core/src/Admin/AdminShell.php', 11 'MENFGF\\GravityOps\\Core\\Admin\\ReviewPrompter' => $vendorDir . '/gravityops/core/src/Admin/ReviewPrompter.php', 12 'MENFGF\\GravityOps\\Core\\Admin\\SettingsHeader' => $vendorDir . '/gravityops/core/src/Admin/SettingsHeader.php', 13 'MENFGF\\GravityOps\\Core\\Admin\\SuiteMenu' => $vendorDir . '/gravityops/core/src/Admin/SuiteMenu.php', 14 'MENFGF\\GravityOps\\Core\\Admin\\SurveyPrompter' => $vendorDir . '/gravityops/core/src/Admin/SurveyPrompter.php', 15 'MENFGF\\GravityOps\\Core\\Admin\\TrustedLogin' => $vendorDir . '/gravityops/core/src/Admin/TrustedLogin.php', 16 'MENFGF\\GravityOps\\Core\\SuiteRegistry' => $vendorDir . '/gravityops/core/src/SuiteRegistry.php', 10 'MENFGF\\GravityOps\\Core\\SuiteCore\\AdminAssetHelper' => $vendorDir . '/gravityops/core/src/SuiteCore/AdminAssetHelper.php', 11 'MENFGF\\GravityOps\\Core\\SuiteCore\\Admin\\AdminShell' => $vendorDir . '/gravityops/core/src/SuiteCore/Admin/AdminShell.php', 12 'MENFGF\\GravityOps\\Core\\SuiteCore\\Admin\\ReviewPrompter' => $vendorDir . '/gravityops/core/src/SuiteCore/Admin/ReviewPrompter.php', 13 'MENFGF\\GravityOps\\Core\\SuiteCore\\Admin\\SuiteMenu' => $vendorDir . '/gravityops/core/src/SuiteCore/Admin/SuiteMenu.php', 14 'MENFGF\\GravityOps\\Core\\SuiteCore\\Admin\\SurveyPrompter' => $vendorDir . '/gravityops/core/src/SuiteCore/Admin/SurveyPrompter.php', 15 'MENFGF\\GravityOps\\Core\\SuiteCore\\Admin\\TrustedLogin' => $vendorDir . '/gravityops/core/src/SuiteCore/Admin/TrustedLogin.php', 16 'MENFGF\\GravityOps\\Core\\SuiteCore\\Config' => $vendorDir . '/gravityops/core/src/SuiteCore/Config.php', 17 'MENFGF\\GravityOps\\Core\\SuiteCore\\SuiteCatalog' => $vendorDir . '/gravityops/core/src/SuiteCore/SuiteCatalog.php', 18 'MENFGF\\GravityOps\\Core\\SuiteCore\\SuiteCore' => $vendorDir . '/gravityops/core/src/SuiteCore/SuiteCore.php', 17 19 'MENFGF\\GravityOps\\Core\\Traits\\SingletonTrait' => $vendorDir . '/gravityops/core/src/Traits/SingletonTrait.php', 18 20 'MENFGF\\GravityOps\\Core\\Utils\\AssetHelper' => $vendorDir . '/gravityops/core/src/Utils/AssetHelper.php', -
mass-email-notifications-for-gravity-forms/tags/1.3.8/vendor/MENFGF/composer/autoload_real.php
r3444395 r3464354 3 3 // autoload_real.php @generated by Composer 4 4 5 class ComposerAutoloaderInit 576698bb6db496a6b33a55636c8947045 class ComposerAutoloaderInit704fe92fa45ad4083a7bc7b91cb59fae 6 6 { 7 7 private static $loader; … … 25 25 require __DIR__ . '/platform_check.php'; 26 26 27 spl_autoload_register(array('ComposerAutoloaderInit 576698bb6db496a6b33a55636c894704', 'loadClassLoader'), true, true);27 spl_autoload_register(array('ComposerAutoloaderInit704fe92fa45ad4083a7bc7b91cb59fae', 'loadClassLoader'), true, true); 28 28 self::$loader = $loader = new \MENFGF\Composer\Autoload\ClassLoader(\dirname(__DIR__)); 29 spl_autoload_unregister(array('ComposerAutoloaderInit 576698bb6db496a6b33a55636c894704', 'loadClassLoader'));29 spl_autoload_unregister(array('ComposerAutoloaderInit704fe92fa45ad4083a7bc7b91cb59fae', 'loadClassLoader')); 30 30 31 31 require __DIR__ . '/autoload_static.php'; 32 call_user_func(\MENFGF\Composer\Autoload\ComposerStaticInit 576698bb6db496a6b33a55636c894704::getInitializer($loader));32 call_user_func(\MENFGF\Composer\Autoload\ComposerStaticInit704fe92fa45ad4083a7bc7b91cb59fae::getInitializer($loader)); 33 33 34 34 $loader->setClassMapAuthoritative(true); 35 35 $loader->register(true); 36 36 37 $filesToLoad = \MENFGF\Composer\Autoload\ComposerStaticInit576698bb6db496a6b33a55636c894704::$files;38 $requireFile = \Closure::bind(static function ($fileIdentifier, $file) {39 if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {40 $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;41 42 require $file;43 }44 }, null, null);45 foreach ($filesToLoad as $fileIdentifier => $file) {46 $requireFile($fileIdentifier, $file);47 }48 49 37 return $loader; 50 38 } -
mass-email-notifications-for-gravity-forms/tags/1.3.8/vendor/MENFGF/composer/autoload_static.php
r3444395 r3464354 5 5 namespace MENFGF\Composer\Autoload; 6 6 7 class ComposerStaticInit 576698bb6db496a6b33a55636c8947047 class ComposerStaticInit704fe92fa45ad4083a7bc7b91cb59fae 8 8 { 9 public static $files = array (10 '6450a9b713c361c66ed3f0575f164e85' => __DIR__ . '/..' . '/gravityops/core/src/Admin/functions.php',11 );12 13 9 public static $prefixLengthsPsr4 = array ( 14 10 'M' => … … 32 28 public static $classMap = array ( 33 29 'MENFGF\\Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php', 34 'MENFGF\\GravityOps\\Core\\Admin\\AdminShell' => __DIR__ . '/..' . '/gravityops/core/src/Admin/AdminShell.php', 35 'MENFGF\\GravityOps\\Core\\Admin\\ReviewPrompter' => __DIR__ . '/..' . '/gravityops/core/src/Admin/ReviewPrompter.php', 36 'MENFGF\\GravityOps\\Core\\Admin\\SettingsHeader' => __DIR__ . '/..' . '/gravityops/core/src/Admin/SettingsHeader.php', 37 'MENFGF\\GravityOps\\Core\\Admin\\SuiteMenu' => __DIR__ . '/..' . '/gravityops/core/src/Admin/SuiteMenu.php', 38 'MENFGF\\GravityOps\\Core\\Admin\\SurveyPrompter' => __DIR__ . '/..' . '/gravityops/core/src/Admin/SurveyPrompter.php', 39 'MENFGF\\GravityOps\\Core\\Admin\\TrustedLogin' => __DIR__ . '/..' . '/gravityops/core/src/Admin/TrustedLogin.php', 40 'MENFGF\\GravityOps\\Core\\SuiteRegistry' => __DIR__ . '/..' . '/gravityops/core/src/SuiteRegistry.php', 30 'MENFGF\\GravityOps\\Core\\SuiteCore\\AdminAssetHelper' => __DIR__ . '/..' . '/gravityops/core/src/SuiteCore/AdminAssetHelper.php', 31 'MENFGF\\GravityOps\\Core\\SuiteCore\\Admin\\AdminShell' => __DIR__ . '/..' . '/gravityops/core/src/SuiteCore/Admin/AdminShell.php', 32 'MENFGF\\GravityOps\\Core\\SuiteCore\\Admin\\ReviewPrompter' => __DIR__ . '/..' . '/gravityops/core/src/SuiteCore/Admin/ReviewPrompter.php', 33 'MENFGF\\GravityOps\\Core\\SuiteCore\\Admin\\SuiteMenu' => __DIR__ . '/..' . '/gravityops/core/src/SuiteCore/Admin/SuiteMenu.php', 34 'MENFGF\\GravityOps\\Core\\SuiteCore\\Admin\\SurveyPrompter' => __DIR__ . '/..' . '/gravityops/core/src/SuiteCore/Admin/SurveyPrompter.php', 35 'MENFGF\\GravityOps\\Core\\SuiteCore\\Admin\\TrustedLogin' => __DIR__ . '/..' . '/gravityops/core/src/SuiteCore/Admin/TrustedLogin.php', 36 'MENFGF\\GravityOps\\Core\\SuiteCore\\Config' => __DIR__ . '/..' . '/gravityops/core/src/SuiteCore/Config.php', 37 'MENFGF\\GravityOps\\Core\\SuiteCore\\SuiteCatalog' => __DIR__ . '/..' . '/gravityops/core/src/SuiteCore/SuiteCatalog.php', 38 'MENFGF\\GravityOps\\Core\\SuiteCore\\SuiteCore' => __DIR__ . '/..' . '/gravityops/core/src/SuiteCore/SuiteCore.php', 41 39 'MENFGF\\GravityOps\\Core\\Traits\\SingletonTrait' => __DIR__ . '/..' . '/gravityops/core/src/Traits/SingletonTrait.php', 42 40 'MENFGF\\GravityOps\\Core\\Utils\\AssetHelper' => __DIR__ . '/..' . '/gravityops/core/src/Utils/AssetHelper.php', … … 63 61 { 64 62 return \Closure::bind(function () use ($loader) { 65 $loader->prefixLengthsPsr4 = ComposerStaticInit 576698bb6db496a6b33a55636c894704::$prefixLengthsPsr4;66 $loader->prefixDirsPsr4 = ComposerStaticInit 576698bb6db496a6b33a55636c894704::$prefixDirsPsr4;67 $loader->classMap = ComposerStaticInit 576698bb6db496a6b33a55636c894704::$classMap;63 $loader->prefixLengthsPsr4 = ComposerStaticInit704fe92fa45ad4083a7bc7b91cb59fae::$prefixLengthsPsr4; 64 $loader->prefixDirsPsr4 = ComposerStaticInit704fe92fa45ad4083a7bc7b91cb59fae::$prefixDirsPsr4; 65 $loader->classMap = ComposerStaticInit704fe92fa45ad4083a7bc7b91cb59fae::$classMap; 68 66 69 67 }, null, ClassLoader::class); -
mass-email-notifications-for-gravity-forms/tags/1.3.8/vendor/MENFGF/composer/installed.json
r3444395 r3464354 3 3 "1": { 4 4 "name": "gravityops/core", 5 "version": " 1.1.0",6 "version_normalized": " 1.1.0.0",5 "version": "2.0.1", 6 "version_normalized": "2.0.1.0", 7 7 "source": { 8 8 "type": "git", 9 "url": "git@github.com: Eitan-brightleaf/gravityops.git",10 "reference": " cee27f55738670dc141b58af37d0feb74d4ce47e"9 "url": "git@github.com:BrightLeaf-Digital/gravityops.git", 10 "reference": "2535a2a105334f0bac61b112d8707ba9bc6e18b2" 11 11 }, 12 12 "dist": { 13 13 "type": "zip", 14 "url": "https://api.github.com/repos/ Eitan-brightleaf/gravityops/zipball/cee27f55738670dc141b58af37d0feb74d4ce47e",15 "reference": " cee27f55738670dc141b58af37d0feb74d4ce47e",14 "url": "https://api.github.com/repos/BrightLeaf-Digital/gravityops/zipball/2535a2a105334f0bac61b112d8707ba9bc6e18b2", 15 "reference": "2535a2a105334f0bac61b112d8707ba9bc6e18b2", 16 16 "shasum": "" 17 17 }, … … 20 20 "trustedlogin/client": "^v1.9" 21 21 }, 22 "time": "2026-0 1-21T19:42:14+00:00",22 "time": "2026-02-18T09:47:24+00:00", 23 23 "type": "library", 24 24 "installation-source": "source", … … 26 26 "psr-4": { 27 27 "MENFGF\\GravityOps\\Core\\": "src/" 28 }, 29 "files": [ 30 "src/Admin/functions.php" 31 ] 28 } 32 29 }, 33 30 "license": [ -
mass-email-notifications-for-gravity-forms/tags/1.3.8/vendor/MENFGF/composer/installed.php
r3444395 r3464354 5 5 'pretty_version' => 'dev-main', 6 6 'version' => 'dev-main', 7 'reference' => ' 844dcc46ed2d370fadaccebd03c6dae5521ea1ba',7 'reference' => '41c23576439dc96ef24477141cc57019f41fce29', 8 8 'type' => 'library', 9 9 'install_path' => __DIR__ . '/../', … … 17 17 'gravityops/core' => 18 18 array ( 19 'pretty_version' => ' 1.1.0',20 'version' => ' 1.1.0.0',21 'reference' => ' cee27f55738670dc141b58af37d0feb74d4ce47e',19 'pretty_version' => '2.0.1', 20 'version' => '2.0.1.0', 21 'reference' => '2535a2a105334f0bac61b112d8707ba9bc6e18b2', 22 22 'type' => 'library', 23 23 'install_path' => __DIR__ . '/../gravityops/core', -
mass-email-notifications-for-gravity-forms/tags/1.3.8/vendor/MENFGF/gravityops/core/assets/css/admin.css
r3444395 r3464354 31 31 .gops-tab{padding:6px 14px;border-radius:999px;background:transparent;border:0;text-decoration:none;color:var(--gops-color-muted);font-weight: 500;} 32 32 .gops-tab.is-active{background: var(--gops-color-primary);color:#fff} 33 .gops-tab__badge{display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:18px;padding:0 6px;border-radius:999px;background:#5F6EEA;color:#fff;font-size:11px;font-weight:700;line-height:1;margin-left:6px;border:0} 34 35 /* Toolbar */ 36 .gops-actions{display:flex;justify-content:flex-end;margin:6px 0 14px} 33 37 34 38 /* Content / cards */ … … 76 80 .gops-link{color:#5F6EEA;text-decoration:none} /* Accent Product Blue */ 77 81 .gops-link:hover{text-decoration:underline; color: #4A57C6;} 82 button.gops-link{background:none;border:0;padding:0;font:inherit;line-height:1.3;cursor:pointer} 83 84 /* Loading state */ 85 .gops-action-button.is-loading{opacity:.7;pointer-events:none} 86 .gops-spinner{display:inline-block;width:14px;height:14px;border:2px solid currentColor;border-top-color:transparent;border-radius:50%;margin-left:6px;vertical-align:-2px;animation:gops-spin .7s linear infinite} 87 @keyframes gops-spin{to{transform:rotate(360deg)}} 88 89 /* Modal */ 90 .gops-modal{position:fixed;inset:0;display:none;align-items:center;justify-content:center;z-index:100000} 91 .gops-modal.is-open{display:flex} 92 .gops-modal__backdrop{position:absolute;inset:0;background:rgba(26,20,41,.6)} 93 .gops-modal__dialog{position:relative;z-index:1;background:#fff;border-radius:12px;box-shadow:0 20px 60px rgba(0,0,0,.25);width:min(720px,92vw);max-height:80vh;display:flex;flex-direction:column;padding:12px 16px} 94 .gops-modal__header{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px} 95 .gops-modal__title{margin:0;font-size:18px;color:var(--gops-color-text)} 96 .gops-modal__close{background:none;border:0;font-size:26px;line-height:1;cursor:pointer;color:var(--gops-color-muted);transition:color .15s ease} 97 .gops-modal__close:hover{color:var(--gops-color-primary)} 98 .gops-modal__body{overflow:auto;padding:0 4px} 99 .gops-modal__content{margin:0;color:var(--gops-color-text);font-size:13px;line-height:1.4} 100 .gops-modal__content h3, 101 .gops-modal__content h4 { 102 margin: 1em 0 0.3em; 103 font-size: 15px; 104 color: var(--gops-color-primary); 105 font-weight: 600; 106 } 107 .gops-modal__content h3:first-child, 108 .gops-modal__content h4:first-child { 109 margin-top: 0; 110 } 111 .gops-modal__content ul { 112 margin: 0 0 0.8em 0; 113 padding: 0 0 0 1.4em; 114 list-style-type: disc !important; 115 } 116 .gops-modal__content li { 117 margin-bottom: 0.3em; 118 display: list-item !important; 119 } 120 .gops-modal__content p { 121 margin: 0 0 0.6em; 122 } 123 .gops-modal__footer{margin-top:8px;display:flex;justify-content:flex-end;border-top:1px solid var(--gops-color-border);padding-top:10px} 78 124 79 125 /* Brand primary button styling within our admin */ -
mass-email-notifications-for-gravity-forms/tags/1.3.8/vendor/MENFGF/gravityops/core/assets/js/admin.js
r3444395 r3464354 5 5 function qsa(s, c) { 6 6 return Array.prototype.slice.call((c || document).querySelectorAll(s)); 7 } 8 function getAdminConfig() { 9 const root = qs('.gops-admin'); 10 const fallback = {}; 11 if (root) { 12 fallback.nonce = root.getAttribute('data-gops-nonce') || ''; 13 fallback.ajaxUrl = root.getAttribute('data-gops-ajax') || ''; 14 } 15 return Object.assign({}, fallback, window.gopsAdmin || {}); 16 } 17 18 function showNotice(type, message) { 19 const wrap = qs('.gops-admin') || document; 20 const header = qs('.gops-header', wrap) || qs('.gops-header'); 21 const box = ensureNoticesContainer( 22 wrap, 23 header || wrap.firstElementChild 24 ); 25 if (!box) { 26 return; 27 } 28 const notice = document.createElement('div'); 29 notice.className = 'notice notice-' + type + ' is-dismissible'; 30 const p = document.createElement('p'); 31 p.textContent = message; 32 notice.appendChild(p); 33 const btn = document.createElement('button'); 34 btn.type = 'button'; 35 btn.className = 'notice-dismiss'; 36 btn.innerHTML = 37 '<span class="screen-reader-text">Dismiss this notice.</span>'; 38 btn.addEventListener('click', function () { 39 notice.remove(); 40 }); 41 notice.appendChild(btn); 42 box.appendChild(notice); 43 } 44 45 function setButtonLoading(btn, isLoading) { 46 if (!btn) { 47 return; 48 } 49 if (isLoading) { 50 if (!btn.dataset.gopsOriginalText) { 51 btn.dataset.gopsOriginalText = btn.textContent.trim(); 52 } 53 btn.classList.add('is-loading'); 54 btn.disabled = true; 55 if (!qs('.gops-spinner', btn)) { 56 const spinner = document.createElement('span'); 57 spinner.className = 'gops-spinner'; 58 btn.appendChild(spinner); 59 } 60 } else { 61 btn.classList.remove('is-loading'); 62 btn.disabled = false; 63 const spinner = qs('.gops-spinner', btn); 64 if (spinner) { 65 spinner.remove(); 66 } 67 } 68 } 69 70 function ajaxRequest(action, data) { 71 const cfg = getAdminConfig(); 72 const url = cfg.ajaxUrl || window.ajaxurl || ''; 73 const payload = Object.assign( 74 { 75 action, 76 nonce: cfg.nonce || '', 77 }, 78 data || {} 79 ); 80 return jQuery.post(url, payload); 81 } 82 83 function replaceTileHtml(slug, html) { 84 if (!slug || !html) { 85 return; 86 } 87 const tile = qs('.gops-tile[data-gops-tile="' + slug + '"]'); 88 if (tile) { 89 tile.outerHTML = html; 90 } 91 } 92 93 function updateUpdatesCount(count, updatableCount) { 94 const tabs = qs('.gops-tabs'); 95 if (tabs) { 96 let updatesTab = qs('[data-gops-tab="updates"]', tabs); 97 if (count > 0) { 98 if (!updatesTab) { 99 const cfg = getAdminConfig(); 100 const href = cfg.updatesUrl || ''; 101 if (href) { 102 updatesTab = document.createElement('a'); 103 updatesTab.className = 'gops-tab'; 104 updatesTab.setAttribute('data-gops-tab', 'updates'); 105 updatesTab.href = href; 106 updatesTab.textContent = 'Updates'; 107 if ( 108 new URLSearchParams(window.location.search).get( 109 'gops_filter' 110 ) === 'updates' 111 ) { 112 updatesTab.classList.add('is-active'); 113 } 114 const badge = document.createElement('span'); 115 badge.className = 'gops-tab__badge'; 116 badge.setAttribute('data-gops-updates-count', count); 117 badge.textContent = String(count); 118 updatesTab.appendChild(badge); 119 const allTab = qs('[data-gops-tab="all"]', tabs); 120 if (allTab && allTab.nextSibling) { 121 tabs.insertBefore(updatesTab, allTab.nextSibling); 122 } else { 123 tabs.appendChild(updatesTab); 124 } 125 } 126 } else { 127 let badge = qs('.gops-tab__badge', updatesTab); 128 if (!badge) { 129 badge = document.createElement('span'); 130 badge.className = 'gops-tab__badge'; 131 updatesTab.appendChild(badge); 132 } 133 badge.setAttribute('data-gops-updates-count', count); 134 badge.textContent = String(count); 135 } 136 } else if (updatesTab) { 137 updatesTab.remove(); 138 } 139 } 140 141 const actionsWrap = qs('.gops-actions'); 142 if (actionsWrap) { 143 const updateAllBtn = qs('.gops-update-all', actionsWrap); 144 const effectiveUpdatableCount = 145 typeof updatableCount !== 'undefined' ? updatableCount : count; 146 if (effectiveUpdatableCount > 0) { 147 actionsWrap.style.display = ''; 148 if (updateAllBtn) { 149 updateAllBtn.textContent = 150 'Update All (' + effectiveUpdatableCount + ')'; 151 } 152 } else { 153 actionsWrap.style.display = 'none'; 154 } 155 } 156 157 // Update WordPress sidebar menu badge 158 const menuBadge = document.querySelector( 159 '#toplevel_page_gravity_ops .update-plugins' 160 ); 161 if (menuBadge) { 162 if (count > 0) { 163 menuBadge.className = 'update-plugins count-' + count; 164 const inner = menuBadge.querySelector('.plugin-count'); 165 if (inner) { 166 inner.textContent = String(count); 167 } 168 } else { 169 menuBadge.remove(); 170 } 171 } 172 } 173 174 function openChangelogModal(data) { 175 const modal = qs('#gops-changelog-modal'); 176 if (!modal) { 177 return; 178 } 179 const title = qs('.gops-modal__title', modal); 180 const content = qs('.gops-modal__content', modal); 181 const link = qs('.gops-modal__full-link', modal); 182 if (title) { 183 title.textContent = data.title || 'Changelog'; 184 } 185 if (content) { 186 content.innerHTML = data.changelog || 'Changelog not available.'; 187 } 188 if (link) { 189 if (data.full_url) { 190 link.href = data.full_url; 191 link.style.display = ''; 192 } else { 193 link.style.display = 'none'; 194 } 195 } 196 modal.style.display = ''; 197 modal.classList.add('is-open'); 198 modal.setAttribute('aria-hidden', 'false'); 199 } 200 201 function closeChangelogModal() { 202 const modal = qs('#gops-changelog-modal'); 203 if (!modal) { 204 return; 205 } 206 modal.classList.remove('is-open'); 207 modal.style.display = 'none'; 208 modal.setAttribute('aria-hidden', 'true'); 7 209 } 8 210 … … 156 358 if (link && link.href) { 157 359 window.location.href = link.href; 360 } 361 }); 362 363 // Action buttons (update/activate/deactivate/changelog) 364 document.addEventListener('click', function (e) { 365 const btn = e.target.closest('button[data-gops-action]'); 366 if (!btn) { 367 return; 368 } 369 370 const action = btn.getAttribute('data-gops-action') || ''; 371 if (!action) { 372 return; 373 } 374 375 e.preventDefault(); 376 e.stopPropagation(); 377 378 const slug = btn.getAttribute('data-gops-slug') || ''; 379 const pluginFile = btn.getAttribute('data-gops-plugin-file') || ''; 380 381 if (action === 'changelog') { 382 if (!slug) { 383 showNotice('error', 'Missing plugin data.'); 384 return; 385 } 386 setButtonLoading(btn, true); 387 ajaxRequest('gops_get_changelog', { 388 slug, 389 plugin: pluginFile, 390 }) 391 .done(function (resp) { 392 if (resp && resp.success) { 393 openChangelogModal(resp.data || {}); 394 } else { 395 const msg = 396 (resp && resp.data && resp.data.message) || 397 'Unable to load changelog.'; 398 showNotice('error', msg); 399 } 400 }) 401 .fail(function () { 402 showNotice('error', 'Unable to load changelog.'); 403 }) 404 .always(function () { 405 setButtonLoading(btn, false); 406 }); 407 return; 408 } 409 410 if (btn.classList.contains('is-loading')) { 411 return; 412 } 413 414 let request = null; 415 if (action === 'update') { 416 request = ajaxRequest('gops_update_plugin', { 417 slug, 418 plugin: pluginFile, 419 }); 420 } else if (action === 'update-all') { 421 request = ajaxRequest('gops_update_all', {}); 422 } else if (action === 'activate' || action === 'deactivate') { 423 request = ajaxRequest('gops_toggle_plugin', { 424 slug, 425 plugin: pluginFile, 426 toggle: action, 427 }); 428 } 429 430 if (!request) { 431 return; 432 } 433 434 setButtonLoading(btn, true); 435 436 request 437 .done(function (resp) { 438 if (resp && resp.success) { 439 const data = resp.data || {}; 440 if (data.tile_html && data.slug) { 441 replaceTileHtml(data.slug, data.tile_html); 442 } 443 if (data.tiles) { 444 Object.keys(data.tiles).forEach(function (tileSlug) { 445 replaceTileHtml(tileSlug, data.tiles[tileSlug]); 446 }); 447 } 448 if (typeof data.updates_count === 'number') { 449 updateUpdatesCount( 450 data.updates_count, 451 data.updatable_count 452 ); 453 } 454 if (data.message) { 455 showNotice( 456 data.errors && data.errors.length 457 ? 'warning' 458 : 'success', 459 data.message 460 ); 461 } 462 463 // Refresh all updates after a successful action to maintain consistency. 464 if ( 465 action === 'update' || 466 action === 'update-all' || 467 action === 'activate' || 468 action === 'deactivate' 469 ) { 470 triggerBackgroundRefresh(); 471 } 472 if (data.errors && data.errors.length) { 473 data.errors.forEach(function (err) { 474 showNotice('error', err); 475 }); 476 } 477 } else { 478 const msg = 479 (resp && resp.data && resp.data.message) || 480 'Action failed.'; 481 showNotice('error', msg); 482 } 483 }) 484 .fail(function (resp) { 485 let msg = 'Action failed.'; 486 if (resp && resp.responseJSON && resp.responseJSON.data) { 487 msg = resp.responseJSON.data.message || msg; 488 } else if (resp && resp.responseText) { 489 msg = 490 resp.responseText.trim() === '-1' 491 ? 'Security check failed. Refresh and try again.' 492 : resp.responseText; 493 } 494 showNotice('error', msg); 495 }) 496 .always(function () { 497 setButtonLoading(btn, false); 498 }); 499 }); 500 501 // Modal close actions 502 document.addEventListener('click', function (e) { 503 if (e.target.closest('[data-gops-modal-close]')) { 504 e.preventDefault(); 505 closeChangelogModal(); 506 } 507 }); 508 document.addEventListener('keydown', function (e) { 509 if (e.key === 'Escape') { 510 closeChangelogModal(); 158 511 } 159 512 }); … … 306 659 moveNotices(); 307 660 applyFreePluginExternalTabTargets(); 661 triggerBackgroundRefresh(); 308 662 }); 309 663 } else { … … 311 665 moveNotices(); 312 666 applyFreePluginExternalTabTargets(); 667 triggerBackgroundRefresh(); 668 } 669 670 function triggerBackgroundRefresh() { 671 const root = qs('.gops-admin'); 672 if (root && root.dataset.gopsRefresh === '1') { 673 const loader = qs('.gops-header-loader', root); 674 if (loader) { 675 loader.style.display = 'block'; 676 } 677 const tiles = qsa('.gops-tile'); 678 const items = tiles.map(function (tile) { 679 const slug = tile.dataset.gopsTile; 680 const versionEl = qs('.gops-tile__version', tile); 681 const version = versionEl 682 ? versionEl.textContent.replace('v', '').trim() 683 : '0'; 684 return { slug, version }; 685 }); 686 687 ajaxRequest('gops_check_suite_updates', { 688 items: JSON.stringify(items), 689 }) 690 .done(function (resp) { 691 if (resp && resp.success && resp.data) { 692 const data = resp.data; 693 if (data.tiles) { 694 Object.keys(data.tiles).forEach(function (slug) { 695 replaceTileHtml(slug, data.tiles[slug]); 696 }); 697 } 698 if (typeof data.updates_count === 'number') { 699 updateUpdatesCount( 700 data.updates_count, 701 data.updatable_count 702 ); 703 } 704 } 705 }) 706 .always(function () { 707 if (loader) { 708 loader.style.display = 'none'; 709 } 710 }); 711 } 313 712 } 314 713 function applyFreePluginExternalTabTargets() { -
mass-email-notifications-for-gravity-forms/tags/1.3.8/vendor/MENFGF/gravityops/core/composer.json
r3444395 r3464354 11 11 "psr-4": { 12 12 "GravityOps\\Core\\": "src/" 13 }, 14 "files": [ 15 "src/Admin/functions.php" 16 ] 13 } 17 14 } 18 15 } -
mass-email-notifications-for-gravity-forms/tags/1.3.8/vendor/MENFGF/trustedlogin/client/src/Config.php
r3444395 r3464354 179 179 ), 180 180 true 181 ) && ! defined( ' TL_DOING_TESTS' ) ) {181 ) && ! defined( 'MENFGF_TL_DOING_TESTS' ) ) { 182 182 throw new Exception( 'Developer: make sure to change the namespace for the TrustedLogin class. See https://trustedlogin.com/configuration/ for more information.', 501 ); 183 183 } … … 190 190 191 191 if ( isset( $this->settings['vendor']['website'] ) ) { 192 if ( 'https://www.example.com' === $this->settings['vendor']['website'] && ! defined( ' TL_DOING_TESTS' ) ) {192 if ( 'https://www.example.com' === $this->settings['vendor']['website'] && ! defined( 'MENFGF_TL_DOING_TESTS' ) ) { 193 193 $errors[] = new WP_Error( 'missing_configuration', 'You need to configure the "website" URL to point to the URL where the Vendor plugin is installed.' ); 194 194 } -
mass-email-notifications-for-gravity-forms/tags/1.3.8/vendor/MENFGF/trustedlogin/client/src/Utils.php
r3444395 r3464354 196 196 $ip = sanitize_text_field( $ip ); 197 197 198 if ( ! defined( ' TL_DOING_TESTS' ) ) {198 if ( ! defined( 'MENFGF_TL_DOING_TESTS' ) ) { 199 199 $ip = filter_var( $ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_RES_RANGE | FILTER_FLAG_NO_PRIV_RANGE ); 200 200 } -
mass-email-notifications-for-gravity-forms/tags/1.3.8/vendor/MENFGF/trustedlogin/client/tests/bootstrap.php
r3444395 r3464354 11 11 require_once dirname( __DIR__ ) . '/vendor/autoload.php'; 12 12 13 if ( ! defined( ' TL_DOING_TESTS' ) ) {14 define( ' TL_DOING_TESTS', true );13 if ( ! defined( 'MENFGF_TL_DOING_TESTS' ) ) { 14 define( 'MENFGF_TL_DOING_TESTS', true ); 15 15 } 16 16 -
mass-email-notifications-for-gravity-forms/tags/1.3.8/vendor/autoload.php
r3444395 r3464354 20 20 require_once __DIR__ . '/composer/autoload_real.php'; 21 21 22 return ComposerAutoloaderInit 0e8b87e452507fa901dfbb37bbc8b6c5::getLoader();22 return ComposerAutoloaderInit626128d55c6cc7cb1833b26b491c1d8c::getLoader(); -
mass-email-notifications-for-gravity-forms/tags/1.3.8/vendor/composer/autoload_aliases.php
r3444395 r3464354 5 5 namespace { 6 6 7 }8 namespace GravityOps\Core\Admin {9 if(!function_exists('\\GravityOps\\Core\\Admin\\gravityops_shell')){10 function gravityops_shell(...$args) {11 return \MENFGF\GravityOps\Core\Admin\gravityops_shell(...func_get_args());12 }13 }14 7 } 15 8 namespace TrustedLogin { … … 42 35 */ 43 36 private array $autoloadAliases = array ( 44 'GravityOps\\Core\\ Admin\\AdminShell' =>37 'GravityOps\\Core\\SuiteCore\\Admin\\AdminShell' => 45 38 array ( 46 39 'type' => 'class', 47 40 'classname' => 'AdminShell', 48 41 'isabstract' => false, 49 'namespace' => 'GravityOps\\Core\\ Admin',50 'extends' => 'MENFGF\\GravityOps\\Core\\ Admin\\AdminShell',51 'implements' => 52 array ( 53 ), 54 ), 55 'GravityOps\\Core\\ Admin\\ReviewPrompter' =>42 'namespace' => 'GravityOps\\Core\\SuiteCore\\Admin', 43 'extends' => 'MENFGF\\GravityOps\\Core\\SuiteCore\\Admin\\AdminShell', 44 'implements' => 45 array ( 46 ), 47 ), 48 'GravityOps\\Core\\SuiteCore\\Admin\\ReviewPrompter' => 56 49 array ( 57 50 'type' => 'class', 58 51 'classname' => 'ReviewPrompter', 59 52 'isabstract' => false, 60 'namespace' => 'GravityOps\\Core\\Admin', 61 'extends' => 'MENFGF\\GravityOps\\Core\\Admin\\ReviewPrompter', 62 'implements' => 63 array ( 64 ), 65 ), 66 'GravityOps\\Core\\Admin\\SettingsHeader' => 67 array ( 68 'type' => 'class', 69 'classname' => 'SettingsHeader', 70 'isabstract' => false, 71 'namespace' => 'GravityOps\\Core\\Admin', 72 'extends' => 'MENFGF\\GravityOps\\Core\\Admin\\SettingsHeader', 73 'implements' => 74 array ( 75 ), 76 ), 77 'GravityOps\\Core\\Admin\\SuiteMenu' => 53 'namespace' => 'GravityOps\\Core\\SuiteCore\\Admin', 54 'extends' => 'MENFGF\\GravityOps\\Core\\SuiteCore\\Admin\\ReviewPrompter', 55 'implements' => 56 array ( 57 ), 58 ), 59 'GravityOps\\Core\\SuiteCore\\Admin\\SuiteMenu' => 78 60 array ( 79 61 'type' => 'class', 80 62 'classname' => 'SuiteMenu', 81 63 'isabstract' => false, 82 'namespace' => 'GravityOps\\Core\\ Admin',83 'extends' => 'MENFGF\\GravityOps\\Core\\ Admin\\SuiteMenu',84 'implements' => 85 array ( 86 ), 87 ), 88 'GravityOps\\Core\\ Admin\\SurveyPrompter' =>64 'namespace' => 'GravityOps\\Core\\SuiteCore\\Admin', 65 'extends' => 'MENFGF\\GravityOps\\Core\\SuiteCore\\Admin\\SuiteMenu', 66 'implements' => 67 array ( 68 ), 69 ), 70 'GravityOps\\Core\\SuiteCore\\Admin\\SurveyPrompter' => 89 71 array ( 90 72 'type' => 'class', 91 73 'classname' => 'SurveyPrompter', 92 74 'isabstract' => false, 93 'namespace' => 'GravityOps\\Core\\ Admin',94 'extends' => 'MENFGF\\GravityOps\\Core\\ Admin\\SurveyPrompter',95 'implements' => 96 array ( 97 ), 98 ), 99 'GravityOps\\Core\\ Admin\\TrustedLogin' =>75 'namespace' => 'GravityOps\\Core\\SuiteCore\\Admin', 76 'extends' => 'MENFGF\\GravityOps\\Core\\SuiteCore\\Admin\\SurveyPrompter', 77 'implements' => 78 array ( 79 ), 80 ), 81 'GravityOps\\Core\\SuiteCore\\Admin\\TrustedLogin' => 100 82 array ( 101 83 'type' => 'class', 102 84 'classname' => 'TrustedLogin', 103 85 'isabstract' => false, 104 'namespace' => 'GravityOps\\Core\\Admin', 105 'extends' => 'MENFGF\\GravityOps\\Core\\Admin\\TrustedLogin', 106 'implements' => 107 array ( 108 ), 109 ), 110 'GravityOps\\Core\\SuiteRegistry' => 111 array ( 112 'type' => 'class', 113 'classname' => 'SuiteRegistry', 114 'isabstract' => false, 115 'namespace' => 'GravityOps\\Core', 116 'extends' => 'MENFGF\\GravityOps\\Core\\SuiteRegistry', 86 'namespace' => 'GravityOps\\Core\\SuiteCore\\Admin', 87 'extends' => 'MENFGF\\GravityOps\\Core\\SuiteCore\\Admin\\TrustedLogin', 88 'implements' => 89 array ( 90 ), 91 ), 92 'GravityOps\\Core\\SuiteCore\\AdminAssetHelper' => 93 array ( 94 'type' => 'class', 95 'classname' => 'AdminAssetHelper', 96 'isabstract' => false, 97 'namespace' => 'GravityOps\\Core\\SuiteCore', 98 'extends' => 'MENFGF\\GravityOps\\Core\\SuiteCore\\AdminAssetHelper', 99 'implements' => 100 array ( 101 ), 102 ), 103 'GravityOps\\Core\\SuiteCore\\Config' => 104 array ( 105 'type' => 'class', 106 'classname' => 'Config', 107 'isabstract' => false, 108 'namespace' => 'GravityOps\\Core\\SuiteCore', 109 'extends' => 'MENFGF\\GravityOps\\Core\\SuiteCore\\Config', 110 'implements' => 111 array ( 112 ), 113 ), 114 'GravityOps\\Core\\SuiteCore\\SuiteCatalog' => 115 array ( 116 'type' => 'class', 117 'classname' => 'SuiteCatalog', 118 'isabstract' => false, 119 'namespace' => 'GravityOps\\Core\\SuiteCore', 120 'extends' => 'MENFGF\\GravityOps\\Core\\SuiteCore\\SuiteCatalog', 121 'implements' => 122 array ( 123 ), 124 ), 125 'GravityOps\\Core\\SuiteCore\\SuiteCore' => 126 array ( 127 'type' => 'class', 128 'classname' => 'SuiteCore', 129 'isabstract' => false, 130 'namespace' => 'GravityOps\\Core\\SuiteCore', 131 'extends' => 'MENFGF\\GravityOps\\Core\\SuiteCore\\SuiteCore', 117 132 'implements' => 118 133 array ( -
mass-email-notifications-for-gravity-forms/tags/1.3.8/vendor/composer/autoload_real.php
r3444395 r3464354 3 3 // autoload_real.php @generated by Composer 4 4 5 class ComposerAutoloaderInit 0e8b87e452507fa901dfbb37bbc8b6c55 class ComposerAutoloaderInit626128d55c6cc7cb1833b26b491c1d8c 6 6 { 7 7 private static $loader; … … 25 25 require __DIR__ . '/platform_check.php'; 26 26 27 spl_autoload_register(array('ComposerAutoloaderInit 0e8b87e452507fa901dfbb37bbc8b6c5', 'loadClassLoader'), true, true);27 spl_autoload_register(array('ComposerAutoloaderInit626128d55c6cc7cb1833b26b491c1d8c', 'loadClassLoader'), true, true); 28 28 self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__)); 29 spl_autoload_unregister(array('ComposerAutoloaderInit 0e8b87e452507fa901dfbb37bbc8b6c5', 'loadClassLoader'));29 spl_autoload_unregister(array('ComposerAutoloaderInit626128d55c6cc7cb1833b26b491c1d8c', 'loadClassLoader')); 30 30 31 31 require __DIR__ . '/autoload_static.php'; 32 call_user_func(\Composer\Autoload\ComposerStaticInit 0e8b87e452507fa901dfbb37bbc8b6c5::getInitializer($loader));32 call_user_func(\Composer\Autoload\ComposerStaticInit626128d55c6cc7cb1833b26b491c1d8c::getInitializer($loader)); 33 33 34 34 $loader->register(true); 35 35 36 $filesToLoad = \Composer\Autoload\ComposerStaticInit 0e8b87e452507fa901dfbb37bbc8b6c5::$files;36 $filesToLoad = \Composer\Autoload\ComposerStaticInit626128d55c6cc7cb1833b26b491c1d8c::$files; 37 37 $requireFile = \Closure::bind(static function ($fileIdentifier, $file) { 38 38 if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { -
mass-email-notifications-for-gravity-forms/tags/1.3.8/vendor/composer/autoload_static.php
r3444395 r3464354 5 5 namespace Composer\Autoload; 6 6 7 class ComposerStaticInit 0e8b87e452507fa901dfbb37bbc8b6c57 class ComposerStaticInit626128d55c6cc7cb1833b26b491c1d8c 8 8 { 9 9 public static $files = array ( … … 18 18 { 19 19 return \Closure::bind(function () use ($loader) { 20 $loader->classMap = ComposerStaticInit 0e8b87e452507fa901dfbb37bbc8b6c5::$classMap;20 $loader->classMap = ComposerStaticInit626128d55c6cc7cb1833b26b491c1d8c::$classMap; 21 21 22 22 }, null, ClassLoader::class); -
mass-email-notifications-for-gravity-forms/tags/1.3.8/vendor/composer/installed.json
r3444395 r3464354 59 59 { 60 60 "name": "gravityops/core", 61 "version": " 1.1.0",62 "version_normalized": " 1.1.0.0",61 "version": "2.0.1", 62 "version_normalized": "2.0.1.0", 63 63 "source": { 64 64 "type": "git", 65 "url": "git@github.com: Eitan-brightleaf/gravityops.git",66 "reference": " cee27f55738670dc141b58af37d0feb74d4ce47e"65 "url": "git@github.com:BrightLeaf-Digital/gravityops.git", 66 "reference": "2535a2a105334f0bac61b112d8707ba9bc6e18b2" 67 67 }, 68 68 "dist": { 69 69 "type": "zip", 70 "url": "https://api.github.com/repos/ Eitan-brightleaf/gravityops/zipball/cee27f55738670dc141b58af37d0feb74d4ce47e",71 "reference": " cee27f55738670dc141b58af37d0feb74d4ce47e",70 "url": "https://api.github.com/repos/BrightLeaf-Digital/gravityops/zipball/2535a2a105334f0bac61b112d8707ba9bc6e18b2", 71 "reference": "2535a2a105334f0bac61b112d8707ba9bc6e18b2", 72 72 "shasum": "" 73 73 }, … … 76 76 "trustedlogin/client": "^v1.9" 77 77 }, 78 "time": "2026-0 1-21T19:42:14+00:00",78 "time": "2026-02-18T09:47:24+00:00", 79 79 "type": "library", 80 80 "installation-source": "source", -
mass-email-notifications-for-gravity-forms/tags/1.3.8/vendor/composer/installed.php
r3444395 r3464354 4 4 'pretty_version' => 'dev-main', 5 5 'version' => 'dev-main', 6 'reference' => ' 844dcc46ed2d370fadaccebd03c6dae5521ea1ba',6 'reference' => '41c23576439dc96ef24477141cc57019f41fce29', 7 7 'type' => 'library', 8 8 'install_path' => __DIR__ . '/../../', … … 21 21 ), 22 22 'gravityops/core' => array( 23 'pretty_version' => ' 1.1.0',24 'version' => ' 1.1.0.0',25 'reference' => ' cee27f55738670dc141b58af37d0feb74d4ce47e',23 'pretty_version' => '2.0.1', 24 'version' => '2.0.1.0', 25 'reference' => '2535a2a105334f0bac61b112d8707ba9bc6e18b2', 26 26 'type' => 'library', 27 27 'install_path' => __DIR__ . '/../gravityops/core', … … 32 32 'pretty_version' => 'dev-main', 33 33 'version' => 'dev-main', 34 'reference' => ' 844dcc46ed2d370fadaccebd03c6dae5521ea1ba',34 'reference' => '41c23576439dc96ef24477141cc57019f41fce29', 35 35 'type' => 'library', 36 36 'install_path' => __DIR__ . '/../../', -
mass-email-notifications-for-gravity-forms/trunk/class-mass-email-notifications-for-gravity-forms.php
r3444395 r3464354 2 2 3 3 use Gravity_Forms\Gravity_Forms\Settings\Settings; 4 use MENFGF\GravityOps\Core\Admin\ReviewPrompter; 5 use MENFGF\GravityOps\Core\Admin\SuiteMenu; 6 use MENFGF\GravityOps\Core\Admin\SurveyPrompter; 4 use MENFGF\GravityOps\Core\SuiteCore\SuiteCore; 7 5 use MENFGF\GravityOps\Core\Traits\SingletonTrait; 8 6 use MENFGF\GravityOps\Core\Utils\AssetHelper; 9 use MENFGF\GravityOps\Core\Admin\AdminShell;10 use function MENFGF\GravityOps\Core\Admin\gravityops_shell;11 7 if ( !defined( 'ABSPATH' ) ) { 12 8 exit; … … 207 203 parent::init_admin(); 208 204 // Register the new GravityOps AdminShell page under the parent menu. 209 gravityops_shell()->register_plugin_page( $this->_slug, [205 SuiteCore::instance()->shell()->register_plugin_page( $this->_slug, [ 210 206 'title' => $this->_title, 211 207 'menu_title' => $this->_short_title, … … 249 245 add_action( 'admin_post_menfgf_unsuppress', [$this, 'handle_unsuppress'] ); 250 246 $param = 'https://wordpress.org/support/plugin/mass-email-notifications-for-gravity-forms/reviews/#new-post'; 251 $review_prompter = new ReviewPrompter($this->prefix, $this->_title, $param);247 $review_prompter = SuiteCore::instance()->review_prompter( $this->prefix, $this->_title, $param ); 252 248 $review_prompter->init(); 253 249 $review_prompter->maybe_show_review_request( $this->get_number_emails_sent(), 500 ); 254 $survey_prompter = new SurveyPrompter(250 $survey_prompter = SuiteCore::instance()->survey_prompter( 255 251 $this->prefix, 256 252 $this->_title, … … 316 312 ]; 317 313 } 318 $workflow_steps = []; 319 if ( class_exists( AdminShell::class ) ) { 320 $workflow_steps = AdminShell::get_workflow_steps_by_type( 'menfgf_create_batch' ); 321 } 322 AdminShell::render_feeds_list( 314 $workflow_steps = SuiteCore::instance()->shell()->get_workflow_steps_by_type( 'menfgf_create_batch' ); 315 SuiteCore::instance()->shell()->render_feeds_list( 323 316 $feeds_and_forms, 324 317 $this->_slug, … … 404 397 */ 405 398 public function handle_toggle_feed() { 406 AdminShell::process_feed_toggle( 'menfgf_toggle_feed', 'admin.php?page=mass_email_notifications_for_gf&tab=feeds' );399 SuiteCore::instance()->shell()->process_feed_toggle( 'menfgf_toggle_feed', 'admin.php?page=mass_email_notifications_for_gf&tab=feeds' ); 407 400 } 408 401 … … 413 406 */ 414 407 public function handle_toggle_workflow_step() { 415 AdminShell::process_feed_toggle( 'menfgf_toggle_workflow_step', 'admin.php?page=mass_email_notifications_for_gf&tab=feeds' );408 SuiteCore::instance()->shell()->process_feed_toggle( 'menfgf_toggle_workflow_step', 'admin.php?page=mass_email_notifications_for_gf&tab=feeds' ); 416 409 } 417 410 … … 437 430 exit; 438 431 } 439 if ( !current_user_can( Suite Menu::get_parent_capability() ) ) {432 if ( !current_user_can( SuiteCore::instance()->suite_menu()->get_parent_capability() ) ) { 440 433 wp_safe_redirect( admin_url( 'admin.php?page=mass_email_notifications_for_gf&tab=suppressions' ) ); 441 434 exit; … … 450 443 */ 451 444 public function gops_render_help() { 452 AdminShell::render_help_tab( [445 SuiteCore::instance()->shell()->render_help_tab( [ 453 446 'Learn More' => 'https://brightleafdigital.io/mass-email-notifications-for-gravity-forms/', 454 447 'Docs' => 'https://brightleafdigital.io/mass-email-notifications-for-gravity-forms/#docs', … … 475 468 */ 476 469 private function get_freemius_tabs() { 477 $tabs = AdminShell::freemius_tabs( $this->_slug );470 $tabs = SuiteCore::instance()->shell()->freemius_tabs( $this->_slug ); 478 471 if ( !menfgf_fs()->is_registered() ) { 479 472 unset($tabs['account']); … … 565 558 */ 566 559 public function get_menu_icon() { 567 return ( Suite Menu::get_plugin_icon_url( $this->_slug ) ?: $this->get_base_url() . '/includes/images/icon.svg' );560 return ( SuiteCore::instance()->suite_menu()->get_plugin_icon_url( $this->_slug ) ?: $this->get_base_url() . '/includes/images/icon.svg' ); 568 561 } 569 562 … … 577 570 */ 578 571 public function get_app_menu_icon() { 579 return ( Suite Menu::get_plugin_icon_url( $this->_slug ) ?: SuiteMenu::get_icon() );572 return ( SuiteCore::instance()->suite_menu()->get_plugin_icon_url( $this->_slug ) ?: SuiteCore::instance()->suite_menu()->get_icon() ); 580 573 } 581 574 … … 588 581 */ 589 582 public function uninstall() { 583 parent::uninstall(); 590 584 delete_option( self::PREFIX . 'email_count' ); 591 585 delete_option( self::PREFIX . 'rating_asked' ); … … 593 587 delete_option( self::PREFIX . 'table_version' ); 594 588 delete_option( self::PREFIX . 'suppressions_table_version' ); 589 delete_option( self::PREFIX . 'review_prompter_usage_count' ); 590 delete_option( self::PREFIX . 'survey_status' ); 595 591 // Clear transients used for throttling and locking. 596 592 delete_transient( self::PREFIX . 'next_send_ready' ); -
mass-email-notifications-for-gravity-forms/trunk/mass-email-notifications-for-gf.php
r3444395 r3464354 6 6 * Author URI: https://brightleafdigital.io/ 7 7 * Description: Allows you to send notifications to everyone who filled out any of your forms. 8 * Version: 1.3. 78 * Version: 1.3.8 9 9 * Author: BrightLeaf Digital 10 10 * License: GPL-2.0+ … … 13 13 * @package MassEmailNotificationsForGravityForms 14 14 */ 15 use function MENFGF\GravityOps\Core\Admin\gravityops_shell;15 use MENFGF\GravityOps\Core\SuiteCore\SuiteCore; 16 16 if ( !defined( 'ABSPATH' ) ) { 17 17 exit; 18 18 // Exit if accessed directly. 19 19 } 20 define( 'MASS_EMAIL_NOTIFICATIONS_FOR_GRAVITY_FORMS_VERSION', '1.3.8' ); 21 define( 'MASS_EMAIL_NOTIFICATIONS_FOR_GRAVITY_FORMS_BASENAME', plugin_basename( __FILE__ ) ); 20 22 require_once __DIR__ . '/vendor/autoload.php'; 21 23 if ( file_exists( __DIR__ . '/vendor/MENFGF/autoload.php' ) ) { 22 24 require_once __DIR__ . '/vendor/MENFGF/autoload.php'; 23 25 } 24 // Instantiate this plugin's copy of the AdminShell early so provider negotiation can happen on plugins_loaded.26 // Register this plugin with SuiteCore early so the latest provider can be selected. 25 27 add_action( 'plugins_loaded', function () { 26 gravityops_shell(); 28 $assets_base_url = ''; 29 if ( file_exists( __DIR__ . '/vendor/MENFGF/gravityops/core/assets/' ) ) { 30 $assets_base_url = plugins_url( 'vendor/MENFGF/gravityops/core/assets/', __FILE__ ); 31 } else { 32 $assets_base_url = plugins_url( 'vendor/gravityops/core/assets/', __FILE__ ); 33 } 34 SuiteCore::register( [ 35 'assets_base_url' => $assets_base_url, 36 ] ); 27 37 }, 1 ); 28 38 if ( function_exists( 'menfgf_fs' ) ) { … … 74 84 } 75 85 menfgf_fs()->add_filter( 'enable_cpt_advanced_menu_logic', '__return_true' ); 76 define( 'MASS_EMAIL_NOTIFICATIONS_FOR_GRAVITY_FORMS_VERSION', '1.3.7' );77 define( 'MASS_EMAIL_NOTIFICATIONS_FOR_GRAVITY_FORMS_BASENAME', plugin_basename( __FILE__ ) );78 86 add_action( 'admin_notices', function () { 79 87 if ( !class_exists( 'GFForms' ) ) { … … 101 109 } 102 110 }, 5 ); 103 // Ensure GravityOps shared assets resolve when library is vendor-installed in this plugin.104 add_filter( 'gravityops_assets_base_url', function ( $url ) {105 if ( $url ) {106 return $url;107 }108 if ( file_exists( __DIR__ . '/vendor/MENFGF/gravityops/core/assets/' ) ) {109 return plugins_url( 'vendor/MENFGF/gravityops/core/assets/', __FILE__ );110 }111 return plugins_url( 'vendor/gravityops/core/assets/', __FILE__ );112 } );113 111 add_action( 114 112 'gravityflow_loaded', -
mass-email-notifications-for-gravity-forms/trunk/readme.txt
r3444395 r3464354 2 2 Tested up to: 6.9 3 3 Tags: GravityForms, notifications, email, task management, automation 4 Stable tag: 1.3. 74 Stable tag: 1.3.8 5 5 Requires PHP: 8.0 6 6 License: GPLv2 or later … … 44 44 == Changelog == 45 45 46 = 1.3.8 | Feb 18, 2026 = 47 - Fixed uninstall process to properly clear everything 48 - Updated core GravityOps library to improve the update plugin process among other small fixes 49 - Add support to run workflows on double opt-in 50 46 51 = 1.3.7 | Jan 21, 2026 = 47 52 * Bumped version of core GravityOps library to fix some bugs regarding the plugin admin menus and integrate [TrustedLogin](https://www.trustedlogin.com/about/easy-and-safe/) … … 58 63 = 1.3.4 | Dec 15, 2025 = 59 64 * Fixed a bug with the Feed tab in the new admin menu. 60 61 = 1.3.3 | Dec 15, 2025 =62 * We've upgraded the plugin's core components for smoother compatibility and a more reliable experience overall.63 * Improved the way feeds are displayed in the admin area, making it easier to see related forms and manage your email lists with clearer, more consistent layouts.64 * Streamlined the admin interface with new tabs and centralized tools, so navigating settings, suppressions, and feeds feels more intuitive and efficient.65 * Enhanced email sending reliability with smarter scheduling and automatic checks to ensure your campaigns run without interruptions, even if something goes off track.66 * Made unsubscribe handling simpler and more secure, with better options for managing preferences and viewing suppression lists.67 * Added better support for viewing email content previews in the admin panel and strengthened CSV file handling for more accurate imports.68 * Tweaked permissions and review prompts to make the plugin even more user-friendly, plus a few behind-the-scenes updates for better performance. -
mass-email-notifications-for-gravity-forms/trunk/vendor/MENFGF/autoload.php
r3444395 r3464354 20 20 require_once __DIR__ . '/composer/autoload_real.php'; 21 21 22 return ComposerAutoloaderInit 576698bb6db496a6b33a55636c894704::getLoader();22 return ComposerAutoloaderInit704fe92fa45ad4083a7bc7b91cb59fae::getLoader(); -
mass-email-notifications-for-gravity-forms/trunk/vendor/MENFGF/composer/autoload_classmap.php
r3444395 r3464354 8 8 return array( 9 9 'MENFGF\\Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php', 10 'MENFGF\\GravityOps\\Core\\Admin\\AdminShell' => $vendorDir . '/gravityops/core/src/Admin/AdminShell.php', 11 'MENFGF\\GravityOps\\Core\\Admin\\ReviewPrompter' => $vendorDir . '/gravityops/core/src/Admin/ReviewPrompter.php', 12 'MENFGF\\GravityOps\\Core\\Admin\\SettingsHeader' => $vendorDir . '/gravityops/core/src/Admin/SettingsHeader.php', 13 'MENFGF\\GravityOps\\Core\\Admin\\SuiteMenu' => $vendorDir . '/gravityops/core/src/Admin/SuiteMenu.php', 14 'MENFGF\\GravityOps\\Core\\Admin\\SurveyPrompter' => $vendorDir . '/gravityops/core/src/Admin/SurveyPrompter.php', 15 'MENFGF\\GravityOps\\Core\\Admin\\TrustedLogin' => $vendorDir . '/gravityops/core/src/Admin/TrustedLogin.php', 16 'MENFGF\\GravityOps\\Core\\SuiteRegistry' => $vendorDir . '/gravityops/core/src/SuiteRegistry.php', 10 'MENFGF\\GravityOps\\Core\\SuiteCore\\AdminAssetHelper' => $vendorDir . '/gravityops/core/src/SuiteCore/AdminAssetHelper.php', 11 'MENFGF\\GravityOps\\Core\\SuiteCore\\Admin\\AdminShell' => $vendorDir . '/gravityops/core/src/SuiteCore/Admin/AdminShell.php', 12 'MENFGF\\GravityOps\\Core\\SuiteCore\\Admin\\ReviewPrompter' => $vendorDir . '/gravityops/core/src/SuiteCore/Admin/ReviewPrompter.php', 13 'MENFGF\\GravityOps\\Core\\SuiteCore\\Admin\\SuiteMenu' => $vendorDir . '/gravityops/core/src/SuiteCore/Admin/SuiteMenu.php', 14 'MENFGF\\GravityOps\\Core\\SuiteCore\\Admin\\SurveyPrompter' => $vendorDir . '/gravityops/core/src/SuiteCore/Admin/SurveyPrompter.php', 15 'MENFGF\\GravityOps\\Core\\SuiteCore\\Admin\\TrustedLogin' => $vendorDir . '/gravityops/core/src/SuiteCore/Admin/TrustedLogin.php', 16 'MENFGF\\GravityOps\\Core\\SuiteCore\\Config' => $vendorDir . '/gravityops/core/src/SuiteCore/Config.php', 17 'MENFGF\\GravityOps\\Core\\SuiteCore\\SuiteCatalog' => $vendorDir . '/gravityops/core/src/SuiteCore/SuiteCatalog.php', 18 'MENFGF\\GravityOps\\Core\\SuiteCore\\SuiteCore' => $vendorDir . '/gravityops/core/src/SuiteCore/SuiteCore.php', 17 19 'MENFGF\\GravityOps\\Core\\Traits\\SingletonTrait' => $vendorDir . '/gravityops/core/src/Traits/SingletonTrait.php', 18 20 'MENFGF\\GravityOps\\Core\\Utils\\AssetHelper' => $vendorDir . '/gravityops/core/src/Utils/AssetHelper.php', -
mass-email-notifications-for-gravity-forms/trunk/vendor/MENFGF/composer/autoload_real.php
r3444395 r3464354 3 3 // autoload_real.php @generated by Composer 4 4 5 class ComposerAutoloaderInit 576698bb6db496a6b33a55636c8947045 class ComposerAutoloaderInit704fe92fa45ad4083a7bc7b91cb59fae 6 6 { 7 7 private static $loader; … … 25 25 require __DIR__ . '/platform_check.php'; 26 26 27 spl_autoload_register(array('ComposerAutoloaderInit 576698bb6db496a6b33a55636c894704', 'loadClassLoader'), true, true);27 spl_autoload_register(array('ComposerAutoloaderInit704fe92fa45ad4083a7bc7b91cb59fae', 'loadClassLoader'), true, true); 28 28 self::$loader = $loader = new \MENFGF\Composer\Autoload\ClassLoader(\dirname(__DIR__)); 29 spl_autoload_unregister(array('ComposerAutoloaderInit 576698bb6db496a6b33a55636c894704', 'loadClassLoader'));29 spl_autoload_unregister(array('ComposerAutoloaderInit704fe92fa45ad4083a7bc7b91cb59fae', 'loadClassLoader')); 30 30 31 31 require __DIR__ . '/autoload_static.php'; 32 call_user_func(\MENFGF\Composer\Autoload\ComposerStaticInit 576698bb6db496a6b33a55636c894704::getInitializer($loader));32 call_user_func(\MENFGF\Composer\Autoload\ComposerStaticInit704fe92fa45ad4083a7bc7b91cb59fae::getInitializer($loader)); 33 33 34 34 $loader->setClassMapAuthoritative(true); 35 35 $loader->register(true); 36 36 37 $filesToLoad = \MENFGF\Composer\Autoload\ComposerStaticInit576698bb6db496a6b33a55636c894704::$files;38 $requireFile = \Closure::bind(static function ($fileIdentifier, $file) {39 if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {40 $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;41 42 require $file;43 }44 }, null, null);45 foreach ($filesToLoad as $fileIdentifier => $file) {46 $requireFile($fileIdentifier, $file);47 }48 49 37 return $loader; 50 38 } -
mass-email-notifications-for-gravity-forms/trunk/vendor/MENFGF/composer/autoload_static.php
r3444395 r3464354 5 5 namespace MENFGF\Composer\Autoload; 6 6 7 class ComposerStaticInit 576698bb6db496a6b33a55636c8947047 class ComposerStaticInit704fe92fa45ad4083a7bc7b91cb59fae 8 8 { 9 public static $files = array (10 '6450a9b713c361c66ed3f0575f164e85' => __DIR__ . '/..' . '/gravityops/core/src/Admin/functions.php',11 );12 13 9 public static $prefixLengthsPsr4 = array ( 14 10 'M' => … … 32 28 public static $classMap = array ( 33 29 'MENFGF\\Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php', 34 'MENFGF\\GravityOps\\Core\\Admin\\AdminShell' => __DIR__ . '/..' . '/gravityops/core/src/Admin/AdminShell.php', 35 'MENFGF\\GravityOps\\Core\\Admin\\ReviewPrompter' => __DIR__ . '/..' . '/gravityops/core/src/Admin/ReviewPrompter.php', 36 'MENFGF\\GravityOps\\Core\\Admin\\SettingsHeader' => __DIR__ . '/..' . '/gravityops/core/src/Admin/SettingsHeader.php', 37 'MENFGF\\GravityOps\\Core\\Admin\\SuiteMenu' => __DIR__ . '/..' . '/gravityops/core/src/Admin/SuiteMenu.php', 38 'MENFGF\\GravityOps\\Core\\Admin\\SurveyPrompter' => __DIR__ . '/..' . '/gravityops/core/src/Admin/SurveyPrompter.php', 39 'MENFGF\\GravityOps\\Core\\Admin\\TrustedLogin' => __DIR__ . '/..' . '/gravityops/core/src/Admin/TrustedLogin.php', 40 'MENFGF\\GravityOps\\Core\\SuiteRegistry' => __DIR__ . '/..' . '/gravityops/core/src/SuiteRegistry.php', 30 'MENFGF\\GravityOps\\Core\\SuiteCore\\AdminAssetHelper' => __DIR__ . '/..' . '/gravityops/core/src/SuiteCore/AdminAssetHelper.php', 31 'MENFGF\\GravityOps\\Core\\SuiteCore\\Admin\\AdminShell' => __DIR__ . '/..' . '/gravityops/core/src/SuiteCore/Admin/AdminShell.php', 32 'MENFGF\\GravityOps\\Core\\SuiteCore\\Admin\\ReviewPrompter' => __DIR__ . '/..' . '/gravityops/core/src/SuiteCore/Admin/ReviewPrompter.php', 33 'MENFGF\\GravityOps\\Core\\SuiteCore\\Admin\\SuiteMenu' => __DIR__ . '/..' . '/gravityops/core/src/SuiteCore/Admin/SuiteMenu.php', 34 'MENFGF\\GravityOps\\Core\\SuiteCore\\Admin\\SurveyPrompter' => __DIR__ . '/..' . '/gravityops/core/src/SuiteCore/Admin/SurveyPrompter.php', 35 'MENFGF\\GravityOps\\Core\\SuiteCore\\Admin\\TrustedLogin' => __DIR__ . '/..' . '/gravityops/core/src/SuiteCore/Admin/TrustedLogin.php', 36 'MENFGF\\GravityOps\\Core\\SuiteCore\\Config' => __DIR__ . '/..' . '/gravityops/core/src/SuiteCore/Config.php', 37 'MENFGF\\GravityOps\\Core\\SuiteCore\\SuiteCatalog' => __DIR__ . '/..' . '/gravityops/core/src/SuiteCore/SuiteCatalog.php', 38 'MENFGF\\GravityOps\\Core\\SuiteCore\\SuiteCore' => __DIR__ . '/..' . '/gravityops/core/src/SuiteCore/SuiteCore.php', 41 39 'MENFGF\\GravityOps\\Core\\Traits\\SingletonTrait' => __DIR__ . '/..' . '/gravityops/core/src/Traits/SingletonTrait.php', 42 40 'MENFGF\\GravityOps\\Core\\Utils\\AssetHelper' => __DIR__ . '/..' . '/gravityops/core/src/Utils/AssetHelper.php', … … 63 61 { 64 62 return \Closure::bind(function () use ($loader) { 65 $loader->prefixLengthsPsr4 = ComposerStaticInit 576698bb6db496a6b33a55636c894704::$prefixLengthsPsr4;66 $loader->prefixDirsPsr4 = ComposerStaticInit 576698bb6db496a6b33a55636c894704::$prefixDirsPsr4;67 $loader->classMap = ComposerStaticInit 576698bb6db496a6b33a55636c894704::$classMap;63 $loader->prefixLengthsPsr4 = ComposerStaticInit704fe92fa45ad4083a7bc7b91cb59fae::$prefixLengthsPsr4; 64 $loader->prefixDirsPsr4 = ComposerStaticInit704fe92fa45ad4083a7bc7b91cb59fae::$prefixDirsPsr4; 65 $loader->classMap = ComposerStaticInit704fe92fa45ad4083a7bc7b91cb59fae::$classMap; 68 66 69 67 }, null, ClassLoader::class); -
mass-email-notifications-for-gravity-forms/trunk/vendor/MENFGF/composer/installed.json
r3444395 r3464354 3 3 "1": { 4 4 "name": "gravityops/core", 5 "version": " 1.1.0",6 "version_normalized": " 1.1.0.0",5 "version": "2.0.1", 6 "version_normalized": "2.0.1.0", 7 7 "source": { 8 8 "type": "git", 9 "url": "git@github.com: Eitan-brightleaf/gravityops.git",10 "reference": " cee27f55738670dc141b58af37d0feb74d4ce47e"9 "url": "git@github.com:BrightLeaf-Digital/gravityops.git", 10 "reference": "2535a2a105334f0bac61b112d8707ba9bc6e18b2" 11 11 }, 12 12 "dist": { 13 13 "type": "zip", 14 "url": "https://api.github.com/repos/ Eitan-brightleaf/gravityops/zipball/cee27f55738670dc141b58af37d0feb74d4ce47e",15 "reference": " cee27f55738670dc141b58af37d0feb74d4ce47e",14 "url": "https://api.github.com/repos/BrightLeaf-Digital/gravityops/zipball/2535a2a105334f0bac61b112d8707ba9bc6e18b2", 15 "reference": "2535a2a105334f0bac61b112d8707ba9bc6e18b2", 16 16 "shasum": "" 17 17 }, … … 20 20 "trustedlogin/client": "^v1.9" 21 21 }, 22 "time": "2026-0 1-21T19:42:14+00:00",22 "time": "2026-02-18T09:47:24+00:00", 23 23 "type": "library", 24 24 "installation-source": "source", … … 26 26 "psr-4": { 27 27 "MENFGF\\GravityOps\\Core\\": "src/" 28 }, 29 "files": [ 30 "src/Admin/functions.php" 31 ] 28 } 32 29 }, 33 30 "license": [ -
mass-email-notifications-for-gravity-forms/trunk/vendor/MENFGF/composer/installed.php
r3444395 r3464354 5 5 'pretty_version' => 'dev-main', 6 6 'version' => 'dev-main', 7 'reference' => ' 844dcc46ed2d370fadaccebd03c6dae5521ea1ba',7 'reference' => '41c23576439dc96ef24477141cc57019f41fce29', 8 8 'type' => 'library', 9 9 'install_path' => __DIR__ . '/../', … … 17 17 'gravityops/core' => 18 18 array ( 19 'pretty_version' => ' 1.1.0',20 'version' => ' 1.1.0.0',21 'reference' => ' cee27f55738670dc141b58af37d0feb74d4ce47e',19 'pretty_version' => '2.0.1', 20 'version' => '2.0.1.0', 21 'reference' => '2535a2a105334f0bac61b112d8707ba9bc6e18b2', 22 22 'type' => 'library', 23 23 'install_path' => __DIR__ . '/../gravityops/core', -
mass-email-notifications-for-gravity-forms/trunk/vendor/MENFGF/gravityops/core/assets/css/admin.css
r3444395 r3464354 31 31 .gops-tab{padding:6px 14px;border-radius:999px;background:transparent;border:0;text-decoration:none;color:var(--gops-color-muted);font-weight: 500;} 32 32 .gops-tab.is-active{background: var(--gops-color-primary);color:#fff} 33 .gops-tab__badge{display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:18px;padding:0 6px;border-radius:999px;background:#5F6EEA;color:#fff;font-size:11px;font-weight:700;line-height:1;margin-left:6px;border:0} 34 35 /* Toolbar */ 36 .gops-actions{display:flex;justify-content:flex-end;margin:6px 0 14px} 33 37 34 38 /* Content / cards */ … … 76 80 .gops-link{color:#5F6EEA;text-decoration:none} /* Accent Product Blue */ 77 81 .gops-link:hover{text-decoration:underline; color: #4A57C6;} 82 button.gops-link{background:none;border:0;padding:0;font:inherit;line-height:1.3;cursor:pointer} 83 84 /* Loading state */ 85 .gops-action-button.is-loading{opacity:.7;pointer-events:none} 86 .gops-spinner{display:inline-block;width:14px;height:14px;border:2px solid currentColor;border-top-color:transparent;border-radius:50%;margin-left:6px;vertical-align:-2px;animation:gops-spin .7s linear infinite} 87 @keyframes gops-spin{to{transform:rotate(360deg)}} 88 89 /* Modal */ 90 .gops-modal{position:fixed;inset:0;display:none;align-items:center;justify-content:center;z-index:100000} 91 .gops-modal.is-open{display:flex} 92 .gops-modal__backdrop{position:absolute;inset:0;background:rgba(26,20,41,.6)} 93 .gops-modal__dialog{position:relative;z-index:1;background:#fff;border-radius:12px;box-shadow:0 20px 60px rgba(0,0,0,.25);width:min(720px,92vw);max-height:80vh;display:flex;flex-direction:column;padding:12px 16px} 94 .gops-modal__header{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px} 95 .gops-modal__title{margin:0;font-size:18px;color:var(--gops-color-text)} 96 .gops-modal__close{background:none;border:0;font-size:26px;line-height:1;cursor:pointer;color:var(--gops-color-muted);transition:color .15s ease} 97 .gops-modal__close:hover{color:var(--gops-color-primary)} 98 .gops-modal__body{overflow:auto;padding:0 4px} 99 .gops-modal__content{margin:0;color:var(--gops-color-text);font-size:13px;line-height:1.4} 100 .gops-modal__content h3, 101 .gops-modal__content h4 { 102 margin: 1em 0 0.3em; 103 font-size: 15px; 104 color: var(--gops-color-primary); 105 font-weight: 600; 106 } 107 .gops-modal__content h3:first-child, 108 .gops-modal__content h4:first-child { 109 margin-top: 0; 110 } 111 .gops-modal__content ul { 112 margin: 0 0 0.8em 0; 113 padding: 0 0 0 1.4em; 114 list-style-type: disc !important; 115 } 116 .gops-modal__content li { 117 margin-bottom: 0.3em; 118 display: list-item !important; 119 } 120 .gops-modal__content p { 121 margin: 0 0 0.6em; 122 } 123 .gops-modal__footer{margin-top:8px;display:flex;justify-content:flex-end;border-top:1px solid var(--gops-color-border);padding-top:10px} 78 124 79 125 /* Brand primary button styling within our admin */ -
mass-email-notifications-for-gravity-forms/trunk/vendor/MENFGF/gravityops/core/assets/js/admin.js
r3444395 r3464354 5 5 function qsa(s, c) { 6 6 return Array.prototype.slice.call((c || document).querySelectorAll(s)); 7 } 8 function getAdminConfig() { 9 const root = qs('.gops-admin'); 10 const fallback = {}; 11 if (root) { 12 fallback.nonce = root.getAttribute('data-gops-nonce') || ''; 13 fallback.ajaxUrl = root.getAttribute('data-gops-ajax') || ''; 14 } 15 return Object.assign({}, fallback, window.gopsAdmin || {}); 16 } 17 18 function showNotice(type, message) { 19 const wrap = qs('.gops-admin') || document; 20 const header = qs('.gops-header', wrap) || qs('.gops-header'); 21 const box = ensureNoticesContainer( 22 wrap, 23 header || wrap.firstElementChild 24 ); 25 if (!box) { 26 return; 27 } 28 const notice = document.createElement('div'); 29 notice.className = 'notice notice-' + type + ' is-dismissible'; 30 const p = document.createElement('p'); 31 p.textContent = message; 32 notice.appendChild(p); 33 const btn = document.createElement('button'); 34 btn.type = 'button'; 35 btn.className = 'notice-dismiss'; 36 btn.innerHTML = 37 '<span class="screen-reader-text">Dismiss this notice.</span>'; 38 btn.addEventListener('click', function () { 39 notice.remove(); 40 }); 41 notice.appendChild(btn); 42 box.appendChild(notice); 43 } 44 45 function setButtonLoading(btn, isLoading) { 46 if (!btn) { 47 return; 48 } 49 if (isLoading) { 50 if (!btn.dataset.gopsOriginalText) { 51 btn.dataset.gopsOriginalText = btn.textContent.trim(); 52 } 53 btn.classList.add('is-loading'); 54 btn.disabled = true; 55 if (!qs('.gops-spinner', btn)) { 56 const spinner = document.createElement('span'); 57 spinner.className = 'gops-spinner'; 58 btn.appendChild(spinner); 59 } 60 } else { 61 btn.classList.remove('is-loading'); 62 btn.disabled = false; 63 const spinner = qs('.gops-spinner', btn); 64 if (spinner) { 65 spinner.remove(); 66 } 67 } 68 } 69 70 function ajaxRequest(action, data) { 71 const cfg = getAdminConfig(); 72 const url = cfg.ajaxUrl || window.ajaxurl || ''; 73 const payload = Object.assign( 74 { 75 action, 76 nonce: cfg.nonce || '', 77 }, 78 data || {} 79 ); 80 return jQuery.post(url, payload); 81 } 82 83 function replaceTileHtml(slug, html) { 84 if (!slug || !html) { 85 return; 86 } 87 const tile = qs('.gops-tile[data-gops-tile="' + slug + '"]'); 88 if (tile) { 89 tile.outerHTML = html; 90 } 91 } 92 93 function updateUpdatesCount(count, updatableCount) { 94 const tabs = qs('.gops-tabs'); 95 if (tabs) { 96 let updatesTab = qs('[data-gops-tab="updates"]', tabs); 97 if (count > 0) { 98 if (!updatesTab) { 99 const cfg = getAdminConfig(); 100 const href = cfg.updatesUrl || ''; 101 if (href) { 102 updatesTab = document.createElement('a'); 103 updatesTab.className = 'gops-tab'; 104 updatesTab.setAttribute('data-gops-tab', 'updates'); 105 updatesTab.href = href; 106 updatesTab.textContent = 'Updates'; 107 if ( 108 new URLSearchParams(window.location.search).get( 109 'gops_filter' 110 ) === 'updates' 111 ) { 112 updatesTab.classList.add('is-active'); 113 } 114 const badge = document.createElement('span'); 115 badge.className = 'gops-tab__badge'; 116 badge.setAttribute('data-gops-updates-count', count); 117 badge.textContent = String(count); 118 updatesTab.appendChild(badge); 119 const allTab = qs('[data-gops-tab="all"]', tabs); 120 if (allTab && allTab.nextSibling) { 121 tabs.insertBefore(updatesTab, allTab.nextSibling); 122 } else { 123 tabs.appendChild(updatesTab); 124 } 125 } 126 } else { 127 let badge = qs('.gops-tab__badge', updatesTab); 128 if (!badge) { 129 badge = document.createElement('span'); 130 badge.className = 'gops-tab__badge'; 131 updatesTab.appendChild(badge); 132 } 133 badge.setAttribute('data-gops-updates-count', count); 134 badge.textContent = String(count); 135 } 136 } else if (updatesTab) { 137 updatesTab.remove(); 138 } 139 } 140 141 const actionsWrap = qs('.gops-actions'); 142 if (actionsWrap) { 143 const updateAllBtn = qs('.gops-update-all', actionsWrap); 144 const effectiveUpdatableCount = 145 typeof updatableCount !== 'undefined' ? updatableCount : count; 146 if (effectiveUpdatableCount > 0) { 147 actionsWrap.style.display = ''; 148 if (updateAllBtn) { 149 updateAllBtn.textContent = 150 'Update All (' + effectiveUpdatableCount + ')'; 151 } 152 } else { 153 actionsWrap.style.display = 'none'; 154 } 155 } 156 157 // Update WordPress sidebar menu badge 158 const menuBadge = document.querySelector( 159 '#toplevel_page_gravity_ops .update-plugins' 160 ); 161 if (menuBadge) { 162 if (count > 0) { 163 menuBadge.className = 'update-plugins count-' + count; 164 const inner = menuBadge.querySelector('.plugin-count'); 165 if (inner) { 166 inner.textContent = String(count); 167 } 168 } else { 169 menuBadge.remove(); 170 } 171 } 172 } 173 174 function openChangelogModal(data) { 175 const modal = qs('#gops-changelog-modal'); 176 if (!modal) { 177 return; 178 } 179 const title = qs('.gops-modal__title', modal); 180 const content = qs('.gops-modal__content', modal); 181 const link = qs('.gops-modal__full-link', modal); 182 if (title) { 183 title.textContent = data.title || 'Changelog'; 184 } 185 if (content) { 186 content.innerHTML = data.changelog || 'Changelog not available.'; 187 } 188 if (link) { 189 if (data.full_url) { 190 link.href = data.full_url; 191 link.style.display = ''; 192 } else { 193 link.style.display = 'none'; 194 } 195 } 196 modal.style.display = ''; 197 modal.classList.add('is-open'); 198 modal.setAttribute('aria-hidden', 'false'); 199 } 200 201 function closeChangelogModal() { 202 const modal = qs('#gops-changelog-modal'); 203 if (!modal) { 204 return; 205 } 206 modal.classList.remove('is-open'); 207 modal.style.display = 'none'; 208 modal.setAttribute('aria-hidden', 'true'); 7 209 } 8 210 … … 156 358 if (link && link.href) { 157 359 window.location.href = link.href; 360 } 361 }); 362 363 // Action buttons (update/activate/deactivate/changelog) 364 document.addEventListener('click', function (e) { 365 const btn = e.target.closest('button[data-gops-action]'); 366 if (!btn) { 367 return; 368 } 369 370 const action = btn.getAttribute('data-gops-action') || ''; 371 if (!action) { 372 return; 373 } 374 375 e.preventDefault(); 376 e.stopPropagation(); 377 378 const slug = btn.getAttribute('data-gops-slug') || ''; 379 const pluginFile = btn.getAttribute('data-gops-plugin-file') || ''; 380 381 if (action === 'changelog') { 382 if (!slug) { 383 showNotice('error', 'Missing plugin data.'); 384 return; 385 } 386 setButtonLoading(btn, true); 387 ajaxRequest('gops_get_changelog', { 388 slug, 389 plugin: pluginFile, 390 }) 391 .done(function (resp) { 392 if (resp && resp.success) { 393 openChangelogModal(resp.data || {}); 394 } else { 395 const msg = 396 (resp && resp.data && resp.data.message) || 397 'Unable to load changelog.'; 398 showNotice('error', msg); 399 } 400 }) 401 .fail(function () { 402 showNotice('error', 'Unable to load changelog.'); 403 }) 404 .always(function () { 405 setButtonLoading(btn, false); 406 }); 407 return; 408 } 409 410 if (btn.classList.contains('is-loading')) { 411 return; 412 } 413 414 let request = null; 415 if (action === 'update') { 416 request = ajaxRequest('gops_update_plugin', { 417 slug, 418 plugin: pluginFile, 419 }); 420 } else if (action === 'update-all') { 421 request = ajaxRequest('gops_update_all', {}); 422 } else if (action === 'activate' || action === 'deactivate') { 423 request = ajaxRequest('gops_toggle_plugin', { 424 slug, 425 plugin: pluginFile, 426 toggle: action, 427 }); 428 } 429 430 if (!request) { 431 return; 432 } 433 434 setButtonLoading(btn, true); 435 436 request 437 .done(function (resp) { 438 if (resp && resp.success) { 439 const data = resp.data || {}; 440 if (data.tile_html && data.slug) { 441 replaceTileHtml(data.slug, data.tile_html); 442 } 443 if (data.tiles) { 444 Object.keys(data.tiles).forEach(function (tileSlug) { 445 replaceTileHtml(tileSlug, data.tiles[tileSlug]); 446 }); 447 } 448 if (typeof data.updates_count === 'number') { 449 updateUpdatesCount( 450 data.updates_count, 451 data.updatable_count 452 ); 453 } 454 if (data.message) { 455 showNotice( 456 data.errors && data.errors.length 457 ? 'warning' 458 : 'success', 459 data.message 460 ); 461 } 462 463 // Refresh all updates after a successful action to maintain consistency. 464 if ( 465 action === 'update' || 466 action === 'update-all' || 467 action === 'activate' || 468 action === 'deactivate' 469 ) { 470 triggerBackgroundRefresh(); 471 } 472 if (data.errors && data.errors.length) { 473 data.errors.forEach(function (err) { 474 showNotice('error', err); 475 }); 476 } 477 } else { 478 const msg = 479 (resp && resp.data && resp.data.message) || 480 'Action failed.'; 481 showNotice('error', msg); 482 } 483 }) 484 .fail(function (resp) { 485 let msg = 'Action failed.'; 486 if (resp && resp.responseJSON && resp.responseJSON.data) { 487 msg = resp.responseJSON.data.message || msg; 488 } else if (resp && resp.responseText) { 489 msg = 490 resp.responseText.trim() === '-1' 491 ? 'Security check failed. Refresh and try again.' 492 : resp.responseText; 493 } 494 showNotice('error', msg); 495 }) 496 .always(function () { 497 setButtonLoading(btn, false); 498 }); 499 }); 500 501 // Modal close actions 502 document.addEventListener('click', function (e) { 503 if (e.target.closest('[data-gops-modal-close]')) { 504 e.preventDefault(); 505 closeChangelogModal(); 506 } 507 }); 508 document.addEventListener('keydown', function (e) { 509 if (e.key === 'Escape') { 510 closeChangelogModal(); 158 511 } 159 512 }); … … 306 659 moveNotices(); 307 660 applyFreePluginExternalTabTargets(); 661 triggerBackgroundRefresh(); 308 662 }); 309 663 } else { … … 311 665 moveNotices(); 312 666 applyFreePluginExternalTabTargets(); 667 triggerBackgroundRefresh(); 668 } 669 670 function triggerBackgroundRefresh() { 671 const root = qs('.gops-admin'); 672 if (root && root.dataset.gopsRefresh === '1') { 673 const loader = qs('.gops-header-loader', root); 674 if (loader) { 675 loader.style.display = 'block'; 676 } 677 const tiles = qsa('.gops-tile'); 678 const items = tiles.map(function (tile) { 679 const slug = tile.dataset.gopsTile; 680 const versionEl = qs('.gops-tile__version', tile); 681 const version = versionEl 682 ? versionEl.textContent.replace('v', '').trim() 683 : '0'; 684 return { slug, version }; 685 }); 686 687 ajaxRequest('gops_check_suite_updates', { 688 items: JSON.stringify(items), 689 }) 690 .done(function (resp) { 691 if (resp && resp.success && resp.data) { 692 const data = resp.data; 693 if (data.tiles) { 694 Object.keys(data.tiles).forEach(function (slug) { 695 replaceTileHtml(slug, data.tiles[slug]); 696 }); 697 } 698 if (typeof data.updates_count === 'number') { 699 updateUpdatesCount( 700 data.updates_count, 701 data.updatable_count 702 ); 703 } 704 } 705 }) 706 .always(function () { 707 if (loader) { 708 loader.style.display = 'none'; 709 } 710 }); 711 } 313 712 } 314 713 function applyFreePluginExternalTabTargets() { -
mass-email-notifications-for-gravity-forms/trunk/vendor/MENFGF/gravityops/core/composer.json
r3444395 r3464354 11 11 "psr-4": { 12 12 "GravityOps\\Core\\": "src/" 13 }, 14 "files": [ 15 "src/Admin/functions.php" 16 ] 13 } 17 14 } 18 15 } -
mass-email-notifications-for-gravity-forms/trunk/vendor/MENFGF/trustedlogin/client/src/Config.php
r3444395 r3464354 179 179 ), 180 180 true 181 ) && ! defined( ' TL_DOING_TESTS' ) ) {181 ) && ! defined( 'MENFGF_TL_DOING_TESTS' ) ) { 182 182 throw new Exception( 'Developer: make sure to change the namespace for the TrustedLogin class. See https://trustedlogin.com/configuration/ for more information.', 501 ); 183 183 } … … 190 190 191 191 if ( isset( $this->settings['vendor']['website'] ) ) { 192 if ( 'https://www.example.com' === $this->settings['vendor']['website'] && ! defined( ' TL_DOING_TESTS' ) ) {192 if ( 'https://www.example.com' === $this->settings['vendor']['website'] && ! defined( 'MENFGF_TL_DOING_TESTS' ) ) { 193 193 $errors[] = new WP_Error( 'missing_configuration', 'You need to configure the "website" URL to point to the URL where the Vendor plugin is installed.' ); 194 194 } -
mass-email-notifications-for-gravity-forms/trunk/vendor/MENFGF/trustedlogin/client/src/Utils.php
r3444395 r3464354 196 196 $ip = sanitize_text_field( $ip ); 197 197 198 if ( ! defined( ' TL_DOING_TESTS' ) ) {198 if ( ! defined( 'MENFGF_TL_DOING_TESTS' ) ) { 199 199 $ip = filter_var( $ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_RES_RANGE | FILTER_FLAG_NO_PRIV_RANGE ); 200 200 } -
mass-email-notifications-for-gravity-forms/trunk/vendor/MENFGF/trustedlogin/client/tests/bootstrap.php
r3444395 r3464354 11 11 require_once dirname( __DIR__ ) . '/vendor/autoload.php'; 12 12 13 if ( ! defined( ' TL_DOING_TESTS' ) ) {14 define( ' TL_DOING_TESTS', true );13 if ( ! defined( 'MENFGF_TL_DOING_TESTS' ) ) { 14 define( 'MENFGF_TL_DOING_TESTS', true ); 15 15 } 16 16 -
mass-email-notifications-for-gravity-forms/trunk/vendor/autoload.php
r3444395 r3464354 20 20 require_once __DIR__ . '/composer/autoload_real.php'; 21 21 22 return ComposerAutoloaderInit 0e8b87e452507fa901dfbb37bbc8b6c5::getLoader();22 return ComposerAutoloaderInit626128d55c6cc7cb1833b26b491c1d8c::getLoader(); -
mass-email-notifications-for-gravity-forms/trunk/vendor/composer/autoload_aliases.php
r3444395 r3464354 5 5 namespace { 6 6 7 }8 namespace GravityOps\Core\Admin {9 if(!function_exists('\\GravityOps\\Core\\Admin\\gravityops_shell')){10 function gravityops_shell(...$args) {11 return \MENFGF\GravityOps\Core\Admin\gravityops_shell(...func_get_args());12 }13 }14 7 } 15 8 namespace TrustedLogin { … … 42 35 */ 43 36 private array $autoloadAliases = array ( 44 'GravityOps\\Core\\ Admin\\AdminShell' =>37 'GravityOps\\Core\\SuiteCore\\Admin\\AdminShell' => 45 38 array ( 46 39 'type' => 'class', 47 40 'classname' => 'AdminShell', 48 41 'isabstract' => false, 49 'namespace' => 'GravityOps\\Core\\ Admin',50 'extends' => 'MENFGF\\GravityOps\\Core\\ Admin\\AdminShell',51 'implements' => 52 array ( 53 ), 54 ), 55 'GravityOps\\Core\\ Admin\\ReviewPrompter' =>42 'namespace' => 'GravityOps\\Core\\SuiteCore\\Admin', 43 'extends' => 'MENFGF\\GravityOps\\Core\\SuiteCore\\Admin\\AdminShell', 44 'implements' => 45 array ( 46 ), 47 ), 48 'GravityOps\\Core\\SuiteCore\\Admin\\ReviewPrompter' => 56 49 array ( 57 50 'type' => 'class', 58 51 'classname' => 'ReviewPrompter', 59 52 'isabstract' => false, 60 'namespace' => 'GravityOps\\Core\\Admin', 61 'extends' => 'MENFGF\\GravityOps\\Core\\Admin\\ReviewPrompter', 62 'implements' => 63 array ( 64 ), 65 ), 66 'GravityOps\\Core\\Admin\\SettingsHeader' => 67 array ( 68 'type' => 'class', 69 'classname' => 'SettingsHeader', 70 'isabstract' => false, 71 'namespace' => 'GravityOps\\Core\\Admin', 72 'extends' => 'MENFGF\\GravityOps\\Core\\Admin\\SettingsHeader', 73 'implements' => 74 array ( 75 ), 76 ), 77 'GravityOps\\Core\\Admin\\SuiteMenu' => 53 'namespace' => 'GravityOps\\Core\\SuiteCore\\Admin', 54 'extends' => 'MENFGF\\GravityOps\\Core\\SuiteCore\\Admin\\ReviewPrompter', 55 'implements' => 56 array ( 57 ), 58 ), 59 'GravityOps\\Core\\SuiteCore\\Admin\\SuiteMenu' => 78 60 array ( 79 61 'type' => 'class', 80 62 'classname' => 'SuiteMenu', 81 63 'isabstract' => false, 82 'namespace' => 'GravityOps\\Core\\ Admin',83 'extends' => 'MENFGF\\GravityOps\\Core\\ Admin\\SuiteMenu',84 'implements' => 85 array ( 86 ), 87 ), 88 'GravityOps\\Core\\ Admin\\SurveyPrompter' =>64 'namespace' => 'GravityOps\\Core\\SuiteCore\\Admin', 65 'extends' => 'MENFGF\\GravityOps\\Core\\SuiteCore\\Admin\\SuiteMenu', 66 'implements' => 67 array ( 68 ), 69 ), 70 'GravityOps\\Core\\SuiteCore\\Admin\\SurveyPrompter' => 89 71 array ( 90 72 'type' => 'class', 91 73 'classname' => 'SurveyPrompter', 92 74 'isabstract' => false, 93 'namespace' => 'GravityOps\\Core\\ Admin',94 'extends' => 'MENFGF\\GravityOps\\Core\\ Admin\\SurveyPrompter',95 'implements' => 96 array ( 97 ), 98 ), 99 'GravityOps\\Core\\ Admin\\TrustedLogin' =>75 'namespace' => 'GravityOps\\Core\\SuiteCore\\Admin', 76 'extends' => 'MENFGF\\GravityOps\\Core\\SuiteCore\\Admin\\SurveyPrompter', 77 'implements' => 78 array ( 79 ), 80 ), 81 'GravityOps\\Core\\SuiteCore\\Admin\\TrustedLogin' => 100 82 array ( 101 83 'type' => 'class', 102 84 'classname' => 'TrustedLogin', 103 85 'isabstract' => false, 104 'namespace' => 'GravityOps\\Core\\Admin', 105 'extends' => 'MENFGF\\GravityOps\\Core\\Admin\\TrustedLogin', 106 'implements' => 107 array ( 108 ), 109 ), 110 'GravityOps\\Core\\SuiteRegistry' => 111 array ( 112 'type' => 'class', 113 'classname' => 'SuiteRegistry', 114 'isabstract' => false, 115 'namespace' => 'GravityOps\\Core', 116 'extends' => 'MENFGF\\GravityOps\\Core\\SuiteRegistry', 86 'namespace' => 'GravityOps\\Core\\SuiteCore\\Admin', 87 'extends' => 'MENFGF\\GravityOps\\Core\\SuiteCore\\Admin\\TrustedLogin', 88 'implements' => 89 array ( 90 ), 91 ), 92 'GravityOps\\Core\\SuiteCore\\AdminAssetHelper' => 93 array ( 94 'type' => 'class', 95 'classname' => 'AdminAssetHelper', 96 'isabstract' => false, 97 'namespace' => 'GravityOps\\Core\\SuiteCore', 98 'extends' => 'MENFGF\\GravityOps\\Core\\SuiteCore\\AdminAssetHelper', 99 'implements' => 100 array ( 101 ), 102 ), 103 'GravityOps\\Core\\SuiteCore\\Config' => 104 array ( 105 'type' => 'class', 106 'classname' => 'Config', 107 'isabstract' => false, 108 'namespace' => 'GravityOps\\Core\\SuiteCore', 109 'extends' => 'MENFGF\\GravityOps\\Core\\SuiteCore\\Config', 110 'implements' => 111 array ( 112 ), 113 ), 114 'GravityOps\\Core\\SuiteCore\\SuiteCatalog' => 115 array ( 116 'type' => 'class', 117 'classname' => 'SuiteCatalog', 118 'isabstract' => false, 119 'namespace' => 'GravityOps\\Core\\SuiteCore', 120 'extends' => 'MENFGF\\GravityOps\\Core\\SuiteCore\\SuiteCatalog', 121 'implements' => 122 array ( 123 ), 124 ), 125 'GravityOps\\Core\\SuiteCore\\SuiteCore' => 126 array ( 127 'type' => 'class', 128 'classname' => 'SuiteCore', 129 'isabstract' => false, 130 'namespace' => 'GravityOps\\Core\\SuiteCore', 131 'extends' => 'MENFGF\\GravityOps\\Core\\SuiteCore\\SuiteCore', 117 132 'implements' => 118 133 array ( -
mass-email-notifications-for-gravity-forms/trunk/vendor/composer/autoload_real.php
r3444395 r3464354 3 3 // autoload_real.php @generated by Composer 4 4 5 class ComposerAutoloaderInit 0e8b87e452507fa901dfbb37bbc8b6c55 class ComposerAutoloaderInit626128d55c6cc7cb1833b26b491c1d8c 6 6 { 7 7 private static $loader; … … 25 25 require __DIR__ . '/platform_check.php'; 26 26 27 spl_autoload_register(array('ComposerAutoloaderInit 0e8b87e452507fa901dfbb37bbc8b6c5', 'loadClassLoader'), true, true);27 spl_autoload_register(array('ComposerAutoloaderInit626128d55c6cc7cb1833b26b491c1d8c', 'loadClassLoader'), true, true); 28 28 self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__)); 29 spl_autoload_unregister(array('ComposerAutoloaderInit 0e8b87e452507fa901dfbb37bbc8b6c5', 'loadClassLoader'));29 spl_autoload_unregister(array('ComposerAutoloaderInit626128d55c6cc7cb1833b26b491c1d8c', 'loadClassLoader')); 30 30 31 31 require __DIR__ . '/autoload_static.php'; 32 call_user_func(\Composer\Autoload\ComposerStaticInit 0e8b87e452507fa901dfbb37bbc8b6c5::getInitializer($loader));32 call_user_func(\Composer\Autoload\ComposerStaticInit626128d55c6cc7cb1833b26b491c1d8c::getInitializer($loader)); 33 33 34 34 $loader->register(true); 35 35 36 $filesToLoad = \Composer\Autoload\ComposerStaticInit 0e8b87e452507fa901dfbb37bbc8b6c5::$files;36 $filesToLoad = \Composer\Autoload\ComposerStaticInit626128d55c6cc7cb1833b26b491c1d8c::$files; 37 37 $requireFile = \Closure::bind(static function ($fileIdentifier, $file) { 38 38 if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { -
mass-email-notifications-for-gravity-forms/trunk/vendor/composer/autoload_static.php
r3444395 r3464354 5 5 namespace Composer\Autoload; 6 6 7 class ComposerStaticInit 0e8b87e452507fa901dfbb37bbc8b6c57 class ComposerStaticInit626128d55c6cc7cb1833b26b491c1d8c 8 8 { 9 9 public static $files = array ( … … 18 18 { 19 19 return \Closure::bind(function () use ($loader) { 20 $loader->classMap = ComposerStaticInit 0e8b87e452507fa901dfbb37bbc8b6c5::$classMap;20 $loader->classMap = ComposerStaticInit626128d55c6cc7cb1833b26b491c1d8c::$classMap; 21 21 22 22 }, null, ClassLoader::class); -
mass-email-notifications-for-gravity-forms/trunk/vendor/composer/installed.json
r3444395 r3464354 59 59 { 60 60 "name": "gravityops/core", 61 "version": " 1.1.0",62 "version_normalized": " 1.1.0.0",61 "version": "2.0.1", 62 "version_normalized": "2.0.1.0", 63 63 "source": { 64 64 "type": "git", 65 "url": "git@github.com: Eitan-brightleaf/gravityops.git",66 "reference": " cee27f55738670dc141b58af37d0feb74d4ce47e"65 "url": "git@github.com:BrightLeaf-Digital/gravityops.git", 66 "reference": "2535a2a105334f0bac61b112d8707ba9bc6e18b2" 67 67 }, 68 68 "dist": { 69 69 "type": "zip", 70 "url": "https://api.github.com/repos/ Eitan-brightleaf/gravityops/zipball/cee27f55738670dc141b58af37d0feb74d4ce47e",71 "reference": " cee27f55738670dc141b58af37d0feb74d4ce47e",70 "url": "https://api.github.com/repos/BrightLeaf-Digital/gravityops/zipball/2535a2a105334f0bac61b112d8707ba9bc6e18b2", 71 "reference": "2535a2a105334f0bac61b112d8707ba9bc6e18b2", 72 72 "shasum": "" 73 73 }, … … 76 76 "trustedlogin/client": "^v1.9" 77 77 }, 78 "time": "2026-0 1-21T19:42:14+00:00",78 "time": "2026-02-18T09:47:24+00:00", 79 79 "type": "library", 80 80 "installation-source": "source", -
mass-email-notifications-for-gravity-forms/trunk/vendor/composer/installed.php
r3444395 r3464354 4 4 'pretty_version' => 'dev-main', 5 5 'version' => 'dev-main', 6 'reference' => ' 844dcc46ed2d370fadaccebd03c6dae5521ea1ba',6 'reference' => '41c23576439dc96ef24477141cc57019f41fce29', 7 7 'type' => 'library', 8 8 'install_path' => __DIR__ . '/../../', … … 21 21 ), 22 22 'gravityops/core' => array( 23 'pretty_version' => ' 1.1.0',24 'version' => ' 1.1.0.0',25 'reference' => ' cee27f55738670dc141b58af37d0feb74d4ce47e',23 'pretty_version' => '2.0.1', 24 'version' => '2.0.1.0', 25 'reference' => '2535a2a105334f0bac61b112d8707ba9bc6e18b2', 26 26 'type' => 'library', 27 27 'install_path' => __DIR__ . '/../gravityops/core', … … 32 32 'pretty_version' => 'dev-main', 33 33 'version' => 'dev-main', 34 'reference' => ' 844dcc46ed2d370fadaccebd03c6dae5521ea1ba',34 'reference' => '41c23576439dc96ef24477141cc57019f41fce29', 35 35 'type' => 'library', 36 36 'install_path' => __DIR__ . '/../../',
Note: See TracChangeset
for help on using the changeset viewer.