<?php
$hooks = ["invoice-created", "invoice-returned", "invoice-cancelled", "invoice-reminder", "invoice-overdue", "invoice-has-been-approved", "invoice-has-been-taxed", "invoice-awaiting-confirmation", "invoice-auto-payment-failed", "invoice-subscription-payment-failed", "order-has-been-taken", "order-has-been-approved", "order-has-been-suspended", "order-has-been-activated", "order-has-been-cancelled", "hosting-server-activation", "order-has-been-extended", "domain-registered", "domain-transfered", "domain-has-been-activated", "domain-has-been-extended", "domain-has-been-suspended", "domain-has-been-cancelled", "domain-submit-transfer-code", "ticket-resolved-automatic", "ticket-replied-by-admin", "ticket-has-been-created-by-admin", "ticket-your-has-been-created", "ticket-your-has-been-processed", "ticket-resolved-by-admin", "ticket-replied-by-admin-pipe", "ticket-assigned-to-you", "ticket-resolved-by-user", "ticket-replied-by-user", "ticket-has-been-created-by-user", "sms-origin-request-received", "sms-origin-has-been-approved", "sms-origin-has-been-inactivated", "sms-intl-origin-request-received", "sms-intl-origin-has-been-approved", "sms-intl-origin-has-been-inactivated", "welcome", "forget-password", "forget-password-admin", "email-activation", "gsm-activation", "approve-ctoc-service-transfer", "account-has-been-blocked", "account-has-been-activated", "dealership-has-been-activated", "credit-fell-below-a-minimum", "contact-form-admin-reply", "message-from-admin", "email-changed", "password-changed", "failed-member-login-attempt", "approved-gdpr-request", "declined-gdpr-request", "contact-form", "customer-feedback", "failed-order-activation", "need-manually-upgrading", "need-manually-transaction", "customer-has-upgraded", "cancel-request-created", "created-backup-db", "task-plan-created", "reminding", "failed-admin-login-attempt"];
foreach ($hooks as $hook) {
$hook = str_replace("-", "_", $hook);
Hook::add("SendNotification_" . $hook, 1, ["class" => "WhatsAppNotification", "method" => $hook]);
}
class WhatsAppNotification
{
public $error;
public $config;
public $lang;
private $temp_lfile;
private $templates = ["invoice-created" => "invoice", "invoice-returned" => "invoice", "invoice-cancelled" => "invoice", "invoice-reminder" => "invoice", "invoice-overdue" => "invoice", "invoice-has-been-approved" => "invoice", "invoice-has-been-taxed" => "invoice", "invoice-awaiting-confirmation" => "invoice", "invoice-auto-payment-failed" => "invoice", "invoice-subscription-payment-failed" => "invoice", "order-has-been-taken" => "order", "order-has-been-approved" => "order", "order-has-been-suspended" => "order", "order-has-been-activated" => "order", "order-has-been-cancelled" => "order", "hosting-server-activation" => "order", "order-has-been-extended" => "order", "domain-registered" => "domain", "domain-transfered" => "domain", "domain-has-been-activated" => "domain", "domain-has-been-extended" => "domain", "domain-has-been-suspended" => "domain", "domain-has-been-cancelled" => "domain", "domain-submit-transfer-code" => "domain", "ticket-resolved-automatic" => "user-tickets", "ticket-replied-by-admin" => "user-tickets", "ticket-has-been-created-by-admin" => "user-tickets", "ticket-your-has-been-created" => "user-tickets", "ticket-your-has-been-processed" => "user-tickets", "ticket-resolved-by-admin" => "user-tickets", "ticket-replied-by-admin-pipe" => "user-tickets", "ticket-assigned-to-you" => "admin-tickets", "ticket-resolved-by-user" => "admin-tickets", "ticket-replied-by-user" => "admin-tickets", "ticket-has-been-created-by-user" => "admin-tickets", "sms-origin-request-received" => "sms", "sms-origin-has-been-approved" => "sms", "sms-origin-has-been-inactivated" => "sms", "sms-intl-origin-request-received" => "sms-intl", "sms-intl-origin-has-been-approved" => "sms-intl", "sms-intl-origin-has-been-inactivated" => "sms-intl", "welcome" => "user", "forget-password" => "user", "forget-password-admin" => "user", "email-activation" => "user", "gsm-activation" => "user", "approve-ctoc-service-transfer" => "user", "account-has-been-blocked" => "user", "account-has-been-activated" => "user", "dealership-has-been-activated" => "user", "credit-fell-below-a-minimum" => "user", "contact-form-admin-reply" => "user", "message-from-admin" => "user", "email-changed" => "user", "password-changed" => "user", "failed-member-login-attempt" => "user", "approved-gdpr-request" => "user", "declined-gdpr-request" => "user", "contact-form" => "admin-messages", "customer-feedback" => "admin-messages", "failed-order-activation" => "admin-messages", "need-manually-upgrading" => "admin-messages", "need-manually-transaction" => "admin-messages", "customer-has-upgraded" => "admin-messages", "cancel-request-created" => "admin-messages", "created-backup-db" => "admin-messages", "task-plan-created" => "admin-messages", "reminding" => "admin-messages", "failed-admin-login-attempt" => "admin-messages"];
public function __construct()
{
$this->config = (include __DIR__ . DS . "config.php");
$this->lang = Modules::Lang("Addons", "WhatsAppNotification");
}
public function change_addon_status($arg = "")
{
$status = $arg == "enable";
$config = (include __DIR__ . DS . "config.php");
$config["status"] = $status;
$config = Utility::array_export($config, ["pwith" => true]);
FileManager::file_write(__DIR__ . DS . "config.php", $config);
return true;
}
public function main()
{
if(Filter::isPOST()) {
if(DEMO_MODE) {
Controllers::$init->takeDatas(["language"]);
exit(Utility::jencode(["status" => "error", "message" => __("website/others/demo-mode-error")]));
}
$operation = Filter::init("POST/module_operation", "route");
if($operation == "save_config") {
return $this->save_config();
}
}
$this->settings_view();
}
private function save_config()
{
$config = (include __DIR__ . DS . "config.php");
$api_key = Filter::init("POST/api_key", "hclear");
$phone_number = Filter::init("POST/phone_number", "hclear");
$checkApi = $this->testConnection($api_key, $phone_number, "Test Message");
if($checkApi) {
if(Validation::isEmpty($api_key)) {
exit(Utility::jencode(["status" => "error", "for" => "input[name='api_key']", "message" => $this->lang["error2"]]));
}
if(Validation::isEmpty($phone_number)) {
exit(Utility::jencode(["status" => "error", "for" => "input[name='phone_number']", "message" => $this->lang["error2"]]));
}
$config["settings"]["api_key"] = $api_key;
$config["settings"]["phone_number"] = $phone_number;
$inputs = ["invoice-created", "invoice-returned", "invoice-cancelled", "invoice-reminder", "invoice-overdue", "invoice-has-been-approved", "invoice-has-been-taxed", "invoice-awaiting-confirmation", "invoice-auto-payment-failed", "invoice-subscription-payment-failed", "order-has-been-taken", "order-has-been-approved", "order-has-been-suspended", "order-has-been-activated", "order-has-been-cancelled", "hosting-server-activation", "order-has-been-extended", "domain-registered", "domain-transfered", "domain-has-been-activated", "domain-has-been-extended", "domain-has-been-suspended", "domain-has-been-cancelled", "domain-submit-transfer-code", "ticket-resolved-automatic", "ticket-replied-by-admin", "ticket-has-been-created-by-admin", "ticket-your-has-been-created", "ticket-your-has-been-processed", "ticket-resolved-by-admin", "ticket-replied-by-admin-pipe", "sms-origin-request-received", "sms-origin-has-been-approved", "sms-origin-has-been-inactivated", "sms-intl-origin-request-received", "sms-intl-origin-has-been-approved", "sms-intl-origin-has-been-inactivated", "welcome", "forget-password", "forget-password-admin", "email-activation", "gsm-activation", "approve-ctoc-service-transfer", "account-has-been-blocked", "account-has-been-activated", "dealership-has-been-activated", "credit-fell-below-a-minimum", "contact-form-admin-reply", "message-from-admin", "email-changed", "password-changed", "failed-member-login-attempt", "approved-gdpr-request", "declined-gdpr-request", "invoice-created-foradmin", "invoice-returned-foradmin", "invoice-cancelled-foradmin", "invoice-reminder-foradmin", "invoice-overdue-foradmin", "invoice-has-been-approved-foradmin", "invoice-has-been-taxed-foradmin", "invoice-awaiting-confirmation-foradmin", "invoice-auto-payment-failed-foradmin", "invoice-subscription-payment-failed-foradmin", "order-has-been-taken-foradmin", "order-has-been-approved-foradmin", "order-has-been-suspended-foradmin", "order-has-been-activated-foradmin", "order-has-been-cancelled-foradmin", "hosting-server-activation-foradmin", "order-has-been-extended-foradmin", "domain-registered-foradmin", "domain-transfered-foradmin", "domain-has-been-activated-foradmin", "domain-has-been-extended-foradmin", "domain-has-been-suspended-foradmin", "domain-has-been-cancelled-foradmin", "domain-submit-transfer-code-foradmin", "sms-origin-request-received-foradmin", "sms-origin-has-been-approved-foradmin", "sms-origin-has-been-inactivated-foradmin", "sms-intl-origin-request-received-foradmin", "sms-intl-origin-has-been-approved-foradmin", "sms-intl-origin-has-been-inactivated-foradmin", "welcome-foradmin", "forget-password-foradmin", "forget-password-admin-foradmin", "email-activation-foradmin", "gsm-activation-foradmin", "approve-ctoc-service-transfer-foradmin", "account-has-been-blocked-foradmin", "account-has-been-activated-foradmin", "dealership-has-been-activated-foradmin", "credit-fell-below-a-minimum-foradmin", "contact-form-admin-reply-foradmin", "message-from-admin-foradmin", "email-changed-foradmin", "password-changed-foradmin", "failed-member-login-attempt-foradmin", "approved-gdpr-request-foradmin", "declined-gdpr-request-foradmin", "ticket-assigned-to-you-foradmin", "ticket-resolved-by-user-foradmin", "ticket-replied-by-user-foradmin", "ticket-has-been-created-by-user-foradmin", "contact-form-foradmin", "customer-feedback-foradmin", "failed-order-activation-foradmin", "need-manually-upgrading-foradmin", "need-manually-transaction-foradmin", "customer-has-upgraded-foradmin", "cancel-request-created-foradmin", "created-backup-db-foradmin", "task-plan-created-foradmin", "reminding-foradmin", "failed-admin-login-attempt-foradmin"];
foreach ($inputs as $input) {
$input = str_replace("-", "_", $input);
$config["settings"][$input] = Filter::init("POST/" . $input, "hclear") == "on" ? true : false;
}
FileManager::file_write(__DIR__ . DS . "config.php", Utility::array_export($config, ["pwith" => true]));
echo Utility::jencode(["status" => "successful", "message" => $this->lang["success1"]]);
return true;
} else {
exit(Utility::jencode(["status" => "error", "message" => $this->lang["error1"]]));
}
}
private function settings_view()
{
$config = $this->config;
$request_uri = Controllers::$init->AdminCRLink("tools-1", ["addons"]);
$lang = $this->lang;
include __DIR__ . DS . "views" . DS . "settings.php";
}
public function sendMessage($phone, $message)
{
$body = ["api_key" => $this->config["settings"]["api_key"], "receiver" => $phone, "data" => ["message" => strip_tags($message)]];
$curl = curl_init();
curl_setopt_array($curl, [CURLOPT_URL => "
https://my.wpileti.com/api/send-message", CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_POSTFIELDS => json_encode($body), CURLOPT_HTTPHEADER => ["Accept: */*", "Content-Type: application/json"]]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
}
private function testConnection($botKey, $userId, $msg)
{
return true;
}
public function invoice_created($params = [])
{
$this->notifyHook($params, "invoice_created");
}
public function invoice_returned($params = [])
{
$this->notifyHook($params, "invoice_returned");
}
public function invoice_cancelled($params = [])
{
$this->notifyHook($params, "invoice_cancelled");
}
public function invoice_reminder($params = [])
{
$this->notifyHook($params, "invoice_reminder");
}
public function invoice_overdue($params = [])
{
$this->notifyHook($params, "invoice_overdue");
}
public function invoice_has_been_approved($params = [])
{
$this->notifyHook($params, "invoice_has_been_approved");
}
public function invoice_has_been_taxed($params = [])
{
$this->notifyHook($params, "invoice_has_been_taxed");
}
public function invoice_awaiting_confirmation($params = [])
{
$this->notifyHook($params, "invoice_awaiting_confirmation");
}
public function invoice_auto_payment_failed($params = [])
{
$this->notifyHook($params, "invoice_auto_payment_failed");
}
public function invoice_subscription_payment_failed($params = [])
{
$this->notifyHook($params, "invoice_subscription_payment_failed");
}
public function order_has_been_taken($params = [])
{
$this->notifyHook($params, "order_has_been_taken");
}
public function order_has_been_approved($params = [])
{
$this->notifyHook($params, "order_has_been_approved");
}
public function order_has_been_suspended($params = [])
{
$this->notifyHook($params, "order_has_been_suspended");
}
public function order_has_been_activated($params = [])
{
$this->notifyHook($params, "order_has_been_activated");
}
public function order_has_been_cancelled($params = [])
{
$this->notifyHook($params, "order_has_been_cancelled");
}
public function hosting_server_activation($params = [])
{
$this->notifyHook($params, "hosting_server_activation");
}
public function order_has_been_extended($params = [])
{
$this->notifyHook($params, "order_has_been_extended");
}
public function domain_registered($params = [])
{
$this->notifyHook($params, "domain_registered");
}
public function domain_transfered($params = [])
{
$this->notifyHook($params, "domain_transfered");
}
public function domain_has_been_activated($params = [])
{
$this->notifyHook($params, "domain_has_been_activated");
}
public function domain_has_been_extended($params = [])
{
$this->notifyHook($params, "domain_has_been_extended");
}
public function domain_has_been_suspended($params = [])
{
$this->notifyHook($params, "domain_has_been_suspended");
}
public function domain_has_been_cancelled($params = [])
{
$this->notifyHook($params, "domain_has_been_cancelled");
}
public function domain_submit_transfer_code($params = [])
{
$this->notifyHook($params, "domain_submit_transfer_code");
}
public function ticket_resolved_automatic($params = [])
{
$this->notifyHook($params, "ticket_resolved_automatic");
}
public function ticket_replied_by_admin($params = [])
{
$this->notifyHook($params, "ticket_replied_by_admin");
}
public function ticket_has_been_created_by_admin($params = [])
{
$this->notifyHook($params, "ticket_has_been_created_by_admin");
}
public function ticket_your_has_been_created($params = [])
{
$this->notifyHook($params, "ticket_your_has_been_created");
}
public function ticket_your_has_been_processed($params = [])
{
$this->notifyHook($params, "ticket_your_has_been_processed");
}
public function ticket_resolved_by_admin($params = [])
{
$this->notifyHook($params, "ticket_resolved_by_admin");
}
public function ticket_replied_by_admin_pipe($params = [])
{
$this->notifyHook($params, "ticket_replied_by_admin_pipe");
}
public function ticket_assigned_to_you($params = [])
{
$this->notifyHook($params, "ticket_assigned_to_you");
}
public function ticket_resolved_by_user($params = [])
{
$this->notifyHook($params, "ticket_resolved_by_user");
}
public function ticket_replied_by_user($params = [])
{
$this->notifyHook($params, "ticket_replied_by_user");
}
public function ticket_has_been_created_by_user($params = [])
{
$this->notifyHook($params, "ticket_has_been_created_by_user");
}
public function sms_origin_request_received($params = [])
{
$this->notifyHook($params, "sms_origin_request_received");
}
public function sms_origin_has_been_approved($params = [])
{
$this->notifyHook($params, "sms_origin_has_been_approved");
}
public function sms_origin_has_been_inactivated($params = [])
{
$this->notifyHook($params, "sms_origin_has_been_inactivated");
}
public function sms_intl_origin_request_received($params = [])
{
$this->notifyHook($params, "sms_intl_origin_request_received");
}
public function sms_intl_origin_has_been_approved($params = [])
{
$this->notifyHook($params, "sms_intl_origin_has_been_approved");
}
public function sms_intl_origin_has_been_inactivated($params = [])
{
$this->notifyHook($params, "sms_intl_origin_has_been_inactivated");
}
public function welcome($params = [])
{
$this->notifyHook($params, "welcome");
}
public function forget_password($params = [])
{
$this->notifyHook($params, "forget_password");
}
public function forget_password_admin($params = [])
{
$this->notifyHook($params, "forget_password_admin");
}
public function email_activation($params = [])
{
$this->notifyHook($params, "email_activation");
}
public function gsm_activation($params = [])
{
$this->notifyHook($params, "gsm_activation");
}
public function approve_ctoc_service_transfer($params = [])
{
$this->notifyHook($params, "approve_ctoc_service_transfer");
}
public function account_has_been_blocked($params = [])
{
$this->notifyHook($params, "account_has_been_blocked");
}
public function account_has_been_activated($params = [])
{
$this->notifyHook($params, "account_has_been_activated");
}
public function dealership_has_been_activated($params = [])
{
$this->notifyHook($params, "dealership_has_been_activated");
}
public function credit_fell_below_a_minimum($params = [])
{
$this->notifyHook($params, "credit_fell_below_a_minimum");
}
public function contact_form_admin_reply($params = [])
{
$this->notifyHook($params, "contact_form_admin_reply");
}
public function message_from_admin($params = [])
{
$this->notifyHook($params, "message_from_admin");
}
public function email_changed($params = [])
{
$this->notifyHook($params, "email_changed");
}
public function password_changed($params = [])
{
$this->notifyHook($params, "password_changed");
}
public function failed_member_login_attempt($params = [])
{
$this->notifyHook($params, "failed_member_login_attempt");
}
public function approved_gdpr_request($params = [])
{
$this->notifyHook($params, "approved_gdpr_request");
}
public function declined_gdpr_request($params = [])
{
$this->notifyHook($params, "declined_gdpr_request");
}
public function contact_form($params = [])
{
$this->notifyHook($params, "contact_form");
}
public function customer_feedback($params = [])
{
$this->notifyHook($params, "customer_feedback");
}
public function failed_order_activation($params = [])
{
$this->notifyHook($params, "failed_order_activation");
}
public function need_manually_upgrading($params = [])
{
$this->notifyHook($params, "need_manually_upgrading");
}
public function need_manually_transaction($params = [])
{
$this->notifyHook($params, "need_manually_transaction");
}
public function customer_has_upgraded($params = [])
{
$this->notifyHook($params, "customer_has_upgraded");
}
public function cancel_request_created($params = [])
{
$this->notifyHook($params, "cancel_request_created");
}
public function created_backup_db($params = [])
{
$this->notifyHook($params, "created_backup_db");
}
public function task_plan_created($params = [])
{
$this->notifyHook($params, "task_plan_created");
}
public function reminding($params = [])
{
$this->notifyHook($params, "reminding");
}
public function failed_admin_login_attempt($params = [])
{
$this->notifyHook($params, "failed_admin_login_attempt");
}
public function notifyHook($params = [], $hook = "")
{
$hookName = str_replace("_", "-", $hook);
$template = $this->templates[$hookName];
$template_name = $template . "/" . $hookName;
$variables = $params["variables"];
$lang = Config::get("general/local");
if($params["admin_emails"]) {
$admin_data = current($params["admin_emails"]);
if(isset($admin_data["variables"])) {
$variables = $admin_data["variables"];
}
$lang = $admin_data["lang"];
}
$user_id = isset($params["udata"]["id"]) ? $params["udata"]["id"] : 0;
$data = View::notifications("sms", $template_name, "", $variables, $lang, $user_id);
$message = $data["content"];
$phone = NULL;
if(isset($params["udata"]["phone"])) {
$phone = $params["udata"]["phone"];
}
if(isset($params["variables"]["phone"])) {
$phone = $params["variables"]["phone"];
}
$phone = str_replace("+", "", $phone);
if(empty($message)) {
return false;
}
if(isset($this->config["settings"][$hook]) && $this->config["settings"][$hook]) {
if($user_id) {
$query = WDB::select("owner_id,name,content");
$query->from("users_informations");
$query->where("owner_id", "=", $user_id, "AND");
$query->where("name", "=", "sms_notifications");
$query = $query->build(true)->fetch_assoc();
if(!$query) {
return false;
}
if($query[0]["content"] == "0") {
return false;
}
}
if($phone) {
$this->sendMessage($phone, $message);
}
}
if(isset($this->config["settings"][$hook . "_foradmin"]) && $this->config["settings"][$hook . "_foradmin"]) {
$numbers = $this->config["settings"]["phone_number"];
$numbers = explode("\n", $numbers);
foreach ($numbers as $number) {
$this->sendMessage($number, $message);
}
}
}
}
?>