| 1 |
<?php |
| 2 |
/** |
| 3 |
* The admin-specific functionality for the Add Ons page. |
| 4 |
* |
| 5 |
* @package MxChat |
| 6 |
* @subpackage MxChat/admin |
| 7 |
*/ |
| 8 |
class MxChat_Addons { |
| 9 |
/** |
| 10 |
* Store add-on configuration data |
| 11 |
* |
| 12 |
* @var array |
| 13 |
*/ |
| 14 |
private $addons_config; |
| 15 |
|
| 16 |
/** |
| 17 |
* Initialize the class and set its properties. |
| 18 |
*/ |
| 19 |
public function __construct() { |
| 20 |
$this->addons_config = array( |
| 21 |
|
| 22 |
'mxchat-mcp' => array( |
| 23 |
'title' => __('MxChat MCP Server', 'mxchat'), |
| 24 |
'sidebar_title' => __('MCP Server', 'mxchat'), |
| 25 |
'description' => __('Turn your MxChat install into a Model Context Protocol server so Claude, ChatGPT, and Claude Code can list transcripts, push knowledge, and inspect bots directly — no per-message fees, no middleman API.', 'mxchat'), |
| 26 |
'key_benefits' => array( |
| 27 |
__('JSON-RPC 2.0 MCP endpoint with OAuth + bearer auth', 'mxchat'), |
| 28 |
__('One-click connect snippets for Claude Code, ChatGPT, mcp-inspector', 'mxchat'), |
| 29 |
__('WooCommerce-aware tools: products, orders, customers', 'mxchat') |
| 30 |
), |
| 31 |
'license' => 'MxChat PRO', |
| 32 |
'accent' => '#7873f5', |
| 33 |
'url' => 'https://mxchat.ai/add-ons/mxchat-mcp/', |
| 34 |
'download_url' => 'https://mxchat.ai/add-ons/mxchat-mcp/', |
| 35 |
'plugin_file' => 'mxchat-mcp/mxchat-mcp.php', |
| 36 |
'config_page' => 'mxchat-mcp', |
| 37 |
'hero_features' => array( |
| 38 |
array( |
| 39 |
'icon' => '<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="16 18 22 12 16 6"/><polyline points="8 6 2 12 8 18"/></svg>', |
| 40 |
'title' => __('Open Protocol', 'mxchat'), |
| 41 |
'desc' => __('Standards-based MCP over Streamable HTTP', 'mxchat'), |
| 42 |
), |
| 43 |
array( |
| 44 |
'icon' => '<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="11" width="18" height="11" rx="2" ry="2"/><path d="M7 11V7a5 5 0 0 1 10 0v4"/></svg>', |
| 45 |
'title' => __('OAuth + Bearer', 'mxchat'), |
| 46 |
'desc' => __('Reuses your MxChat REST token', 'mxchat'), |
| 47 |
), |
| 48 |
array( |
| 49 |
'icon' => '<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="22 12 18 12 15 21 9 3 6 12 2 12"/></svg>', |
| 50 |
'title' => __('Chatbot Ops Tools', 'mxchat'), |
| 51 |
'desc' => __('Transcripts, knowledge, bots, search', 'mxchat'), |
| 52 |
), |
| 53 |
array( |
| 54 |
'icon' => '<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="9" cy="21" r="1"/><circle cx="20" cy="21" r="1"/><path d="M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6"/></svg>', |
| 55 |
'title' => __('WooCommerce Aware', 'mxchat'), |
| 56 |
'desc' => __('Products, orders, customer lookups', 'mxchat'), |
| 57 |
), |
| 58 |
), |
| 59 |
), |
| 60 |
|
| 61 |
'mxchat-advanced-content' => array( |
| 62 |
'title' => __('MxChat Advanced Content Editor', 'mxchat'), |
| 63 |
'sidebar_title' => __('Content Gen.', 'mxchat'), |
| 64 |
'description' => __('Supercharge your AI content generation workflow. Add advanced editing tools, image management, SEO meta controls, and internal linking to the MxChat Content Generator—turning simple prompts into publish-ready posts and landing pages.', 'mxchat'), |
| 65 |
'key_benefits' => array( |
| 66 |
__('AI-powered image regeneration & uploads', 'mxchat'), |
| 67 |
__('SEO meta title, description & excerpt editor', 'mxchat'), |
| 68 |
__('Automatic internal linking between posts', 'mxchat') |
| 69 |
), |
| 70 |
'license' => 'MxChat PRO', |
| 71 |
'accent' => '#6366f1', |
| 72 |
'url' => 'https://mxchat.ai/add-ons/mxchat-advanced-content/', |
| 73 |
'download_url' => 'https://mxchat.ai/add-ons/mxchat-advanced-content/', |
| 74 |
'plugin_file' => 'mxchat-advanced-content/mxchat-advanced-content.php', |
| 75 |
'config_page' => 'mxchat-content', |
| 76 |
'hero_features' => array( |
| 77 |
array( |
| 78 |
'icon' => '<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="2" ry="2"/><circle cx="8.5" cy="8.5" r="1.5"/><polyline points="21 15 16 10 5 21"/></svg>', |
| 79 |
'title' => __('Image Management', 'mxchat'), |
| 80 |
'desc' => __('Regenerate, upload, and swap AI images', 'mxchat'), |
| 81 |
), |
| 82 |
array( |
| 83 |
'icon' => '<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="8"/><line x1="21" y1="21" x2="16.65" y2="16.65"/></svg>', |
| 84 |
'title' => __('SEO Meta Editor', 'mxchat'), |
| 85 |
'desc' => __('Title, description & excerpt controls', 'mxchat'), |
| 86 |
), |
| 87 |
array( |
| 88 |
'icon' => '<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/></svg>', |
| 89 |
'title' => __('Internal Linking', 'mxchat'), |
| 90 |
'desc' => __('Auto-link to related posts & pages', 'mxchat'), |
| 91 |
), |
| 92 |
array( |
| 93 |
'icon' => '<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"/><path d="M18.375 2.625a1 1 0 0 1 3 3l-9.013 9.014a2 2 0 0 1-.853.505l-2.873.84a.5.5 0 0 1-.62-.62l.84-2.873a2 2 0 0 1 .506-.852z"/></svg>', |
| 94 |
'title' => __('Chat-Based Editing', 'mxchat'), |
| 95 |
'desc' => __('Refine content through conversation', 'mxchat'), |
| 96 |
), |
| 97 |
), |
| 98 |
), |
| 99 |
|
| 100 |
'mxchat-theme' => array( |
| 101 |
'title' => __('MxChat Chat Themes', 'mxchat'), |
| 102 |
'description' => __('Make your chatbot uniquely yours. Generate beautiful themes instantly using simple descriptions or customize manually with precise color controls—zero coding required. Perfect for matching your brand identity.', 'mxchat'), |
| 103 |
'key_benefits' => array( |
| 104 |
__('AI-powered theme generator', 'mxchat'), |
| 105 |
__('Live preview customizer', 'mxchat'), |
| 106 |
__('One-click theme application', 'mxchat') |
| 107 |
), |
| 108 |
'license' => 'MxChat PRO', |
| 109 |
'accent' => '#fa73e6', |
| 110 |
'url' => 'https://mxchat.ai/add-ons/mxchat-theme/', |
| 111 |
'plugin_file' => 'mxchat-theme/mxchat-theme.php', |
| 112 |
'config_page' => 'mxchat-theme-settings', |
| 113 |
'hero_features' => array( |
| 114 |
array( |
| 115 |
'icon' => '<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="13.5" cy="6.5" r="2.5"/><path d="M17.5 10.5l4-4"/><circle cx="6" cy="12" r="2"/><path d="M2 14l2-2"/><circle cx="10.5" cy="17.5" r="2.5"/><path d="M14 21l-1-3"/></svg>', |
| 116 |
'title' => __('AI Theme Generator', 'mxchat'), |
| 117 |
'desc' => __('Describe your style, AI creates it', 'mxchat'), |
| 118 |
), |
| 119 |
array( |
| 120 |
'icon' => '<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="2"/><path d="M3 9h18"/><path d="M9 21V9"/></svg>', |
| 121 |
'title' => __('Live Preview', 'mxchat'), |
| 122 |
'desc' => __('See changes in real-time', 'mxchat'), |
| 123 |
), |
| 124 |
array( |
| 125 |
'icon' => '<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 2v4"/><path d="m16.2 7.8 2.9-2.9"/><path d="M18 12h4"/><path d="m16.2 16.2 2.9 2.9"/><path d="M12 18v4"/><path d="m4.9 19.1 2.9-2.9"/><path d="M2 12h4"/><path d="m4.9 4.9 2.9 2.9"/></svg>', |
| 126 |
'title' => __('Color Controls', 'mxchat'), |
| 127 |
'desc' => __('Fine-tune every color precisely', 'mxchat'), |
| 128 |
), |
| 129 |
array( |
| 130 |
'icon' => '<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><polyline points="7 10 12 15 17 10"/><line x1="12" y1="15" x2="12" y2="3"/></svg>', |
| 131 |
'title' => __('One-Click Apply', 'mxchat'), |
| 132 |
'desc' => __('Apply themes instantly', 'mxchat'), |
| 133 |
), |
| 134 |
), |
| 135 |
), |
| 136 |
|
| 137 |
'mxchat-admin-assistant' => array( |
| 138 |
'title' => __('MxChat Admin Assistant', 'mxchat'), |
| 139 |
'description' => __('Your AI powerhouse inside WordPress. Chat with multiple AI models, generate images, research the web, and boost productivity—all without leaving your dashboard.', 'mxchat'), |
| 140 |
'key_benefits' => array( |
| 141 |
__('ChatGPT-like admin interface', 'mxchat'), |
| 142 |
__('Generate images & research web', 'mxchat'), |
| 143 |
__('Searchable chat history', 'mxchat') |
| 144 |
), |
| 145 |
'license' => 'MxChat PRO', |
| 146 |
'accent' => '#fa73e6', |
| 147 |
'url' => 'https://mxchat.ai/add-ons/mxchat-admin-chat/', |
| 148 |
'plugin_file' => 'mxchat-admin-chat/mxchat-admin-chat.php', |
| 149 |
'config_page' => 'mxchat-admin-chat', |
| 150 |
'hero_features' => array( |
| 151 |
array( |
| 152 |
'icon' => '<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"/></svg>', |
| 153 |
'title' => __('Admin Chat UI', 'mxchat'), |
| 154 |
'desc' => __('ChatGPT-like dashboard interface', 'mxchat'), |
| 155 |
), |
| 156 |
array( |
| 157 |
'icon' => '<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="2" ry="2"/><circle cx="8.5" cy="8.5" r="1.5"/><polyline points="21 15 16 10 5 21"/></svg>', |
| 158 |
'title' => __('Image Generation', 'mxchat'), |
| 159 |
'desc' => __('Create images with AI prompts', 'mxchat'), |
| 160 |
), |
| 161 |
array( |
| 162 |
'icon' => '<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="8"/><line x1="21" y1="21" x2="16.65" y2="16.65"/></svg>', |
| 163 |
'title' => __('Web Research', 'mxchat'), |
| 164 |
'desc' => __('Search the web from your dashboard', 'mxchat'), |
| 165 |
), |
| 166 |
array( |
| 167 |
'icon' => '<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="22 12 16 12 14 15 10 9 8 12 2 12"/></svg>', |
| 168 |
'title' => __('Chat History', 'mxchat'), |
| 169 |
'desc' => __('Searchable conversation archive', 'mxchat'), |
| 170 |
), |
| 171 |
), |
| 172 |
), |
| 173 |
|
| 174 |
'mxchat-veo' => array( |
| 175 |
'title' => __('MxChat Video Generation', 'mxchat'), |
| 176 |
'description' => __('Generate stunning AI videos using Google Veo 2 and Veo 3 models directly from your WordPress dashboard. Create high-quality videos from text prompts with audio, multiple aspect ratios, and optimized generation speeds.', 'mxchat'), |
| 177 |
'key_benefits' => array( |
| 178 |
__('Multiple Veo models (Veo 2, 3, 3 Fast)', 'mxchat'), |
| 179 |
__('8-second videos with native audio', 'mxchat'), |
| 180 |
__('Media library integration', 'mxchat') |
| 181 |
), |
| 182 |
'license' => 'MxChat PRO', |
| 183 |
'accent' => '#ff6b35', |
| 184 |
'url' => 'https://mxchat.ai/add-ons/mxchat-veo/', |
| 185 |
'plugin_file' => 'mxchat-veo/mxchat-veo.php', |
| 186 |
'config_page' => 'mxchat-veo', |
| 187 |
'hero_features' => array( |
| 188 |
array( |
| 189 |
'icon' => '<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polygon points="23 7 16 12 23 17 23 7"/><rect x="1" y="5" width="15" height="14" rx="2" ry="2"/></svg>', |
| 190 |
'title' => __('AI Video Creation', 'mxchat'), |
| 191 |
'desc' => __('Generate videos from text prompts', 'mxchat'), |
| 192 |
), |
| 193 |
array( |
| 194 |
'icon' => '<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M9 18V5l12-2v13"/><circle cx="6" cy="18" r="3"/><circle cx="18" cy="16" r="3"/></svg>', |
| 195 |
'title' => __('Native Audio', 'mxchat'), |
| 196 |
'desc' => __('Videos with built-in audio tracks', 'mxchat'), |
| 197 |
), |
| 198 |
array( |
| 199 |
'icon' => '<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 3h7a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-7m0-18H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h7m0-18v18"/></svg>', |
| 200 |
'title' => __('Aspect Ratios', 'mxchat'), |
| 201 |
'desc' => __('Multiple size options available', 'mxchat'), |
| 202 |
), |
| 203 |
array( |
| 204 |
'icon' => '<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><polyline points="17 8 12 3 7 8"/><line x1="12" y1="3" x2="12" y2="15"/></svg>', |
| 205 |
'title' => __('Media Library', 'mxchat'), |
| 206 |
'desc' => __('Save directly to WordPress media', 'mxchat'), |
| 207 |
), |
| 208 |
), |
| 209 |
), |
| 210 |
|
| 211 |
'mxchat-image-analysis' => array( |
| 212 |
'title' => __('MxChat Image Analysis', 'mxchat'), |
| 213 |
'description' => __('Enhance your chatbot with AI-powered image analysis. Users can upload images for intelligent descriptions, OCR text extraction, and get answers about visual content using OpenAI Vision and Grok APIs.', 'mxchat'), |
| 214 |
'key_benefits' => array( |
| 215 |
__('Multiple AI vision models', 'mxchat'), |
| 216 |
__('Drag & drop image uploads', 'mxchat'), |
| 217 |
__('Custom analysis prompts', 'mxchat') |
| 218 |
), |
| 219 |
'license' => 'MxChat PRO', |
| 220 |
'accent' => '#fa73e6', |
| 221 |
'url' => 'https://mxchat.ai/add-ons/mxchat-vision/', |
| 222 |
'plugin_file' => 'mxchat-vision/mxchat-vision.php', |
| 223 |
'config_page' => 'mxchat-vision', |
| 224 |
'hero_features' => array( |
| 225 |
array( |
| 226 |
'icon' => '<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"/><circle cx="12" cy="12" r="3"/></svg>', |
| 227 |
'title' => __('Vision AI Models', 'mxchat'), |
| 228 |
'desc' => __('OpenAI Vision & Grok analysis', 'mxchat'), |
| 229 |
), |
| 230 |
array( |
| 231 |
'icon' => '<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="16 16 12 12 8 16"/><line x1="12" y1="12" x2="12" y2="21"/><path d="M20.39 18.39A5 5 0 0 0 18 9h-1.26A8 8 0 1 0 3 16.3"/></svg>', |
| 232 |
'title' => __('Drag & Drop', 'mxchat'), |
| 233 |
'desc' => __('Easy image upload in chat', 'mxchat'), |
| 234 |
), |
| 235 |
array( |
| 236 |
'icon' => '<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/><polyline points="14 2 14 8 20 8"/><line x1="16" y1="13" x2="8" y2="13"/><line x1="16" y1="17" x2="8" y2="17"/></svg>', |
| 237 |
'title' => __('OCR Extraction', 'mxchat'), |
| 238 |
'desc' => __('Extract text from images', 'mxchat'), |
| 239 |
), |
| 240 |
array( |
| 241 |
'icon' => '<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="4" y1="21" x2="4" y2="14"/><line x1="4" y1="10" x2="4" y2="3"/><line x1="12" y1="21" x2="12" y2="12"/><line x1="12" y1="8" x2="12" y2="3"/><line x1="20" y1="21" x2="20" y2="16"/><line x1="20" y1="12" x2="20" y2="3"/><line x1="1" y1="14" x2="7" y2="14"/><line x1="9" y1="8" x2="15" y2="8"/><line x1="17" y1="16" x2="23" y2="16"/></svg>', |
| 242 |
'title' => __('Custom Prompts', 'mxchat'), |
| 243 |
'desc' => __('Tailor analysis instructions', 'mxchat'), |
| 244 |
), |
| 245 |
), |
| 246 |
), |
| 247 |
|
| 248 |
'mxchat-forms' => array( |
| 249 |
'title' => __('MxChat Forms', 'mxchat'), |
| 250 |
'description' => __('Convert conversations into data collection. Create smart forms that trigger during chats, collect user information, and turn casual visitors into qualified leads.', 'mxchat'), |
| 251 |
'key_benefits' => array( |
| 252 |
__('No-code form builder', 'mxchat'), |
| 253 |
__('Intent-triggered activation', 'mxchat'), |
| 254 |
__('Export lead data easily', 'mxchat') |
| 255 |
), |
| 256 |
'license' => 'MxChat PRO', |
| 257 |
'accent' => '#fa73e6', |
| 258 |
'url' => 'https://mxchat.ai/add-ons/mxchat-forms/', |
| 259 |
'plugin_file' => 'mxchat-forms/mxchat-forms.php', |
| 260 |
'config_page' => 'mxchat-forms', |
| 261 |
'hero_features' => array( |
| 262 |
array( |
| 263 |
'icon' => '<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="2" ry="2"/><line x1="9" y1="9" x2="15" y2="9"/><line x1="9" y1="13" x2="15" y2="13"/><line x1="9" y1="17" x2="12" y2="17"/></svg>', |
| 264 |
'title' => __('Form Builder', 'mxchat'), |
| 265 |
'desc' => __('No-code drag & drop builder', 'mxchat'), |
| 266 |
), |
| 267 |
array( |
| 268 |
'icon' => '<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"/></svg>', |
| 269 |
'title' => __('Smart Triggers', 'mxchat'), |
| 270 |
'desc' => __('Show forms based on intent', 'mxchat'), |
| 271 |
), |
| 272 |
array( |
| 273 |
'icon' => '<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M23 21v-2a4 4 0 0 0-3-3.87"/><path d="M16 3.13a4 4 0 0 1 0 7.75"/></svg>', |
| 274 |
'title' => __('Lead Capture', 'mxchat'), |
| 275 |
'desc' => __('Turn visitors into contacts', 'mxchat'), |
| 276 |
), |
| 277 |
array( |
| 278 |
'icon' => '<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><polyline points="7 10 12 15 17 10"/><line x1="12" y1="15" x2="12" y2="3"/></svg>', |
| 279 |
'title' => __('Data Export', 'mxchat'), |
| 280 |
'desc' => __('Export leads to CSV easily', 'mxchat'), |
| 281 |
), |
| 282 |
), |
| 283 |
), |
| 284 |
|
| 285 |
'mxchat-multi-bot' => array( |
| 286 |
'title' => __('MxChat Multi-Bot Manager', 'mxchat'), |
| 287 |
'description' => __('Create unlimited specialized chatbots for every purpose. Deploy dedicated bots with separate knowledge bases, custom personalities, and page-specific assignments—perfect for support, sales, and department-specific assistance.', 'mxchat'), |
| 288 |
'key_benefits' => array( |
| 289 |
__('Unlimited specialized chatbots', 'mxchat'), |
| 290 |
__('Separate Pinecone knowledge bases', 'mxchat'), |
| 291 |
__('Page-specific bot assignments', 'mxchat') |
| 292 |
), |
| 293 |
'license' => 'MxChat PRO', |
| 294 |
'accent' => '#8b5cf6', |
| 295 |
'url' => 'https://mxchat.ai/add-ons/mxchat-multi-bot/', |
| 296 |
'plugin_file' => 'mxchat-multi-bot/mxchat-multi-bot.php', |
| 297 |
'config_page' => 'mxchat-multi-bot', |
| 298 |
'hero_features' => array( |
| 299 |
array( |
| 300 |
'icon' => '<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="2" y="3" width="20" height="14" rx="2" ry="2"/><line x1="8" y1="21" x2="16" y2="21"/><line x1="12" y1="17" x2="12" y2="21"/></svg>', |
| 301 |
'title' => __('Unlimited Bots', 'mxchat'), |
| 302 |
'desc' => __('Create specialized chatbots', 'mxchat'), |
| 303 |
), |
| 304 |
array( |
| 305 |
'icon' => '<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><ellipse cx="12" cy="5" rx="9" ry="3"/><path d="M21 12c0 1.66-4 3-9 3s-9-1.34-9-3"/><path d="M3 5v14c0 1.66 4 3 9 3s9-1.34 9-3V5"/></svg>', |
| 306 |
'title' => __('Separate Knowledge', 'mxchat'), |
| 307 |
'desc' => __('Unique knowledge per bot', 'mxchat'), |
| 308 |
), |
| 309 |
array( |
| 310 |
'icon' => '<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/><polyline points="14 2 14 8 20 8"/></svg>', |
| 311 |
'title' => __('Page Assignments', 'mxchat'), |
| 312 |
'desc' => __('Assign bots to specific pages', 'mxchat'), |
| 313 |
), |
| 314 |
array( |
| 315 |
'icon' => '<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"/><circle cx="12" cy="7" r="4"/></svg>', |
| 316 |
'title' => __('Custom Personas', 'mxchat'), |
| 317 |
'desc' => __('Unique personality per bot', 'mxchat'), |
| 318 |
), |
| 319 |
), |
| 320 |
), |
| 321 |
|
| 322 |
'mxchat-trigger' => array( |
| 323 |
'title' => __('MxChat Trigger', 'mxchat'), |
| 324 |
'description' => __('Turn any element into a conversation starter. Add chat trigger buttons and links throughout your website that open MxChat and send predefined messages—perfect for CTAs, support links, and guided experiences.', 'mxchat'), |
| 325 |
'key_benefits' => array( |
| 326 |
__('Simple data attribute triggers', 'mxchat'), |
| 327 |
__('Multi-Bot targeting support', 'mxchat'), |
| 328 |
__('Built-in button styles & animations', 'mxchat') |
| 329 |
), |
| 330 |
'license' => 'MxChat PRO', |
| 331 |
'accent' => '#3ac9d1', |
| 332 |
'url' => 'https://mxchat.ai/add-ons/mxchat-trigger/', |
| 333 |
'plugin_file' => 'mxchat-trigger/mxchat-trigger.php', |
| 334 |
'config_page' => 'mxchat-triggers', |
| 335 |
'hero_features' => array( |
| 336 |
array( |
| 337 |
'icon' => '<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><line x1="12" y1="8" x2="12" y2="16"/><line x1="8" y1="12" x2="16" y2="12"/></svg>', |
| 338 |
'title' => __('Element Triggers', 'mxchat'), |
| 339 |
'desc' => __('Turn any element into a trigger', 'mxchat'), |
| 340 |
), |
| 341 |
array( |
| 342 |
'icon' => '<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"/></svg>', |
| 343 |
'title' => __('Preset Messages', 'mxchat'), |
| 344 |
'desc' => __('Auto-send predefined prompts', 'mxchat'), |
| 345 |
), |
| 346 |
array( |
| 347 |
'icon' => '<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="2" y="3" width="20" height="14" rx="2" ry="2"/><line x1="8" y1="21" x2="16" y2="21"/><line x1="12" y1="17" x2="12" y2="21"/></svg>', |
| 348 |
'title' => __('Multi-Bot Targeting', 'mxchat'), |
| 349 |
'desc' => __('Route to specific bots', 'mxchat'), |
| 350 |
), |
| 351 |
array( |
| 352 |
'icon' => '<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="2" ry="2"/><path d="M12 8v8"/><path d="M8 12h8"/></svg>', |
| 353 |
'title' => __('Button Styles', 'mxchat'), |
| 354 |
'desc' => __('Built-in styles & animations', 'mxchat'), |
| 355 |
), |
| 356 |
), |
| 357 |
), |
| 358 |
|
| 359 |
'mxchat-anywhere' => array( |
| 360 |
'title' => __('MxChat Anywhere', 'mxchat'), |
| 361 |
'sidebar_title' => __('MxChat Anywhere', 'mxchat'), |
| 362 |
'description' => __('Deploy your AI chatbot on any website with a single script tag. Works on static HTML, Shopify, Squarespace, Wix, and custom web apps — no WordPress required on the target site. Full feature parity with Shadow DOM style isolation.', 'mxchat'), |
| 363 |
'key_benefits' => array( |
| 364 |
__('One script tag — works on any website', 'mxchat'), |
| 365 |
__('Shadow DOM prevents CSS conflicts', 'mxchat'), |
| 366 |
__('Domain-validated security keys', 'mxchat') |
| 367 |
), |
| 368 |
'license' => 'MxChat PRO', |
| 369 |
'accent' => '#10b981', |
| 370 |
'url' => 'https://mxchat.ai/add-ons/mxchat-embed/', |
| 371 |
'download_url' => 'https://mxchat.ai/add-ons/mxchat-embed/', |
| 372 |
'plugin_file' => 'mxchat-embed/mxchat-embed.php', |
| 373 |
'config_page' => 'mxchat-embed', |
| 374 |
'hero_features' => array( |
| 375 |
array( |
| 376 |
'icon' => '<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><line x1="2" y1="12" x2="22" y2="12"/><path d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"/></svg>', |
| 377 |
'title' => __('Universal Embed', 'mxchat'), |
| 378 |
'desc' => __('One script tag on any website', 'mxchat'), |
| 379 |
), |
| 380 |
array( |
| 381 |
'icon' => '<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/></svg>', |
| 382 |
'title' => __('Style Isolation', 'mxchat'), |
| 383 |
'desc' => __('Shadow DOM prevents CSS conflicts', 'mxchat'), |
| 384 |
), |
| 385 |
array( |
| 386 |
'icon' => '<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="11" width="18" height="11" rx="2" ry="2"/><path d="M7 11V7a5 5 0 0 1 10 0v4"/></svg>', |
| 387 |
'title' => __('Domain Security', 'mxchat'), |
| 388 |
'desc' => __('Validated keys per domain', 'mxchat'), |
| 389 |
), |
| 390 |
array( |
| 391 |
'icon' => '<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"/></svg>', |
| 392 |
'title' => __('Zero Dependencies', 'mxchat'), |
| 393 |
'desc' => __('Vanilla JS, no impact on Core Web Vitals', 'mxchat'), |
| 394 |
), |
| 395 |
), |
| 396 |
), |
| 397 |
|
| 398 |
'mxchat-woo' => array( |
| 399 |
'title' => __('MxChat WooCommerce', 'mxchat'), |
| 400 |
'description' => __('Boost sales with AI-powered shopping assistance. Help customers find products, manage carts, and complete purchases—all through natural conversation.', 'mxchat'), |
| 401 |
'key_benefits' => array( |
| 402 |
__('Smart product recommendations', 'mxchat'), |
| 403 |
__('Cart & checkout assistance', 'mxchat'), |
| 404 |
__('Order history access', 'mxchat') |
| 405 |
), |
| 406 |
'license' => 'MxChat PRO', |
| 407 |
'accent' => '#fa73e6', |
| 408 |
'url' => 'https://mxchat.ai/add-ons/mxchat-woo/', |
| 409 |
'plugin_file' => 'mxchat-woo/mxchat-woo.php', |
| 410 |
'config_page' => 'mxchat-woo', |
| 411 |
'hero_features' => array( |
| 412 |
array( |
| 413 |
'icon' => '<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="9" cy="21" r="1"/><circle cx="20" cy="21" r="1"/><path d="M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6"/></svg>', |
| 414 |
'title' => __('Cart Assistant', 'mxchat'), |
| 415 |
'desc' => __('Manage cart through conversation', 'mxchat'), |
| 416 |
), |
| 417 |
array( |
| 418 |
'icon' => '<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="8" y1="6" x2="21" y2="6"/><line x1="8" y1="12" x2="21" y2="12"/><line x1="8" y1="18" x2="21" y2="18"/><line x1="3" y1="6" x2="3.01" y2="6"/><line x1="3" y1="12" x2="3.01" y2="12"/><line x1="3" y1="18" x2="3.01" y2="18"/></svg>', |
| 419 |
'title' => __('Product Search', 'mxchat'), |
| 420 |
'desc' => __('Smart product recommendations', 'mxchat'), |
| 421 |
), |
| 422 |
array( |
| 423 |
'icon' => '<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="1" y="4" width="22" height="16" rx="2" ry="2"/><line x1="1" y1="10" x2="23" y2="10"/></svg>', |
| 424 |
'title' => __('Checkout Help', 'mxchat'), |
| 425 |
'desc' => __('Guide customers to purchase', 'mxchat'), |
| 426 |
), |
| 427 |
array( |
| 428 |
'icon' => '<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/><polyline points="14 2 14 8 20 8"/><line x1="16" y1="13" x2="8" y2="13"/><line x1="16" y1="17" x2="8" y2="17"/><polyline points="10 9 9 9 8 9"/></svg>', |
| 429 |
'title' => __('Order History', 'mxchat'), |
| 430 |
'desc' => __('Look up past orders in chat', 'mxchat'), |
| 431 |
), |
| 432 |
), |
| 433 |
), |
| 434 |
|
| 435 |
'mxchat-perplexity' => array( |
| 436 |
'title' => __('MxChat Perplexity', 'mxchat'), |
| 437 |
'description' => __('Give your chatbot real-time knowledge. Add powerful web search capabilities so your bot can answer questions about current events and time-sensitive information.', 'mxchat'), |
| 438 |
'key_benefits' => array( |
| 439 |
__('Real-time web search', 'mxchat'), |
| 440 |
__('Intent-triggered research', 'mxchat'), |
| 441 |
__('Up-to-date information', 'mxchat') |
| 442 |
), |
| 443 |
'license' => 'MxChat PRO', |
| 444 |
'accent' => '#fa73e6', |
| 445 |
'url' => 'https://mxchat.ai/add-ons/mxchat-perplexity/', |
| 446 |
'plugin_file' => 'mxchat-perplexity/mxchat-perplexity.php', |
| 447 |
'config_page' => 'mxchat-perplexity', |
| 448 |
'hero_features' => array( |
| 449 |
array( |
| 450 |
'icon' => '<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><line x1="2" y1="12" x2="22" y2="12"/><path d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"/></svg>', |
| 451 |
'title' => __('Web Search', 'mxchat'), |
| 452 |
'desc' => __('Real-time internet searching', 'mxchat'), |
| 453 |
), |
| 454 |
array( |
| 455 |
'icon' => '<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"/></svg>', |
| 456 |
'title' => __('Intent Triggers', 'mxchat'), |
| 457 |
'desc' => __('Auto-search when needed', 'mxchat'), |
| 458 |
), |
| 459 |
array( |
| 460 |
'icon' => '<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/></svg>', |
| 461 |
'title' => __('Live Data', 'mxchat'), |
| 462 |
'desc' => __('Up-to-date information always', 'mxchat'), |
| 463 |
), |
| 464 |
array( |
| 465 |
'icon' => '<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"/></svg>', |
| 466 |
'title' => __('Seamless Chat', 'mxchat'), |
| 467 |
'desc' => __('Results blend into conversation', 'mxchat'), |
| 468 |
), |
| 469 |
), |
| 470 |
), |
| 471 |
|
| 472 |
'mxchat-moderation' => array( |
| 473 |
'title' => __('MxChat Moderation', 'mxchat'), |
| 474 |
'description' => __('Keep your chat clean and professional. Block unwanted users, filter inappropriate content, and ensure your chatbot represents your brand properly.', 'mxchat'), |
| 475 |
'key_benefits' => array( |
| 476 |
__('IP & email-based blocking', 'mxchat'), |
| 477 |
__('Content filtering', 'mxchat'), |
| 478 |
__('Spam protection', 'mxchat') |
| 479 |
), |
| 480 |
'license' => 'MxChat PRO', |
| 481 |
'accent' => '#fa73e6', |
| 482 |
'url' => 'https://mxchat.ai/add-ons/mxchat-moderation/', |
| 483 |
'plugin_file' => 'mxchat-moderation/mx-chat-moderation.php', |
| 484 |
'config_page' => 'mx-chat-moderation', |
| 485 |
'hero_features' => array( |
| 486 |
array( |
| 487 |
'icon' => '<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/></svg>', |
| 488 |
'title' => __('Content Filter', 'mxchat'), |
| 489 |
'desc' => __('Block inappropriate content', 'mxchat'), |
| 490 |
), |
| 491 |
array( |
| 492 |
'icon' => '<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><line x1="4.93" y1="4.93" x2="19.07" y2="19.07"/></svg>', |
| 493 |
'title' => __('User Blocking', 'mxchat'), |
| 494 |
'desc' => __('IP & email-based bans', 'mxchat'), |
| 495 |
), |
| 496 |
array( |
| 497 |
'icon' => '<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="22 12 18 12 15 21 9 3 6 12 2 12"/></svg>', |
| 498 |
'title' => __('Spam Protection', 'mxchat'), |
| 499 |
'desc' => __('Detect and prevent spam', 'mxchat'), |
| 500 |
), |
| 501 |
array( |
| 502 |
'icon' => '<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M16 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"/><circle cx="8.5" cy="7" r="4"/><line x1="20" y1="8" x2="20" y2="14"/><line x1="23" y1="11" x2="17" y2="11"/></svg>', |
| 503 |
'title' => __('Brand Safety', 'mxchat'), |
| 504 |
'desc' => __('Keep chat professional', 'mxchat'), |
| 505 |
), |
| 506 |
), |
| 507 |
), |
| 508 |
|
| 509 |
); |
| 510 |
} |
| 511 |
|
| 512 |
/** |
| 513 |
* Get the addons configuration array |
| 514 |
* |
| 515 |
* @return array The addons configuration |
| 516 |
*/ |
| 517 |
public function get_addons_config() { |
| 518 |
return $this->addons_config; |
| 519 |
} |
| 520 |
|
| 521 |
/** |
| 522 |
* Register the stylesheets for the admin area. |
| 523 |
*/ |
| 524 |
public function enqueue_styles() { |
| 525 |
wp_enqueue_style( |
| 526 |
'mxchat-addons', |
| 527 |
plugin_dir_url(__FILE__) . '../css/admin-add-ons.css', |
| 528 |
array(), |
| 529 |
MXCHAT_VERSION, |
| 530 |
'all' |
| 531 |
); |
| 532 |
} |
| 533 |
|
| 534 |
/** |
| 535 |
* Check if an addon is installed and active |
| 536 |
* |
| 537 |
* @param string $plugin_file The plugin's main file path |
| 538 |
* @return array Status information |
| 539 |
*/ |
| 540 |
private function get_addon_status($plugin_file) { |
| 541 |
if (!function_exists('get_plugins')) { |
| 542 |
require_once ABSPATH . 'wp-admin/includes/plugin.php'; |
| 543 |
} |
| 544 |
|
| 545 |
$all_plugins = get_plugins(); |
| 546 |
$active_plugins = get_option('active_plugins', array()); |
| 547 |
|
| 548 |
// Find the addon by iterating through configs |
| 549 |
$config_page = ''; |
| 550 |
foreach ($this->addons_config as $slug => $addon) { |
| 551 |
if ($addon['plugin_file'] === $plugin_file) { |
| 552 |
$config_page = $addon['config_page']; |
| 553 |
break; |
| 554 |
} |
| 555 |
} |
| 556 |
|
| 557 |
if (isset($all_plugins[$plugin_file])) { |
| 558 |
if (in_array($plugin_file, $active_plugins)) { |
| 559 |
return array( |
| 560 |
'status' => 'active', |
| 561 |
'action_url' => admin_url('admin.php?page=' . $config_page), |
| 562 |
'action_text' => __('Configure', 'mxchat') |
| 563 |
); |
| 564 |
} else { |
| 565 |
return array( |
| 566 |
'status' => 'inactive', |
| 567 |
'action_url' => wp_nonce_url( |
| 568 |
admin_url('plugins.php?action=activate&plugin=' . $plugin_file), |
| 569 |
'activate-plugin_' . $plugin_file |
| 570 |
), |
| 571 |
'action_text' => __('Activate', 'mxchat') |
| 572 |
); |
| 573 |
} |
| 574 |
} |
| 575 |
|
| 576 |
return array( |
| 577 |
'status' => 'not-installed', |
| 578 |
'action_url' => '', |
| 579 |
'action_text' => __('Get Extension', 'mxchat') |
| 580 |
); |
| 581 |
} |
| 582 |
|
| 583 |
/** |
| 584 |
* Render the Add Ons page content. |
| 585 |
*/ |
| 586 |
public function render_page() { |
| 587 |
$this->enqueue_styles(); |
| 588 |
// Remove the sorting logic and just use the original order |
| 589 |
$sorted_addons = $this->addons_config; |
| 590 |
|
| 591 |
?> |
| 592 |
<div class="wrap mxchat-addons-wrapper"> |
| 593 |
<div class="mxchat-addons-hero"> |
| 594 |
<h1 class="mxchat-main-title"> |
| 595 |
<span class="mxchat-gradient-text">Power Up</span> Your Chatbot |
| 596 |
</h1> |
| 597 |
<p class="mxchat-hero-subtitle"> |
| 598 |
<?php esc_html_e('Extend MxChat with these powerful extensions and unlock advanced features.', 'mxchat'); ?> |
| 599 |
</p> |
| 600 |
</div> |
| 601 |
|
| 602 |
<div class="mxchat-addons-section"> |
| 603 |
<div class="mxchat-addons-grid"> |
| 604 |
<?php foreach ($sorted_addons as $slug => $addon): ?> |
| 605 |
<?php $this->render_addon_card($slug, $addon); ?> |
| 606 |
<?php endforeach; ?> |
| 607 |
</div> |
| 608 |
</div> |
| 609 |
|
| 610 |
<div class="mxchat-cta-section"> |
| 611 |
<h2><?php esc_html_e('Ready to take your chatbot to the next level?', 'mxchat'); ?></h2> |
| 612 |
<p><?php esc_html_e('Get MxChat PRO today and access all premium extensions at one low price.', 'mxchat'); ?></p> |
| 613 |
<a href="https://mxchat.ai/" class="mxchat-cta-button" target="_blank"><?php esc_html_e('Learn More', 'mxchat'); ?></a> |
| 614 |
</div> |
| 615 |
</div> |
| 616 |
<?php |
| 617 |
} |
| 618 |
|
| 619 |
/** |
| 620 |
* Render individual add-on card |
| 621 |
* |
| 622 |
* @param string $slug The addon slug |
| 623 |
* @param array $addon The addon configuration array |
| 624 |
*/ |
| 625 |
private function render_addon_card($slug, $addon) { |
| 626 |
$status_info = $this->get_addon_status($addon['plugin_file']); |
| 627 |
$button_url = $status_info['status'] === 'not-installed' ? $addon['url'] : $status_info['action_url']; |
| 628 |
$button_target = $status_info['status'] === 'not-installed' ? '_blank' : '_self'; |
| 629 |
|
| 630 |
// Check if addon is deprecated |
| 631 |
$is_deprecated = isset($addon['status']) && $addon['status'] === 'deprecated'; |
| 632 |
?> |
| 633 |
<div class="mxchat-addon-card <?php echo $is_deprecated ? 'deprecated' : ''; ?>" style="--card-accent: <?php echo esc_attr($addon['accent']); ?>"> |
| 634 |
<div class="mxchat-addon-badge"> |
| 635 |
<?php if ($is_deprecated): ?> |
| 636 |
<?php esc_html_e('Deprecated', 'mxchat'); ?> |
| 637 |
<?php else: ?> |
| 638 |
<?php echo esc_html(ucfirst($addon['license'])); ?> |
| 639 |
<?php endif; ?> |
| 640 |
</div> |
| 641 |
<div class="mxchat-addon-content"> |
| 642 |
<h3 class="mxchat-addon-title"><?php echo esc_html($addon['title']); ?></h3> |
| 643 |
<p class="mxchat-addon-description"><?php echo esc_html($addon['description']); ?></p> |
| 644 |
|
| 645 |
<?php if (!empty($addon['key_benefits'])): ?> |
| 646 |
<div class="mxchat-benefits-list"> |
| 647 |
<?php foreach ($addon['key_benefits'] as $benefit): ?> |
| 648 |
<div class="mxchat-benefit-item"> |
| 649 |
<span class="mxchat-benefit-icon">✓</span> |
| 650 |
<?php echo esc_html($benefit); ?> |
| 651 |
</div> |
| 652 |
<?php endforeach; ?> |
| 653 |
</div> |
| 654 |
<?php endif; ?> |
| 655 |
|
| 656 |
<div class="mxchat-addon-footer"> |
| 657 |
<?php if ($is_deprecated): ?> |
| 658 |
<div class="mxchat-status-indicator deprecated"> |
| 659 |
<?php esc_html_e('Now Built-in', 'mxchat'); ?> |
| 660 |
</div> |
| 661 |
<a href="<?php echo esc_url(admin_url('admin.php?page=mxchat-prompts')); ?>" |
| 662 |
class="mxchat-action-button deprecated" |
| 663 |
target="_self"> |
| 664 |
<?php esc_html_e('Go to Knowledge Tab', 'mxchat'); ?> |
| 665 |
</a> |
| 666 |
<?php else: ?> |
| 667 |
<div class="mxchat-status-indicator <?php echo esc_attr($status_info['status']); ?>"> |
| 668 |
<?php echo esc_html(ucfirst(str_replace('-', ' ', $status_info['status']))); ?> |
| 669 |
</div> |
| 670 |
<a href="<?php echo esc_url($button_url); ?>" |
| 671 |
class="mxchat-action-button" |
| 672 |
target="<?php echo esc_attr($button_target); ?>" |
| 673 |
data-action="<?php echo esc_attr($status_info['status']); ?>"> |
| 674 |
<?php echo esc_html($status_info['action_text']); ?> |
| 675 |
</a> |
| 676 |
<?php endif; ?> |
| 677 |
</div> |
| 678 |
</div> |
| 679 |
</div> |
| 680 |
<?php |
| 681 |
} |
| 682 |
|
| 683 |
} |