log = new Moceansms_WooCoommerce_Logger();
$this->option_id = "moceansms_{$this::$plugin_identifier}";
$this->plugin_name = 'Jetpack CRM';
$this->plugin_medium = 'wp_' . str_replace( ' ', '_', strtolower($this->plugin_name));
}
public static function plugin_activated()
{
$log = new Moceansms_WooCoommerce_Logger();
if( ! is_plugin_active('zero-bs-crm/ZeroBSCRM.php')) { return false; }
return true;
}
public function register()
{
add_action( 'zbs_new_customer', array( $this, 'send_sms_on'), 10, 1);
}
public function get_option_id()
{
return $this->option_id;
}
public function get_setting_section_data()
{
return array(
'id' => $this->get_option_id(),
'title' => __( $this->plugin_name, MOCEANSMS_TEXT_DOMAIN ),
);
}
public function get_setting_field_data()
{
$setting_fields = array(
$this->get_enable_notification_fields(),
//$this->get_send_from_fields(),
$this->get_send_on_fields(),
);
foreach($this->get_sms_template_fields() as $sms_templates) {
$setting_fields[] = $sms_templates;
}
return $setting_fields;
}
public function get_plugin_settings($with_identifier = false)
{
$settings = array(
"moceansms_automation_enable_notification" => moceansms_get_options("moceansms_automation_enable_notification", $this->get_option_id()),
"moceansms_send_from" => moceansms_get_options('moceansms_automation_send_from', $this->get_option_id()),
"moceansms_automation_send_on" => moceansms_get_options("moceansms_automation_send_on", $this->get_option_id()),
"moceansms_automation_sms_template_customer" => moceansms_get_options("moceansms_automation_sms_template_customer", $this->get_option_id()),
"moceansms_automation_sms_template_lead" => moceansms_get_options("moceansms_automation_sms_template_lead", $this->get_option_id()),
"moceansms_automation_sms_template_refused" => moceansms_get_options("moceansms_automation_sms_template_refused", $this->get_option_id()),
"moceansms_automation_sms_template_blacklisted" => moceansms_get_options("moceansms_automation_sms_template_blacklisted", $this->get_option_id()),
);
if ($with_identifier) {
return array(
self::$plugin_identifier => $settings,
);
}
return $settings;
}
private function get_enable_notification_fields() {
return array(
'name' => 'moceansms_automation_enable_notification',
'label' => __( 'Enable WhatsApp notifications', MOCEANSMS_TEXT_DOMAIN ),
'desc' => ' ' . __( 'Enable', MOCEANSMS_TEXT_DOMAIN ),
'type' => 'checkbox',
'default' => 'off'
);
}
private function get_send_from_fields() {
return array(
'name' => 'moceansms_automation_send_from',
'label' => __( 'Send from', MOCEANSMS_TEXT_DOMAIN ),
'desc' => __( 'Sender of the WhatsApp when a message is received at a mobile phone', MOCEANSMS_TEXT_DOMAIN ),
'type' => 'text',
);
}
private function get_send_on_fields() {
return array(
'name' => 'moceansms_automation_send_on',
'label' => __( 'Send notification on', MOCEANSMS_TEXT_DOMAIN ),
'desc' => __( 'Choose when to send a WhatsApp notification message to your new contact', MOCEANSMS_TEXT_DOMAIN ),
'type' => 'multicheck',
'options' => array(
'customer' => 'New Customer',
'lead' => 'New Lead',
'refused' => 'New customer refused',
'blacklisted' => 'New customer blacklisted',
)
);
}
private function get_sms_template_fields() {
return array(
array(
'name' => 'moceansms_automation_sms_template_customer',
'label' => __( 'Customer status WhatsApp message', MOCEANSMS_TEXT_DOMAIN ),
'desc' => sprintf('Customize your WhatsApp with ', $this->get_option_id() ),
'type' => 'textarea',
'rows' => '8',
'cols' => '500',
'css' => 'min-width:350px;',
'default' => __( 'Hi [first_name], we would like to personally thank you for using our services.', MOCEANSMS_TEXT_DOMAIN )
),
array(
'name' => 'moceansms_automation_sms_template_lead',
'label' => __( 'Lead status WhatsApp message', MOCEANSMS_TEXT_DOMAIN ),
'desc' => sprintf('Customize your WhatsApp with ', $this->get_option_id() ),
'type' => 'textarea',
'rows' => '8',
'cols' => '500',
'css' => 'min-width:350px;',
'default' => __( 'Hi [first_name], thank you for showing interest in our services. Our sales representative will contact you shortly.', MOCEANSMS_TEXT_DOMAIN )
),
array(
'name' => 'moceansms_automation_sms_template_refused',
'label' => __( 'Contact refused status WhatsApp message', MOCEANSMS_TEXT_DOMAIN ),
'desc' => sprintf('Customize your WhatsApp with ', $this->get_option_id() ),
'type' => 'textarea',
'rows' => '8',
'cols' => '500',
'css' => 'min-width:350px;',
'default' => __( 'Hi [first_name], we sincerely apologise for not meeting your expectations. We promise to do better.', MOCEANSMS_TEXT_DOMAIN )
),
array(
'name' => 'moceansms_automation_sms_template_blacklisted',
'label' => __( 'Contact blacklisted WhatsApp message', MOCEANSMS_TEXT_DOMAIN ),
'desc' => sprintf('Customize your WhatsApp with ', $this->get_option_id() ),
'type' => 'textarea',
'rows' => '8',
'cols' => '500',
'css' => 'min-width:350px;',
'default' => __( 'Hi [first_name], thank you for your interest all these time, however we will need to terminate your access from our services.', MOCEANSMS_TEXT_DOMAIN )
),
);
}
public function get_keywords_field()
{
return array(
'customer' => array(
'id',
'status',
'email',
'prefix',
'first_name',
'last_name',
'full_name',
'address_1',
'address_2',
'city',
'state',
'country',
'postcode',
'sec_address_1',
'sec_address_2',
'sec_city',
'sec_state',
'sec_country',
'sec_postcode',
'home_tel',
'work_tel',
'mobile_tel',
'twitter_link',
'linkedin_link',
'facebook_link',
),
);
}
public function send_sms_on($cID)
{
$plugin_settings = $this->get_plugin_settings();
$enable_notifications = $plugin_settings['moceansms_automation_enable_notification'];
$send_on = $plugin_settings['moceansms_automation_send_on'];
$cust = zeroBS_getCustomer($cID, true, true, true);
$this->log->add("360MessengerWhatsApp", "cust_id: {$cust['id']}");
$status = strtolower($cust['status']);
if($enable_notifications === "on") {
$this->log->add("360MessengerWhatsApp", "enable notifications: on");
if(!empty($send_on) && is_array($send_on)) {
if(array_key_exists($status, $send_on)) {
$this->log->add("360MessengerWhatsApp", "enable {$status} notifications: on");
$this->send_customer_notification($cust, $status);
}
}
}
return false;
}
public function send_customer_notification($cust, $status)
{
$this->log->add("360MessengerWhatsApp", "send_customer_notification status: {$status}");
$settings = $this->get_plugin_settings();
$sms_from = $settings['moceansms_automation_send_from'];
// get number from args
$phone_no = $cust['mobtel'];
if( !ctype_digit($phone_no) ) {
$this->log->add("360MessengerWhatsApp", "phone_no is not a digit: {$phone_no}. Aborting...");
return;
}
if( !empty($cust['country']) ) {
$mocean_setting = new Moceansms_WooCommerce_Setting();
$countries = $mocean_setting->get_countries();
$country = array_search($cust['country'], $countries);
$phone_no = MoceanSMS_SendSMS_Sms::get_formatted_number($cust['mobtel'], $country);
} else {
$phone_no = $cust['mobtel'];
}
$this->log->add("360MessengerWhatsApp", "phone_no: {$phone_no}");
// get message template from status
$msg_template = $settings["moceansms_automation_sms_template_{$status}"];
$message = $this->replace_keywords_with_value($cust, $msg_template);
MoceanSMS_SendSMS_Sms::send_sms($sms_from, $phone_no, $message, $this->plugin_medium);
}
/*
returns the message with keywords replaced to original value it points to
eg: [name] => 'customer name here'
*/
protected function replace_keywords_with_value($cust, $message)
{
// use regex to match all [stuff_inside]
// return the message
// preg_match_all('/\[(.*?)\]/', $message, $keywords);
$mocean_setting = new Moceansms_WooCommerce_Setting();
$keywords = array(
'[id]' => !empty($cust['id']) ? $cust['id'] : '',
'[status]' => !empty($cust['status']) ? $cust['status'] : '',
'[email]' => !empty($cust['email']) ? $cust['email'] : '',
'[prefix]' => !empty($cust['prefix']) ? $cust['prefix'] : '',
'[first_name]' => !empty($cust['fname']) ? $cust['fname'] : '',
'[last_name]' => !empty($cust['lname']) ? $cust['lname'] : '',
'[full_name]' => !empty($cust['fullname']) ? $cust['fullname'] : '',
'[address_1]' => !empty($cust['addr1']) ? $cust['addr1'] : '',
'[address_2]' => !empty($cust['addr2']) ? $cust['addr2'] : '',
'[city]' => !empty($cust['city']) ? $cust['city'] : '',
'[state]' => !empty($cust['county']) ? $cust['county'] : '',
'[country]' => !empty($cust['country']) ? $cust['country'] : '',
'[postcode]' => !empty($cust['postcode']) ? $cust['postcode'] : '',
'[sec_address_1]' => !empty($cust['secaddr_addr1']) ? $cust['secaddr_addr1'] : '',
'[sec_address_2]' => !empty($cust['secaddr_addr2']) ? $cust['secaddr_addr2'] : '',
'[sec_city]' => !empty($cust['secaddr_city']) ? $cust['secaddr_city'] : '',
'[sec_state]' => !empty($cust['secaddr_county']) ? $cust['secaddr_county'] : '',
'[sec_country]' => !empty($cust['secaddr_country']) ? $cust['secaddr_country'] : '',
'[sec_postcode]' => !empty($cust['secaddr_postcode']) ? $cust['secaddr_postcode'] : '',
'[home_tel]' => !empty($cust['hometel']) ? $cust['hometel'] : '',
'[work_tel]' => !empty($cust['worktel']) ? $cust['worktel'] : '',
'[mobile_tel]' => !empty($cust['mobtel']) ? $cust['mobtel'] : '',
'[twitter_link]' => !empty($cust['tw']) ? $cust['tw'] : '',
'[linkedin_link]' => !empty($cust['li']) ? $cust['li'] : '',
'[facebook_link]' => !empty($cust['fb']) ? $cust['fb'] : '',
);
return str_replace(array_keys($keywords), array_values($keywords), $message);
}
}