$this->get_template_email_for('sms_message'), ]; } public function listItems() { return [ [ 'label' => __eva('SMS Template'), 'slug' => 'sms_template', 'description' => __eva('SMS message sent to the caller after a missed call.'), ], ]; } public function fields() { return [ 'sms_template' => [ [ 'attribute' => 'sms_message', 'stacked' => true, 'name' => __eva('SMS Message'), 'component' => 'group-sms-languages-field', 'subfields' => ['content'], 'previewButton' => false, 'helpText' => __eva('The SMS message sent to the customer after a missed call. One message per language.'), 'help' => [ 'content' => __eva('SMS content.') ], 'template' => $this->get_template_email_for('sms_message'), 'value' => $this->valueWithLanguagesFor('sms_message'), 'tags' => $this->tagsForMissedCall(), ], ], ]; } /** * Get SMS content for a specific language * * @param string $language * @return string|null */ public function getSmsContent($language) { $messages = $this->sms_message; if (!is_array($messages) || !isset($messages['content_'.$language])) { return null; } $content = $messages['content_'.$language] ?? ''; // Decode from Base64 if needed if (!empty($content) && base64_encode(base64_decode($content, true)) === $content) { $content = base64_decode($content); } return $content; } /** * Available tags for missed call SMS messages (restaurant-level only, no booking data) * * @return array */ public function tagsForMissedCall() { $list = [ 'restaurant' => __eva('Restaurant name'), 'restaurant_phone' => __eva('Restaurant phone'), 'book_now' => __eva('Booking link'), 'site_link' => __eva('Website link'), 'restaurant_link' => __eva('Restaurant link'), 'restaurant_facebook' => __eva('Restaurant Facebook'), 'restaurant_instagram' => __eva('Restaurant Instagram'), ]; $final_list = []; foreach ($list as $key => $text) { $final_list['{' . $key . '}'] = $text; } return $final_list; } /** * Load templates from JSON file * Transforms to the internal format expected by the LoadEmailTemplates trait: * { lang: { sms_message: { content: "base64..." } } } */ protected function load_templates_email() { if ($this->templates) return; $file = ALEXR_PLUGIN_DIR . 'includes/dashboard/templates/missed-call-sms/templates.json'; $json = file_exists($file) ? file_get_contents($file) : '{}'; $data = json_decode($json, true); $templates = []; $smsData = $data['sms_message'] ?? []; foreach ($smsData as $lang => $content) { $templates[$lang] = [ 'sms_message' => [ 'content' => $content ] ]; } // transformTemplates handles newlines for emails (no-op for SMS: $this->is_sms = true) $templates = $this->transformTemplates($templates); // Convert to Base64 for Vue decoding $templates = alexr_convertArrayToBase64($templates); $this->templates = $templates; } }