PluginProbe ʕ •ᴥ•ʔ
Discount Rules for WooCommerce / 1.9.2
Discount Rules for WooCommerce v1.9.2
1.4.39 1.4.4 1.4.40 1.4.41 1.4.42 1.4.43 1.4.44 1.4.45 1.4.5 1.4.6 1.4.7 1.4.8 1.4.9 1.5.0 1.5.1 1.5.10 1.5.11 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.5.9 1.6.0 1.6.1 1.6.10 1.6.11 1.6.12 1.6.14 1.6.15 1.6.16 1.6.17 1.6.18 1.6.19 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.7 1.6.8 1.6.9 1.7.0 1.7.1 1.7.10 1.7.11 1.7.12 1.7.13 1.7.14 1.7.15 1.7.16 1.7.17 1.7.18 1.7.19 1.7.2 1.7.20 1.7.3 1.7.4 1.7.5 1.7.6 1.7.7 1.7.8 1.7.9 1.8.0 1.8.1 1.8.2 1.9.0 1.9.1 1.9.10 1.9.11 1.9.12 1.9.2 1.9.3 1.9.4 1.9.5 1.9.6 1.9.7 1.9.8 1.9.9 2.0.0 2.0.1 2.0.2 2.1.0 2.1.1 2.1.2 2.2.0 2.2.1 2.2.2 2.3.0 2.3.1 2.3.10 2.3.11 2.3.12 2.3.13 2.3.2 2.3.3 2.3.4 2.3.5 2.3.6 2.3.7 2.3.8 2.3.9 2.4.0 2.4.1 2.4.2 2.4.4 2.4.5 2.5.0 2.5.2 2.5.3 2.5.4 2.6.0 2.6.1 2.6.10 2.6.11 2.6.12 2.6.13 2.6.14 2.6.15 2.6.2 2.6.3 2.6.4 2.6.5 2.6.6 2.6.7 2.6.8 2.6.9 trunk 1.1 1.2 1.3 1.4 1.4.1 1.4.10 1.4.11 1.4.12 1.4.13 1.4.14 1.4.15 1.4.16 1.4.17 1.4.18 1.4.19 1.4.2 1.4.20 1.4.21 1.4.22 1.4.23 1.4.24 1.4.25 1.4.26 1.4.27 1.4.28 1.4.29 1.4.3 1.4.30 1.4.31 1.4.32 1.4.33 1.4.34 1.4.35 1.4.36 1.4.37 1.4.38
woo-discount-rules / loader.php
woo-discount-rules Last commit date
assets 6 years ago helper 6 years ago i18n 6 years ago includes 6 years ago vendor 6 years ago view 6 years ago loader.php 6 years ago readme.txt 6 years ago woo-discount-rules.php 6 years ago
loader.php
659 lines
1 <?php
2 if (!defined('ABSPATH')) exit; // Exit if accessed directly
3
4 /**
5 * Plugin Directory.
6 */
7 define('WOO_DISCOUNT_DIR', untrailingslashit(plugin_dir_path(__FILE__)));
8
9 /**
10 * Plugin Directory URI.
11 */
12 define('WOO_DISCOUNT_URI', untrailingslashit(plugin_dir_url(__FILE__)));
13
14 if(!function_exists('get_plugin_data')){
15 require_once ABSPATH . 'wp-admin/includes/plugin.php';
16 }
17
18 /**
19 * Version of Woo Discount Rules.
20 */
21 $pluginDetails = get_plugin_data(plugin_dir_path(__FILE__).'woo-discount-rules.php');
22 define('WOO_DISCOUNT_VERSION', $pluginDetails['Version']);
23
24 if(!class_exists('FlycartWooDiscountRules')){
25 class FlycartWooDiscountRules{
26
27 private static $instance;
28 public $discountBase;
29 public $pricingRules;
30 public $config;
31
32 public static $product_variations = array();
33
34 /**
35 * To run the plugin
36 * */
37 public static function init() {
38 if ( self::$instance == null ) {
39 self::$instance = new FlycartWooDiscountRules();
40 }
41 return self::$instance;
42 }
43
44 /**
45 * FlycartWooDiscountRules constructor
46 * */
47 public function __construct() {
48 $this->hasWPML();
49 $this->includeFiles();
50 $this->discountBase = new FlycartWooDiscountBase();
51 $this->runUpdater();
52 $this->pricingRules = new FlycartWooDiscountRulesPricingRules();
53 if (is_admin()) {
54 $this->loadAdminScripts();
55 }
56 if(FlycartWooDiscountRulesGeneralHelper::doIHaveToRun()){
57 $this->loadSiteScripts();
58 }
59 $this->loadCommonScripts();
60 }
61
62 /**
63 * To check for WPML
64 * */
65 protected function hasWPML(){
66 if ( is_plugin_active( 'sitepress-multilingual-cms/sitepress.php' ) ) {
67 define('WOO_DISCOUNT_AVAILABLE_WPML', true);
68 } else {
69 define('WOO_DISCOUNT_AVAILABLE_WPML', false);
70 }
71 }
72
73 /**
74 * To include Files
75 * */
76 protected function includeFiles(){
77 include_once(dirname(__FILE__).'/helper/woo-function.php');
78 include_once(dirname(__FILE__).'/includes/pricing-rules.php');
79 include_once(dirname(__FILE__).'/helper/general-helper.php');
80 include_once(dirname(__FILE__).'/includes/cart-rules.php');
81 include_once(dirname(__FILE__).'/includes/discount-base.php');
82 include_once(dirname(__FILE__).'/helper/purchase.php');
83 include_once(dirname(__FILE__).'/includes/compatibility.php');
84 include_once(dirname(__FILE__).'/includes/survey.php');
85 require_once __DIR__ . '/vendor/autoload.php';
86 }
87
88 /**
89 * Run Plugin updater
90 * */
91 protected function runUpdater(){
92 add_filter('puc_request_info_result-woo-discount-rules', array($this, 'loadWooDiscountRulesUpdateDetails'), 10, 2);
93
94 try{
95 require plugin_dir_path( __FILE__ ).'/vendor/yahnis-elsts/plugin-update-checker/plugin-update-checker.php';
96
97 $purchase_helper = new FlycartWooDiscountRulesPurchase();
98 $purchase_helper->init();
99 $update_url = $purchase_helper->getUpdateURL();
100 if(!$purchase_helper->isPro()){
101 $dlid = $this->discountBase->getConfigData('license_key', null);
102 if(empty($dlid)) return false;
103 }
104 $myUpdateChecker = Puc_v4_Factory::buildUpdateChecker(
105 $update_url,
106 plugin_dir_path( __FILE__ ).'woo-discount-rules.php',
107 'woo-discount-rules'
108 );
109 add_action( 'after_plugin_row', array($purchase_helper, 'woodisc_after_plugin_row'),10,3 );
110
111 add_action('wp_ajax_forceValidateLicenseKey', array($purchase_helper, 'forceValidateLicenseKey'));
112
113 add_action( 'admin_notices', array($purchase_helper, 'errorNoticeInAdminPages'));
114 } catch (Exception $e){}
115 }
116
117 /**
118 * To load Woo discount rules update details
119 * */
120 public function loadWooDiscountRulesUpdateDetails($pluginInfo, $result){
121 try{
122 global $wp_version;
123 // include an unmodified $wp_version
124 include( ABSPATH . WPINC . '/version.php' );
125 $args = array('slug' => 'woo-discount-rules', 'fields' => array('active_installs'));
126 $response = wp_remote_post(
127 'http://api.wordpress.org/plugins/info/1.0/',
128 array(
129 'user-agent' => 'WordPress/' . $wp_version . '; ' . home_url( '/' ),
130 'body' => array(
131 'action' => 'plugin_information',
132 'request'=>serialize((object)$args)
133 )
134 )
135 );
136
137 if(!empty($response)){
138 $returned_object = maybe_unserialize(wp_remote_retrieve_body($response));
139 if(!empty($returned_object)){
140 if(!empty($returned_object->name)) $pluginInfo->name = $returned_object->name;
141 if(!empty($returned_object->sections)) $pluginInfo->sections = $returned_object->sections;
142 if(!empty($returned_object->author)) $pluginInfo->author = $returned_object->author;
143 if(!empty($returned_object->author_profile)) $pluginInfo->author_profile = $returned_object->author_profile;
144 if(!empty($returned_object->requires)) $pluginInfo->requires = $returned_object->requires;
145 if(!empty($returned_object->tested)) $pluginInfo->tested = $returned_object->tested;
146 if(!empty($returned_object->rating)) $pluginInfo->rating = $returned_object->rating;
147 if(!empty($returned_object->ratings)) $pluginInfo->ratings = $returned_object->ratings;
148 if(!empty($returned_object->num_ratings)) $pluginInfo->num_ratings = $returned_object->num_ratings;
149 if(!empty($returned_object->support_threads)) $pluginInfo->support_threads = $returned_object->support_threads;
150 if(!empty($returned_object->support_threads_resolved)) $pluginInfo->support_threads_resolved = $returned_object->support_threads_resolved;
151 if(!empty($returned_object->downloaded)) $pluginInfo->downloaded = $returned_object->downloaded;
152 if(!empty($returned_object->last_updated)) $pluginInfo->last_updated = $returned_object->last_updated;
153 if(!empty($returned_object->added)) $pluginInfo->added = $returned_object->added;
154 if(!empty($returned_object->versions)) $pluginInfo->versions = $returned_object->versions;
155 if(!empty($returned_object->tags)) $pluginInfo->tags = $returned_object->tags;
156 if(!empty($returned_object->screenshots)) $pluginInfo->screenshots = $returned_object->screenshots;
157 if(!empty($returned_object->active_installs)) $pluginInfo->active_installs = $returned_object->active_installs;
158 }
159 }
160 } catch (Exception $e){}
161
162 return $pluginInfo;
163 }
164
165 /**
166 * Show up the survey form
167 */
168 function setupSurveyForm()
169 {
170 $survey = new FlycartWooDiscountRulesSurvey();
171 $survey->init('woo-discount-rules', 'Discount Rules for WooCommerce', 'woo-discount-rules');
172 }
173
174 /**
175 * Load Admin scripts
176 * */
177 protected function loadAdminScripts(){
178 // Init in Admin Menu
179 add_action('admin_menu', array($this->discountBase, 'adminMenu'));
180 add_action('wp_ajax_savePriceRule', array($this->discountBase, 'savePriceRule'));
181 add_action('wp_ajax_saveCartRule', array($this->discountBase, 'saveCartRule'));
182 add_action('wp_ajax_saveConfig', array($this->discountBase, 'saveConfig'));
183 add_action('wp_ajax_resetWDRCache', array($this->discountBase, 'resetWDRCache'));
184 add_action('wp_ajax_loadProductSelectBox', array($this->discountBase, 'loadProductSelectBox'));
185 add_action('wp_ajax_loadCoupons', array($this->discountBase, 'loadCoupons'));
186
187 add_action('wp_ajax_UpdateStatus', array($this->discountBase, 'updateStatus'));
188 add_action('wp_ajax_RemoveRule', array($this->discountBase, 'removeRule'));
189 add_action('wp_ajax_doBulkAction', array($this->discountBase, 'doBulkAction'));
190 add_action('wp_ajax_createDuplicateRule', array($this->discountBase, 'createDuplicateRule'));
191 add_action('admin_enqueue_scripts', array($this->discountBase, 'woo_discount_adminPageScript'), 100 );
192 $display_you_saved_text = $this->discountBase->getConfigData('display_you_saved_text', 'no');
193 if(in_array($display_you_saved_text, array('on_each_line_item', 'both_line_item_and_after_total'))){
194 add_action( 'woocommerce_after_order_itemmeta', array( $this->pricingRules, 'addAdditionalContentInAfterOrderItemMeta'), 1000, 3);
195 }
196 if(in_array($display_you_saved_text, array('after_total', 'both_line_item_and_after_total'))){
197 add_action( 'woocommerce_admin_order_totals_after_total', array( $this->pricingRules, 'displayTotalSavingsThroughDiscountInOrder'), 10);
198 }
199 add_filter( 'plugin_action_links_' . WOO_DISCOUNT_PLUGIN_BASENAME, array('FlycartWooDiscountBase', 'addActionLinksInPluginPage') );
200
201 add_action('admin_init', array($this, 'setupSurveyForm'), 10);
202 }
203
204 /**
205 * Apply discount rules
206 * */
207 public function applyDiscountRules(){
208 $this->discountBase->handlePriceDiscount();
209 $removeTheEvent = apply_filters('woo_discount_rules_remove_event_woocommerce_before_calculate_totals', false);
210 if(!$removeTheEvent){
211 remove_action('woocommerce_before_calculate_totals', array($this, 'applyDiscountRules'), 1000);
212 }
213 }
214
215 /**
216 * Apply discount rules
217 * */
218 public function applyCartDiscountRules(){
219 $removeTheEvent = apply_filters('woo_discount_rules_remove_event_woocommerce_cart_loaded_from_session', false);
220 if(!$removeTheEvent){
221 remove_action('woocommerce_cart_loaded_from_session', array($this, 'applyCartDiscountRules'), 97);
222 }
223 $this->discountBase->handleCartDiscount();
224 }
225
226 /**
227 * Script on product page for loading variant strikeout
228 * */
229 public function script_on_product_page()
230 {
231 $runVariationStrikeoutAjax = apply_filters('woo_discount_rules_run_variation_strikeout_through_ajax', true);
232 $script = '<script>';
233 $script .= 'if(flycart_woo_discount_rules_strikeout_script_executed == undefined){';
234 $script .= 'jQuery( document ).ready( function() {';
235 $enable_variable_product_cache = $this->discountBase->getConfigData('enable_variable_product_cache', 0);
236 if ((FlycartWooDiscountRulesGeneralHelper::showDiscountOnProductPage()) && $runVariationStrikeoutAjax) {
237 $script .= 'jQuery( ".single_variation_wrap" ).on( "show_variation", function ( event, variation, purchasable ) {';
238 $script .= ' var container = jQuery(".single_variation .woocommerce-variation-price");';
239 $script .= ' var current_object = jQuery(this);
240 current_object.trigger("woo_discount_rules_before_variant_strikeout");/*container.hide("slow");*/';
241 $script .= ' jQuery.ajax({
242 url: woo_discount_rules.ajax_url,
243 dataType: "json",
244 type: "POST",
245 data: {action: "loadWooDiscountedPriceForVariant", id: variation.variation_id, price_html: variation.price_html},
246 beforeSend: function() {
247 },
248 complete: function() {
249 },
250 success: function (response) {
251 if(response.status == 1){
252 jQuery(".single_variation .woocommerce-variation-price").html(response.price_html);
253 }
254 current_object.trigger("woo_discount_rules_after_variant_strikeout");
255 /*container.show("slow");*/
256 }
257 });';
258 $script .= ' });';
259 }
260 if ($enable_variable_product_cache) {
261 $script .= ' var woo_discount_rules_session_storage_id = "woo_discount_rules_session_storage_id_";
262 var woo_discount_rules_session_storage_time_id = "woo_discount_rules_session_storage_time_id_";
263 const WOO_DISCOUNT_RULES = {
264 checkSessionStorageExists: function (id) {
265 var name = woo_discount_rules_session_storage_id+id;
266 if (sessionStorage.getItem(name) === null) {
267 return false;
268 }
269 return true;
270 },
271 setSessionStorage: function (id, value) {
272 var name = woo_discount_rules_session_storage_id+id;
273 sessionStorage.setItem(name, value);
274 },
275 getSessionStorage: function (id) {
276 var name = woo_discount_rules_session_storage_id+id;
277 return sessionStorage.getItem(name);
278 },
279 setSessionStorageTime: function (id, value) {
280 var name = woo_discount_rules_session_storage_time_id+id;
281 sessionStorage.setItem(name, value);
282 },
283 getSessionStorageTime: function (id) {
284 var name = woo_discount_rules_session_storage_time_id+id;
285 return sessionStorage.getItem(name);
286 }
287 }
288 ';
289 }
290
291 $script .= ' if(jQuery(".woo_discount_rules_variant_table").length > 0){
292 var p_id = jQuery( ".woo_discount_rules_variant_table" ).attr("data-id");';
293 if ($enable_variable_product_cache) {
294 $script .= ' var already_exists = WOO_DISCOUNT_RULES.checkSessionStorageExists(p_id);';
295 $script .= ' var last_storage_time = WOO_DISCOUNT_RULES.getSessionStorageTime(p_id);';
296 } else {
297 $script .= ' var already_exists = 0;';
298 $script .= ' var last_storage_time = "";';
299 }
300 $enable_discount_table = $this->discountBase->getConfigData('show_discount_table', 'show');
301 if(in_array($enable_discount_table, array('show', 'advance'))){
302 $script .= ' setTimeout(function(){
303 jQuery.ajax({
304 url: woo_discount_rules.ajax_url,
305 type: "POST",
306 data: {action: "loadWooDiscountedDiscountTable", id: p_id, loaded: already_exists, time: last_storage_time},
307 beforeSend: function() {
308 },
309 complete: function() {
310 },
311 success: function (response) {
312 responseData = jQuery.parseJSON(response);
313 if(responseData.cookie == "1" && already_exists){';
314 if ($enable_variable_product_cache) {
315 $script .= ' jQuery(".woo_discount_rules_variant_table").html(WOO_DISCOUNT_RULES.getSessionStorage(p_id));';
316 }
317 $script .= ' } else {
318 jQuery(".woo_discount_rules_variant_table").html(responseData.html);';
319 if ($enable_variable_product_cache) {
320 $script .= ' WOO_DISCOUNT_RULES.setSessionStorage(p_id, responseData.html);
321 WOO_DISCOUNT_RULES.setSessionStorageTime(p_id, responseData.time);';
322 }
323 $script .= ' }
324 }
325 });
326 }, 1);';
327 }
328 $script .= ' }';
329 $script .= '});';
330 $script .= 'var flycart_woo_discount_rules_strikeout_script_executed = 1; }';
331 $script .= '</script>';
332
333 echo $script;
334 }
335
336 /**
337 * Load common scripts
338 * */
339 protected function loadCommonScripts(){
340 add_filter( 'woocommerce_email_styles', array($this, 'add_additional_woocommerce_email_styles'), 100);
341 $display_you_saved_text = $this->discountBase->getConfigData('display_you_saved_text', 'no');
342 if(in_array($display_you_saved_text, array('on_each_line_item', 'both_line_item_and_after_total'))){
343 add_filter( 'woocommerce_order_formatted_line_subtotal', array( $this->pricingRules, 'addAdditionalContentInOrderItemSubTotal'), 1000, 3);
344 }
345 if(in_array($display_you_saved_text, array('after_total', 'both_line_item_and_after_total'))){
346 add_action( 'woocommerce_email_after_order_table', array( $this->pricingRules, 'displayTotalSavingsThroughDiscountInOrder'), 10);
347 }
348 add_action( 'woo_discount_rules_get_total_savings_through_discount_in_cart', array( $this->pricingRules, 'displayTotalSavingsThroughDiscountInCart'), 10);
349 add_action( 'woo_discount_rules_get_total_savings_through_discount_from_order', array( $this->pricingRules, 'displayTotalSavingsThroughDiscountInOrder'), 10);
350 }
351
352 /**
353 * Add additional css in emails
354 * */
355 public function add_additional_woocommerce_email_styles($css){
356 return $css.'.wdr_you_saved_con {
357 color: green;
358 }';
359 }
360
361 /**
362 * Load Admin scripts
363 * */
364 protected function loadSiteScripts(){
365 $woocommerce_version = '2.0.0';
366 $pluginDetails = get_plugin_data(WP_PLUGIN_DIR.'/woocommerce/woocommerce.php');
367 if(isset($pluginDetails['Version'])){
368 $woocommerce_version = $pluginDetails['Version'];
369 }
370
371 add_action('woocommerce_after_cart_item_quantity_update', array($this->discountBase, 'handleDiscount'), 100);
372 if(version_compare($woocommerce_version, '3.0', '>=')){
373 add_action('woocommerce_before_calculate_totals', array($this, 'applyDiscountRules'), 1000);
374 add_action('woocommerce_cart_loaded_from_session', array($this, 'applyCartDiscountRules'), 97);
375 add_action( 'woocommerce_after_cart_item_quantity_update', array($this->pricingRules, 'handleBOGODiscountOnUpdateQuantity'), 10, 4 );
376 } else {
377 add_action( 'woocommerce_after_cart_item_quantity_update', array($this->pricingRules, 'handleBOGODiscountOnUpdateQuantity'), 10, 3 );
378 add_action('woocommerce_cart_loaded_from_session', array($this->discountBase, 'handleDiscount'), 100);
379 }
380
381 add_action('woocommerce_after_calculate_totals', array($this->discountBase, 'removeThirdPartyCoupon'), 20);
382
383 add_filter('woocommerce_coupon_message', array($this->discountBase, 'removeAppliedMessageOfThirdPartyCoupon'), 10, 3);
384
385 add_action('woocommerce_add_to_cart', array($this->pricingRules, 'handleBOGODiscount'), 10, 6);
386
387 $add_free_product_on_coupon_applied = $this->discountBase->getConfigData('add_free_product_on_coupon_applied', 0);
388 if($add_free_product_on_coupon_applied){
389 add_action('woocommerce_applied_coupon', array($this->pricingRules, 'handleBOGODiscountAfterApplyCoupon'), 10, 1);
390 }
391
392 $add_free_product_on_change_checkout_fields = $this->discountBase->getConfigData('add_free_product_on_change_checkout_fields', 0);
393 if($add_free_product_on_change_checkout_fields) {
394 if (isset($_REQUEST['wc-ajax']) && sanitize_text_field($_REQUEST['wc-ajax']) == 'update_order_review') {
395 $this->add_free_product_on_change_checkout_fields();
396 }
397 }
398
399 add_action('woo_discount_rules_run_auto_add_bogo_product', array($this->pricingRules, 'handleBOGODiscountAfterApplyCoupon'), 10);
400
401 add_action( 'woocommerce_checkout_create_order_line_item', array( $this->pricingRules, 'onCreateWoocommerceOrderLineItem'), 10, 4);
402 $display_you_saved_text = $this->discountBase->getConfigData('display_you_saved_text', 'no');
403 if(in_array($display_you_saved_text, array('on_each_line_item', 'both_line_item_and_after_total'))){
404 add_filter( 'woocommerce_cart_item_subtotal', array( $this->pricingRules, 'addAdditionalContentInCartItemSubTotal'), 1000, 3);
405 }
406 if(in_array($display_you_saved_text, array('after_total', 'both_line_item_and_after_total'))){
407 add_action( 'woocommerce_cart_totals_after_order_total', array( $this->pricingRules, 'displayTotalSavingsThroughDiscountInCart'), 10);
408 add_action( 'woocommerce_review_order_after_order_total', array( $this->pricingRules, 'displayTotalSavingsThroughDiscountInCart'), 10);
409 add_action( 'woocommerce_order_details_after_order_table', array( $this->pricingRules, 'displayTotalSavingsThroughDiscountInOrder'), 10);
410 }
411
412 // Manually Update Line Item Name.
413 add_filter('woocommerce_cart_item_name', array($this->discountBase, 'modifyName'));
414
415 // Remove Filter to make the previous one as last filter.
416 remove_filter('woocommerce_cart_item_name', 'filter_woocommerce_cart_item_name', 10, 3);
417
418 // Alter the Display Price HTML.
419 add_filter('woocommerce_cart_item_price', array($this->pricingRules, 'replaceVisiblePricesCart'), 1000, 3);
420
421 //replace visible price in product page
422 add_filter('woocommerce_get_price_html', array($this->pricingRules, 'replaceVisiblePricesOptimized'), 1000, 3);
423 add_filter('woocommerce_get_price_html', array($this->pricingRules, 'replaceVisiblePricesForSalePriceAdjustment'), 9, 3);
424
425 //replace visible price in product page for variant
426 add_filter('woocommerce_available_variation', array($this->pricingRules, 'replaceVisiblePricesForVariant'), 100, 3);
427
428 // Older Version support this hook.
429 add_filter('woocommerce_cart_item_price_html', array($this->pricingRules, 'replaceVisiblePricesCart'), 1000, 3);
430
431 //For changing the sale tag text
432 add_filter( 'woocommerce_sale_flash', array($this->pricingRules, 'replaceSaleTagText'), 100, 3);
433
434 // Pricing Table of Individual Product.
435 $discount_table_placement = $this->discountBase->getConfigData('discount_table_placement', 'before_cart_form');
436 if($discount_table_placement == 'before_cart_form'){
437 add_filter('woocommerce_before_add_to_cart_form', array($this->pricingRules, 'priceTable'));
438 add_filter('woocommerce_before_add_to_cart_form', array($this, 'script_on_product_page'));
439 } else {
440 add_filter('woocommerce_after_add_to_cart_form', array($this->pricingRules, 'priceTable'));
441 add_filter('woocommerce_after_add_to_cart_form', array($this, 'script_on_product_page'));
442 }
443
444 // Updating Log After Creating Order
445 add_action('woocommerce_thankyou', array($this->discountBase, 'storeLog'));
446
447 add_action( 'woocommerce_after_checkout_form', array($this->discountBase, 'addScriptInCheckoutPage'));
448
449 //To enable on-sale tag
450 add_filter('woocommerce_product_is_on_sale', array($this->pricingRules, 'displayProductIsOnSaleTagOptimized'), 10, 2);
451
452 $force_refresh_cart_widget = $this->discountBase->getConfigData('force_refresh_cart_widget', 0);
453 if($force_refresh_cart_widget){
454 if (isset($_REQUEST['wc-ajax']) && ($_REQUEST['wc-ajax'] == 'add_to_cart' || $_REQUEST['wc-ajax'] == 'remove_from_cart')) {
455 add_action('woocommerce_before_mini_cart', array($this, 'applyRulesBeforeMiniCart'), 10);
456 }
457 }
458
459 add_action('wp_ajax_loadWooDiscountStrikeoutPriceOfProduct', array($this->pricingRules, 'getWooDiscountStrikeoutPriceOfProduct'));
460 add_action('wp_ajax_nopriv_loadWooDiscountStrikeoutPriceOfProduct', array($this->pricingRules, 'getWooDiscountStrikeoutPriceOfProduct'));
461
462 add_action('wp_ajax_loadWooDiscountedPriceForVariant', array($this->pricingRules, 'getWooDiscountedPriceForVariant'));
463 add_action('wp_ajax_nopriv_loadWooDiscountedPriceForVariant', array($this->pricingRules, 'getWooDiscountedPriceForVariant'));
464 add_action('wp_ajax_loadWooDiscountedDiscountTable', array($this->pricingRules, 'getWooDiscountedPriceTableForVariant'));
465 add_action('wp_ajax_nopriv_loadWooDiscountedDiscountTable', array($this->pricingRules, 'getWooDiscountedPriceTableForVariant'));
466 add_action( 'wp_enqueue_scripts', array($this, 'includeScriptAndStyles') );
467
468 add_action('woocommerce_before_checkout_form', array($this, 'displayAppliedDiscountMessagesForPriceRules'));
469 add_action('woocommerce_before_checkout_form', array($this, 'displayAppliedDiscountMessagesForCartRules'));
470 add_action('woocommerce_before_cart', array($this, 'displayAppliedDiscountMessagesForPriceRules'));
471 add_action('woocommerce_before_cart', array($this, 'displayAppliedDiscountMessagesForCartRules'));
472
473 add_filter('woo_discount_rule_products_to_exclude', array($this, 'woo_discount_get_variations'), 3, 10);
474 add_filter('woo_discount_rule_products_to_include', array($this, 'woo_discount_get_variations'), 3, 10);
475
476 $force_customize_sale_tag = $this->discountBase->getConfigData('force_customize_sale_tag', 0);
477 if($force_customize_sale_tag){
478 add_action( "wp_loaded", array( 'FlycartWooDiscountBase', 'removeHooksSetByOtherPlugins' ) );
479 // change template of sale tag
480 add_filter('wc_get_template', array( 'FlycartWooDiscountBase', 'changeTemplateForSaleTag'), 10, 5);
481 }
482
483 add_filter('woocommerce_get_shop_coupon_data', array('FlycartWooDiscountRulesGeneralHelper', 'addVirtualCoupon'), 9, 2);
484
485 $show_promotion_messages = $this->discountBase->getConfigData('show_promotion_messages', array());
486 if(!empty($show_promotion_messages) && is_array($show_promotion_messages)){
487 if(in_array('shop_page', $show_promotion_messages)){
488 add_action('woocommerce_before_shop_loop', array('FlycartWooDiscountRulesGeneralHelper', 'displayPromotionMessages'), 10);
489 }
490 if(in_array('product_page', $show_promotion_messages)){
491 add_action('woocommerce_before_single_product', array('FlycartWooDiscountRulesGeneralHelper', 'displayPromotionMessages'), 10);
492 }
493 if(in_array('cart_page', $show_promotion_messages)){
494 add_action('woocommerce_before_cart', array('FlycartWooDiscountRulesGeneralHelper', 'displayPromotionMessages'), 10);
495 }
496 if(in_array('checkout_page', $show_promotion_messages)){
497 add_action('woocommerce_before_checkout_form', array('FlycartWooDiscountRulesGeneralHelper', 'displayPromotionMessagesInCheckoutContainer'), 10);
498 add_action('woocommerce_review_order_before_cart_contents', array('FlycartWooDiscountRulesGeneralHelper', 'displayPromotionMessagesInCheckout'), 10);
499 }
500 }
501 add_action('woo_discount_rules_load_promotion_messages', array('FlycartWooDiscountRulesGeneralHelper', 'displayPromotionMessages'));
502 }
503
504 /**
505 * Add free product on change checkout fields
506 * */
507 public function add_free_product_on_change_checkout_fields()
508 {
509 add_action('woocommerce_cart_loaded_from_session', array($this->pricingRules, 'handleBOGODiscountAfterApplyCoupon'), 10);
510 remove_action('woocommerce_after_cart_item_quantity_update', array($this->discountBase, 'handleDiscount'), 100);
511 }
512
513 /**
514 * Include the variant product as well while choose parent product
515 *
516 * @param array $excluded_products
517 * @return array
518 * */
519 public function woo_discount_get_variations($excluded_products = array(), $rule, $variants = null) {
520 $include_variants_on_select_parent_product = $this->discountBase->getConfigData('include_variants_on_select_parent_product', 0);
521 if($include_variants_on_select_parent_product){
522 // Load from Rules if we already saved with rules
523 if($variants !== null && is_array($variants)){
524 if(!empty($variants)){
525 $excluded_products = array_merge($excluded_products, $variants);
526 }
527 return $excluded_products;
528 }
529 static $sets;
530 if (!is_array($sets)) {
531 $sets = array();
532 }
533
534 if(count($excluded_products) < 1) return $excluded_products;
535 $string = json_encode($excluded_products);
536
537 if (!isset($sets[$string])) {
538 $all_excluded_products = $excluded_products;
539 foreach ($excluded_products as $exclude_id) {
540 if(isset(self::$product_variations[$exclude_id])){} else {
541 $product = FlycartWoocommerceProduct::wc_get_product($exclude_id);
542 if (is_object($product) && method_exists($product, 'get_type') && $product->get_type() == 'variable') {
543 self::$product_variations[$exclude_id] = $children_ids = FlycartWoocommerceProduct::get_children($product);//$product->get_children();
544 //$all_excluded_products = array_merge($all_excluded_products, $children_ids);
545 }
546 }
547 if(isset(self::$product_variations[$exclude_id])){
548 if(!empty(self::$product_variations[$exclude_id]) && is_array(self::$product_variations[$exclude_id])){
549 $all_excluded_products = array_merge($all_excluded_products, self::$product_variations[$exclude_id]);
550 }
551 }
552 }
553 $all_excluded_products = array_unique($all_excluded_products);
554 $sets[$string] = $all_excluded_products;
555 }
556
557 return $sets[$string];
558 } else {
559 return $excluded_products;
560 }
561 }
562
563 /**
564 * To include the styles
565 * */
566 public function includeScriptAndStyles(){
567 wp_register_style('woo_discount_rules_front_end', WOO_DISCOUNT_URI . '/assets/css/woo_discount_rules.css', array(), WOO_DISCOUNT_VERSION);
568 wp_enqueue_style('woo_discount_rules_front_end');
569 // Enqueued script with localized data.
570 wp_register_script( 'woo_discount_rules_site', WOO_DISCOUNT_URI . '/assets/js/woo_discount_rules.js', array('jquery'), WOO_DISCOUNT_VERSION, true );
571 wp_localize_script('woo_discount_rules_site', 'woo_discount_rules', array(
572 'home_url' => get_home_url(),
573 'admin_url' => admin_url(),
574 'ajax_url' => admin_url('admin-ajax.php'),
575 'show_product_strikeout' => $this->discountBase->getConfigData('show_price_discount_on_product_page', 'show')
576 ));
577 wp_enqueue_script( 'woo_discount_rules_site');
578 }
579
580 /**
581 * To load the dynamic data in mini-cart/cart widget while add to cart and remove from cart through widget
582 * */
583 public function applyRulesBeforeMiniCart(){
584 WC()->cart->get_cart_from_session();
585 $this->discountBase->handlePriceDiscount();
586 WC()->cart->calculate_totals();
587 }
588
589 /**
590 * To display applied discount messages for cart rules
591 * */
592 public function displayAppliedDiscountMessagesForCartRules(){
593 $message_on_apply_cart_discount = $this->discountBase->getConfigData('message_on_apply_cart_discount', 'no');
594 if($message_on_apply_cart_discount == "yes"){
595 if(!empty($this->cart_rules)){
596 if(!empty($this->cart_rules->matched_discounts)){
597 $matched_discounts = $this->cart_rules->matched_discounts;
598 if(!empty($matched_discounts['name'])){
599 foreach ($matched_discounts['name'] as $key => $matched_discount_name){
600 $rule_sets = $this->cart_rules->rule_sets;
601 $rule_title = $matched_discount_name;
602 $rule_description = '';
603 if(isset($rule_sets[$key])){
604 if(!empty($rule_sets[$key]['descr'])) $rule_description = $rule_sets[$key]['descr'];
605 }
606 $message_on_apply_cart_discount_text = $this->discountBase->getConfigData('message_on_apply_cart_discount_text', 'Discount <strong>"{{title}}"</strong> has been applied to your cart.');
607 $message_on_apply_cart_discount_text = __($message_on_apply_cart_discount_text, 'woo-discount-rules');
608 $message_on_apply_cart_discount_text = str_replace('{{title}}', $rule_title, $message_on_apply_cart_discount_text);
609 $message_on_apply_cart_discount_text = str_replace('{{description}}', $rule_description, $message_on_apply_cart_discount_text);
610 wc_print_notice( apply_filters('woo_discount_rules_message_on_apply_cart_rules', $message_on_apply_cart_discount_text, $rule_sets), 'success' );
611 }
612 }
613 }
614 }
615 }
616 }
617
618 /**
619 * To display applied discount messages for cart rules
620 * */
621 public function displayAppliedDiscountMessagesForPriceRules(){
622 $message_on_apply_price_discount = $this->discountBase->getConfigData('message_on_apply_price_discount', 'no');
623 if($message_on_apply_price_discount == "yes"){
624 $applied_discount_rules = FlycartWooDiscountRulesPricingRules::$applied_discount_rules;
625 if(!empty($applied_discount_rules)){
626 foreach ($applied_discount_rules as $key => $matched_discount_rules){
627 $rule_title = $matched_discount_rules['name'];
628 $rule_description = $matched_discount_rules['descr'];
629 $message_on_apply_cart_discount_text = $this->discountBase->getConfigData('message_on_apply_price_discount_text', 'Discount <strong>"{{title}}"</strong> has been applied to your cart.');
630 $message_on_apply_cart_discount_text = __($message_on_apply_cart_discount_text, 'woo-discount-rules');
631 $message_on_apply_cart_discount_text = str_replace('{{title}}', $rule_title, $message_on_apply_cart_discount_text);
632 $message_on_apply_cart_discount_text = str_replace('{{description}}', $rule_description, $message_on_apply_cart_discount_text);
633 wc_print_notice( apply_filters('woo_discount_rules_message_on_apply_price_rules', $message_on_apply_cart_discount_text, $matched_discount_rules), 'success' );
634 }
635 }
636 }
637 }
638 }
639 }
640
641 add_filter('woocommerce_screen_ids', function($screen_ids){
642 $screen_ids[] = 'woocommerce_page_woo_discount_rules';
643 return $screen_ids;
644 });
645
646 /**
647 * init Woo Discount Rules
648 */
649 if ( is_plugin_active( 'woocommerce/woocommerce.php' ) ) {
650 global $flycart_woo_discount_rules;
651 $flycart_woo_discount_rules = FlycartWooDiscountRules::init();
652 $purchase_helper = new FlycartWooDiscountRulesPurchase();
653 if($purchase_helper->isPro()){
654 include_once(dirname(__FILE__).'/includes/advanced/free_shipping_method.php');
655 include_once(dirname(__FILE__).'/includes/advanced/pricing-productdependent.php');
656 include_once(dirname(__FILE__).'/includes/advanced/cart-totals.php');
657 include_once(dirname(__FILE__).'/includes/advanced/advanced-helper.php');
658 }
659 }