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);
}
}