Files
WooNooW/NOTIFICATION_SYSTEM.md
dwindown c3904cc064 docs: Consolidate documentation - 52% reduction (56 → 27 files)
 Documentation Cleanup:
- Deleted 30 obsolete/completed docs
- Created NOTIFICATION_SYSTEM.md (consolidates all notification docs)
- Reduced from 56 to 27 MD files (52% reduction)

🗑️ Removed Categories:
- Completed features (ALL_ISSUES_FIXED, BASIC_CARD_COMPLETE, etc.)
- Superseded plans (NOTIFICATION_STRATEGY, NOTIFICATION_REFACTOR_*, etc.)
- Duplicate/fragmented docs (MARKDOWN_*, TEMPLATE_*, etc.)

📝 Consolidated:
- All notification documentation → NOTIFICATION_SYSTEM.md
  - Architecture & flow
  - Markdown syntax reference
  - Variables reference
  - Backend integration details
  - API endpoints
  - Email queue system
  - Global system toggle
  - Q&A section

 Kept Essential Docs (27):
- Core architecture guides
- Addon development guides
- Feature-specific docs (shipping, payment, tax)
- Implementation guides (i18n, hooks)
- Project docs (README, PROJECT_BRIEF, PROJECT_SOP)

📊 Result:
- Clearer navigation
- Less confusion
- Single source of truth for notifications
- Easier for new developers
2025-11-15 22:07:38 +07:00

7.1 KiB

Notification System Documentation

Status: Complete & Fully Wired
Last Updated: November 15, 2025


Overview

WooNooW features a modern, flexible notification system that supports multiple channels (Email, Push, WhatsApp, Telegram, SMS) with customizable templates and markdown support.

Key Features

  • Multi-channel support (Email, Push, + Addons)
  • Custom markdown templates with visual builder
  • Variable system for dynamic content
  • Global system toggle (WooNooW vs WooCommerce)
  • Per-channel and per-event toggles
  • Email customization (colors, logo, branding)
  • Async email queue (prevents 30s timeout)
  • Full backend wiring complete

Architecture

Structure

Notifications
├── Staff Notifications (toggle channels/events)
├── Customer Notifications (toggle channels/events)
├── Channel Configuration (global settings)
│   ├── Email (template + connection)
│   └── Push (template + connection)
└── Activity Log (coming soon)

Notification Flow

Event → EmailManager → Check System Mode → Check Channel Toggle
→ Check Event Toggle → EmailRenderer → Get Template → Replace Variables
→ Parse Markdown → Apply Branding → Queue via MailQueue → Send

Markdown Syntax

Cards

[card:info]
Your content here
[/card]

[card:success]
Success message
[/card]

[card:warning]
Warning message
[/card]

Buttons

