/home/hamzarou/www/wp-content/plugins/sms-alert/SMSAlert-wc-order-sms.php
<?php
/**
* This is a WooCommerce add-on. By Using this plugin admin and buyer can get notification after placing order via sms using SMS Alert.
* PHP version 5
*
* @category Helper
* @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/
* Plugin Name: SMSAlert - WooCommerce
* Plugin URI: https://wordpress.org/plugins/sms-alert/
* Description: This is a WooCommerce add-on. By Using this plugin admin and buyer can get notification after placing order via sms using SMS Alert.
* Version: 3.8.8
* Author: Cozy Vision Technologies Pvt. Ltd.
* Author URI: https://www.smsalert.co.in
* WC requires at least: 4.6
* WC tested up to: 9.8
* Text Domain: sms-alert
* License: GPLv2
*/
/**
/**
*
* Released under the GPL license
* http://www.opensource.org/licenses/gpl-license.php
*
* This is an add-on for WordPress
* http://wordpress.org/
*
* **********************************************************************
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
* **********************************************************************
*/
// don't call the file directly.
if (! defined('ABSPATH') ) {
exit;
}
if (! defined('SMSALERT_TEXT_DOMAIN') ) {
define('SMSALERT_TEXT_DOMAIN', 'sms-alert');
}
if (! defined('SMSALERT_PLUGIN_NAME') ) {
define('SMSALERT_PLUGIN_NAME', 'SMS Alert Order Notifications – WooCommerce');
}
if (! defined('SMSALERT_ABANDONED') ) {
define('SMSALERT_ABANDONED', 'smsalert_abandoned');
}
if (! defined('SMSALERT_PLUGIN_NAME_SLUG') ) {
define('SMSALERT_PLUGIN_NAME_SLUG', 'sms-alert');
}
if (! defined('SA_CART_TABLE_NAME') ) {
define('SA_CART_TABLE_NAME', 'sa_captured_wc_fields');
}
if (! defined('CART_CRON_INTERVAL') ) {
define('CART_CRON_INTERVAL', 10);// run ab cart cron every 10 min.
}
if (! defined('BOOKING_REMINDER_CRON_INTERVAL') ) {
define('BOOKING_REMINDER_CRON_INTERVAL', 10);// run booking reminder cron every 10 min.
}
// In minutes. Defines the interval at which msg function is fired.
if (! defined('CART_STILL_SHOPPING') ) {
define('CART_STILL_SHOPPING', 10); // In minutes. Defines the time period after which an msg notice will be sent and the cart is presumed abandoned.
}
if (! defined('CART_NEW_STATUS_NOTICE') ) {
define('CART_NEW_STATUS_NOTICE', 240); // Defining time in minutes how long New status is shown in the table.
}
if (! defined('CART_ENCRYPTION_KEY') ) {
define('CART_ENCRYPTION_KEY', 'SgVkYp3s6v9y$B&M)H+MbQeThWmZq4t9');
}
add_action(
'before_woocommerce_init', function () {
if (wp_doing_ajax() ) {
return;
}
if (class_exists('Automattic\\WooCommerce\\Utilities\\FeaturesUtil') && method_exists('Automattic\\WooCommerce\\Utilities\\FeaturesUtil', 'declare_compatibility') ) {
\Automattic\WooCommerce\Utilities\FeaturesUtil::declare_compatibility('custom_order_tables', plugin_basename(__FILE__), true);
}
}
);
/**
* Sanitizes Array of vaues.
*
* @param array $arr Values to be sanitized.
*
* @return array
*/
function smsalert_sanitize_array( $arr )
{
global $wp_version;
$older_version = ( $wp_version < '4.7' ) ? true : false;
if (! is_array($arr) ) {
return ( ( $older_version ) ? stripcslashes(sanitize_text_field($arr)) : stripcslashes(sanitize_textarea_field($arr)) );
}
$result = array();
foreach ( $arr as $key => $val ) {
$result[ $key ] = is_array($val) ? smsalert_sanitize_array($val) : ( ( $older_version ) ? stripcslashes(sanitize_text_field($val)) : stripcslashes(sanitize_textarea_field($val)) );
}
return $result;
}
/**
* Creates a cookie.
*
* @param string $cookie_key Cookie Key name.
* @param string $cookie_value Cookie Value.
*
* @return array
*/
function create_smsalert_cookie( $cookie_key, $cookie_value )
{
ob_start();
setcookie($cookie_key, $cookie_value, time() + ( 15 * 60 ));
ob_get_clean();
}
/**
* Clears a cookie.
*
* @param string $cookie_key Cookie Key name.
*
* @return array
*/
function clear_smsalert_cookie( $cookie_key )
{
if (isset($_COOKIE[ $cookie_key ]) ) {
unset($_COOKIE[ $cookie_key ]);
setcookie($cookie_key, '', time() - ( 15 * 60 ));
}
}
/**
* Gets a cookie.
*
* @param string $cookie_key Cookie Key name.
*
* @return array
*/
function get_smsalert_cookie( $cookie_key )
{
if (! isset($_COOKIE[ $cookie_key ]) ) {
return false;
} else {
return sanitize_text_field(wp_unslash($_COOKIE[ $cookie_key ]));
}
}
/**
* Gets key value from database.
*
* @param string $option Option.
* @param string $section Section.
* @param string $default Default value.
*
* @return array
*/
function smsalert_get_option( $option, $section, $default = '' )
{
$options = get_option($section);
if (isset($options[ $option ]) ) {
return $options[ $option ];
}
return $default;
}
/**
* Gets a template.
*
* @param string $filepath File path.
* @param array $datas Values to be used in template.
* @param boolean $ret Return as string.
*
* @return array
*/
function get_smsalert_template( $filepath, $datas, $ret = false )
{
if ($ret ) {
ob_start();
}
extract($datas);
include $filepath;
if ($ret ) {
return ob_get_clean();
}
}
/**
* PHP version 5
*
* @category Helper
* @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/
* Plugin Name: SMSAlert - WooCommerce
* Plugin URI: https://wordpress.org/plugins/sms-alert/
* Main class for plugin.
*/
class smsalert_WC_Order_SMS
{
/**
* Constructor for the smsalert_WC_Order_SMS class
*
* Sets up all the appropriate hooks and actions
* within our plugin.
*
* @return array
*/
public function __construct()
{
// Instantiate necessary class.
$this->instantiate();
add_action('init', array( $this, 'registerHookSendSms' ));
add_action('woocommerce_checkout_update_order_meta', array( $this, 'buyerNotificationUpdateOrderMeta' ));
add_action('woocommerce_order_status_changed', array( 'WooCommerceCheckOutForm', 'trigger_after_order_place' ), 10, 3);
add_action('woocommerce_checkout_order_processed', array( $this, 'saWcOrderPlace' ), 10, 1);
if (!did_action('woocommerce_checkout_order_processed') && is_admin()) {
add_action('woocommerce_new_order', array( $this, 'saWcOrderPlace' ), 10, 1);
}
add_filter('sa_wc_order_sms_customer_before_send', array( 'WooCommerceCheckOutForm', 'pharseSmsBody' ), 10, 2);
add_filter('sa_wc_order_sms_admin_before_send', array( 'WooCommerceCheckOutForm', 'pharseSmsBody' ), 10, 2);
add_action('woocommerce_new_customer_note', array( 'WooCommerceCheckOutForm', 'trigger_new_customer_note' ), 10);
add_filter('default_checkout_billing_phone', array( $this, 'modifyBillingPhoneField' ), 1, 2);
add_action('user_register', array( $this, 'wcUserCreated' ), 1, 1);
add_action('smsalert_after_update_new_user_phone', array( $this, 'smsalertAfterUserRegister' ), 10, 2);
include_once 'helper/formlist.php';
include_once 'views/common-elements.php';
include_once 'handler/forms/FormInterface.php';
include_once 'handler/smsalert_form_handler.php';
include_once 'helper/shortcode.php';
if (is_admin() ) {
add_action('admin_enqueue_scripts', array( $this, 'adminEnqueueScripts' ));
add_filter('plugin_row_meta', array( $this, 'pluginRowMetaLink' ), 10, 4);
add_filter('plugin_action_links_' . plugin_basename(__FILE__), array( $this, 'addActionLinks' ));
}
/*code to notify for daily balance begins */
add_action('smsalert_balance_notify', array( $this, 'backgroundTask' ));
self::saSyncGrpAction();
add_filter('sa_before_send_sms', array( $this, 'replaceCommonTokenName' ), 100, 1);
//commented later we use for redirect after install , plugin.
add_action('admin_init', array($this, 'smsalertPluginRedirect'));
add_action('sa_addTabs', array( $this, 'addTabs' ), 10);
add_filter('sAlertDefaultSettings', array( $this, 'addDefaultSetting' ), 1);
//add_action( 'activated_plugin', array($this, 'cyb_activation_redirect') ); //testing part
}
//testing part
//commented later we use for redirect after install the plugin.
// public function cyb_activation_redirect( $plugin ) {
// if ( $plugin == plugin_basename( __FILE__ ) ) {
// exit( wp_redirect( admin_url( 'admin.php?page=sms-alert' ) ) );
// }
// }
/**
* Onpage modify billing phone at checkout page when country code is enabled
*
* @param string $value Value of the field.
* @param string $input Name of the field.
*
* @return void
*/
public function modifyBillingPhoneField( $value, $input )
{
if ('billing_phone' === $input && ! empty($value) ) {
return SmsAlertUtility::formatNumberForCountryCode($value);
}
}
/**
* This function is executed after a user is created.
*
* @param int $user_id User id of the user.
*
* @return void
*/
public function wcUserCreated( $user_id )
{
$billing_phone = ( ! empty($_POST['billing_phone']) ) ? sanitize_text_field(wp_unslash($_POST['billing_phone'])) : null;
$billing_phone = apply_filters('sa_get_user_phone_no', $billing_phone, $user_id);
$billing_phone = SmsAlertcURLOTP::checkPhoneNos($billing_phone);
update_user_meta($user_id, 'billing_phone', $billing_phone);
do_action('smsalert_after_update_new_user_phone', $user_id, $billing_phone);
}
/**
* This function is executed after a user has been registered.
*
* @param int $user_id Userid of the user.
* @param string $billing_phone Phone number of the user.
*
* @return void
*/
public function smsalertAfterUserRegister( $user_id, $billing_phone )
{
$user = get_userdata($user_id);
$role = ( ! empty($user->roles[0]) ) ? $user->roles[0] : '';
$role_display_name = ( ! empty($role) ) ? self::get_user_roles($role) : '';
$smsalert_reg_notify = smsalert_get_option('wc_user_roles_' . $role, 'smsalert_signup_general', 'off');
$sms_body_new_user = smsalert_get_option('signup_sms_body_' . $role, 'smsalert_signup_message', sprintf(__('Hello %1$s, Thank you for registering with %2$s.', 'sms-alert'), '[username]', '[store_name]'));
$smsalert_reg_admin_notify = smsalert_get_option('admin_registration_msg', 'smsalert_general', 'off');
$sms_admin_body_new_user = smsalert_get_option('sms_body_registration_admin_msg', 'smsalert_message', sprintf(__('Dear admin, %1$s has just signed up on %2$s.%3$sPowered by%4$swww.smsalert.co.in', 'sms-alert'), '[username]', '[store_name]', PHP_EOL, PHP_EOL));
$admin_phone_number = smsalert_get_option('sms_admin_phone', 'smsalert_message', '');
$store_name = trim(get_bloginfo());
if ('on' === $smsalert_reg_notify && ! empty($billing_phone) ) {
$search = array(
'[username]',
'[email]',
'[billing_phone]',
);
$replace = array(
$user->user_login,
$user->user_email,
$billing_phone,
);
$sms_body_new_user = str_replace($search, $replace, $sms_body_new_user);
// do_action( 'sa_send_sms', $billing_phone, $sms_body_new_user ); //commented on 25-08-2021
$obj = array();
$obj['number'] = $billing_phone;
$obj['sms_body'] = $sms_body_new_user;
SmsAlertcURLOTP::sendsms($obj);
}
if ('on' === $smsalert_reg_admin_notify && ! empty($admin_phone_number) ) {
$search = array(
'[username]',
'[store_name]',
'[email]',
'[billing_phone]',
'[role]',
);
$replace = array(
$user->user_login,
$store_name,
$user->user_email,
$billing_phone,
$role_display_name,
);
$sms_admin_body_new_user = str_replace($search, $replace, $sms_admin_body_new_user);
$nos = explode(',', $admin_phone_number);
$admin_phone_number = array_diff($nos, array( 'postauthor', 'post_author' ));
$admin_phone_number = implode(',', $admin_phone_number);
// do_action( 'sa_send_sms', $admin_phone_number, $sms_admin_body_new_user ); //commented on 25-08-2021.
$obj = array();
$obj['number'] = $admin_phone_number;
$obj['sms_body'] = $sms_admin_body_new_user;
SmsAlertcURLOTP::sendsms($obj);
}
}
/**
* This function adds tabs.
*
* @param array $tabs Default tabs.
*
* @return void
*/
public static function addTabs( $tabs = array() )
{
$signup_param = array(
'checkTemplateFor' => 'signup_temp',
'templates' => self::getSignupTemplates(),
);
$new_user_reg_param = array(
'checkTemplateFor' => 'new_user_reg_temp',
'templates' => self::getNewUserRegisterTemplates(),
);
$tabs['user_registration']['nav'] = 'User Registration';
$tabs['user_registration']['icon'] = 'dashicons-admin-users';
$tabs['user_registration']['inner_nav']['wc_register']['title'] = __('Sign Up Notifications', 'sms-alert');
$tabs['user_registration']['inner_nav']['wc_register']['tab_section'] = 'signup_templates';
$tabs['user_registration']['inner_nav']['wc_register']['first_active'] = true;
$tabs['user_registration']['inner_nav']['wc_register']['tabContent'] = $signup_param;
$tabs['user_registration']['inner_nav']['wc_register']['filePath'] = 'views/message-template.php';
$tabs['user_registration']['inner_nav']['wc_register']['icon'] = 'dashicons-admin-users';
$tabs['user_registration']['inner_nav']['wc_register']['params'] = $signup_param;
$tabs['user_registration']['inner_nav']['new_user_reg']['title'] = 'Admin Notifications';
$tabs['user_registration']['inner_nav']['new_user_reg']['tab_section'] = 'newuserregtemplates';
$tabs['user_registration']['inner_nav']['new_user_reg']['tabContent'] = $new_user_reg_param;
$tabs['user_registration']['inner_nav']['new_user_reg']['filePath'] = 'views/message-template.php';
$tabs['user_registration']['inner_nav']['new_user_reg']['params'] = $new_user_reg_param;
return $tabs;
}
/**
* Gets signup template.
*
* @return void
*/
public static function getSignupTemplates()
{
$wc_user_roles = self::get_user_roles();
$variables = array(
'[username]' => 'Username',
'[store_name]' => 'Store Name',
'[email]' => 'Email',
'[billing_phone]' => 'Billing Phone',
'[shop_url]' => 'Shop Url',
);
$templates = array();
foreach ( $wc_user_roles as $role_key => $role ) {
$current_val = smsalert_get_option('wc_user_roles_' . $role_key, 'smsalert_signup_general', 'on');
$checkbox_name_id = 'smsalert_signup_general[wc_user_roles_' . $role_key . ']';
$textarea_name_id = 'smsalert_signup_message[signup_sms_body_' . $role_key . ']';
$text_body = smsalert_get_option('signup_sms_body_' . $role_key, 'smsalert_signup_message', sprintf(__('Hello %1$s, Thank you for registering with %2$s.', 'sms-alert'), '[username]', '[store_name]'));
$templates[ $role_key ]['title'] = 'When ' . ucwords($role['name']) . ' is registered';
$templates[ $role_key ]['enabled'] = $current_val;
$templates[ $role_key ]['status'] = $role_key;
$templates[ $role_key ]['text-body'] = $text_body;
$templates[ $role_key ]['checkboxNameId'] = $checkbox_name_id;
$templates[ $role_key ]['textareaNameId'] = $textarea_name_id;
$templates[ $role_key ]['token'] = $variables;
}
return $templates;
}
/**
* Gets new user registration template.
*
* @return void
*/
public static function getNewUserRegisterTemplates()
{
$smsalert_notification_reg_admin_msg = smsalert_get_option('admin_registration_msg', 'smsalert_general', 'on');
$sms_body_registration_admin_msg = smsalert_get_option('sms_body_registration_admin_msg', 'smsalert_message', sprintf(__('Dear admin, %1$s has just signed up on %2$s.%3$sPowered by%4$swww.smsalert.co.in', 'sms-alert'), '[username]', '[store_name]', PHP_EOL, PHP_EOL));
$templates = array();
$new_user_variables = array(
'[username]' => 'Username',
'[store_name]' => 'Store Name',
'[email]' => 'Email',
'[billing_phone]' => 'Billing Phone',
'[role]' => 'Role',
'[shop_url]' => 'Shop Url',
);
$templates['new-user']['title'] = 'When a new user is registered';
$templates['new-user']['enabled'] = $smsalert_notification_reg_admin_msg;
$templates['new-user']['status'] = 'new-user';
$templates['new-user']['text-body'] = $sms_body_registration_admin_msg;
$templates['new-user']['checkboxNameId'] = 'smsalert_general[admin_registration_msg]';
$templates['new-user']['textareaNameId'] = 'smsalert_message[sms_body_registration_admin_msg]';
$templates['new-user']['token'] = $new_user_variables;
return $templates;
}
/**
* This function Adds default settings in configuration.
*
* @param array $defaults Default values.
*
* @return void
*/
public static function addDefaultSetting( $defaults = array() )
{
$sms_body_registration_admin_msg = smsalert_get_option('sms_body_registration_admin_msg', 'smsalert_message', sprintf(__('Dear admin, %1$s has just signed up on %2$s.%3$sPowered by%4$swww.smsalert.co.in', 'sms-alert'), '[username]', '[store_name]', PHP_EOL, PHP_EOL));
$wc_user_roles = self::get_user_roles();
foreach ( $wc_user_roles as $role_key => $role ) {
$defaults['smsalert_signup_general'][ 'wc_user_roles_' . $role_key ] = 'off';
$defaults['smsalert_signup_message'][ 'signup_sms_body_' . $role_key ] = $sms_body_registration_admin_msg;
}
return $defaults;
}
/**
* This function gets role display name from system name.
*
* @param bool $system_name System name of the role.
*
* @return void
*/
public static function get_user_roles( $system_name = null )
{
global $wp_roles;
$roles = $wp_roles->roles;
if (! empty($system_name) && array_key_exists($system_name, $roles) ) {
return $roles[ $system_name ]['name'];
} else {
return $roles;
}
}
/**
* Instantiate necessary Class
*
* @return void
*/
public function instantiate()
{
spl_autoload_register(array( $this, 'smsalertSmsAutoload' ));
new smsalert_Setting_Options();
}
/**
* Autoload class files on demand.
*
* @param string $class requested class name.
*
* @return void
*/
public function smsalertSmsAutoload( $class )
{
include_once 'handler/smsalert_logic_interface.php';
include_once 'handler/smsalert_phone_logic.php';
include_once 'helper/sessionVars.php';
include_once 'helper/utility.php';
include_once 'helper/constants.php';
include_once 'helper/curl.php';
if (stripos($class, 'smsalert_') !== false ) {
$class_name = str_replace(array( 'smsalert_', '_' ), array( '', '-' ), $class);
$filename = dirname(__FILE__) . '/classes/' . strtolower($class_name) . '.php';
if (file_exists($filename) ) {
include_once $filename;
}
}
}
/**
* Initializes the SMSAlert_WC_Order_SMS() class
*
* Checks for an existing SMSAlert_WC_Order_SMS() instance
* and if it doesn't find one, creates it.
*
* @return void
*/
public static function init()
{
static $instance = false;
if (! $instance ) {
$instance = new SMSAlert_WC_Order_SMS();
}
return $instance;
}
/**
* Sends an SMS.
*
* @param string $number Number to send SMS.
* @param string $content Text of SMS to be sent.
* @param string $schedule SMS schedule time.
*
* @return void
*/
public function fnSaSendSms( $number, $content, $schedule = null )
{
$obj = array();
$obj['number'] = $number;
$obj['sms_body'] = $content;
$obj['schedule'] = $schedule;
$response = SmsAlertcURLOTP::sendsms($obj);
return $response;
}
/**
* Replaces common variables in SMS Text.
*
* @param string $fields Array containing text key.
*
* @return void
*/
public function replaceCommonTokenName( $fields )
{
$search = array(
'[store_name]',
'[shop_url]',
);
$replace = array(
get_bloginfo(),
get_site_url(),
);
$fields['text'] = str_replace($search, $replace, $fields['text']);
return $fields;
}
/**
* Registers the send SMS hook.
*
* @return void
*/
public function registerHookSendSms()
{
add_action('sa_send_sms', array( $this, 'fnSaSendSms' ), 10, 3);
}
/**
* Initialize plugin for localization
*
* @uses load_plugin_textdomain()
*
* @return void
*/
public static function localization_setup()
{
load_plugin_textdomain('sms-alert', false, dirname(plugin_basename(__FILE__)) . '/languages/');
}
/**
* Enques scripts to be loaded in admin section.
*
* @return void
*/
public function adminEnqueueScripts()
{
wp_enqueue_style('admin-smsalert-styles', plugins_url('css/admin.css', __FILE__), array(), SmsAlertConstants::SA_VERSION);
wp_enqueue_style('admin-modal-styles', plugins_url('css/sms_alert_customer_validation_style.css', __FILE__), array(), SmsAlertConstants::SA_VERSION);
wp_enqueue_script('admin-smsalert-scripts', plugins_url('js/admin.js', __FILE__), array( 'jquery' ), SmsAlertConstants::SA_VERSION, true);
wp_enqueue_script('admin-smsalert-taggedinput', plugins_url('js/tagged-input.js', __FILE__), array( 'jquery' ), SmsAlertConstants::SA_VERSION, false);
$user_authorize = new smsalert_Setting_Options();
wp_localize_script(
'admin-smsalert-scripts',
'smsalert',
array(
'ajaxurl' => admin_url('admin-ajax.php'),
'whitelist_countries' => smsalert_get_option('whitelist_country', 'smsalert_general'),
'allow_otp_countries' => smsalert_get_option('allow_otp_country', 'smsalert_general'),
'sa_default_countrycode' => smsalert_get_option('default_country_code', 'smsalert_general'),
'islogged' => $user_authorize->is_user_authorised(),
'pattern' => SmsAlertConstants::PATTERN_PHONE,
'nonce' => wp_create_nonce('smsalert-nonce')
)
);
}
/**
* Adds a meta row to plugin.
*
* @param string $plugin_meta Array of plugin meta.
* @param string $plugin_file plugin base file.
* @param string $plugin_data Array containing information about plugin.
* @param string $status status.
*
* @return void
*/
public function pluginRowMetaLink( $plugin_meta, $plugin_file, $plugin_data, $status )
{
if (isset($plugin_data['slug']) && ( 'sms-alert' === $plugin_data['slug'] ) && ! defined('smsalert_DIR') ) {
$plugin_meta[] = '<a href="https://kb.smsalert.co.in/wordpress" target="_blank">' . __('Docs', 'sms-alert') . '</a>';
$plugin_meta[] = '<a href="https://wordpress.org/support/plugin/sms-alert/reviews/#postform" target="_blank" class="wc-rating-link">★★★★★</a>';
}
return $plugin_meta;
}
/**
* Adds an action link in admin section.
*
* @param array $links Array of action links.
*
* @return void
*/
public function addActionLinks( $links )
{
$links[] = sprintf('<a href="%s">Settings</a>', admin_url('admin.php?page=sms-alert'));
return $links;
}
/**
* Returns the credit in users account.
*
* @return void
*/
public static function onlyCredit()
{
$trans_credit = array();
$credits = json_decode(SmsAlertcURLOTP::getCredits(), true);
if (!empty($credits['description']['routes'])) {
foreach ( $credits['description']['routes'] as $credit ) {
$trans_credit[] = $credit['credits'];
}
}
return $trans_credit;
}
/**
* This function is executed on plugin activate.
*
* @return void
*/
public static function runOnActivate()
{
if (! get_option('smsalert_activation_date') ) {
add_option('smsalert_activation_date', date('Y-m-d'));
}
if (! wp_next_scheduled('smsalert_balance_notify') ) {
wp_schedule_event(time(), 'hourly', 'smsalert_balance_notify');
}
if (!wp_next_scheduled('smsalert_followup_sms') ) {
$time_value = esc_attr(smsalert_get_option('subscription_reminder_cron_time', 'smsalert_general', '10:00'));
wp_schedule_event(strtotime(get_gmt_from_date($time_value)), 'daily', 'smsalert_followup_sms');
}
self::saCartActivate();
//commented , use later for after plugin install.
add_option('smsalert_do_activation_redirect', true);
}
/**
* Commented , use later for after plugin install.
*
* @return void
*/
function smsalertPluginRedirect()
{
if (get_option('smsalert_do_activation_redirect', false)) {
delete_option('smsalert_do_activation_redirect');
wp_redirect("admin.php?page=sms-alert");
}
}
/**
* This function is executed on plugin activate to create table for abondoned cart functionality.
*
* @return void
*/
public static function saCartActivate()
{
global $wpdb, $table_name;
$table_name = $wpdb->prefix . SA_CART_TABLE_NAME;
$tabl_name = $wpdb->prefix . "smsalert_renewal_reminders";
$reminder_table_name = $wpdb->prefix . "smsalert_booking_reminder";
$charset_collate = $wpdb->get_charset_collate();
$sql = "CREATE TABLE IF NOT EXISTS $table_name (
id BIGINT(20) NOT NULL AUTO_INCREMENT,
name VARCHAR(60),
surname VARCHAR(60),
email VARCHAR(100),
phone VARCHAR(20),
location VARCHAR(100),
cart_contents LONGTEXT,
cart_total DECIMAL(10,2),
currency VARCHAR(10),
time DATETIME DEFAULT '0000-00-00 00:00:00',
session_id VARCHAR(60),
msg_sent TINYINT NOT NULL DEFAULT 0,
recovered TINYINT NOT NULL DEFAULT 0,
other_fields LONGTEXT,
PRIMARY KEY (id)
) $charset_collate;";
$sql1 = "CREATE TABLE IF NOT EXISTS $tabl_name (
id mediumint(9) NOT NULL AUTO_INCREMENT,
subscription_id mediumint(9) NOT NULL,
subscription_text text NOT NULL,
source VARCHAR(50),
next_payment_date date DEFAULT '0000-00-00' NOT NULL,
notification_sent_date date DEFAULT '0000-00-00' NOT NULL,
PRIMARY KEY (id)
) $charset_collate;";
$sql2 = "CREATE TABLE IF NOT EXISTS $reminder_table_name (
id mediumint(9) NOT NULL AUTO_INCREMENT,
booking_id mediumint(9) NOT NULL,
phone VARCHAR(20),
source VARCHAR(50),
msg_sent TINYINT NOT NULL DEFAULT 0,
start_date DATETIME DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (id)
) $charset_collate;";
include_once ABSPATH . 'wp-admin/includes/upgrade.php';
dbDelta($sql1);
dbDelta($sql2);
dbDelta($sql);
// Resets table Auto increment index to 1.
$sql = "ALTER TABLE $table_name AUTO_INCREMENT = 1";
dbDelta($sql);
$ab_cart_fc_captured_abandoned_cart_count = get_option('ab_cart_fc_captured_abandoned_cart_count');
if ($ab_cart_fc_captured_abandoned_cart_count ) {
update_option('cart_captured_abandoned_cart_count', $ab_cart_fc_captured_abandoned_cart_count);
}
delete_option('ab_cart_fc_captured_abandoned_cart_count');
$user_settings_notification_frequency = smsalert_get_option('customer_notify', 'smsalert_abandoned_cart', 'on');
$user_cod_settings_notification_frequency = smsalert_get_option('customer_notify', 'smsalert_cod_to_prepaid', 'on');
$wcbk_reminder_frequency = smsalert_get_option('customer_notify', 'smsalert_wcbk_general', 'off');
$bc_reminder_frequency = smsalert_get_option('customer_notify', 'smsalert_bc_general', 'off');
$rr_reminder_frequency = smsalert_get_option('customer_notify', 'smsalert_rr_general', 'off');
$qr_reminder_frequency = smsalert_get_option('customer_notify', 'smsalert_qr_general', 'off');
$eap_reminder_frequency = smsalert_get_option('customer_notify', 'smsalert_eap_general', 'off');
$bcc_reminder_frequency = smsalert_get_option('customer_notify', 'smsalert_bcc_general', 'off');
$wcf_reminder_frequency = smsalert_get_option('customer_notify', 'smsalert_wcf_general', 'off');
$sln_reminder_frequency = smsalert_get_option('customer_notify', 'smsalert_sln_general', 'off');
$alb_reminder_frequency = smsalert_get_option('customer_notify', 'smsalert_alb_general', 'off');
$ssa_reminder_frequency = smsalert_get_option('customer_notify', 'smsalert_ssa_general', 'off');
if ('off' === $user_settings_notification_frequency) { // If SMS notifications have been disabled, we disable cron job.
wp_clear_scheduled_hook('ab_cart_notification_sendsms_hook');
} else {
if (! wp_next_scheduled('ab_cart_notification_sendsms_hook') ) {
wp_schedule_event(time(), 'sendsms_interval', 'ab_cart_notification_sendsms_hook');
}
}
if ('off' === $user_cod_settings_notification_frequency ) { // If SMS notifications have been disabled, we disable cron job.
wp_clear_scheduled_hook('cod_to_prepaid_cart_notification_sendsms_hook');
} else {
if (! wp_next_scheduled('cod_to_prepaid_cart_notification_sendsms_hook') ) {
wp_schedule_event(time(), 'sendsms_interval', 'cod_to_prepaid_cart_notification_sendsms_hook');
}
}
if (('off' === $wcbk_reminder_frequency && 'off' === $bc_reminder_frequency && 'off' === $rr_reminder_frequency && 'off' === $bcc_reminder_frequency && 'off' === $qr_reminder_frequency && 'off' === $eap_reminder_frequency && 'off' === $wcf_reminder_frequency && 'off' === $sln_reminder_frequency && 'off' === $alb_reminder_frequency && 'off' === $ssa_reminder_frequency ) ) { // If SMS notifications have been disabled, we disable cron job.
wp_clear_scheduled_hook('booking_reminder_sendsms_hook');
} else {
if (! wp_next_scheduled('booking_reminder_sendsms_hook') ) {
wp_schedule_event(time(), 'sendremindersms_interval', 'booking_reminder_sendsms_hook');
}
}
}
/**
* Executes on plugin de-activate.
*
* @return void
*/
public static function runOnDeactivate()
{
wp_clear_scheduled_hook('smsalert_balance_notify');
wp_clear_scheduled_hook('smsalert_followup_sms');
wp_clear_scheduled_hook('booking_reminder_sendsms_hook');
}
/**
* Executes on plugin uninstall.
*
* @return void
*/
public static function runOnUninstall()
{
$clear_all_data = smsalert_get_option('clear_all_data', 'smsalert_general', 'off');
if ('on' === $clear_all_data ) {
global $wpdb;
$main_table = $wpdb->prefix . 'sa_captured_wc_fields';
$booking_table = $wpdb->prefix . 'smsalert_booking_reminder';
$renewal_table = $wpdb->prefix . 'smsalert_renewal_reminders';
$wpdb->query("DROP TABLE IF EXISTS $main_table,$booking_table,$renewal_table");
delete_option('cart_captured_abandoned_cart_count');
delete_option('smsalert_message');
delete_option('smsalert_gateway');
delete_option('smsalert_general');
delete_option('smsalert_upgrade_settings');
delete_option('widget_smsalert_widget');
delete_option('smsalert_activation_date');
}
}
/**
* Background scheduler function to send email for low balance, etc.
*
* @return void
*/
public function backgroundTask()
{
$low_bal_alert = smsalert_get_option('low_bal_alert', 'smsalert_general', 'off');
$daily_bal_alert = smsalert_get_option('daily_bal_alert', 'smsalert_general', 'off');
$user_authorize = new smsalert_Setting_Options();
$islogged = $user_authorize->is_user_authorised();
$auto_sync = smsalert_get_option('auto_sync', 'smsalert_general', 'off');
if ($islogged ) {
if ('on' === $auto_sync ) {
self::syncCustomers();
}
}
if ('on' === $low_bal_alert ) {
self::sendSmsalertBalance();
}
if ('on' === $daily_bal_alert ) {
self::dailyEmailAlert();
}
}
/**
* Syncs contacts to SMS Alert group.
*
* @return void
*/
public function saSyncGrpAction()
{
if (array_key_exists('option', $_GET) ) {
switch ( trim(sanitize_text_field(wp_unslash($_GET['option']))) ) {
case 'smsalert-group-sync':
self::syncCustomers();
exit;
}
}
}
/**
* Syncs contacts to SMS Alert group.
*
* @return void
*/
public static function syncCustomers()
{
$group_name = smsalert_get_option('group_auto_sync', 'smsalert_general', '');
$update_id = smsalert_get_option('last_sync_userId', 'smsalert_sync', '');
$username = smsalert_get_option('smsalert_name', 'smsalert_gateway');
$password = smsalert_get_option('smsalert_password', 'smsalert_gateway');
if (empty($group_name) ) {
return;
}
$update_id = ! empty($update_id) ? $update_id : 0;
global $wpdb;
$sql = $wpdb->prepare(
"SELECT ID FROM {$wpdb->users} WHERE {$wpdb->users}.ID > %d order by ID asc limit 100",
$update_id
);
$uids = $wpdb->get_col($sql);
if (0 === count($uids) ) {
wp_send_json(
array(
'status' => 'success',
'description' => array( 'cnt_member' => 0 ),
)
);
exit;
} else {
$user_query = new WP_User_Query(
array(
'include' => $uids,
'orderby' => 'id',
'order' => 'ASC',
)
);
if ($user_query->get_results() ) {
$cnt = 0;
$obj = array();
foreach ( $user_query->get_results() as $ukey => $user ) {
$number = get_user_meta($user->ID, 'billing_phone', true);
$obj[ $ukey ]['person_name'] = $user->display_name;
$obj[ $ukey ]['number'] = $number;
$last_sync_id = $user->ID;
$cnt++;
}
$resp = SmsAlertcURLOTP::createContact($obj, $group_name);
update_option('smsalert_sync', array( 'last_sync_userId' => $last_sync_id ));
$result = (array) json_decode($resp, true);
if ('success' === $result['status'] ) {
wp_send_json(
array(
'status' => 'success',
'description' => array( 'cnt_member' => $cnt ),
)
);
exit();
}
} else {
wp_send_json(
array(
'status' => 'success',
'description' => array( 'cnt_member' => 0 ),
)
);
exit();
}
}
}
/**
* Sends SMS Alert balance.
*
* @return void
*/
public static function sendSmsalertBalance()
{
$date = date('Y-m-d');
$update_datetime = smsalert_get_option('last_updated_lBal_alert', 'smsalert_background_task', '');
if ($update_datetime == $date ) {
return;
}
$username = smsalert_get_option('smsalert_name', 'smsalert_gateway', '');
$low_bal_val = smsalert_get_option('low_bal_val', 'smsalert_general', '1000');
$to_mail = smsalert_get_option('alert_email', 'smsalert_general', '');
$trans_credit = self::onlyCredit();
if (! empty($trans_credit) ) {
foreach ( $trans_credit as $credit ) {
$params = array(
'trans_credit' => $credit,
'username' => $username,
'admin_url' => admin_url(),
);
$emailcontent = get_smsalert_template('template/emails/smsalert-low-bal.php', $params, true);
if ($credit <= $low_bal_val ) {
wp_mail($to_mail, '❗ ✱ SMS Alert ✱ Low Balance Alert', $emailcontent, 'content-type:text/html');
}
}
update_option('smsalert_background_task', array( 'last_updated_lBal_alert' => date('Y-m-d') ));// update last time and date.
}
}
/**
* Sends SMS Alert balance daily job.
*
* @return void
*/
public function dailyEmailAlert()
{
$username = smsalert_get_option('smsalert_name', 'smsalert_gateway', '');
$date = date('Y-m-d');
$to_mail = smsalert_get_option('alert_email', 'smsalert_general', '');
$update_datetime = smsalert_get_option('last_updated_dBal_alert', 'smsalert_background_dBal_task', '');
if ($update_datetime == $date ) {
return;
}
$daily_credits = self::onlyCredit();
if (! empty($daily_credits) ) {
foreach ( $daily_credits as $credit ) {
// email content
$params = array(
'daily_credits' => $credit,
'username' => $username,
'date' => $date,
'admin_url' => admin_url(),
);
$dailyemailcontent = get_smsalert_template('template/emails/daily-email-alert.php', $params, true);
update_option('smsalert_background_dBal_task', array( 'last_updated_dBal_alert' => date('Y-m-d') ));// update last time and date.
wp_mail($to_mail, '✱ SMS Alert ✱ Daily Balance Alert ', $dailyemailcontent, 'content-type:text/html');
}
}
}
/**
* Update Order buyer notify meta in checkout page
*
* @param integer $order_id Order id.
*
* @return void
*/
public function buyerNotificationUpdateOrderMeta( $order_id )
{
if (! empty($_POST['buyer_sms_notify']) ) {
update_post_meta($order_id, '_buyer_sms_notify', sanitize_text_field(wp_unslash($_POST['buyer_sms_notify'])));
}
}
/**
* Executes on order place event from woocommerce.
*
* @param integer $order_id Order id.
*
* @return void
*/
public function saWcOrderPlace( $order_id )
{
if (! $order_id ) {
return;
}
WooCommerceCheckOutForm::trigger_after_order_place($order_id, 'pending', 'pending');
}
} // SMSAlert_WC_Order_SMS
/**
* Loaded after all plugin initialize
*
* @return void
*/
add_action('plugins_loaded', 'loadSaWcOrderSms');
add_action('init', array('SMSAlert_WC_Order_SMS','localization_setup'));
/**
* Sets cron schedules.
*
* @param integer $intervals Interval at which cron to be executed.
*
* @return void
*/
function additionalCronIntervals( $intervals )
{
$intervals['sendsms_interval'] = array(
'interval' => CART_CRON_INTERVAL * 60,
'display' => 'Every 10 minutes',
);
$intervals['sendremindersms_interval'] = array(
'interval' => BOOKING_REMINDER_CRON_INTERVAL * 60,
'display' => 'Every 60 minutes',
);
return $intervals;
}
add_filter('cron_schedules', 'additionalCronIntervals');
/**
* Executed on plugin load.
*
* @return void
*/
function loadSaWcOrderSms()
{
$smsalert = SMSAlert_WC_Order_SMS::init();
}
register_activation_hook(__FILE__, array( 'smsalert_WC_Order_SMS', 'runOnActivate' ));
register_deactivation_hook(__FILE__, array( 'smsalert_WC_Order_SMS', 'runOnDeactivate' ));
register_uninstall_hook(__FILE__, array( 'smsalert_WC_Order_SMS', 'runOnUninstall' ));