Skip to content

Releases: lauzis/mawiblah

1.0.36 — Slack test button, and cron logs that say what happened

Choose a tag to compare

@lauzis lauzis released this 18 Aug 18:12

Send a test message button beside the Slack webhook field. It posts to whatever is in the field — saved or not — waits for Slack's answer and reports it. Ordinary log traffic is fire-and-forget, so a bad webhook otherwise fails silently.

The Tests page's Logging scenario now posts to Slack too when a webhook is configured, and says it skipped when none is. It runs whether or not file logging is on, since errors reach Slack either way.

Cron logging now says what happened rather than which function ran:

  • The tick logs Scheduled check started and a matching Scheduled check finished with how many schedulers were seen, how many fired, and how long it took — a check that dies halfway no longer looks like one that found no work.
  • A scheduled send logs Scheduled campaign started with the campaign name and schedule type.
  • Batch started carries the campaign name plus what had already been sent and failed; Batch finished (was Batch complete) adds the elapsed time; Campaign finished carries the final counts.

Note that these are info entries, so they reach Slack only at Every log entry — the errors-only default still posts just failures.

Bundled lauzis/wp-plugin-packages updated to 1.16.0.

1.0.35 — Slack webhook for logs

Choose a tag to compare

@lauzis lauzis released this 18 Aug 15:16

Log entries can now be posted to a Slack incoming webhook.

Two fields under Logging: the webhook URL, and whether Slack gets errors only (the default) or every entry. Errors are posted even with file logging disabled — a send that failed at 3am is not something anybody finds by opening the log later.

  • Fire-and-forget, so a campaign send never waits on Slack; a webhook Slack rejects fails quietly.
  • Only https:// URLs are used: the webhook URL is itself a credential.
  • "Every log entry" means one request per entry against a webhook Slack rate-limits to about a message a second — leave it on Errors only during a send.

Mawiblah declares its own Logging section rather than registering the shared package's, so the two fields were added to config/settings.json directly, under the ids the logging component reads. No change to classes/Logs.php was needed.

Stable tag in readme.txt said 1.0.29, six releases behind; it now matches. Bundled lauzis/wp-plugin-packages updated to 1.15.0.

v1.0.28

Choose a tag to compare

@lauzis lauzis released this 30 Jun 09:51
e3fb945

Changes in 1.0.28

New

  • rerender_on_recurring per-campaign setting — when enabled (default on), the locked template is cleared before each recurring send so shortcodes and dynamic content are re-evaluated fresh.

Fixes in 1.0.27

Critical

  • Division by zero in getConversionStatsForCampaign() when no emails have been sent yet (PHP 8 DivisionByZeroError)
  • Import transient key contained uppercase chars; sanitize_key() lowercased on read, causing every import confirmation to fail with "session expired"

Major

  • Background send via WP Cron failed silently when no user is logged in — template fetch now bypasses the authenticated REST loopback in cron context
  • Fatal error: Cannot access protected property WPMailSMTP\MailCatcherV6::$exceptions — replaced phpmailer_init with wp_mail_failed hook
  • CronSend::lockTemplate failure now calls backgroundSendStop() so campaigns are not left permanently stuck
  • Background send failure path now calls sentEmailFailed() (updates fail count, error meta, Failing Email audience)
  • Scheduler now advances next_send when skipping an in-progress recurring send, preventing an immediate re-fire
  • Templates::getTemplateByNameViaRest() now fails closed on non-200/malformed REST responses
  • Tester records are now preferred over non-testers when deduplicating by email in getTestModeSubscribers()
  • Import overwrite now clears unsubed/unsub_time meta when the Unsubed audience is removed

Minor

  • backgroundProgress REST route returns a normalized payload on campaign-not-found
  • Scheduler::add() guards against wp_insert_post() returning 0
  • AJAX URL in background-progress uses esc_url_raw() to preserve nonce query string
  • onclick confirm in scheduler list uses esc_js() instead of esc_attr_e()
  • Import error display escapes each message individually so <br> separators render
  • Removed duplicate open-rate array keys in stats templates
  • Fixed typo "beeing" → "being" on unsubscribe page
  • Open timestamps now use date_i18n() for site timezone
  • MAWIBLAH_VERSION no longer appends time() on every request (browser caching restored)
  • Fixed DOCUMENTATION.md flowchart loop-back node