[button:solid](https://example.com)
Click Me
[/button]

[button:outline](https://example.com)
Learn More
[/button]

Images

![Alt text](https://example.com/image.png)

Variables

Order Variables

  • {order_number} - Order number
  • {order_date} - Order date
  • {order_total} - Order total
  • {order_status} - Order status
  • {order_items_table} - Formatted table
  • {order_items_list} - Formatted list

Customer Variables

  • {customer_name} - Customer full name
  • {customer_first_name} - First name
  • {customer_last_name} - Last name
  • {customer_email} - Email address

Store Variables

  • {store_name} - Store name
  • {store_url} - Store URL
  • {store_email} - Store email

Backend Integration

API Endpoints

Method Endpoint Purpose
GET /notifications/system-mode Get current mode
POST /notifications/system-mode Switch mode
GET /notifications/channels Get all channels
POST /notifications/channels/toggle Toggle channel
GET /notifications/events Get all events
POST /notifications/events/update Update event
GET /notifications/templates/{id}/{ch} Get template
POST /notifications/templates Save template
GET /notifications/email-settings Get email customization
POST /notifications/email-settings Save email customization

Database Options

// System mode
woonoow_notification_system_mode = 'woonoow' | 'woocommerce'

// Channel toggles
woonoow_email_notifications_enabled = true | false
woonoow_push_notifications_enabled = true | false

// Event settings
woonoow_notification_settings = [
  'order_processing' => [
    'channels' => [
      'email' => ['enabled' => true, 'recipient' => 'customer']
    ]
  ]
]

// Templates
woonoow_notification_templates = [
  'order_processing_email_customer' => [
    'subject' => '...',
    'body' => '...'
  ]
]

// Email customization
woonoow_email_settings = [
  'primary_color' => '#7f54b3',
  'logo_url' => '...',
  ...
]

Email Queue System

Purpose

Prevents 30-second timeout when sending emails via SMTP.

Implementation

  • WooEmailOverride: Intercepts wp_mail() calls
  • MailQueue: Queues emails via Action Scheduler
  • Async Processing: Emails sent in background

Files

  • includes/Core/Mail/WooEmailOverride.php
  • includes/Core/Mail/MailQueue.php

Initialization

// In Bootstrap.php
MailQueue::init();
WooEmailOverride::init();

Key Classes

NotificationManager

File: includes/Core/Notifications/NotificationManager.php

  • should_send_notification() - Validates all toggles
  • send() - Main sending method
  • is_channel_enabled() - Check global channel state
  • is_event_channel_enabled() - Check per-event state

EmailManager

File: includes/Core/Notifications/EmailManager.php

  • is_enabled() - Check if WooNooW system active
  • disable_wc_emails() - Disable WooCommerce emails
  • Hooks into WooCommerce order status changes

EmailRenderer

File: includes/Core/Notifications/EmailRenderer.php

  • render() - Render email from template
  • replace_variables() - Replace variables with data
  • parse_cards() - Parse markdown cards
  • Applies email customization

TemplateProvider

File: includes/Core/Notifications/TemplateProvider.php

  • get_template() - Get custom or default template
  • get_variables() - Get available variables
  • get_default_template() - Get default template

Global System Toggle

Purpose

Allow users to switch between WooNooW and WooCommerce notification systems.

Modes

WooNooW Mode (default):

  • Custom templates with markdown
  • Multi-channel support
  • Full customization
  • WooCommerce emails disabled

WooCommerce Mode:

  • Standard WooCommerce emails
  • WooNooW notifications disabled
  • For users who prefer classic system

Implementation

// Check mode
$mode = get_option('woonoow_notification_system_mode', 'woonoow');

// EmailManager respects mode
if (!EmailManager::is_enabled()) {
    return; // Skip WooNooW notifications
}

// NotificationManager checks mode
if ($system_mode !== 'woonoow') {
    return false; // Use WooCommerce instead
}

Q&A

Q: Are templates saved and used when sending?

A: Yes. Templates saved via API are fetched by EmailRenderer and used when sending.

Q: Are channel toggles respected?

A: Yes. NotificationManager checks both global and per-event toggles before sending.

Q: Does the global system toggle work?

A: Yes. EmailManager and NotificationManager both check the mode before processing.

Q: Is email sending async?

A: Yes. MailQueue queues emails via Action Scheduler to prevent timeouts.

Q: Are variables replaced correctly?

A: Yes. EmailRenderer replaces all variables with actual data from orders/customers.

Q: Does markdown parsing work?

A: Yes. Cards, buttons, and images are parsed correctly in both visual builder and email output.


  • NEW_MARKDOWN_SYNTAX.md - Markdown syntax reference
  • NOTIFICATION_SYSTEM_QA.md - Q&A and backend status
  • BACKEND_WIRING_COMPLETE.md - Backend integration details
  • CUSTOM_EMAIL_SYSTEM.md - Email system architecture
  • FILTER_HOOKS_GUIDE.md - Available hooks for customization

Future Enhancements

Planned Features

  • Activity Log page
  • WhatsApp addon
  • Telegram addon
  • SMS addon
  • A/B testing for templates
  • Scheduled notifications
  • Customer notification preferences page

Addon Development

See ADDON_DEVELOPMENT_GUIDE.md for creating custom notification channels.