feat: complete Newsletter Campaigns Phase 1

- Add default campaign email template to DefaultTemplates.php
- Add toggle settings (campaign_scheduling, subscriber_limit_enabled)
- Add public unsubscribe endpoint with secure token verification
- Update CampaignManager to use NewsletterController unsubscribe URLs
- Add generate_unsubscribe_url() helper for email templates
This commit is contained in:
Dwindi Ramadhana
2025-12-31 21:17:59 +07:00
parent 3d5191aab3
commit d7505252ac
4 changed files with 138 additions and 6 deletions

View File

@@ -90,6 +90,7 @@ class DefaultTemplates
'order_cancelled' => self::customer_order_cancelled(),
'order_refunded' => self::customer_order_refunded(),
'new_customer' => self::customer_new_customer(),
'newsletter_campaign' => self::customer_newsletter_campaign(),
],
'staff' => [
'order_placed' => self::staff_order_placed(),
@@ -139,6 +140,7 @@ class DefaultTemplates
'order_cancelled' => 'Order #{order_number} has been cancelled',
'order_refunded' => 'Refund processed for order #{order_number}',
'new_customer' => 'Welcome to {site_name}! 🎁 Exclusive offer inside',
'newsletter_campaign' => '{campaign_title}',
],
'staff' => [
'order_placed' => '[NEW ORDER] #{order_number} - ${order_total} from {customer_name}',
@@ -206,6 +208,30 @@ Got questions? Our customer service team is ready to help: {support_email}
[/card]';
}
/**
* Customer: Newsletter Campaign
* Master design template for newsletter campaigns
* The {content} variable is replaced with the actual campaign content
*/
private static function customer_newsletter_campaign()
{
return '[card type="hero"]
## {campaign_title}
[/card]
[card]
{content}
[/card]
[card type="basic" bg="#f5f5f5"]
You are receiving this because you subscribed to {site_name} newsletter.
[Unsubscribe]({unsubscribe_url}) | [Visit Store]({site_url})
© {current_year} {site_name}. All rights reserved.
[/card]';
}
/**
* Customer: Order Placed
* Sent immediately when customer places an order