<?php
/**
* Created by PhpStorm.
* User: laurentiu
* Date: 28.08.2017
* Time: 21:11
*/
namespace AdminBundle\Helpers;
use AdminBundle\Entity\Booking;
use AdminBundle\Entity\Company;
use Symfony\Component\Console\Output\OutputInterface;
class MandrillManager
{
/** @var OutputInterface $output */
private $output;
private $mandrill;
/**
* ["passenger_name", "passenger_phone", "passenger_email", "booking_key", "booking_pickup_date", "booking_pickup_time", "booking_pickup_location", "booking_dropoff_location", "booking_vias_content", "booking_passengers", "booking_luggage", "booking_notes", "booking_cost", "booking_duration", "booking_distance", "booking_car_type", "booking_hand_luggage", "return_booking" => false, "return_booking_key", "return_booking_pickup_date", "return_booking_pickup_time", "return_booking_pickup_location", "return_booking_dropoff_location", "return_booking_vias_content", "return_booking_notes", "return_booking_duration", "return_booking_distance", "flight_number", "landing_time", "mg_timeframe". "currency_symbol", "premium_mg", "return_premium_mg"]
*
* @var string
*/
public static $TEMPLATE_NEW_BOOKING_CLIENT = '1.NEW-BOOKING-CLIENT';
/**
* ["passenger_name", "passenger_phone", "passenger_email", "booking_key", "booking_creation_date", "booking_creation_time", "booking_origin", "booking_pickup_date", "booking_pickup_time", "booking_pickup_location", "booking_dropoff_location", "booking_vias_content", "booking_passengers", "booking_luggage", "booking_notes", "booking_cost", "booking_duration", "booking_distance", "booking_car_type", "booking_hand_luggage", "flight_number", "landing_time", "mg_timeframe", "currency_symbol"]
*
* @var string
*/
public static $TEMPLATE_NEW_BOOKING_OFFICE = '2.NEW-BOOKING-OFFICE';
/**
* ["passenger_name"]
*
* @var string
*/
public static $TEMPLATE_BOOKING_COMPLETED = '3.BOOKING-COMPLETED';
/**
* ["passenger_name", "booking_key", "passenger_phone", "passenger_email", "booking_pickup_date", "booking_pickup_time", "booking_pickup_location", "booking_dropoff_location", "booking_cancel_reason", "booking_cancel_charge","booking_review_link"]
*
* @var string
*/
public static $TEMPLATE_BOOKING_CANCELLED = '4.BOOKING-CANCELLED';
/**
* ["passenger_name", "passenger_phone", "passenger_email", "booking_key", "booking_creation_date", "booking_creation_time", "booking_origin", "booking_pickup_date", "booking_pickup_time", "booking_pickup_location", "booking_dropoff_location", "booking_vias_content", "booking_passengers", "booking_luggage", "booking_notes", "booking_cost", "booking_duration", "booking_distance", "booking_car_type", "booking_hand_luggage", "currency_symbol"]
*
* @var string
*/
public static $TEMPLATE_BOOKING_CANCELLED_AUTO = '4.5.BOOKING-CANCELLED-AUTO';
/**
* ["passenger_name", "booking_key", "booking_pickup_date", "booking_pickup_time", "booking_pickup_location", "driver_name", "driver_PCO", "driver_HACK", "driver_SSN", "driver_phone", "driver_vehicle_name", "driver_vehicle_plate", "driver_vehicle_PHV", "driver_vehicle_LIMO", "driver_vehicle_color", "premium_mg", "return_premium_mg"]
*
* @var string
*/
public static $TEMPLATE_DRIVER_ALLOCATED = '5.DRIVER-ALLOCATED';
/**
* ["passenger_name", "booking_key", "booking_pickup_date", "booking_pickup_time", "booking_pickup_location", "driver_name", "driver_PCO", "driver_HACK", "driver_SSN", "driver_phone", "driver_vehicle_name", "driver_vehicle_plate", "driver_vehicle_PHV", "driver_vehicle_LIMO", "driver_vehicle_color", "premium_mg", "return_premium_mg"]
*
* @var string
*/
public static $TEMPLATE_DRIVER_REALLOCATED = '6.DRIVER-REALLOCATED';
/**
* ["passenger_name", "booking_key", "booking_pickup_date", "booking_pickup_time", "booking_pickup_location", "driver_name", "driver_PCO", "driver_HACK", "driver_SSN", "driver_phone", "driver_vehicle_name", "driver_vehicle_plate", "driver_vehicle_PHV", "driver_vehicle_LIMO", "premium_mg", "return_premium_mg"]
*
* @var string
*/
public static $TEMPLATE_DRIVER_WAITING = '7.5.DRIVER-WAITING';
/**
* ["passenger_name", "booking_key", "booking_pickup_date", "booking_pickup_time", "booking_pickup_location", "driver_name", "driver_PCO", "driver_HACK", "driver_SSN", "driver_phone", "driver_vehicle_name", "driver_vehicle_plate", "driver_vehicle_PHV", "driver_vehicle_LIMO", "premium_mg", "return_premium_mg"]
*
* @var string
*/
public static $TEMPLATE_DRIVER_ARRIVED = '7.DRIVER-ARRIVED';
/**
* ["passenger_name", "payment_link", "booking_key", "booking_pickup_date", "booking_pickup_time", "booking_pickup_location", "booking_dropoff_location", "booking_cost", "currency_symbol"]
*
* @var string
*/
public static $TEMPLATE_PAYMENT_INITIAL = '8.PAYMENT-INITIAL';
/**
* ["passenger_name", "payment_link", "booking_key", "booking_pickup_date", "booking_pickup_time", "booking_pickup_location", "booking_dropoff_location", "booking_cost", "currency_symbol"]
*
* @var string
*/
public static $TEMPLATE_PAYMENT_REMINDER = '9.PAYMENT-REMINDER';
/**
* ["passenger_name", "payment_link", "booking_key", "booking_pickup_date", "booking_pickup_time", "booking_pickup_location", "booking_dropoff_location", "booking_cost", "currency_symbol"]
*
* @var string
*/
public static $TEMPLATE_PAYMENT_WARNING = '10.PAYMENT-WARNING';
/**
* ["passenger_name", "booking_key", "booking_pickup_date", "booking_pickup_time", "booking_pickup_location", "booking_dropoff_location", "booking_cost", "payment_link", "currency_symbol"]
*
* @var string
*/
public static $TEMPLATE_PENDING_CANCELLED = '11.PENDING-CANCELLED';
/**
* ["passenger_name", "passenger_phone", "passenger_email", "booking_key", "booking_creation_date", "booking_creation_time", "booking_origin", "booking_pickup_date", "booking_pickup_time", "booking_pickup_location", "booking_dropoff_location", "booking_vias_content", "booking_passengers", "booking_luggage", "booking_notes", "booking_cost", "booking_duration", "booking_distance", "booking_car_type", "booking_hand_luggage", "currency_symbol"]
*
* @var string
*/
public static $TEMPLATE_PENDING_CANCELLED_EXCEPTION = '11.5.PENDING-CANCELLED-EXCEPTION';
/**
* ["passenger_name", "booking_key", "passenger_phone", "passenger_email", "booking_pickup_date", "booking_pickup_time", "booking_pickup_location", "booking_dropoff_location", "booking_vias_content", "booking_passengers", "booking_luggage", "booking_notes", "booking_cost", "booking_duration", "booking_distance", "booking_car_type", "booking_hand_luggage", "flight_number", "landing_time", "mg_timeframe", "currency_symbol", "premium_mg", "return_premium_mg"]
*
* @var string
*/
public static $TEMPLATE_BOOKING_UPDATE = '12.BOOKING-UPDATED';
/**
* ["passenger_name", "booking_key", "passenger_phone", "passenger_email", "booking_pickup_date", "booking_pickup_time", "booking_pickup_location", "booking_dropoff_location", "booking_vias_content", "booking_passengers", "booking_luggage", "booking_notes", "booking_cost", "booking_duration", "booking_distance", "booking_car_type", "booking_hand_luggage", "flight_number", "landing_time", "mg_timeframe", "currency_symbol", "premium_mg", "return_premium_mg"]
*
* @var string
*/
public static $TEMPLATE_BOOKING_RECONFIRM = '13.BOOKING-RECONFIRM';
/**
* ["passenger_name", "booking_key", "passenger_phone", "passenger_email", "booking_pickup_date", "booking_pickup_time", "booking_pickup_location", "booking_dropoff_location", "booking_vias_content", "booking_passengers", "booking_luggage", "booking_notes", "booking_cost", "booking_duration", "booking_distance", "booking_car_type", "booking_hand_luggage", "flight_number", "landing_time", "mg_timeframe", "currency_symbol", "premium_mg", "return_premium_mg"]
*
* @var string
*/
public static $TEMPLATE_BOOKING_APPROACHING = '14.BOOKING-APPROACHING';
/**
* ["driver_name", "driver_ID", "driver_email", "driver_password"]
*
* @var string
*/
public static $TEMPLATE_DRIVER_PASSWORD_RESET = '15.5.DRIVER-PASSWORD-RESET';
/**
* ["driver_name", "driver_ID", "driver_PCO", "driver_HACK", "driver_SSN", "driver_phone", "driver_email", "driver_vehicle_name", "driver_vehicle_plate", "driver_vehicle_PHV", "driver_vehicle_LIMO"]
*
* @var string
*/
public static $TEMPLATE_DRIVER_REGISTERED = '15.DRIVER-REGISTERED';
/**
* ["passenger_name", "booking_key", "payment_link"]
*
* @var string
*/
public static $TEMPLATE_PENDING_BOOKING = '16.PENDING-BOOKING';
/**
* ["passenger_name", "passenger_phone", "passenger_email", "booking_pickup_date", "booking_pickup_time", "booking_pickup_location", "booking_dropoff_location", "booking_vias_content", "booking_passengers", "booking_luggage", "booking_notes", "booking_cost", "booking_duration", "booking_distance", "currency_symbol"]
*
* @var string
*/
public static $TEMPLATE_DRIVER_STATUS_CHECK = '17.DRIVER-STATUS-CHECK';
/**
* ["driver_ID", "driver_name", "driver_vehicle_name", "driver_vehicle_plate"]
*
* @var string
*/
public static $TEMPLATE_DRIVER_DOCUMENT_UPLOAD = '18.5.DRIVER-DOCUMENT-UPLOAD';
/**
* ["passenger_name"]
*
* @var string
*/
public static $TEMPLATE_RESEND_JOURNEY_INVOICE = '19.RESEND-JOURNEY-INVOICE';
/**
* ["passenger_name", "passenger_email", "passenger_phone", "passenger_password"]
*
* @var string
*/
public static $TEMPLATE_CLIENT_PASSWORD_RESET = '20.CLIENT-PASSWORD-RESET';
/**
* ["booking_key", "booking_creation_date", "booking_creation_time", "booking_origin", "passenger_name", "passenger_phone", "passenger_email", "booking_pickup_date", "booking_pickup_time", "booking_pickup_location", "booking_dropoff_location", "booking_vias_content", "booking_passengers", "booking_luggage", "booking_notes", "booking_cost", "booking_duration", "booking_distance", "booking_car_type", "booking_hand_luggage", "flight_number", "landing_time", "mg_timeframe", "currency_symbol"]
*
* @var string
*/
public static $TEMPLATE_OPERATOR_BOOKING_CHECK = '21.OPERATOR-BOOKING-CHECK';
/**
* ["booking_key", "booking_creation_date", "booking_creation_time", "booking_origin", "passenger_name", "passenger_phone", "passenger_email", "booking_pickup_date", "booking_pickup_time", "booking_pickup_location", "booking_dropoff_location", "booking_vias_content", "booking_passengers", "booking_luggage", "booking_notes", "booking_cost", "booking_duration", "booking_distance", "booking_car_type", "booking_hand_luggage", "flight_number", "landing_time", "mg_timeframe", "currency_symbol"]
*
* @var string
*/
public static $DRIVER_DEALLOCATE = '21.5.DRIVER-DEALLOCATE';
/**
* ["driver_name", "week_number", "week_period", "current_week_saturday"]
*
* @var string
*/
public static $TEMPLATE_DRIVER_INVOICE = '22.DRIVER-INVOICE';
/**
* ["booking_key", "passenger_name", "booking_pickup_date", "booking_pickup_time", "booking_pickup_location", "booking_dropoff_location", "booking_cost", "currency_symbol"]
*
* @var string
*/
public static $TEMPLATE_PAYMENT_CONFIRMED_CARD = '23.PAYMENT-CONFIRMED-CARD';
/**
* ["passenger_name", "passenger_phone", "passenger_email", "booking_key", "booking_pickup_date", "booking_pickup_time", "booking_pickup_location", "booking_dropoff_location", "booking_vias_content", "booking_passengers", "booking_luggage", "booking_notes", "booking_cost", "booking_duration", "booking_distance", "booking_car_type", "booking_hand_luggage", "return_booking" => false, "return_booking_key", "return_booking_pickup_date", "return_booking_pickup_time", "return_booking_pickup_location", "return_booking_dropoff_location", "return_booking_vias_content", "return_booking_notes", "return_booking_duration", "return_booking_distance", "flight_number", "landing_time", "mg_timeframe","drivers", "currency_symbol"]
*
* @var string
*/
public static $TEMPLATE_SEND_BOOKING_REQUEST = '24.SEND-BOOKING-REQUEST';
/**
* ["passenger_name", "passenger_phone", "passenger_email", "booking_key", "booking_pickup_date", "booking_pickup_time", "booking_pickup_location", "booking_dropoff_location", "booking_vias_content", "booking_passengers", "booking_luggage", "booking_notes", "booking_cost", "booking_duration", "booking_distance", "booking_car_type", "booking_hand_luggage", "return_booking" => false, "return_booking_key", "return_booking_pickup_date", "return_booking_pickup_time", "return_booking_pickup_location", "return_booking_dropoff_location", "return_booking_vias_content", "return_booking_notes", "return_booking_duration", "return_booking_distance", "flight_number", "landing_time", "mg_timeframe","drivers", "currency_symbol"]
*
* @var string
*/
public static $TEMPLATE_NEW_BOOKING_REQUEST = '24.5.NEW-BOOKING-REQUEST';
/**
* ["passenger_name", "passenger_phone", "passenger_email", "booking_key", "booking_pickup_date", "booking_pickup_time", "booking_pickup_location", "booking_dropoff_location", "booking_vias_content", "booking_passengers", "booking_luggage", "booking_notes", "booking_cost", "booking_duration", "booking_distance", "booking_car_type", "booking_hand_luggage", "return_booking" => false, "return_booking_key", "return_booking_pickup_date", "return_booking_pickup_time", "return_booking_pickup_location", "return_booking_dropoff_location", "return_booking_vias_content", "return_booking_notes", "return_booking_duration", "return_booking_distance", "flight_number", "landing_time", "mg_timeframe", "currency_symbol"]
*
* @var string
*/
public static $TEMPLATE_SHUTTLE_ENQUIRY = '25.SHUTTLE-ENQUIRY';
/**
* ["passenger_name", "passenger_phone", "passenger_email", "booking_key", "booking_pickup_date", "booking_pickup_time", "booking_pickup_location", "booking_dropoff_location", "booking_cost", "booking_duration", "booking_distance", "driver_name", "driver_internal_name", "driver_email", "driver_PCO", "driver_HACK", "driver_SSN", "driver_phone", "driver_vehicle_name", "driver_vehicle_plate", "driver_vehicle_PHV", "driver_vehicle_LIMO", "driver_vehicle_color"]
*
* @var string
*/
public static $TEMPLATE_DRIVER_AUTO_CONFIRM = '26.DRIVER-AUTO-CONFIRM';
/**
* ["department", "bookingID", "message", "first_name", "last_name", "user_email", "user_phone"]
*
* @var string
*/
public static $CLIENT_SUPPORT_REQUEST = '27.CLIENT-SUPPORT-REQUEST';
/**
* [ticket_id, ticket_subject, ticket_description, ticket_creation_date, ticket_creation_time, booking_key, ticket_department, ticket_message]
*
* @var string
*/
public static $TICKETS = '28.TICKETS-EMAIL';
/**
* ["driver_ID", "driver_name", "driver_phone", "driver_email"]
*
* @var string
*/
public static $TEMPLATE_NEW_DRIVER_REGISTERED = '29.NEW-DRIVER-REGISTERED';
/**
* ["booking_key", "booking_creation_date", "booking_creation_time", "booking_origin", "passenger_name", "passenger_phone", "passenger_email", "booking_pickup_date", "booking_pickup_time", "booking_pickup_location", "booking_dropoff_location", "booking_vias_content", "booking_passengers", "booking_luggage", "booking_notes", "booking_cost", "booking_duration", "booking_distance", "booking_car_type", "booking_hand_luggage", "flight_number", "landing_time", "mg_timeframe", "currency_symbol", "error_message"]
*
* @var string
*/
public static $TEMPLATE_CHECK_PAYMENT_OPERATOR = '30.CHECK-PAYMENT-OPERATOR';
/**
* ["passenger_name", "passenger_email", "passenger_phone"]
*
* @var string
*/
public const TEMPLATE_NEW_CLIENT_ACCOUNT = '31.NEW-CLIENT-ACCOUNT';
/**
* ["client_email", "client_name", "client_phone", "document_type", "link_edit_account"]
*
* @var string
*/
public static $TEMPLATE_CLIENT_DOCUMENT_UPLOAD = '32.CLIENT-DOCUMENT-UPLOAD';
/**
* ["request_type", "request_email", "request_name", "request_phone"]
*
* @var string
*/
public static $TEMPLATE_DELETE_REQUEST = '33.DELETE-REQUEST';
/**
* ["request_email", "subject", "content"]
*
* @var string
*/
public static $TEMPLATE_EMAIL_NOTIFICATION_GENERAL = '34.EMAIL-NOTIFICATION-GENERAL';
public function __construct($apiKey)
{
$this->mandrill = new \Mandrill($apiKey);
}
public function getClient()
{
return $this->mandrill;
}
public function setOutput(OutputInterface $output)
{
$this->output = $output;
}
/**
* @param $template_name
* @param $template_content
* @param $message
* @param bool $async
* @param null $ip_pool
* @param null $send_at
* @return array|bool
*/
public function sendTemplate($template_name, $template_content, $message, $async = false, $ip_pool = null, $send_at = null)
{
// mapping from simple key => value to [ name => $key, content => $value]
if (!empty($message['global_merge_vars']) && is_array($message['global_merge_vars'])) {
foreach ($message['global_merge_vars'] as $key => $value) {
if (!is_array($value)) {
$message['global_merge_vars'][$key] = [
'name' => $key,
'content' => $value,
];
}
}
}
// mapping from simple to into [ $messate['to'] ]
if (!empty($message['to']) && is_array($message['to']) && !empty($message['to']['email'])) {
$message['to'] = [
$message['to'],
];
} else if (!empty($message['to']) && is_string($message['to']) && preg_match('/(.+)@(.+)\.(.+)/', $message['to'])) {
$message['to'] = [
[
'email' => $message['to'],
'name' => $message['to'],
'type' => 'to',
],
];
}
try {
$response = $this->mandrill->messages->sendTemplate($template_name, $template_content, $message, $async, $ip_pool, $send_at);
if (!empty($this->output)) {
$this->output->writeln('[' . date('Y-m-d H:i:s') . '][MandrillManager][sendTemplate] ' . json_encode($response));
}
return $response;
} catch (\Exception $e) {
if (!empty($this->output)) {
$this->output->writeln('[' . date('Y-m-d H:i:s') . '][MandrillManager][sendTemplate] ' . $e->getMessage());
}
return false;
}
}
/**
* Return all senders with to and CC + BCC
*
* @param Booking $booking
* @param int $template
* @return array
*/
public function getToListByBooking(Booking $booking, $template = null)
{
$to = [
[
'email' => $booking->getClientEmail(),
'name' => $booking->getClientFirstName() . ' ' . $booking->getClientLastName(),
'type' => 'to',
],
];
if ($booking->getClientAlternativeEmail()) {
$to[] = [
'email' => $booking->getClientAlternativeEmail(),
'name' => $booking->getClientFirstName() . ' ' . $booking->getClientLastName(),
'type' => 'bcc',
];
}
if ($template !== null && $booking->getClientUser() && $booking->getClientUser()->getAccount()) {
$company = $booking->getClientUser()->getAccount()->getCompany();
if ($company &&
(
$company->getConfigBookingEmails() == Company::CONFIG_BOOKING_EMAIL_ALL ||
($company->getConfigBookingEmails() == Company::CONFIG_BOOKING_EMAIL_CONFIRMATION && $template == MandrillManager::$TEMPLATE_NEW_BOOKING_CLIENT)
)
) {
$to[] = [
'email' => $company->getUser()->getEmail(),
'name' => $booking->getClientFirstName() . ' ' . $booking->getClientLastName(),
'type' => 'bcc',
];
}
}
return $to;
}
/**
* @param string $templateName
* @param array $vars
*
* @return string
*/
public function getEmailContent($templateName, array $vars = [])
{
$info = $this
->mandrill
->templates
->info($templateName)
;
$templateVars = [];
foreach ($vars as $name => $value) {
$templateVars[] = [
'name' => $name,
'content' => $value,
];
}
$result = $this
->mandrill
->templates
->render($templateName, [[
'name' => 'content',
'content' => $info['code'],
]], $templateVars)
;
return $result['html'];
}
/**
* @return array
*/
public static function getTemplates()
{
return [
self::$TEMPLATE_NEW_BOOKING_CLIENT,
self::$TEMPLATE_NEW_BOOKING_OFFICE,
self::$TEMPLATE_BOOKING_COMPLETED,
self::$TEMPLATE_BOOKING_CANCELLED,
self::$TEMPLATE_BOOKING_CANCELLED_AUTO,
self::$TEMPLATE_DRIVER_ALLOCATED,
self::$TEMPLATE_DRIVER_REALLOCATED,
self::$TEMPLATE_DRIVER_WAITING,
self::$TEMPLATE_DRIVER_ARRIVED,
self::$TEMPLATE_PAYMENT_INITIAL,
self::$TEMPLATE_PAYMENT_REMINDER,
self::$TEMPLATE_PAYMENT_WARNING,
self::$TEMPLATE_PENDING_CANCELLED,
self::$TEMPLATE_PENDING_CANCELLED_EXCEPTION,
self::$TEMPLATE_BOOKING_UPDATE,
self::$TEMPLATE_BOOKING_RECONFIRM,
self::$TEMPLATE_BOOKING_APPROACHING,
self::$TEMPLATE_DRIVER_PASSWORD_RESET,
self::$TEMPLATE_DRIVER_REGISTERED,
self::$TEMPLATE_PENDING_BOOKING,
self::$TEMPLATE_DRIVER_STATUS_CHECK,
self::$TEMPLATE_DRIVER_DOCUMENT_UPLOAD,
self::$TEMPLATE_RESEND_JOURNEY_INVOICE,
self::$TEMPLATE_CLIENT_PASSWORD_RESET,
self::$TEMPLATE_OPERATOR_BOOKING_CHECK,
self::$DRIVER_DEALLOCATE,
self::$TEMPLATE_DRIVER_INVOICE,
self::$TEMPLATE_PAYMENT_CONFIRMED_CARD,
self::$TEMPLATE_SEND_BOOKING_REQUEST,
self::$TEMPLATE_NEW_BOOKING_REQUEST,
self::$TEMPLATE_SHUTTLE_ENQUIRY,
self::$TEMPLATE_DRIVER_AUTO_CONFIRM,
self::$CLIENT_SUPPORT_REQUEST,
self::$TICKETS,
self::$TEMPLATE_NEW_DRIVER_REGISTERED,
self::$TEMPLATE_CHECK_PAYMENT_OPERATOR,
self::TEMPLATE_NEW_CLIENT_ACCOUNT,
self::$TEMPLATE_DELETE_REQUEST,
self::$TEMPLATE_EMAIL_NOTIFICATION_GENERAL,
];
}
}