/home/hamzarou/www/wp-content/plugins/sms-alert/handler/forms/class-booknetic.php
<?php
/**
* Booknetic helper.
*
* PHP version 5
*
* @category Handler
* @package SMSAlert
* @author SMS Alert <support@cozyvision.com>
* @license URI: http://www.gnu.org/licenses/gpl-2.0.html
* @link https://www.smsalert.co.in/
*/
if (defined('ABSPATH') === false) {
exit;
}
if (is_plugin_active('booknetic/init.php') === false) {
return;
}
use BookneticApp\Models\Customer;
use BookneticApp\Models\Service;
use BookneticApp\Models\Staff;
use BookneticApp\Models\Location;
use BookneticApp\Models\Appointment;
use BookneticApp\Providers\Helpers\Date;
/**
* PHP version 5
*
* @category Handler
* @package SMSAlert
* @author SMS Alert <support@cozyvision.com>
* @license URI: http://www.gnu.org/licenses/gpl-2.0.html
* @link https://www.smsalert.co.in/
*
* SMBooknetic class
*/
class SMBooknetic extends FormInterface
{
/**
*
* Construct function.
*
* @return void
*/
public function handleForm()
{
add_action('bkntc_appointment_created', array($this, 'sendSmsOn'), 5, 1);
add_action('bkntc_payment_confirmed', array($this, 'sendSmsOnConfirmPayment'), 5, 1);
add_action('bkntc_appointment_after_edit', array($this, 'sendSmsOn'), 5, 1);
}
/**
* Add default settings to savesetting in setting-options.
*
* @param array $defaults defaults.
*
* @return array
*/
public static function add_default_setting($defaults = array())
{
$bookingStatuses = [
'pending',
'approved',
'canceled',
'rejected',
];
foreach ($bookingStatuses as $ks => $vs) {
$defaults['smsalert_bnc_general']['customer_bnc_notify_' . $vs] = 'off';
$defaults['smsalert_bnc_message']['customer_sms_bnc_body_' . $vs] = '';
$defaults['smsalert_bnc_general']['admin_bnc_notify_' . $vs] = 'off';
$defaults['smsalert_bnc_message']['admin_sms_bnc_body_' . $vs] = '';
}
return $defaults;
}
/**
* Add tabs to smsalert settings at backend.
*
* @param array $tabs tabs.
*
* @return array
*/
public static function add_tabs($tabs = array())
{
$customerParam = array(
'checkTemplateFor' => 'bnc_customer',
'templates' => self::getCustomerTemplates(),
);
$admin_param = array(
'checkTemplateFor' => 'bnc_admin',
'templates' => self::getAdminTemplates(),
);
$tabs['booknetic']['nav'] = 'Booknetic';
$tabs['booknetic']['icon'] = 'dashicons-food';
$tabs['booknetic']['inner_nav']['booknetic_cust']['title'] = 'Customer Notifications';
$tabs['booknetic']['inner_nav']['booknetic_cust']['tab_section'] = 'bookneticcusttemplates';
$tabs['booknetic']['inner_nav']['booknetic_cust']['first_active'] = true;
$tabs['booknetic']['inner_nav']['booknetic_cust']['tabContent'] = $customerParam;
$tabs['booknetic']['inner_nav']['booknetic_cust']['filePath'] = 'views/message-template.php';
$tabs['booknetic']['inner_nav']['booknetic_admin']['title'] = 'Admin Notifications';
$tabs['booknetic']['inner_nav']['booknetic_admin']['tab_section'] = 'bookneticadmintemplates';
$tabs['booknetic']['inner_nav']['booknetic_admin']['tabContent'] = $admin_param;
$tabs['booknetic']['inner_nav']['booknetic_admin']['filePath'] = 'views/message-template.php';
return $tabs;
}
/**
* Get customer templates.
*
* @return array
*/
public static function getCustomerTemplates()
{
$bookingStatuses = array(
'pending' => 'Pending',
'approved' => 'Approved',
'canceled' => 'Cancelled',
'rejected' => 'Rejected',
);
$templates = [];
foreach ($bookingStatuses as $ks => $vs) {
$currentVal = smsalert_get_option('customer_bnc_notify_' . strtolower($ks), 'smsalert_bnc_general', 'on');
$checkboxNameId = 'smsalert_bnc_general[customer_bnc_notify_' . strtolower($ks) . ']';
$textareaNameId = 'smsalert_bnc_message[customer_sms_bnc_body_' . strtolower($ks) . ']';
$defaultTemplate = smsalert_get_option('customer_sms_bnc_body_' . strtolower($ks), 'smsalert_bnc_message', sprintf(__('Hello %1$s, status of your booking #%2$s with %3$s has been changed to %4$s.%5$sPowered by%6$swww.smsalert.co.in', 'sms-alert'), '[first_name]', '[service_name]', '[store_name]', $vs, PHP_EOL, PHP_EOL));
$textBody = smsalert_get_option('customer_sms_bnc_body_' . strtolower($ks), 'smsalert_bnc_message', $defaultTemplate);
$templates[$ks]['title'] = 'When customer booking is ' . ucwords($vs);
$templates[$ks]['enabled'] = $currentVal;
$templates[$ks]['status'] = $ks;
$templates[$ks]['text-body'] = $textBody;
$templates[$ks]['checkboxNameId'] = $checkboxNameId;
$templates[$ks]['textareaNameId'] = $textareaNameId;
$templates[$ks]['token'] = self::geBookneticvariables();
}
return $templates;
}
/**
* Get admin templates.
*
* @return array
*/
public static function getAdminTemplates()
{
$bookingStatuses = array(
'pending' => 'Pending',
'approved' => 'Approved',
'canceled' => 'Cancelled',
'rejected' => 'Rejected',
);
$templates = [];
foreach ($bookingStatuses as $ks => $vs) {
$currentVal = smsalert_get_option('admin_bnc_notify_' . strtolower($ks), 'smsalert_bnc_general', 'on');
$checkboxNameId = 'smsalert_bnc_general[admin_bnc_notify_' . strtolower($ks) . ']';
$textareaNameId = 'smsalert_bnc_message[admin_sms_bnc_body_' . strtolower($ks) . ']';
$defaultTemplate = smsalert_get_option('admin_sms_bnc_body_' . strtolower($ks), 'smsalert_bnc_message', sprintf(__('%1$s status of booking has been changed to %2$s.', 'sms-alert'), '[store_name]:', $vs));
$textBody = smsalert_get_option('admin_sms_bnc_body_' . strtolower($ks), 'smsalert_bnc_message', $defaultTemplate);
$templates[$ks]['title'] = 'When admin change status to ' . $vs;
$templates[$ks]['enabled'] = $currentVal;
$templates[$ks]['status'] = $ks;
$templates[$ks]['text-body'] = $textBody;
$templates[$ks]['checkboxNameId'] = $checkboxNameId;
$templates[$ks]['textareaNameId'] = $textareaNameId;
$templates[$ks]['token'] = self::geBookneticvariables();
}
return $templates;
}
public function sendSmsOnConfirmPayment($appointmentId){
$appointmentData = Appointment::get($appointmentId);
$appointmentData['appointmentId'] = $appointmentId;
$appointmentData['customerData'] = Customer::get($appointmentData['customer_id']);
$appointmentData['customerData']['phone'] = Customer::get($appointmentData['customer_id'])->phone_number;
$appointmentData['date'] = Date::format( 'Y-m-d', $appointmentData['starts_at']);
$appointmentData['time'] = Date::format( 'H:i:s A', $appointmentData['starts_at']);
$appointmentData['locationInf'] = Location::get($appointmentData['location_id'] );
$appointmentData['serviceInf'] = Service::get($appointmentData['service_id']);
$appointmentData['staffInf'] = Staff::get($appointmentData['staff_id'] );
$this->sendSmsOn($appointmentData);
}
/**
* Send sms approved pending.
*
* @param int $appointmentData appointmentData
*
* @return void
*/
public function sendSmsOn($appointmentData)
{
$dataId = $appointmentData->customerId;
$customerInfo = Customer::get($dataId);
$bookingStatus = $appointmentData->status;
$buyerNumber = !empty($appointmentData->customerData['phone']) ? $appointmentData->customerData['phone'] : $customerInfo->phone_number;
$customerMessage = smsalert_get_option('customer_sms_bnc_body_' .$bookingStatus, 'smsalert_bnc_message', '');
$customerNotify = smsalert_get_option('customer_bnc_notify_' . $bookingStatus, 'smsalert_bnc_general', 'on');
if (($customerNotify === 'on' && $customerMessage !== '' && $buyerNumber != '')) {
$buyerMessage = $this->parseSmsBody($customerInfo, $appointmentData, $customerMessage);
do_action('sa_send_sms', $buyerNumber, $buyerMessage);
}
// Send msg to admin.
$adminPhoneNumber = smsalert_get_option('sms_admin_phone', 'smsalert_message', '');
if (empty($adminPhoneNumber) === false) {
$adminNotify = smsalert_get_option('admin_bnc_notify_' .$bookingStatus, 'smsalert_bnc_general', 'on');
$adminMessage = smsalert_get_option('admin_sms_bnc_body_' . $bookingStatus, 'smsalert_bnc_message', '');
$nos = explode(',', $adminPhoneNumber);
$adminPhoneNumber = array_diff($nos, array('postauthor', 'post_author'));
$adminPhoneNumber = implode(',', $adminPhoneNumber);
if ($adminNotify === 'on' && $adminMessage !== '') {
$adminMessage = $this->parseSmsBody($customerInfo, $appointmentData, $adminMessage);
do_action('sa_send_sms', $adminPhoneNumber, $adminMessage);
}
}
}
/**
* Parse sms body.
*
* @param array $customerInfo customerInfo.
* @param array $appointmentData appointmentData.
* @param string $content content.
*
* @return string
*/
public function parseSmsBody($customerInfo,$appointmentData, $content = null)
{
$appointmentId =$appointmentData->appointmentId;
$firstName = !empty($appointmentData->customerData['first_name']) ? $appointmentData->customerData['first_name'] : $customerInfo->first_name;
$lastName = !empty($appointmentData->customerData['last_name']) ? $appointmentData->customerData['last_name'] : $customerInfo->last_name;
$custEmail = !empty($appointmentData->customerData['email']) ? $appointmentData->customerData['email'] : $customerInfo->email;
$custPhone = !empty($appointmentData->customerData['phone']) ? $appointmentData->customerData['phone'] : $customerInfo->phone_number;
$appointmentDate = $appointmentData->date;
$appointmentTime = $appointmentData->time;
$serviceId = $appointmentData->serviceInf['id'];
$serviceName = $appointmentData->serviceInf['name'];
$servicePrice = $appointmentData->serviceInf['price'];
$staffId = $appointmentData->staffInf['id'];
$staffName = $appointmentData->staffInf['name'];
$staffEmail = $appointmentData->staffInf['email'];
$staffPhone = $appointmentData->staffInf['phone_number'];
$locationId = $appointmentData->locationInf['id'];
$locationName = $appointmentData->locationInf['name'];
$locationAddress = $appointmentData->locationInf['address'];
$locationPhone = $appointmentData->locationInf['phone_number'];
$postStatus = $appointmentData->status;
$find = array(
'[appointmentId]',
'[first_name]',
'[last_name]',
'[email]',
'[phone]',
'[booking_date]',
'[booking_time]',
'[service_id]',
'[service_name]',
'[service_price]',
'[staff_id]',
'[staff_name]',
'[staff_email]',
'[staff_Phone]',
'[location_id]',
'[location_name]',
'[location_address]',
'[location_phone]',
'[status]',
);
$replace = array(
$appointmentId,
$firstName,
$lastName,
$custEmail,
$custPhone,
$appointmentDate,
$appointmentTime,
$serviceId,
$serviceName,
$servicePrice,
$staffId,
$staffName,
$staffEmail,
$staffPhone,
$locationId,
$locationName,
$locationAddress,
$locationPhone,
$postStatus
);
$content = str_replace($find, $replace, $content);
return $content;
}
/**
* Get Restaurant Reservations variables.
*
* @return array
*/
public static function geBookneticvariables()
{
$variable['[appointmentId]'] = 'Appointment Id';
$variable['[first_name]'] = 'First Name';
$variable['[last_name]'] = 'Last Name';
$variable['[email]'] = 'Email';
$variable['[phone]'] = 'Phone';
$variable['[booking_date]'] = 'Booking Date';
$variable['[booking_time]'] = 'Booking Time';
$variable['[service_id]'] = 'Service Id';
$variable['[service_name]'] = 'Service Name';
$variable['[service_price]'] = 'Service Price';
$variable['[staff_id]'] = 'Staff Id';
$variable['[staff_name]'] = 'Staff Name';
$variable['[staff_email]'] = 'Staff Email';
$variable['[staff_Phone]'] = 'Staff Phone';
$variable['[location_id]'] = 'Location Id';
$variable['[location_name]'] = 'Location Name';
$variable['[location_address]'] = 'Location Address';
$variable['[location_phone]'] = 'Location Phone';
$variable['[status]'] = 'Post Status';
return $variable;
}
/**
* Handle form for WordPress backend
*
* @return void
*/
public function handleFormOptions()
{
if (is_plugin_active('booknetic/init.php') === true) {
add_filter('sAlertDefaultSettings', __CLASS__ . '::add_default_setting', 1);
add_action('sa_addTabs', array($this, 'add_tabs'), 10);
}
}
/**
* Check your otp setting is enabled or not.
*
* @return bool
*/
public function isFormEnabled()
{
$userAuthorize = new smsalert_Setting_Options();
$islogged = $userAuthorize->is_user_authorised();
if ((is_plugin_active('booknetic/init.php') === true) && ($islogged === true)) {
return true;
} else {
return false;
}
}
/**
* Handle after failed verification
*
* @param object $userLogin users object.
* @param string $userEmail user email.
* @param string $phoneNumber phone number.
*
* @return void
*/
public function handle_failed_verification($userLogin, $userEmail, $phoneNumber)
{
}
/**
* Handle after post verification
*
* @param string $redirectTo redirect url.
* @param object $userLogin user object.
* @param string $userEmail user email.
* @param string $password user password.
* @param string $phoneNumber phone number.
* @param string $extraData extra hidden fields.
*
* @return void
*/
public function handle_post_verification($redirectTo, $userLogin, $userEmail, $password, $phoneNumber, $extraData)
{
}
/**
* Clear otp session variable
*
* @return void
*/
public function unsetOTPSessionVariables()
{
}
/**
* Check current form submission is ajax or not
*
* @param bool $isAjax bool value for form type.
*
* @return bool
*/
public function is_ajax_form_in_play($isAjax)
{
return $isAjax;
}
}
new SMBooknetic();