Changeset 3306218
- Timestamp:
- 06/04/2025 08:12:28 AM (10 months ago)
- Location:
- notifier
- Files:
-
- 236 added
- 7 edited
-
tags/2.7.7 (added)
-
tags/2.7.7/README.txt (added)
-
tags/2.7.7/assets (added)
-
tags/2.7.7/assets/css (added)
-
tags/2.7.7/assets/css/admin.css (added)
-
tags/2.7.7/assets/css/frontend.css (added)
-
tags/2.7.7/assets/images (added)
-
tags/2.7.7/assets/images/favicon.svg (added)
-
tags/2.7.7/assets/images/logo.svg (added)
-
tags/2.7.7/assets/images/menu-icon.svg (added)
-
tags/2.7.7/assets/images/notifier-plugin-overview.svg (added)
-
tags/2.7.7/assets/js (added)
-
tags/2.7.7/assets/js/admin.js (added)
-
tags/2.7.7/assets/js/jquery-ui-timepicker-addon.min.js (added)
-
tags/2.7.7/assets/js/script.js (added)
-
tags/2.7.7/assets/js/select2.min.js (added)
-
tags/2.7.7/assets/mix-manifest.json (added)
-
tags/2.7.7/includes (added)
-
tags/2.7.7/includes/class-notifier.php (added)
-
tags/2.7.7/includes/classes (added)
-
tags/2.7.7/includes/classes/class-notifier-admin-notices.php (added)
-
tags/2.7.7/includes/classes/class-notifier-dashboard.php (added)
-
tags/2.7.7/includes/classes/class-notifier-frontend.php (added)
-
tags/2.7.7/includes/classes/class-notifier-notification-merge-tags.php (added)
-
tags/2.7.7/includes/classes/class-notifier-notification-triggers.php (added)
-
tags/2.7.7/includes/classes/class-notifier-settings.php (added)
-
tags/2.7.7/includes/classes/class-notifier-tools.php (added)
-
tags/2.7.7/includes/classes/integrations (added)
-
tags/2.7.7/includes/classes/integrations/class-notifier-cf7.php (added)
-
tags/2.7.7/includes/classes/integrations/class-notifier-fluentforms.php (added)
-
tags/2.7.7/includes/classes/integrations/class-notifier-formidable.php (added)
-
tags/2.7.7/includes/classes/integrations/class-notifier-gravityforms.php (added)
-
tags/2.7.7/includes/classes/integrations/class-notifier-ninjaforms.php (added)
-
tags/2.7.7/includes/classes/integrations/class-notifier-wcar.php (added)
-
tags/2.7.7/includes/classes/integrations/class-notifier-woocommerce.php (added)
-
tags/2.7.7/includes/classes/integrations/class-notifier-wpforms.php (added)
-
tags/2.7.7/includes/functions (added)
-
tags/2.7.7/includes/functions/functions-notifier-helpers.php (added)
-
tags/2.7.7/includes/functions/functions-notifier-meta-box-fields.php (added)
-
tags/2.7.7/includes/index.php (added)
-
tags/2.7.7/index.php (added)
-
tags/2.7.7/libraries (added)
-
tags/2.7.7/libraries/action-scheduler (added)
-
tags/2.7.7/libraries/action-scheduler/Gruntfile.js (added)
-
tags/2.7.7/libraries/action-scheduler/README.md (added)
-
tags/2.7.7/libraries/action-scheduler/action-scheduler.php (added)
-
tags/2.7.7/libraries/action-scheduler/changelog.txt (added)
-
tags/2.7.7/libraries/action-scheduler/classes (added)
-
tags/2.7.7/libraries/action-scheduler/classes/ActionScheduler_ActionClaim.php (added)
-
tags/2.7.7/libraries/action-scheduler/classes/ActionScheduler_ActionFactory.php (added)
-
tags/2.7.7/libraries/action-scheduler/classes/ActionScheduler_AdminView.php (added)
-
tags/2.7.7/libraries/action-scheduler/classes/ActionScheduler_AsyncRequest_QueueRunner.php (added)
-
tags/2.7.7/libraries/action-scheduler/classes/ActionScheduler_Compatibility.php (added)
-
tags/2.7.7/libraries/action-scheduler/classes/ActionScheduler_DataController.php (added)
-
tags/2.7.7/libraries/action-scheduler/classes/ActionScheduler_DateTime.php (added)
-
tags/2.7.7/libraries/action-scheduler/classes/ActionScheduler_Exception.php (added)
-
tags/2.7.7/libraries/action-scheduler/classes/ActionScheduler_FatalErrorMonitor.php (added)
-
tags/2.7.7/libraries/action-scheduler/classes/ActionScheduler_InvalidActionException.php (added)
-
tags/2.7.7/libraries/action-scheduler/classes/ActionScheduler_ListTable.php (added)
-
tags/2.7.7/libraries/action-scheduler/classes/ActionScheduler_LogEntry.php (added)
-
tags/2.7.7/libraries/action-scheduler/classes/ActionScheduler_NullLogEntry.php (added)
-
tags/2.7.7/libraries/action-scheduler/classes/ActionScheduler_OptionLock.php (added)
-
tags/2.7.7/libraries/action-scheduler/classes/ActionScheduler_QueueCleaner.php (added)
-
tags/2.7.7/libraries/action-scheduler/classes/ActionScheduler_QueueRunner.php (added)
-
tags/2.7.7/libraries/action-scheduler/classes/ActionScheduler_Versions.php (added)
-
tags/2.7.7/libraries/action-scheduler/classes/ActionScheduler_WPCommentCleaner.php (added)
-
tags/2.7.7/libraries/action-scheduler/classes/ActionScheduler_wcSystemStatus.php (added)
-
tags/2.7.7/libraries/action-scheduler/classes/WP_CLI (added)
-
tags/2.7.7/libraries/action-scheduler/classes/WP_CLI/ActionScheduler_WPCLI_Clean_Command.php (added)
-
tags/2.7.7/libraries/action-scheduler/classes/WP_CLI/ActionScheduler_WPCLI_QueueRunner.php (added)
-
tags/2.7.7/libraries/action-scheduler/classes/WP_CLI/ActionScheduler_WPCLI_Scheduler_command.php (added)
-
tags/2.7.7/libraries/action-scheduler/classes/WP_CLI/Migration_Command.php (added)
-
tags/2.7.7/libraries/action-scheduler/classes/WP_CLI/ProgressBar.php (added)
-
tags/2.7.7/libraries/action-scheduler/classes/abstracts (added)
-
tags/2.7.7/libraries/action-scheduler/classes/abstracts/ActionScheduler.php (added)
-
tags/2.7.7/libraries/action-scheduler/classes/abstracts/ActionScheduler_Abstract_ListTable.php (added)
-
tags/2.7.7/libraries/action-scheduler/classes/abstracts/ActionScheduler_Abstract_QueueRunner.php (added)
-
tags/2.7.7/libraries/action-scheduler/classes/abstracts/ActionScheduler_Abstract_RecurringSchedule.php (added)
-
tags/2.7.7/libraries/action-scheduler/classes/abstracts/ActionScheduler_Abstract_Schedule.php (added)
-
tags/2.7.7/libraries/action-scheduler/classes/abstracts/ActionScheduler_Abstract_Schema.php (added)
-
tags/2.7.7/libraries/action-scheduler/classes/abstracts/ActionScheduler_Lock.php (added)
-
tags/2.7.7/libraries/action-scheduler/classes/abstracts/ActionScheduler_Logger.php (added)
-
tags/2.7.7/libraries/action-scheduler/classes/abstracts/ActionScheduler_Store.php (added)
-
tags/2.7.7/libraries/action-scheduler/classes/abstracts/ActionScheduler_TimezoneHelper.php (added)
-
tags/2.7.7/libraries/action-scheduler/classes/actions (added)
-
tags/2.7.7/libraries/action-scheduler/classes/actions/ActionScheduler_Action.php (added)
-
tags/2.7.7/libraries/action-scheduler/classes/actions/ActionScheduler_CanceledAction.php (added)
-
tags/2.7.7/libraries/action-scheduler/classes/actions/ActionScheduler_FinishedAction.php (added)
-
tags/2.7.7/libraries/action-scheduler/classes/actions/ActionScheduler_NullAction.php (added)
-
tags/2.7.7/libraries/action-scheduler/classes/data-stores (added)
-
tags/2.7.7/libraries/action-scheduler/classes/data-stores/ActionScheduler_DBLogger.php (added)
-
tags/2.7.7/libraries/action-scheduler/classes/data-stores/ActionScheduler_DBStore.php (added)
-
tags/2.7.7/libraries/action-scheduler/classes/data-stores/ActionScheduler_HybridStore.php (added)
-
tags/2.7.7/libraries/action-scheduler/classes/data-stores/ActionScheduler_wpCommentLogger.php (added)
-
tags/2.7.7/libraries/action-scheduler/classes/data-stores/ActionScheduler_wpPostStore.php (added)
-
tags/2.7.7/libraries/action-scheduler/classes/data-stores/ActionScheduler_wpPostStore_PostStatusRegistrar.php (added)
-
tags/2.7.7/libraries/action-scheduler/classes/data-stores/ActionScheduler_wpPostStore_PostTypeRegistrar.php (added)
-
tags/2.7.7/libraries/action-scheduler/classes/data-stores/ActionScheduler_wpPostStore_TaxonomyRegistrar.php (added)
-
tags/2.7.7/libraries/action-scheduler/classes/migration (added)
-
tags/2.7.7/libraries/action-scheduler/classes/migration/ActionMigrator.php (added)
-
tags/2.7.7/libraries/action-scheduler/classes/migration/ActionScheduler_DBStoreMigrator.php (added)
-
tags/2.7.7/libraries/action-scheduler/classes/migration/BatchFetcher.php (added)
-
tags/2.7.7/libraries/action-scheduler/classes/migration/Config.php (added)
-
tags/2.7.7/libraries/action-scheduler/classes/migration/Controller.php (added)
-
tags/2.7.7/libraries/action-scheduler/classes/migration/DryRun_ActionMigrator.php (added)
-
tags/2.7.7/libraries/action-scheduler/classes/migration/DryRun_LogMigrator.php (added)
-
tags/2.7.7/libraries/action-scheduler/classes/migration/LogMigrator.php (added)
-
tags/2.7.7/libraries/action-scheduler/classes/migration/Runner.php (added)
-
tags/2.7.7/libraries/action-scheduler/classes/migration/Scheduler.php (added)
-
tags/2.7.7/libraries/action-scheduler/classes/schedules (added)
-
tags/2.7.7/libraries/action-scheduler/classes/schedules/ActionScheduler_CanceledSchedule.php (added)
-
tags/2.7.7/libraries/action-scheduler/classes/schedules/ActionScheduler_CronSchedule.php (added)
-
tags/2.7.7/libraries/action-scheduler/classes/schedules/ActionScheduler_IntervalSchedule.php (added)
-
tags/2.7.7/libraries/action-scheduler/classes/schedules/ActionScheduler_NullSchedule.php (added)
-
tags/2.7.7/libraries/action-scheduler/classes/schedules/ActionScheduler_Schedule.php (added)
-
tags/2.7.7/libraries/action-scheduler/classes/schedules/ActionScheduler_SimpleSchedule.php (added)
-
tags/2.7.7/libraries/action-scheduler/classes/schema (added)
-
tags/2.7.7/libraries/action-scheduler/classes/schema/ActionScheduler_LoggerSchema.php (added)
-
tags/2.7.7/libraries/action-scheduler/classes/schema/ActionScheduler_StoreSchema.php (added)
-
tags/2.7.7/libraries/action-scheduler/codecov.yml (added)
-
tags/2.7.7/libraries/action-scheduler/deprecated (added)
-
tags/2.7.7/libraries/action-scheduler/deprecated/ActionScheduler_Abstract_QueueRunner_Deprecated.php (added)
-
tags/2.7.7/libraries/action-scheduler/deprecated/ActionScheduler_AdminView_Deprecated.php (added)
-
tags/2.7.7/libraries/action-scheduler/deprecated/ActionScheduler_Schedule_Deprecated.php (added)
-
tags/2.7.7/libraries/action-scheduler/deprecated/ActionScheduler_Store_Deprecated.php (added)
-
tags/2.7.7/libraries/action-scheduler/deprecated/functions.php (added)
-
tags/2.7.7/libraries/action-scheduler/docs (added)
-
tags/2.7.7/libraries/action-scheduler/docs/CNAME (added)
-
tags/2.7.7/libraries/action-scheduler/docs/_config.yml (added)
-
tags/2.7.7/libraries/action-scheduler/docs/_layouts (added)
-
tags/2.7.7/libraries/action-scheduler/docs/_layouts/default.html (added)
-
tags/2.7.7/libraries/action-scheduler/docs/admin.md (added)
-
tags/2.7.7/libraries/action-scheduler/docs/android-chrome-192x192.png (added)
-
tags/2.7.7/libraries/action-scheduler/docs/android-chrome-256x256.png (added)
-
tags/2.7.7/libraries/action-scheduler/docs/api.md (added)
-
tags/2.7.7/libraries/action-scheduler/docs/apple-touch-icon.png (added)
-
tags/2.7.7/libraries/action-scheduler/docs/assets (added)
-
tags/2.7.7/libraries/action-scheduler/docs/assets/css (added)
-
tags/2.7.7/libraries/action-scheduler/docs/assets/css/style.scss (added)
-
tags/2.7.7/libraries/action-scheduler/docs/browserconfig.xml (added)
-
tags/2.7.7/libraries/action-scheduler/docs/faq.md (added)
-
tags/2.7.7/libraries/action-scheduler/docs/favicon-16x16.png (added)
-
tags/2.7.7/libraries/action-scheduler/docs/favicon-32x32.png (added)
-
tags/2.7.7/libraries/action-scheduler/docs/favicon.ico (added)
-
tags/2.7.7/libraries/action-scheduler/docs/google14ef723abb376cd3.html (added)
-
tags/2.7.7/libraries/action-scheduler/docs/index.md (added)
-
tags/2.7.7/libraries/action-scheduler/docs/mstile-150x150.png (added)
-
tags/2.7.7/libraries/action-scheduler/docs/perf.md (added)
-
tags/2.7.7/libraries/action-scheduler/docs/safari-pinned-tab.svg (added)
-
tags/2.7.7/libraries/action-scheduler/docs/site.webmanifest (added)
-
tags/2.7.7/libraries/action-scheduler/docs/usage.md (added)
-
tags/2.7.7/libraries/action-scheduler/docs/version3-0.md (added)
-
tags/2.7.7/libraries/action-scheduler/docs/wp-cli.md (added)
-
tags/2.7.7/libraries/action-scheduler/functions.php (added)
-
tags/2.7.7/libraries/action-scheduler/lib (added)
-
tags/2.7.7/libraries/action-scheduler/lib/WP_Async_Request.php (added)
-
tags/2.7.7/libraries/action-scheduler/lib/cron-expression (added)
-
tags/2.7.7/libraries/action-scheduler/lib/cron-expression/CronExpression.php (added)
-
tags/2.7.7/libraries/action-scheduler/lib/cron-expression/CronExpression_AbstractField.php (added)
-
tags/2.7.7/libraries/action-scheduler/lib/cron-expression/CronExpression_DayOfMonthField.php (added)
-
tags/2.7.7/libraries/action-scheduler/lib/cron-expression/CronExpression_DayOfWeekField.php (added)
-
tags/2.7.7/libraries/action-scheduler/lib/cron-expression/CronExpression_FieldFactory.php (added)
-
tags/2.7.7/libraries/action-scheduler/lib/cron-expression/CronExpression_FieldInterface.php (added)
-
tags/2.7.7/libraries/action-scheduler/lib/cron-expression/CronExpression_HoursField.php (added)
-
tags/2.7.7/libraries/action-scheduler/lib/cron-expression/CronExpression_MinutesField.php (added)
-
tags/2.7.7/libraries/action-scheduler/lib/cron-expression/CronExpression_MonthField.php (added)
-
tags/2.7.7/libraries/action-scheduler/lib/cron-expression/CronExpression_YearField.php (added)
-
tags/2.7.7/libraries/action-scheduler/lib/cron-expression/LICENSE (added)
-
tags/2.7.7/libraries/action-scheduler/lib/cron-expression/README.md (added)
-
tags/2.7.7/libraries/action-scheduler/license.txt (added)
-
tags/2.7.7/libraries/action-scheduler/readme.txt (added)
-
tags/2.7.7/libraries/action-scheduler/tests (added)
-
tags/2.7.7/libraries/action-scheduler/tests/ActionScheduler_UnitTestCase.php (added)
-
tags/2.7.7/libraries/action-scheduler/tests/README.md (added)
-
tags/2.7.7/libraries/action-scheduler/tests/bin (added)
-
tags/2.7.7/libraries/action-scheduler/tests/bin/install.sh (added)
-
tags/2.7.7/libraries/action-scheduler/tests/bootstrap.php (added)
-
tags/2.7.7/libraries/action-scheduler/tests/phpunit (added)
-
tags/2.7.7/libraries/action-scheduler/tests/phpunit.xml.dist (added)
-
tags/2.7.7/libraries/action-scheduler/tests/phpunit/ActionScheduler_Mock_Async_Request_QueueRunner.php (added)
-
tags/2.7.7/libraries/action-scheduler/tests/phpunit/ActionScheduler_Mocker.php (added)
-
tags/2.7.7/libraries/action-scheduler/tests/phpunit/deprecated (added)
-
tags/2.7.7/libraries/action-scheduler/tests/phpunit/deprecated/ActionScheduler_UnitTestCase.php (added)
-
tags/2.7.7/libraries/action-scheduler/tests/phpunit/helpers (added)
-
tags/2.7.7/libraries/action-scheduler/tests/phpunit/helpers/ActionScheduler_Callbacks.php (added)
-
tags/2.7.7/libraries/action-scheduler/tests/phpunit/helpers/ActionScheduler_Compatibility_Test.php (added)
-
tags/2.7.7/libraries/action-scheduler/tests/phpunit/helpers/ActionScheduler_TimezoneHelper_Test.php (added)
-
tags/2.7.7/libraries/action-scheduler/tests/phpunit/jobs (added)
-
tags/2.7.7/libraries/action-scheduler/tests/phpunit/jobs/ActionScheduler_Action_Test.php (added)
-
tags/2.7.7/libraries/action-scheduler/tests/phpunit/jobs/ActionScheduler_NullAction_Test.php (added)
-
tags/2.7.7/libraries/action-scheduler/tests/phpunit/jobstore (added)
-
tags/2.7.7/libraries/action-scheduler/tests/phpunit/jobstore/AbstractStoreTest.php (added)
-
tags/2.7.7/libraries/action-scheduler/tests/phpunit/jobstore/ActionScheduler_DBStoreMigrator_Test.php (added)
-
tags/2.7.7/libraries/action-scheduler/tests/phpunit/jobstore/ActionScheduler_DBStore_Test.php (added)
-
tags/2.7.7/libraries/action-scheduler/tests/phpunit/jobstore/ActionScheduler_HybridStore_Test.php (added)
-
tags/2.7.7/libraries/action-scheduler/tests/phpunit/jobstore/ActionScheduler_wpPostStore_Test.php (added)
-
tags/2.7.7/libraries/action-scheduler/tests/phpunit/lock (added)
-
tags/2.7.7/libraries/action-scheduler/tests/phpunit/lock/ActionScheduler_OptionLock_Test.php (added)
-
tags/2.7.7/libraries/action-scheduler/tests/phpunit/logging (added)
-
tags/2.7.7/libraries/action-scheduler/tests/phpunit/logging/ActionScheduler_DBLogger_Test.php (added)
-
tags/2.7.7/libraries/action-scheduler/tests/phpunit/logging/ActionScheduler_wpCommentLogger_Test.php (added)
-
tags/2.7.7/libraries/action-scheduler/tests/phpunit/migration (added)
-
tags/2.7.7/libraries/action-scheduler/tests/phpunit/migration/ActionMigrator_Test.php (added)
-
tags/2.7.7/libraries/action-scheduler/tests/phpunit/migration/BatchFetcher_Test.php (added)
-
tags/2.7.7/libraries/action-scheduler/tests/phpunit/migration/Config_Test.php (added)
-
tags/2.7.7/libraries/action-scheduler/tests/phpunit/migration/Controller_Test.php (added)
-
tags/2.7.7/libraries/action-scheduler/tests/phpunit/migration/LogMigrator_Test.php (added)
-
tags/2.7.7/libraries/action-scheduler/tests/phpunit/migration/Runner_Test.php (added)
-
tags/2.7.7/libraries/action-scheduler/tests/phpunit/migration/Scheduler_Test.php (added)
-
tags/2.7.7/libraries/action-scheduler/tests/phpunit/procedural_api (added)
-
tags/2.7.7/libraries/action-scheduler/tests/phpunit/procedural_api/procedural_api_Test.php (added)
-
tags/2.7.7/libraries/action-scheduler/tests/phpunit/procedural_api/wc_get_scheduled_actions_Test.php (added)
-
tags/2.7.7/libraries/action-scheduler/tests/phpunit/runner (added)
-
tags/2.7.7/libraries/action-scheduler/tests/phpunit/runner/ActionScheduler_QueueCleaner_Test.php (added)
-
tags/2.7.7/libraries/action-scheduler/tests/phpunit/runner/ActionScheduler_QueueRunner_Test.php (added)
-
tags/2.7.7/libraries/action-scheduler/tests/phpunit/schedules (added)
-
tags/2.7.7/libraries/action-scheduler/tests/phpunit/schedules/ActionScheduler_CronSchedule_Test.php (added)
-
tags/2.7.7/libraries/action-scheduler/tests/phpunit/schedules/ActionScheduler_IntervalSchedule_Test.php (added)
-
tags/2.7.7/libraries/action-scheduler/tests/phpunit/schedules/ActionScheduler_NullSchedule_Test.php (added)
-
tags/2.7.7/libraries/action-scheduler/tests/phpunit/schedules/ActionScheduler_SimpleSchedule_Test.php (added)
-
tags/2.7.7/libraries/action-scheduler/tests/phpunit/versioning (added)
-
tags/2.7.7/libraries/action-scheduler/tests/phpunit/versioning/ActionScheduler_Versions_Test.php (added)
-
tags/2.7.7/license.txt (added)
-
tags/2.7.7/notifier.php (added)
-
tags/2.7.7/templates (added)
-
tags/2.7.7/templates/buttons (added)
-
tags/2.7.7/templates/buttons/btn-custom-image.php (added)
-
tags/2.7.7/templates/buttons/btn-style-1.php (added)
-
tags/2.7.7/templates/buttons/btn-style-2.php (added)
-
tags/2.7.7/templates/buttons/btn-style-3.php (added)
-
tags/2.7.7/templates/buttons/btn-style-4.php (added)
-
tags/2.7.7/views (added)
-
tags/2.7.7/views/admin-dashboard.php (added)
-
tags/2.7.7/views/admin-settings.php (added)
-
tags/2.7.7/views/admin-tools.php (added)
-
tags/2.7.7/views/admin-triggers.php (added)
-
trunk/README.txt (modified) (3 diffs)
-
trunk/assets/css/admin.css (modified) (3 diffs)
-
trunk/assets/js/admin.js (modified) (4 diffs)
-
trunk/includes/classes/class-notifier-tools.php (modified) (1 diff)
-
trunk/includes/classes/integrations/class-notifier-woocommerce.php (modified) (2 diffs)
-
trunk/notifier.php (modified) (1 diff)
-
trunk/views/admin-tools.php (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
notifier/trunk/README.txt
r3300503 r3306218 1 === Notifier - Send Message Notifications Using Business API===1 === Notifier - Send Notifications from Woocommerce, Form Plugins and More! === 2 2 Contributors: wanotifier 3 3 Donate link: https://wanotifier.com 4 4 Tags: whatsapp api, whatsapp integration, whatsapp notification, woocommerce whatsapp, whatsapp 5 5 Requires at least: 5.0 6 Tested up to: 6. 77 Stable tag: 2.7. 66 Tested up to: 6.8 7 Stable tag: 2.7.7 8 8 Requires PHP: 7.4 9 9 License: GPLv2 or later … … 13 13 14 14 == Description == 15 **Integrate WhatsApp API with WordPress** to send WhatsApp notifications for Woocommerce orders, abadoned cart recovery, form submissions from _Contact Form 7_, _Gravity Forms_, _WPForms_ etc and more using the **official WhatsApp Business API**.15 **Integrate WhatsApp API with WordPress** to send WhatsApp notifications for Woocommerce orders, abadoned cart recovery, form submissions from _Contact Form 7_, _Gravity Forms_, _WPForms_ etc and more using the official [WhatsApp Business API](https://wanotifier.com/whatsapp-business-api/). 16 16 17 17 **NOTE:** This plugin requires you to have an account at [WANotifier.com](https://wanotifier.com/). Create your **FREE** account now by [clicking here](https://app.wanotifier.com/create-account/). … … 135 135 136 136 == Changelog == 137 = 2.7.7 - 2025-06-04 = 138 mod: Tested upto version bump and README.txt file update 139 mod: minor UI updates 140 137 141 = 2.7.6 - 2025-05-26 = 138 142 add: added order item fields – name, price, total of the first product -
notifier/trunk/assets/css/admin.css
r3064698 r3306218 37 37 .select2-container--default .select2-selection--multiple.select2-selection--clearable { padding-right: 25px; } 38 38 .select2-container--default .select2-selection--multiple .select2-selection__clear { cursor: pointer; font-weight: bold; height: 20px; margin-right: 10px; margin-top: 5px; position: absolute; right: 0; padding: 1px; } 39 .select2-container--default .select2-selection--multiple .select2-selection__choice { background-color: #e4e4e4; border: 1px solid #aaa; border-radius: 4px; box-sizing: border-box; display: inline- block; margin-right: 8px; margin-bottom: 8px; padding: 0; padding-left: 20px; position: relative; max-width: 100%; overflow: hidden; text-overflow: ellipsis; vertical-align: bottom; white-space: nowrap; }40 .select2-container--default .select2-selection--multiple .select2-selection__choice__display { cursor: default; padding -left: 2px; padding-right: 5px; }41 .select2-container--default .select2-selection--multiple .select2-selection__choice__remove { background-color: transparent; border: none; border-right: 1px solid #aaa; border-top-left-radius: 4px; border-bottom-left-radius: 4px; color: #999; cursor: pointer; font-size: 1em; font-weight: bold; padding: 0 4px; position: absolute; left: 0; top: 0; }39 .select2-container--default .select2-selection--multiple .select2-selection__choice { background-color: #e4e4e4; border: 1px solid #aaa; border-radius: 4px; box-sizing: border-box; display: inline-flex ; margin-right: 8px; margin-bottom: 8px; padding: 0; position: relative; max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; align-items: center; } 40 .select2-container--default .select2-selection--multiple .select2-selection__choice__display { cursor: default; padding: 3px 8px 4px 8px; line-height: 1em; } 41 .select2-container--default .select2-selection--multiple .select2-selection__choice__remove { background-color: transparent; border: none; border-right: 1px solid #aaa; border-top-left-radius: 4px; border-bottom-left-radius: 4px; color: #999; cursor: pointer; font-size: 1em; font-weight: bold; padding: 2px 6px 4px 6px; } 42 42 43 43 .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover, … … 1037 1037 background: #f7f7f7; 1038 1038 padding: 10px; 1039 max-height: 150px;1039 max-height: 200px; 1040 1040 overflow: auto; 1041 1041 border: 1px solid #ddd; … … 1043 1043 margin-top: 10px; 1044 1044 } 1045 .notifier-tool-activity-wrap .activity-log-preview-wrap table { 1046 width: 100px; 1047 } 1048 .notifier-tool-activity-wrap .activity-log-preview-wrap table .activity-record td { 1049 vertical-align: top; 1050 } 1051 .notifier-tool-activity-wrap .activity-log-preview-wrap table .activity-record td:first-child { 1052 padding-right: 10px; 1053 white-space: nowrap; 1054 } -
notifier/trunk/assets/js/admin.js
r3064698 r3306218 14 14 15 15 // Show / hide fields as per conditional logic 16 function conditionallyShowFields() {17 if ($('.meta-fields').length == 0) {18 return;19 }20 21 $('.form-field').each(function() {22 var thisField = $(this).find(':input');23 24 // Conditionally show/hide fields25 var conditions = $(this).attr('data-conditions') || '';26 var conditionsOperator = $(this).attr('data-conditions-operator') || 'OR';27 if (conditions !== '') {28 var fieldElem = $(this);29 var conditionsArray = JSON.parse(conditions);30 var fieldConditionResults = [];31 32 conditionsArray.forEach(function(condition) {33 var fieldClass = '.' + condition.field + '_field';34 var fieldInput = $(fieldClass + ' :input');35 var fieldInputType = fieldInput.prop('type');36 37 // Do not fetch value of hidden fields.38 if(!$(fieldClass).is(':visible')){39 return;40 }41 42 // Get field value43 var fieldVal = fieldInput.val();44 45 // Get field value if it's radio or checkbox46 if($.inArray(fieldInputType, ['radio', 'checkbox']) !== -1) {47 fieldVal = $(fieldClass + ' :input:checked').val();48 }49 50 var showThis = false;51 if(condition.operator == '==') {52 showThis = (fieldVal == condition.value) ? true : false;53 }54 else if(condition.operator == '!=') {55 showThis = (fieldVal != condition.value) ? true : false;56 }57 58 fieldConditionResults.push(showThis);59 });60 61 if('OR' == conditionsOperator){62 var showField = false;63 }64 else if('AND' == conditionsOperator){65 var showField = fieldConditionResults[0];66 }67 68 fieldConditionResults.forEach(function(showThis){69 if('OR' == conditionsOperator){70 showField = showField || showThis;71 }72 else if('AND' == conditionsOperator){73 showField = showField && showThis;74 }75 });76 77 if(showField){78 fieldElem.show();79 var disabled = fieldElem.find(':input').attr('data-disabled') || 'no';80 if('no' == disabled){81 fieldElem.find(':input').removeAttr('disabled');82 }83 }84 else{85 fieldElem.hide();86 fieldElem.find(':input').attr('disabled', 'disabled');87 }88 }89 90 // Apply data limit on fields91 if (thisField.hasClass('force-text-limit')) {92 var content = thisField.val();93 var contentLength = content.length;94 var limit = thisField.attr('data-limit');95 if (contentLength >= limit) {96 thisField.siblings('label').find('.limit-used').text(limit);97 thisField.val(content.substr(0, limit));98 } else {99 thisField.siblings('label').find('.limit-used').text(contentLength);100 }101 }102 103 });104 }16 function conditionallyShowFields() { 17 if ($('.meta-fields').length == 0) { 18 return; 19 } 20 21 $('.form-field').each(function() { 22 var thisField = $(this).find(':input'); 23 24 // Conditionally show/hide fields 25 var conditions = $(this).attr('data-conditions') || ''; 26 var conditionsOperator = $(this).attr('data-conditions-operator') || 'OR'; 27 if (conditions !== '') { 28 var fieldElem = $(this); 29 var conditionsArray = JSON.parse(conditions); 30 var fieldConditionResults = []; 31 32 conditionsArray.forEach(function(condition) { 33 var fieldClass = '.' + condition.field + '_field'; 34 var fieldInput = $(fieldClass + ' :input'); 35 var fieldInputType = fieldInput.prop('type'); 36 37 // Do not fetch value of hidden fields. 38 if(!$(fieldClass).is(':visible')){ 39 return; 40 } 41 42 // Get field value 43 var fieldVal = fieldInput.val(); 44 45 // Get field value if it's radio or checkbox 46 if($.inArray(fieldInputType, ['radio', 'checkbox']) !== -1) { 47 fieldVal = $(fieldClass + ' :input:checked').val(); 48 } 49 50 var showThis = false; 51 if(condition.operator == '==') { 52 showThis = (fieldVal == condition.value) ? true : false; 53 } 54 else if(condition.operator == '!=') { 55 showThis = (fieldVal != condition.value) ? true : false; 56 } 57 58 fieldConditionResults.push(showThis); 59 }); 60 61 if('OR' == conditionsOperator){ 62 var showField = false; 63 } 64 else if('AND' == conditionsOperator){ 65 var showField = fieldConditionResults[0]; 66 } 67 68 fieldConditionResults.forEach(function(showThis){ 69 if('OR' == conditionsOperator){ 70 showField = showField || showThis; 71 } 72 else if('AND' == conditionsOperator){ 73 showField = showField && showThis; 74 } 75 }); 76 77 if(showField){ 78 fieldElem.show(); 79 var disabled = fieldElem.find(':input').attr('data-disabled') || 'no'; 80 if('no' == disabled){ 81 fieldElem.find(':input').removeAttr('disabled'); 82 } 83 } 84 else{ 85 fieldElem.hide(); 86 fieldElem.find(':input').attr('disabled', 'disabled'); 87 } 88 } 89 90 // Apply data limit on fields 91 if (thisField.hasClass('force-text-limit')) { 92 var content = thisField.val(); 93 var contentLength = content.length; 94 var limit = thisField.attr('data-limit'); 95 if (contentLength >= limit) { 96 thisField.siblings('label').find('.limit-used').text(limit); 97 thisField.val(content.substr(0, limit)); 98 } else { 99 thisField.siblings('label').find('.limit-used').text(contentLength); 100 } 101 } 102 103 }); 104 } 105 105 106 106 // Fetch and display trigger fields 107 function fetchAndDisplayTriggerFields(){107 function fetchAndDisplayTriggerFields(){ 108 108 const post_id = $('#post_ID').val() || 0; 109 109 const trigger = $('#notifier_trigger').val() || ''; … … 133 133 }); 134 134 135 }135 } 136 136 137 137 // Uploading media to WP using wp.media 138 var file_frame;139 function uploadMediaFile( button, preview_media ) {140 var button_id = button.attr('id');141 var field_id = button_id.replace( '_button', '' );142 var preview_id = button_id.replace( '_button', '_preview' );143 144 // Create the media frame.145 file_frame = wp.media.frames.file_frame = wp.media({146 title: button.data( 'uploader_title' ),147 button: {148 text: button.data( 'uploader_button_text' ),149 },150 library: {151 type: button.data( 'uploader_supported_file_types' ).split(',')152 },153 multiple: false154 });155 156 // When an image is selected, run a callback.157 file_frame.on( 'select', function() {158 attachment = file_frame.state().get('selection').first().toJSON();159 jQuery("#"+field_id).attr('data-type', attachment.type);160 jQuery("#"+field_id).attr('data-subtype', attachment.subtype);161 jQuery("#"+field_id).siblings('.notifier-media-preview').find('.notifier-media-preview-item').addClass('hide');162 if( preview_media ) {163 if('image' == attachment.type || ('application' == attachment.type && 'pdf' == attachment.subtype) ) {138 var file_frame; 139 function uploadMediaFile( button, preview_media ) { 140 var button_id = button.attr('id'); 141 var field_id = button_id.replace( '_button', '' ); 142 var preview_id = button_id.replace( '_button', '_preview' ); 143 144 // Create the media frame. 145 file_frame = wp.media.frames.file_frame = wp.media({ 146 title: button.data( 'uploader_title' ), 147 button: { 148 text: button.data( 'uploader_button_text' ), 149 }, 150 library: { 151 type: button.data( 'uploader_supported_file_types' ).split(',') 152 }, 153 multiple: false 154 }); 155 156 // When an image is selected, run a callback. 157 file_frame.on( 'select', function() { 158 attachment = file_frame.state().get('selection').first().toJSON(); 159 jQuery("#"+field_id).attr('data-type', attachment.type); 160 jQuery("#"+field_id).attr('data-subtype', attachment.subtype); 161 jQuery("#"+field_id).siblings('.notifier-media-preview').find('.notifier-media-preview-item').addClass('hide'); 162 if( preview_media ) { 163 if('image' == attachment.type || ('application' == attachment.type && 'pdf' == attachment.subtype) ) { 164 164 jQuery("#"+field_id).attr('data-url', attachment.sizes.full.url); 165 165 jQuery("#"+preview_id+'_image').removeClass('hide').attr('src', attachment.sizes.thumbnail.url); 166 } 167 else if ('video' == attachment.type) { 168 jQuery("#"+field_id).attr('data-url', attachment.url); 169 jQuery("#"+preview_id+'_video').removeClass('hide').find('source').attr('src', attachment.url); 170 jQuery("#"+preview_id+'_video')[0].load(); 171 } 172 } 173 jQuery("#"+field_id).val(attachment.id).change(); 174 }); 175 176 // Finally, open the modal 177 file_frame.open(); 178 } 166 } 167 else if ('video' == attachment.type) { 168 jQuery("#"+field_id).attr('data-url', attachment.url); 169 jQuery("#"+preview_id+'_video').removeClass('hide').find('source').attr('src', attachment.url); 170 jQuery("#"+preview_id+'_video')[0].load(); 171 } 172 } 173 jQuery("#"+field_id).val(attachment.id).change(); 174 }); 175 176 // Finally, open the modal 177 file_frame.open(); 178 } 179 180 // Fetch activity logs on Tools page 181 function fetchActivityLogs(){ 182 $('.activity-log-preview-wrap').html(''); 183 var currenEle = $('#notifier_activity_date'); 184 if(currenEle.val() === ''){ 185 return false; 186 } 187 currenEle.addClass('disabled-field'); 188 data = { 189 'action': 'fetch_activity_logs_by_date', 190 'notifier_activity_date': currenEle.val(), 191 } 192 193 notifierAjax(data, function(response){ 194 currenEle.removeClass('disabled-field'); 195 $('.activity-log-preview-wrap').html(response.preview); 196 }); 197 } 179 198 180 199 $(document).on('ready', function() { … … 297 316 }); 298 317 299 // Do stuff if on the trigger edit page318 // Do stuff if on the trigger edit page 300 319 if ($('#notifier-trigger-data').length > 0) { 301 320 fetchAndDisplayTriggerFields(); // Fetch and display data and recipient fields … … 324 343 * Tools page 325 344 ****************/ 345 if($('#notifier_activity_date').length > 0){ 346 fetchActivityLogs(); 347 } 348 326 349 $(document).on('change', '#notifier_activity_date', function(){ 327 $('.activity-log-preview-wrap').html(''); 328 var currenEle = $(this); 329 if(currenEle.val() === ''){ 330 return false; 331 } 332 currenEle.addClass('disabled-field'); 333 data = { 334 'action': 'fetch_activity_logs_by_date', 335 'notifier_activity_date': currenEle.val(), 336 } 337 338 notifierAjax(data, function(response){ 339 currenEle.removeClass('disabled-field'); 340 $('.activity-log-preview-wrap').html(response.preview); 341 }); 350 fetchActivityLogs(); 342 351 }); 343 352 -
notifier/trunk/includes/classes/class-notifier-tools.php
r3231402 r3306218 205 205 foreach ($logs as $log){ 206 206 $logs_preview_htm .= '<tr class="activity-record">'; 207 $logs_preview_htm .= '<td style="width:10%; vertical-align: top;"><strong>'.esc_html($log->timestamp).'</strong> </td>';208 $logs_preview_htm .= '<td style="width:90%; vertical-align: top;">'.esc_html($log->message).'</td>';207 $logs_preview_htm .= '<td><strong>'.esc_html($log->timestamp).'</strong> </td>'; 208 $logs_preview_htm .= '<td>'.esc_html($log->message).'</td>'; 209 209 $logs_preview_htm .= '</tr>'; 210 210 } -
notifier/trunk/includes/classes/integrations/class-notifier-woocommerce.php
r3300503 r3306218 233 233 'label' => 'Order first item featured image', 234 234 'return_type' => 'image', 235 'value' => function ($order, $field_function) { 236 $image_id = false; 237 $image_url = ''; 238 foreach($order->get_items() as $item){ 239 $first_product_id = $item->get_product_id(); 240 $product = wc_get_product( $first_product_id ); 241 $image_id = $product->get_image_id(); 242 if($image_id){ 243 break; 235 'value' => function ( $order, $field_function ) { 236 foreach ( $order->get_items() as $item ) { 237 $product = $item->get_product(); 238 if ( $product ) { 239 $image_id = $product->get_image_id(); 240 if ( $image_id ) { 241 return wp_get_attachment_url( $image_id ); 242 } else { 243 return wc_placeholder_img_src(); 244 } 244 245 } 245 } 246 247 if($image_id){ 248 $image_url = wp_get_attachment_url( $product->get_image_id() ); 249 } 250 else{ 251 $image_url = wc_placeholder_img_src(); 252 } 253 return $image_url; 246 break; 247 } 248 return wc_placeholder_img_src(); 254 249 } 255 250 ), … … 1284 1279 } 1285 1280 } 1286 1287 1281 } -
notifier/trunk/notifier.php
r3300503 r3306218 1 1 <?php 2 2 /** 3 * Plugin Name: Notifier - Send Message Notifications Using Business API3 * Plugin Name: Notifier - Send Notifications from Woocommerce, Form Plugins and More! 4 4 * Plugin URI: https://wordpress.org/plugins/notifier/ 5 5 * Description: Integrate WhatsApp API with WordPress to send WhatsApp notifications from Woocommerce, Contact Form 7, Gravity Forms, WPForms & more. 6 * Version: 2.7. 66 * Version: 2.7.7 7 7 * Author: WANotifier.com 8 8 * Author URI: https://wanotifier.com -
notifier/trunk/views/admin-tools.php
r3231402 r3306218 46 46 <select name="notifier_activity_date" id="notifier_activity_date"> 47 47 <option value="">Select date</option> 48 <?php foreach ($dates as $ date){ ?>49 <option value="<?php echo esc_attr($date); ?>" ><?php echo esc_html($date); ?></option>48 <?php foreach ($dates as $key => $date){ ?> 49 <option value="<?php echo esc_attr($date); ?>" <?php echo ($key == 0) ? 'selected' : ''; ?>><?php echo esc_html($date); ?></option> 50 50 <?php } ?> 51 51 </select>
Note: See TracChangeset
for help on using the changeset viewer.