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(); $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'), ); get_type(); 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); } $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(){ global $product; $popup_set = ambisn_get_setting('popup'); $excluded_cats = explode(',',ambisn_get_setting('exclude_categories')); if(!is_array($excluded_cats)){ $excluded_cats = array(); } $excluded_p_types = explode(',',ambisn_get_setting('exclude_product_type')); if(!is_array($excluded_p_types)){ $excluded_p_types = array(); } $exclude_tag_ids = explode(',',ambisn_get_setting('exclude_tag_names')); if(!is_array($exclude_tag_ids)){ $exclude_tag_names = array(); }else{ $exclude_tag_names = array(); 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; } wp_enqueue_script( 'ambisn_scripts', AMBISN_URL. 'assets/js/scripts.js' , array('jquery'), date("h:i:s") ); $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'; $button_hook = 'woocommerce_simple_add_to_cart'; $priority = 31; } elseif ($product_type === 'variable') { if(!$product->is_in_stock() && get_option('woocommerce_hide_out_of_stock_items') === 'yes'){ $form_hook = 'woocommerce_after_variations_form'; $button_hook = 'woocommerce_after_variations_form'; }else{ $form_hook = 'woocommerce_before_add_to_cart_button'; $button_hook = 'woocommerce_after_add_to_cart_button'; } $priority = 31; } 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('woocommerce_before_single_product','ambisn_subscription_form_positioned'); 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; $productSubscribers = get_post_meta($product_id, 'wc_admail_data', true); $date = date('Y-m-d'); if(is_array($productSubscribers)){ if( empty($email) || !isset($productSubscribers[$email])){ foreach(array_keys($productSubscribers) as $email_item){ if(isset($productSubscribers[$email_item]['sessionID']) && $productSubscribers[$email_item]['sessionID'] == AMBISN_SESSION_ID){ $email = $email_item; break; } } } $subscriptionCount = intval(get_post_meta($product_id, 'wc_admail_count', true)); $subscribersCount = intval(ambisn_get_data('subscribers_count', $date)); unset($productSubscribers[$email]); update_post_meta($product_id, 'wc_admail_data', $productSubscribers); ambisn_update_data('subscribers_count', $subscribersCount - 1 ); update_post_meta($product_id, 'wc_admail_count', $subscriptionCount - 1); } } //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'); wp_enqueue_script( 'ambisn_scripts', AMBISN_URL. 'assets/js/scripts.js' , array('jquery'), date("h:i:s") ); 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){ $productSubscribers = get_post_meta($product_id, 'wc_admail_data', true); if(!is_array($productSubscribers)){ $productSubscribers = array(); } $subscriber_emails = array_keys($productSubscribers); if(!$email){ foreach($subscriber_emails as $email_item){ if($productSubscribers[$email_item]['sessionID'] == AMBISN_SESSION_ID){ $email = $email_item; break; } } } if (isset($productSubscribers[$email]['sessionID']) && $productSubscribers[$email]['sessionID'] == AMBISN_SESSION_ID) { if($productSubscribers[$email]['status'] == 'enabled'){ return true; } } if(is_user_logged_in()){ global $current_user; $regiEmail = $current_user->user_email; if(!empty($regiEmail)){ if (isset($productSubscribers[$regiEmail])){ if($productSubscribers[$regiEmail]['status'] == 'enabled'){ return true; } } } } return false; } function ambisn_subscription_exists($email, $product_id){ $productSubscribers = get_post_meta($product_id, 'wc_admail_data', true); if(!is_array($productSubscribers)){ $productSubscribers = array(); } if(array_key_exists($email, $productSubscribers) && $productSubscribers[$email]['status'] == 'enabled'){ return true; } return false; } //Submit subscription - Ajax function ajax_ambisn_subscribe(){ $response = array(); $popup_set = ambisn_get_setting('popup'); if (!isset($_REQUEST['nonce']) || !wp_verify_nonce($_REQUEST['nonce'], 'admail_subscribe_nonce')) { $response['notice'] = "Nonce verification failed. Please try again."; 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(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_setting("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); } } //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(); }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){ $date = date('Y-m-d H:i:s'); if (isset(get_post_meta($product_id, 'wc_admail_data')[0])){ $productSubscriptions = get_post_meta($product_id, 'wc_admail_data')[0]; }else{ $productSubscriptions = array(); } if(!is_ambisn_subscribed($email, $product_id)){ $newItem = array(); $newItem = array('status'=>'enabled','sessionID'=>AMBISN_SESSION_ID, 'date' => $date,); if(!is_array($productSubscriptions)){ $productSubscriptions = array(); } $productSubscriptions[$email] = $newItem; update_post_meta($product_id, 'wc_admail_data', $productSubscriptions); $subscriptionCount = intval(get_post_meta($product_id, 'wc_admail_count', true)); $subscribersCount = intval(ambisn_get_data('subscribers_count', $date)); if (!is_int($subscribersCount)) { $subscribersCount = 0; } if (!is_int($subscriptionCount)) { $subscriptionCount = 0; } ambisn_update_data('subscribers_count', $subscribersCount + 1 ); update_post_meta($product_id, 'wc_admail_count', $subscriptionCount + 1); } //Collect Emails By Product $subscribers = get_post_meta($product_id, 'wc_admail_subscribers', true); if(!is_array($subscribers)){ $subscribers = array(); } if (!in_array($email, array_keys($subscribers))){ $subscribers[$email] = AMBISN_SESSION_ID; update_post_meta($product_id, 'wc_admail_subscribers', $subscribers); } //Collect Emails By Date and update subscribers count $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){ foreach($dataArray as $dataItem){ $action = $dataItem['action']; $product_id = $dataItem['productID']; $email = $dataItem['email']; $productSubscribers = get_post_meta($product_id, 'wc_admail_data', true); if($action == "delete"){ unset($productSubscribers[$email]); update_post_meta( $product_id, 'wc_admail_data', $productSubscribers); if(empty(get_post_meta( $product_id, 'wc_admail_data', true ))){ delete_post_meta( $product_id, 'wc_admail'); } }elseif($action == "sent"){ ambisn_mail($email , $product_id); }else{ if (isset($productSubscribers[$email]['status'])){ $productSubscribers[$email]['status'] = $action; } update_post_meta($product_id, 'wc_admail_data', $productSubscribers); } } } //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); die(); } } add_action('wp_ajax_ajax_ambisn_settings','ambisn_save_settings'); //Send emails function ambisn_mail($email, $product_id){ global $post; $product = wc_get_product($product_id); if($product->is_in_stock()){ 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_setting("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); $usersData = get_post_meta($product_id, 'wc_admail_data', true); $usersData[$email]['status'] = 'sent'; update_post_meta($product_id, 'wc_admail_data', $usersData); $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"){ //Send Notices on product update add_action( 'woocommerce_update_product', 'ambisn_auto_send_notices', 10, 1 ); function ambisn_auto_send_notices($product_id) { $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 = get_post_meta($product_id, 'wc_admail_data', true); foreach($subscribers as $email=>$data){ if( $data['status']== 'enabled'){ ambisn_mail($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_get_products(){ $args = array( 'meta_key' => 'wc_admail', 'meta_value' => '1', //'order' => 'DESC', 'limit' => -1, ); $mwproducts = wc_get_products($args); $ambisn_products = array(); foreach($mwproducts as $product){ $product_id = $product->get_id(); $subscribersCount = get_post_meta($product_id, 'wc_admail_count', true); if($product->is_type('variable')){ $subscribersCountParent = get_post_meta($product_id, 'wc_admail_count', true); $ambisn_enabled = get_post_meta($product_id, 'wc_admail', true); if($subscribersCountParent > 0 ){ $ambisn_products[$product_id]= $subscribersCountParent; } if($ambisn_enabled == 1){ $variations_id = $product->get_children(); foreach($variations_id as $variation_id){ $subscribersCount = get_post_meta($variation_id, 'wc_admail_count', true); if($subscribersCount > 0 ){ $ambisn_products[$variation_id]= $subscribersCount; } } } } else{ if($subscribersCount > 0 ){ $ambisn_products[$product_id]= $subscribersCount; } } } arsort($ambisn_products); return $ambisn_products; } function ambisn_get_subscriptions($filter){ $ambisn_products = ambisn_get_products(); $ambisn_product_ids = array_keys($ambisn_products); $subscriptions_data = array(); foreach($ambisn_product_ids as $product_id){ $productSubscribers = get_post_meta($product_id, 'wc_admail_data'); $filtredData = array(); $product = wc_get_product($product_id); foreach($productSubscribers as $subscriber){ foreach($subscriber as $email=>$data){ if($data['status'] == 'enabled' && $product->is_in_stock() && $filter == 'instock'){ $filtredData[$email] = 'instock'; } elseif($data['status'] == 'enabled' && !$product->is_in_stock() && $filter == 'ofs'){ $filtredData[$email] = 'ofs'; } elseif($data['status'] == $filter){ $filtredData[$email] = $data['status']; } } } $subscriptions_data[$product_id] = $filtredData; } return $subscriptions_data; } function ambisn_get_products_by_email($email_input){ $ambisn_products = ambisn_get_products(); $ambisn_product_ids = array_keys($ambisn_products); $products_by_email = array(); foreach($ambisn_product_ids as $product_id){ $productSubscribers = get_post_meta($product_id, 'wc_admail_data'); foreach($productSubscribers as $subscriber){ foreach($subscriber as $email=>$data){ if($email == $email_input){ $products_by_email[] = $product_id; } } } } return $products_by_email; } 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');