get_price_html();
echo $before_price_content . $price;
}
if (has_action('ales_after_price_hook')) {
$price = $product->get_price_html();
ob_start();
do_action('ales_after_price_hook');
$after_price_content = ob_get_clean();
echo $price . $after_price_content;
}
if (has_action('ales_before_stock_status_hook')) {
ob_start();
do_action('ales_before_stock_status_hook');
$before_stock_status_content = ob_get_clean();
echo $before_stock_status_content . wc_get_stock_html($product);
}
}
function ambisn_set_session_cookie() {
if (!isset($_COOKIE['ambisn_sessionid'])) {
$session_id = uniqid();
if(!headers_sent()){
setcookie('ambisn_sessionid', $session_id, time() + (86400 * 3), '/');
}
} else {
$session_id = sanitize_key($_COOKIE['ambisn_sessionid']);
}
return $session_id;
}
add_action('template_redirect', 'ambisn_set_session_cookie');
define('AMBISN_SESSION_ID', ambisn_set_session_cookie());
function ambisn_print_subscription_form(){
if(ambisn_get_setting('guests') === '0' && !is_user_logged_in()){
return;
}
global $product;
if($product){
if($product->get_type() === 'variable' && ambisn_get_setting('s-variation') === '1'){
$variations = $product->get_available_variations();
foreach ($variations as $variation) {
if ($variation['is_in_stock']) {
return;
}
}
}
$product_id = $product->get_id();
ambisn_define_subscriptions_language($product_id);
$subscription_form = new AmbisnSubscriptionForm;
$subscription_form->print_subscription_form($product_id);
}
}
function ambisn_save_dynamic_strings(){
ob_start();
echo '
$setting_strings_array = array(
'form_text' => __('','ambisn'),
'form_subscribed_text' => __('','ambisn'),
'form_previously_subscribed_notice' => __('','ambisn'),
'button_text' => __('','ambisn'),
'unsubscribe_text' => __('','ambisn'),
'subscribed_btn_text' => __('','ambisn'),
'store_name' => __('','ambisn'),
'subscription_form_title' => __('','ambisn'),
'ps_tab_empty_notice' => __('','ambisn'),
'sf_consent_notice' => __('','ambisn'),
'sf_consent_error_message' => __('','ambisn'),
'conf_email_subject' => __('','ambisn'),
'conf_email_heading' => __('','ambisn'),
'conf_email_subheading' => __('','ambisn'),
'conf_email_footer' => __('','ambisn'),
'email_subject' => __('','ambisn'),
'email_heading' => __('','ambisn'),
'email_subheading' => __('','ambisn'),
'email_button_text' => __('','ambisn'),
'email_footer' => __('','ambisn'),
);
get_type();
if($product_type === 'simple' && $product->is_in_stock()){
return;
}
if(!$product->is_in_stock() && get_option('woocommerce_hide_out_of_stock_items') === 'yes'){
$product_type = 'simple';
}
if($product_type === 'variable' && ambisn_get_setting('s-variation') === '1'){
$variations = $product->get_available_variations();
foreach ($variations as $variation) {
if ($variation['is_in_stock']) {
return;
}
}
}
$product_id = $product->get_id();
$visibilty = "visible";
if ($product_type == 'variable') {
$visibilty = "";
$out_of_stock_variations = array();
$variations = $product->get_available_variations();
foreach ($variations as $variation) {
$variation_id = $variation['variation_id'];
$is_out_of_stock = !$variation['is_in_stock'];
if ($is_out_of_stock) {
$out_of_stock_variations[] = $variation_id;
}
}
$ofs_variations_json = json_encode($out_of_stock_variations);
}else{
$ofs_variations_json = json_encode(array());
}
$email = '';
if (is_user_logged_in()) {
$current_user = wp_get_current_user();
$email = $current_user->user_email;
}
if(empty($email)){
if(isset($_COOKIE["nmuseremail"])){
$email = sanitize_email($_COOKIE["nmuseremail"]);
}
}
include_once (AMBISN_PATH.'includes/blocks/subscription_form_popup_btn.php');
}
}
function ambisn_subscription_form_positioned(){
if (!is_product()) {
return;
}
global $product;
if (!is_a($product, 'WC_Product')) {
$product_id = get_the_ID();
if ($product_id) {
$product = wc_get_product($product_id);
}
}
if (!$product || !is_a($product, 'WC_Product')) {
return;
}
$popup_set = ambisn_get_setting('popup');
$excluded_cats = array_filter(explode(',',ambisn_get_setting('exclude_categories')));
$excluded_p_types = array_filter(explode(',',ambisn_get_setting('exclude_product_type')));
$exclude_tag_ids = array_filter(explode(',',ambisn_get_setting('exclude_tag_names')));
$exclude_tag_names = array();
if (is_array($exclude_tag_ids)) {
foreach ($exclude_tag_ids as $tag_id) {
$tag = get_term($tag_id, 'product_tag');
if (!empty($tag) && !is_wp_error($tag)) {
$exclude_tag_names[] = $tag->name;
}
}
}
if($product){
$current_product_categories = get_terms( array(
'taxonomy' => 'product_cat',
'object_ids' => $product->get_id(),
'fields' => 'slugs',
) );
$intersect_cats = array_intersect($excluded_cats,$current_product_categories);
if(count($intersect_cats) > 0){
return;
}
$product_tags = get_the_terms( $product->get_id(), 'product_tag' );
$product_tag_names = array();
if ( ! empty( $product_tags ) && ! is_wp_error( $product_tags ) ) {
foreach ( $product_tags as $product_tag ) {
$product_tag_names[] = $product_tag->name;
}
}
$intersect_tags = array_intersect($exclude_tag_names, $product_tag_names);
if(count($intersect_tags) > 0){
return;
}
$admin_url = admin_url();
wp_enqueue_script( 'ambisn_scripts', AMBISN_URL. 'assets/js/scripts.js' , array('jquery'), date("h:i:s") );
wp_localize_script( 'ambisn_scripts', 'ambisn_script_vars', array('admin_url' => $admin_url));
$product_type = $product->get_type();
if(in_array($product_type, $excluded_p_types)){
return;
}
if ($product_type === 'grouped') {
add_filter('woocommerce_grouped_product_list_column_label', 'ambisn_susbscription_form_grouped', 10, 2);
}else{
if ($product_type === 'simple') {
$form_hook = 'woocommerce_simple_add_to_cart';
$priority = 31;
if(ambisn_get_setting('enable_custom_form_position') == 1){
$form_hook = ambisn_get_setting('s_products_position');
$priority = ambisn_get_setting('s_hook_priority');
if($priority === false){
$priority = 10;
}
}
$button_hook = 'woocommerce_simple_add_to_cart';
} elseif ($product_type === 'variable') {
$priority = 31;
if(!$product->is_in_stock() && get_option('woocommerce_hide_out_of_stock_items') === 'yes'){
$form_hook = 'woocommerce_after_variations_form';
if(ambisn_get_setting('enable_custom_form_position') == 1){
$form_hook = ambisn_get_setting('v_products_position');
$priority = ambisn_get_setting('v_hook_priority');
if($priority === false){
$priority = 10;
}
}
$button_hook = 'woocommerce_after_variations_form';
}else{
$form_hook = 'woocommerce_before_add_to_cart_button';
$button_hook = 'woocommerce_after_add_to_cart_button';
}
} elseif ($product_type === 'external') {
$form_hook = 'woocommerce_simple_add_to_cart';
$button_hook = 'woocommerce_after_add_to_cart_button';
$priority = 31;
} else {
$form_hook = 'woocommerce_simple_add_to_cart';
$button_hook = 'woocommerce_after_add_to_cart_button';
$priority = 31;
}
add_action( $form_hook, 'ambisn_print_subscription_form', $priority);
if($popup_set == 1){
add_action( $button_hook, 'ambisn_print_popup_sform_btn', $priority);
}
}
}
}
add_action('template_redirect','ambisn_subscription_form_positioned',10);
function ambisn_susbscription_form_grouped($value, $child){
global $product;
$product_id = $product->get_id();
$popup_set = ambisn_get_setting('popup');
if(!$product->is_in_stock()){
ob_start();
ambisn_print_subscription_form();
if($popup_set == 1){
ambisn_print_popup_sform_btn($product_id);
}
$inner_content = ob_get_clean();
$value = $value.$inner_content;
}
return $value;
}
// END ADDING
function ambisn_empty_data(){
$admail = new AmbisnSubscriptions;
$admail_products = $admail->get_products();
if(!is_array($admail_products) || count($admail_products) === 0){
return true;
}else{
return false;
}
}
function ambisn_get_setting($setting){
global $wpdb;
$table_name = $wpdb->prefix . 'wc_admail';
$sql = "SELECT `value` FROM `$table_name` WHERE `option_name` = 'admail_settings' ";
$value = unserialize($wpdb->get_col($sql)[0]);
if (isset($value[$setting])) {
return $value[$setting];
}
return false;
}
function ambisn_update_setting($setting , $value){
global $wpdb;
$table_name = $wpdb->prefix . 'wc_admail';
$sql = "SELECT `value` FROM `$table_name` WHERE `option_name` = 'admail_settings' ";
$data = unserialize($wpdb->get_col($sql)[0]);
$data[$setting] = $value;
$data = array('value' => serialize($data), 'option_type' => 'setting');
$where = array('option_name' => 'admail_settings');
$wpdb->update( "$table_name", $data, $where );
}
function ambisn_get_data($key, $date = 'all') {
global $wpdb;
$table_name = $wpdb->prefix . 'wc_admail';
if ($date == 'all') {
$sql = "SELECT `value` FROM `$table_name` WHERE `option_name` = 'subscriptions'";
$data = $wpdb->get_col($sql);
$values = array();
foreach ($data as $item) {
$unserialized_item = unserialize($item);
if (isset($unserialized_item[$key])) {
$values[] = $unserialized_item[$key];
}
}
return $values;
} else {
if (strpos($date, ' ') !== false) {
$date = date('Y-m-d', strtotime($date));
}
$sql = "SELECT `value` FROM `$table_name` WHERE `option_name` = 'subscriptions' AND `date` = '$date'";
$result = $wpdb->get_col($sql);
if (!empty($result)) {
$data = unserialize($result[0]);
if (isset($data[$key])) {
return $data[$key];
}
}
return null;
}
}
function ambisn_update_data($data, $value){
global $wpdb;
$date = date('Y-m-d');
$table_name = $wpdb->prefix . 'wc_admail';
$sql = "SELECT `value` FROM `$table_name` WHERE `option_name` = 'subscriptions' AND `date` = '$date'";
$existing_row = $wpdb->get_row($sql);
if ($existing_row) {
$data_array = unserialize($existing_row->value);
$data_array[$data] = $value;
$data = array('value' => serialize($data_array), 'option_type' => 'data');
$where = array('option_name' => 'subscriptions', 'date' => $date);
$wpdb->update($table_name, $data, $where);
} else {
$data_array = serialize(array($data => $value));
$wpdb->insert($table_name, array('date' => $date, 'option_name' => 'subscriptions', 'value' => $data_array, 'option_type' => 'data'));
}
}
function ambisn_collected_emails($value , $date){
$emails = ambisn_get_data('emails', $date);
if($date == 'all'){
$emails = implode(',' , array_filter($emails));
}
$emailsArray = explode(',' , $emails);
if(empty($emails)){
$emailsArray = Array();
}
switch($value){
case 'count':
$result = count($emailsArray);
break;
case 'emails':
$result = $emailsArray;
break;
}
return $result;
}
add_action('template_redirect','ambisn_do_init');
function ambisn_do_init(){
global $current_user;
global $product;
if(isset($_POST['ambisn-submit'])){
add_filter('body_class', 'ambisn_success_submission_class');
add_action('wp_head', 'ambisn_hide_wc_notice');
$email = sanitize_email($_POST['ambisn_email']);
$product_id = absint($_POST['ambisn_product_id']);
global $nmemailErr;
if(ambisn_subscription_exists($email, $product_id)){
$nmemailErr = '
'.ambisn_get_setting('form_previously_subscribed_notice').'
';
}
elseif(!filter_var($email, FILTER_VALIDATE_EMAIL) || !is_int( $product_id)) {
$nmemailErr = '* Invalid email format
';
}
else{
$status = "enabled";
$usersData = get_post_meta($product_id, 'wc_admail_data', true);
update_post_meta($product_id, 'wc_admail', true);
ambisn_submit($product_id, $email, $status, $usersData);
}
}
if(isset($_POST['ambisn-unsubscribe'])){
$product_id = absint($_POST['ambisn_product_id']);
ambisn_unsubscribe_form($product_id, AMBISN_SESSION_ID);
add_filter('body_class', 'ambisn_success_submission_class');
add_action('wp_head', 'ambisn_hide_wc_notice');
}
}
function ambisn_success_submission_class($classes){
$classes[] = 'nm-submitted';
return $classes;
}
function ambisn_hide_wc_notice(){
echo '';
}
function ambisn_unsubscribe_form($product_id, $session_id){
global $current_user;
$email = $current_user->user_email;
global $wpdb;
$subscription_table = $wpdb->prefix . 'wc_admail_subscriptions';
$date = date('Y-m-d');
$subscriber = $wpdb->get_row(
$wpdb->prepare(
"SELECT email, sessionID FROM $subscription_table WHERE product_id = %d AND email = %s",
$product_id, $email
)
);
if (empty($subscriber) && !empty($session_id)) {
$subscriber = $wpdb->get_row(
$wpdb->prepare(
"SELECT email, sessionID FROM $subscription_table WHERE product_id = %d AND sessionID = %s",
$product_id, $session_id
)
);
if ($subscriber) {
$email = $subscriber->email;
}
}
if ($subscriber) {
$wpdb->delete(
$subscription_table,
array('email' => $email, 'product_id' => $product_id),
array('%s', '%d')
);
$subscribersCount = intval(ambisn_get_data('subscribers_count', $date));
$updatedSubscribersCount = max(0, $subscribersCount - 1);
ambisn_update_data('subscribers_count', $updatedSubscribersCount);
update_post_meta($product_id, 'wc_admail_count', $updatedSubscribersCount);
}
}
//Generate subscription form (simple and variable products)
function ambisn_subscription_form($type){
global $product;
$product_id = $product->get_id();
$variations_id = $product->get_children();
$popup_set = ambisn_get_setting('popup');
$popup_class = '';
if($popup_set == 1){
$popup_class = 'popup';
}
if($type == "simple"){
if(!$product->is_in_stock()){
?>
is_type('variable')){
$variations = $product->get_available_variations();
$at_least_one_in_stock = false;
foreach ( $variations as $variation ) {
$variation_obj = wc_get_product( $variation['variation_id'] );
if ( $variation_obj->is_in_stock() ) {
$at_least_one_in_stock = true;
break;
}
}
$s_variation = ambisn_get_setting('s-variation');
if($at_least_one_in_stock && ($s_variation == 1)){
}else{
foreach($variations_id as $variation_id){
$variation = wc_get_product($variation_id);
if(!$variation->is_in_stock()){
?>
get_id(), 'product_cat', array( 'fields' => 'slugs' ) );
$categories_match = array_intersect( $excluded_categories, $product_categories );
if(empty($categories_match)){
$guestsSet = ambisn_get_setting('guests');
$popup_set = ambisn_get_setting('popup');
$ajaxify_submission = ambisn_get_setting('ajaxify_submission');
$catVisibilty = get_option('woocommerce_hide_out_of_stock_items');
$admin_url = admin_url();
wp_enqueue_script( 'ambisn_scripts', AMBISN_URL. 'assets/js/scripts.js' , array('jquery'), date("h:i:s") );
wp_localize_script( 'admin_scripts', 'ambisn_script_vars', array('admin_url' => $admin_url));
if($guestsSet == '1' || is_user_logged_in()){
require_once(AMBISN_PATH.'includes/subscription_form.php');
if($ajaxify_submission == '1'){
wp_enqueue_script( 'ambisn_ajax_submission_script', AMBISN_URL. 'assets/js/ajax_submission_form.js' , array('jquery'), date("h:i:s") );
wp_localize_script( 'ambisn_ajax_submission_script', 'ambisn_script_vars', array('plugin_url' => AMBISN_URL));
}
//Show form on simple products
if($product->is_type('simple') && !$product->is_in_stock()){
add_action( 'woocommerce_simple_add_to_cart', 'ambisn_subscription_form_simple', 31);
if($popup_set == 1){
add_action( 'woocommerce_simple_add_to_cart', 'ambisn_popup_button', 31);
}
}
//Show form on variable products
if($product->is_type('variable')){
$variations_id = $product->get_children();
$var_instock = 0;
$var_ofs = 0;
foreach ($variations_id as $variation_id){
$variation = wc_get_product($variation_id);
if ($variation->is_in_stock()) {
$var_instock++;
}else{
$var_ofs++;
}
}
if(($var_instock == 0) && $catVisibilty == 'yes'){
add_action( 'woocommerce_after_add_to_cart_form', 'ambisn_subscription_form_simple', 21);
if($popup_set == 1){
add_action( 'woocommerce_after_add_to_cart_form', 'ambisn_popup_button', 31);
}
}
else{
if(count($variations_id) == "0"){
add_action( 'woocommerce_after_variations_form', 'ambisn_subscription_form_simple', 20);
if($popup_set == 1){
add_action( 'woocommerce_after_variations_form', 'ambisn_popup_button');
}
}
elseif($var_ofs > 0){
add_action( 'woocommerce_single_variation', 'ambisn_subscription_form_variable', 10 );
if($popup_set == 1){
add_action( 'woocommerce_after_add_to_cart_button', 'ambisn_popup_button');
}
}
}
}
}
}
}
function is_ambisn_subscribed($email = '', $product_id) {
global $wpdb;
$subscription_table = $wpdb->prefix . 'wc_admail_subscriptions';
if (empty($email)) {
$sessionID = AMBISN_SESSION_ID;
$email = $wpdb->get_var($wpdb->prepare(
"SELECT email FROM $subscription_table WHERE sessionID = %s AND product_id = %d LIMIT 1",
$sessionID,
$product_id
));
}
if (empty($email) && is_user_logged_in()) {
$current_user = wp_get_current_user();
$email = $current_user->user_email;
}
if (empty($email)) {
return false;
}
$status = $wpdb->get_var($wpdb->prepare(
"SELECT status FROM $subscription_table WHERE email = %s AND product_id = %d",
$email,
$product_id
));
return ($status === 'enabled');
}
function ambisn_subscription_exists($email, $product_id) {
global $wpdb;
$subscription_table = $wpdb->prefix . 'wc_admail_subscriptions';
$status = $wpdb->get_var($wpdb->prepare(
"SELECT status FROM $subscription_table WHERE email = %s AND product_id = %d",
$email,
$product_id
));
return ($status === 'enabled');
}
//Submit subscription - Ajax
function ajax_ambisn_subscribe(){
$response = array();
$popup_set = ambisn_get_setting('popup');
$recaptcha_tree = ambisn_get_setting('recaptcha_tree');
$recaptcha_tree_site_key = ambisn_get_setting('recaptcha_tree_site_key');
$recaptcha_tree_secret_key = ambisn_get_setting('recaptcha_tree_secret_key');
$sf_consent = ambisn_get_setting('sf_consent');
if(isset($sf_consent) && $sf_consent == '1'){
if(!isset($_REQUEST['consent_agreed']) || $_REQUEST['consent_agreed'] != '1'){
$response['consent_error'] = true;
echo json_encode($response);
die;
}
}
if(isset($recaptcha_tree) && $recaptcha_tree == '1'){
if(!isset($_REQUEST['token']) || $_REQUEST['token'] == '' || !isset($recaptcha_tree_secret_key)){
$response['notice'] = __("reCAPTCHA verification failed. Please try again.",'ambisn');
echo json_encode($response);
die;
}else{
$recaptcha_token = $_REQUEST['token'];
$recaptcha_response = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret={$recaptcha_tree_secret_key}&response={$recaptcha_token}");
$response_keys = json_decode($recaptcha_response, true);
$recaptcha_success = $response_keys['success'];
if(!$recaptcha_success){
$response['notice'] = __("reCAPTCHA verification failed. Please try again.",'ambisn');
$response['error'] = $response_keys;
echo json_encode($response);
die;
}
}
}
if (!isset($_REQUEST['nonce']) || !wp_verify_nonce($_REQUEST['nonce'], 'admail_subscribe_nonce')) {
$response['notice'] = __("Nonce verification failed. Please try again.","ambisn");
echo json_encode($response);
die;
}elseif(isset($_REQUEST['email']) && isset($_REQUEST['productID'])){
$email = sanitize_email($_REQUEST['email']);
$product_id = absint($_REQUEST['productID']);
$product = wc_get_product($product_id);
$notice = '';
if($product){
$_SESSION['nmuseremail'] = sanitize_email($email);
if(ambisn_subscription_exists($email, $product_id)){
$notice = ambisn_get_translated('form_previously_subscribed_notice');
}elseif(filter_var($email, FILTER_VALIDATE_EMAIL) && is_int($product_id)) {
$parent_id = $product->get_parent_id();
if($parent_id !== '0'){
update_post_meta($parent_id, 'wc_admail', true);
}
update_post_meta($product_id, 'wc_admail', true);
$usersData = get_post_meta($product_id, 'wc_admail_data', true);
ambisn_submit($product_id, $email, 'enabled', $usersData);
if(ambisn_get_setting('confirmation_email') == 1){
ambisn_subscription_confirmation_email($product_id, $email);
}
if(ambisn_get_setting('store_confirmation_email') == 1){
ambisn_store_subscription_confirmation_email($product_id, $email);
}
}
if(isset($_REQUEST['shortcode']) && sanitize_text_field($_REQUEST['shortcode']) === 'true'){
ob_start();
echo '';
if(is_ambisn_subscribed($email, $product_id)){
$status = 'subscribed';
$shortcode = true;
include(AMBISN_PATH.'includes/blocks/subscribed_form.php');
}else{
$shortcode = true;
include(AMBISN_PATH.'includes/blocks/subscription_form.php');
}
echo '
';
$response["sform_html"] = ob_get_clean();
}else{
$subscription_form = new AmbisnSubscriptionForm;
ob_start();
$subscription_form->print_subscription_form($product_id , $notice);
$response["sform_html"] = ob_get_clean();
}
}
if($popup_set == 1){
$response['popup'] = true;
if(is_ambisn_subscribed($email, $product_id)){
$response['s_status'] = 'subscribed';
}else{
$response['s_status'] = 'unsubscribed';
}
}
echo json_encode($response);
die();
}
}
add_action('wp_ajax_ajax_ambisn_subscribe','ajax_ambisn_subscribe');
add_action('wp_ajax_nopriv_ajax_ambisn_subscribe','ajax_ambisn_subscribe');
//Subscription confirmation Email
function ambisn_subscription_confirmation_email($product_id, $email){
global $post;
$product = wc_get_product($product_id);
if($product){
$domain_name = sanitize_text_field($_SERVER['SERVER_NAME']);
$no_reply = ambisn_get_setting('conf_no_reply');
$store_email = ambisn_get_setting("store_email");
if($no_reply == '1'){
$from = 'no-reply';
}
elseif(empty($store_email)){
$from = 'marketing';
}else{
$from = $store_email;
}
$subject = ambisn_get_translated("conf_email_subject");
if(empty($subject)){
$subject = 'The product you subscribed for is back in stock';
}
ob_start();
include_once (AMBISN_PATH.'includes/mail_templates/conf_email_template.php');
$message = ob_get_clean();
$headers = 'From: ' . ambisn_get_setting("store_name") . ' <' . $from . '@' . $domain_name . '>' . "\r\n";
$headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
$headers .= 'MIME-Version: 1.0' . "\r\n";
wp_mail($email, $subject, $message, $headers);
}
}
//Store subscription confirmation email
function ambisn_store_subscription_confirmation_email($product_id, $user_email){
global $post;
$product = wc_get_product($product_id);
$email = sanitize_email(ambisn_get_setting('store_conf_email_recipient'));
if($product && !empty($email) && is_email($email)){
$domain_name = sanitize_text_field($_SERVER['SERVER_NAME']);
$from = 'no-reply';
$subject = 'AdMail - New Subscription Alert';
ob_start();
include_once (AMBISN_PATH.'includes/mail_templates/store_conf_email_template.php');
$message = ob_get_clean();
$headers = 'From: ' . ambisn_get_setting("store_name") . ' <' . $from . '@' . $domain_name . '>' . "\r\n";
$headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
$headers .= 'MIME-Version: 1.0' . "\r\n";
wp_mail($email, $subject, $message, $headers);
}
}
//Unsubscribe - Ajax
function ajax_ambisn_ajax_unsubscribe(){
$response = array();
$popup_set = ambisn_get_setting('popup');
if (!isset($_REQUEST['nonce']) || !wp_verify_nonce($_REQUEST['nonce'], 'admail_unsubscribe_nonce')) {
$response['notice'] = "Nonce verification failed. Please try again.";
echo json_encode($response);
die;
}elseif(isset($_REQUEST['productID'])){
$product_id = absint($_REQUEST['productID']);
if(is_int($product_id)) {
$product = wc_get_product($product_id);
$email = '';
if($product){
ambisn_unsubscribe_form($product_id, AMBISN_SESSION_ID);
if(isset($_REQUEST['shortcode']) && sanitize_text_field($_REQUEST['shortcode']) === 'true'){
ob_start();
echo '';
if(is_ambisn_subscribed($email, $product_id)){
$status = 'subscribed';
$shortcode = true;
include(AMBISN_PATH.'includes/blocks/subscribed_form.php');
}else{
$shortcode = true;
include(AMBISN_PATH.'includes/blocks/subscription_form.php');
}
echo '
';
$response["sform_html"] = ob_get_clean();
}elseif(isset($_REQUEST['sTab']) && $_REQUEST['sTab'] == '1'){
$response['success'] = true;
$admail = new AmbisnSubscriptions;
$subscriptions = $admail->get_filtered_subscriptions('single-user-subscriptions');
if(empty($subscriptions)){
ob_start();
include_once(AMBISN_PATH.'includes/tabs/frontend_wc_subscriptions_tab.php');
$response['empty_html'] = ob_get_clean();
}
}else{
$subscription_form = new AmbisnSubscriptionForm;
ob_start();
$subscription_form->print_subscription_form($product_id , '');
$response["sform_html"] = ob_get_clean();
}
}
}
if($popup_set == 1){
$response['popup'] = true;
if(is_ambisn_subscribed($email, $product_id)){
$response['s_status'] = 'subscribed';
}else{
$response['s_status'] = 'unsubscribed';
}
}
echo json_encode($response);
die();
}
}
add_action('wp_ajax_ajax_ambisn_unsubscribe','ajax_ambisn_ajax_unsubscribe');
add_action('wp_ajax_nopriv_ajax_ambisn_unsubscribe','ajax_ambisn_ajax_unsubscribe');
//function to update database
function ambisn_submit($product_id, $email, $status, $usersData) {
global $wpdb;
$subscription_table = $wpdb->prefix . 'wc_admail_subscriptions';
$date = date('Y-m-d H:i:s');
$lang = get_locale();
$sessionID = AMBISN_SESSION_ID;
$exists = $wpdb->get_var($wpdb->prepare(
"SELECT COUNT(*) FROM $subscription_table WHERE email = %s AND product_id = %d",
$email,
$product_id
));
if (!$exists) {
$wpdb->insert(
$subscription_table,
array(
'email' => $email,
'sessionID' => $sessionID,
'product_id' => $product_id,
'status' => 'enabled',
'lang' => $lang,
'subscription_date' => $date
),
array('%s', '%s', '%d', '%s', '%s', '%s')
);
$subscriptionCount = intval(get_post_meta($product_id, 'wc_admail_count', true));
$subscribersCount = intval(ambisn_get_data('subscribers_count', $date));
ambisn_update_data('subscribers_count', $subscribersCount + 1);
update_post_meta($product_id, 'wc_admail_count', $subscriptionCount + 1);
$collectedEmails = ambisn_collected_emails('emails', 'all');
if(!in_array($email, $collectedEmails)){
$todaysEmails = ambisn_collected_emails('emails', $date);
$todaysEmails[] = $email;
$updatedEmails = implode(',',Array_filter($todaysEmails));
ambisn_update_data('emails', $updatedEmails);
}
}
}
//Prepare ajax data for action
function ambisn_ajax_subscription($action, $dataArray) {
global $wpdb;
$subscription_table = $wpdb->prefix . 'wc_admail_subscriptions';
foreach ($dataArray as $dataItem) {
$action = $dataItem['action'];
$product_id = $dataItem['productID'];
$email = $dataItem['email'];
if ($action == "delete") {
$wpdb->delete(
$subscription_table,
array('email' => $email, 'product_id' => $product_id),
array('%s', '%d')
);
$subscriptionCount = intval(get_post_meta($product_id, 'wc_admail_count', true));
update_post_meta($product_id, 'wc_admail_count', max(0, $subscriptionCount - 1));
} elseif ($action == "sent") {
ambisn_mail($email, $product_id);
$wpdb->update(
$subscription_table,
array('status' => 'sent'),
array('email' => $email, 'product_id' => $product_id),
array('%s'),
array('%s', '%d')
);
} else {
$wpdb->update(
$subscription_table,
array('status' => $action),
array('email' => $email, 'product_id' => $product_id),
array('%s'),
array('%s', '%d')
);
}
}
}
//Manage subscription - Ajax
function ambisn_ajax_manage_subscription($action){
if(isset($_REQUEST['dataArray'])){
$data_array = json_decode(wp_unslash($_REQUEST['dataArray']), true);
if(is_array($data_array)){
ambisn_ajax_subscription($action, $data_array);
}
}
die();
}
add_action('wp_ajax_ambisn_manage_subscription','ambisn_ajax_manage_subscription');
//Save Settings with Ajax
function ambisn_save_settings($action){
$response = array();
if(isset($_REQUEST)){
$settings = json_decode(stripslashes(sanitize_text_field($_REQUEST['settingsData'])), true);
foreach($settings as $attr=>$value){
if($attr == 'social_icons'){
if(!is_array($value)){
$value = array();
}
$value = serialize($value);
}
ambisn_update_setting($attr , $value);
}
ob_start();
$preview = true;
include_once (AMBISN_PATH.'includes/mail_templates/conf_email_template.php');
$response['ctp_html'] = ob_get_clean();
ob_start();
include_once (AMBISN_PATH.'includes/template_preview.php');
$response['tp_html'] = ob_get_clean();
echo json_encode($response);
$display_wc_subscriptions_tab = ambisn_get_setting('ps_tab');
if($display_wc_subscriptions_tab == '1'){
add_rewrite_endpoint('product-subscriptions', EP_ROOT | EP_PAGES);
}
flush_rewrite_rules();
die();
}
}
add_action('wp_ajax_ajax_ambisn_settings','ambisn_save_settings');
//Send emails
function ambisn_mail($email, $product_id) {
global $wpdb;
$subscription_table = $wpdb->prefix . 'wc_admail_subscriptions';
$product = wc_get_product($product_id);
if ($product && $product->is_in_stock()) {
$userData = $wpdb->get_row($wpdb->prepare(
"SELECT * FROM $subscription_table WHERE email = %s AND product_id = %d",
$email,
$product_id
), ARRAY_A);
$lang_switched = false;
if (!empty($userData['lang'])) {
$usersLang = $userData['lang'];
if ($usersLang != '' && $usersLang != get_locale()) {
switch_to_locale($usersLang);
$lang_switched = true;
}
}
require_once (AMBISN_PATH . 'includes/mail_templates/email_parent_template.php');
$domain_name = sanitize_text_field($_SERVER['SERVER_NAME']);
$no_reply = ambisn_get_setting('no_reply');
$store_email = ambisn_get_setting("store_email");
if ($no_reply == '1') {
$from = 'no-reply';
} elseif (empty($store_email)) {
$from = 'marketing';
} else {
$from = $store_email;
}
$subject = ambisn_get_translated("email_subject");
if (empty($subject)) {
$subject = 'The product you subscribed for is back in stock';
}
$message = ambisn_mail_template($product_id);
$headers = 'From: ' . ambisn_get_setting("store_name") . ' <' . $from . '@' . $domain_name . '>' . "\r\n";
$headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
$headers .= 'MIME-Version: 1.0' . "\r\n";
wp_mail($email, $subject, $message, $headers);
if ($lang_switched) {
restore_previous_locale();
}
$wpdb->update(
$subscription_table,
array('status' => 'sent'),
array('email' => $email, 'product_id' => $product_id),
array('%s'),
array('%s', '%d')
);
$notificationSent = ambisn_get_data('notification_sent', date('Y-m-d')) + 1;
ambisn_update_data('notification_sent', $notificationSent);
}
}
//Check if auto submission setting is enabled
if(ambisn_get_setting('auto_submission') == "1"){
add_action('woocommerce_update_product', 'ambisn_auto_send_notices', 10, 1);
function ambisn_auto_send_notices($product_id) {
global $wpdb;
$subscription_table = $wpdb->prefix . 'wc_admail_subscriptions';
$product = wc_get_product($product_id);
$product_ids = array();
$product_ids[] = $product_id;
if ($product->is_type('variable')) {
$variations_id = $product->get_children();
foreach ($variations_id as $variation_id) {
$product_ids[] = $variation_id;
}
}
foreach ($product_ids as $product_id) {
$subscribers = $wpdb->get_results(
$wpdb->prepare(
"SELECT email, status FROM $subscription_table WHERE product_id = %d AND status = 'enabled'",
$product_id
)
);
foreach ($subscribers as $subscriber) {
if ($subscriber->status == 'enabled') {
ambisn_mail($subscriber->email, $product_id);
}
}
}
}
}
//Create date range
function ambisn_dateRange($nbDays){
$begin = new DateTime();
$begin->sub(new DateInterval('P'.$nbDays.'D'));
$end = new DateTime('tomorrow');
$interval = new DateInterval('P1D');
$dateRange = new DatePeriod($begin, $interval, $end);
$range = [];
return $dateRange;
foreach ($dateRange as $date) {
$date = $date->format('Y-m-d');
}
}
function ambisn_search_product() {
$response = array();
if(isset($_REQUEST['inputName']) && isset($_REQUEST['tab'])){
$inputName = sanitize_text_field($_REQUEST['inputName']);
$tab = sanitize_text_field($_REQUEST['tab']);
$args = array(
'limit' => 100,
's' => $inputName,
);
$wc_products = wc_get_products($args);
if ($wc_products && is_array($wc_products)) {
$product_ids = array();
foreach ($wc_products as $product) {
$product_ids[] = $product->get_id();
if ($product->is_type('variable')) {
$variation_ids = $product->get_children();
$product_ids = array_merge($product_ids, $variation_ids);
}
}
$product_ids = array_unique($product_ids);
$subscritions_items = ambisn_get_subscriptions_by_product($tab, $product_ids);
if(count($subscritions_items) > 0 ){
ob_start();
ambisn_table_rows($subscritions_items, 1000, 1, $tab);
$response['table'] = ob_get_clean();
}else{
ob_start();
ambisn_emptyResults();
$response['empty'] = ob_get_clean();
}
}else{
ob_start();
ambisn_emptyResults();
$response['empty'] = ob_get_clean();
}
}else{
$response['alert'] = 'Something went wrong. Please try again later!';
}
echo json_encode($response);
die();
}
add_action('wp_ajax_ambisn_search_product', 'ambisn_search_product');
function admail_subscription_form(){
global $product;
if($product && !$product->is_in_stock()){
$product_id = $product->get_id();
$email = '';
if(!$product->is_in_stock()){
echo '';
if(is_ambisn_subscribed($email, $product_id)){
$status = 'subscribed';
$shortcode = true;
include(AMBISN_PATH.'includes/blocks/subscribed_form.php');
}else{
$shortcode = true;
include(AMBISN_PATH.'includes/blocks/subscription_form.php');
}
echo '
';
}
}
}
add_shortcode('admail_subscription_form','admail_subscription_form');
function ambisn_product_subscriptions_query_vars($vars) {
$vars[] = 'product-subscriptions';
return $vars;
}
function ambisn_add_product_subscriptions_link_my_account($items) {
$new_items = array_slice($items, 0, 2, true);
$new_items['product-subscriptions'] = __('Product Subscriptions', 'ambisn');
$new_items = array_merge($new_items, array_slice($items, 2, null, true));
return $new_items;
}
function ambisn_product_subscriptions_content() {
include(AMBISN_PATH.'includes/tabs/frontend_wc_subscriptions_tab.php');
}
function ambisn_manage_product_subscriptions_tab() {
$display_tab = ambisn_get_setting('ps_tab');
if ($display_tab == '1') {
add_filter('query_vars', 'ambisn_product_subscriptions_query_vars', 0);
add_filter('woocommerce_account_menu_items', 'ambisn_add_product_subscriptions_link_my_account');
add_action('woocommerce_account_product-subscriptions_endpoint', 'ambisn_product_subscriptions_content');
}
}
ambisn_manage_product_subscriptions_tab();
function admail_product_subscriptions_page(){
echo '';
include(AMBISN_PATH.'includes/tabs/frontend_wc_subscriptions_tab.php');
echo '
';
}
add_shortcode('admail_product_subscriptions_page','admail_product_subscriptions_page');
function ambisn_handle_product_meta_on_insert( $post_id, $post, $update ) {
$prevent_dupl_subscriptions = ambisn_get_setting('prevent_dupl_subscriptions');
if($prevent_dupl_subscriptions == '0'){
return;
}
if ( 'product' !== $post->post_type ) {
return;
}
$admail_data = get_post_meta( $post_id, 'wc_admail_data', true );
if ( !empty($admail_data) ) {
$admail_data_serialized = serialize( $admail_data );
$existing_products = get_posts( array(
'post_type' => 'product',
'meta_key' => 'wc_admail_data',
'meta_value' => $admail_data_serialized,
'post__not_in' => array( $post_id ),
'fields' => 'ids',
'posts_per_page' => -1
) );
if ( !empty($existing_products) ) {
delete_post_meta( $post_id, 'wc_admail' );
delete_post_meta( $post_id, 'wc_admail_data' );
delete_post_meta( $post_id, 'wc_admail_count' );
}
}
}
add_action( 'wp_insert_post', 'ambisn_handle_product_meta_on_insert', 10, 3 );
function ambisn_define_subscriptions_language($product_id) {
global $wpdb;
$subscription_table = $wpdb->prefix . 'wc_admail_subscriptions';
$product = wc_get_product($product_id);
$products_to_be_fixed = array();
$subscribers = $wpdb->get_results(
$wpdb->prepare(
"SELECT email, lang FROM $subscription_table WHERE product_id = %d",
$product_id
)
);
if (!empty($subscribers)) {
$products_to_be_fixed[] = $product_id;
}
if ($product && 'variable' === $product->get_type()) {
$variation_ids = array_map(function($variation) {
return $variation['variation_id'];
}, $product->get_available_variations());
foreach ($variation_ids as $variation_id) {
$subscribers = $wpdb->get_results(
$wpdb->prepare(
"SELECT email, lang FROM $subscription_table WHERE product_id = %d",
$variation_id
)
);
if (!empty($subscribers)) {
$products_to_be_fixed[] = $variation_id;
}
}
}
$fixed_products = get_option('ambisn_lang_fixed_products', array());
if (!in_array($product_id, $fixed_products)) {
foreach ($products_to_be_fixed as $to_fix_product_id) {
$subscribers = $wpdb->get_results(
$wpdb->prepare(
"SELECT email, lang FROM $subscription_table WHERE product_id = %d",
$to_fix_product_id
)
);
$update_meta = false;
foreach ($subscribers as $subscriber) {
if (empty($subscriber->lang)) {
$wpdb->update(
$subscription_table,
array('lang' => get_locale()),
array('email' => $subscriber->email, 'product_id' => $to_fix_product_id),
array('%s'),
array('%s', '%d')
);
$update_meta = true;
}
}
}
$fixed_products[] = $product_id;
update_option('ambisn_lang_fixed_products', $fixed_products);
}
}