uuid) && function_exists('evavel_view_booking_url')) { $mybooking_url = evavel_view_booking_url($this->uuid); } $mybooking_link = $mybooking_url ? '' . __eva('Open my booking') . '' : ''; // @TODO use tags in the message $tags = [ '{booking_details}' => '', // Details are provided by the javascript in the widget '{mybooking}' => $mybooking_link, '{mybooking_link}' => $mybooking_url, //'{booking_details_no_duration}' => '' // Hide the duration ]; // Booking details is Name, Phone, Email foreach ($tags as $tag => $replace) { $message = str_replace($tag, $replace, $message); } return $message; } public function getServiceCustomMessage($template, $lang = 'en') { $service = $this->service; if (!$service) return null; $widget_custom = $service->widget_custom; if (!$widget_custom) return null; // Check is enabled overwrite general if (!isset($widget_custom['overwrite_general'])) return null; $overrite_general = $widget_custom['overwrite_general']; if ($overrite_general != '1' && $overrite_general != 1 && $overrite_general != 'true' && $overrite_general !== true) { return null; } // Check is enabled overwrite messages if (!isset($widget_custom['overwrite_messages'])) return null; $overrite_messages = $widget_custom['overwrite_messages']; if ($overrite_messages != '1' && $overrite_messages != 1 && $overrite_messages != 'true' && $overrite_messages !== true) { return null; } if (!isset($widget_custom[$template])) return null; $template = json_decode($widget_custom[$template], true); if (isset($template['content_' . $lang])) return $template['content_' . $lang]; if (isset($template['content_en'])) return $template['content_en']; return null; } protected function getMessageTemplate($template = 'message_pending', $lang = 'en') { // Can be overwritten by the shift setting $message_b64 = $this->getServiceCustomMessage($template, $lang); // If no custom message from service, get from database or files if (!$message_b64) { $w_message = WidgetMessage::where('restaurant_id', $this->restaurant_id)->first(); // If no message template in database, create one with default values from files if (!$w_message) { $w_message = new WidgetMessage(); $w_message->restaurant_id = $this->restaurant_id; // Load default values from files $defaultValues = $w_message->defaultValue(); foreach ($defaultValues as $key => $value) { $w_message->{$key} = $value; } } // Try to get message in requested language if (isset($w_message->{$template}['content_'.$lang])) { $message_b64 = $w_message->{$template}['content_'.$lang]; } // Fallback to English if requested language not available else if (isset($w_message->{$template}['content_en'])) { $message_b64 = $w_message->{$template}['content_en']; } } // Decode base64 message $message = $message_b64 ? base64_decode($message_b64) : ''; // If still empty (which shouldn't happen with our new approach), use hardcoded default if (empty($message)) { $default_messages = WidgetMessage::default_messages(); $message = isset($default_messages[$template]) ? $default_messages[$template]['content'] : '{booking_details}'; } // Parse tags in the message $message = $this->parseMessageTags($message); return $message; } public function messagePending($lang = 'en') { return $this->getMessageTemplate('message_pending', $lang); } public function messageBooked($lang = 'en') { return $this->getMessageTemplate('message_booked', $lang); } public function messageDenied($lang = 'en') { return $this->getMessageTemplate('message_denied', $lang); } public function messageMenuPending($lang = 'en') { return $this->getMessageTemplate('message_menu_pending', $lang); } }