Changeset 3412190
- Timestamp:
- 12/05/2025 12:33:27 PM (6 weeks ago)
- Location:
- advanced-dynamic-pricing-for-woocommerce/trunk
- Files:
-
- 1 added
- 46 edited
-
BaseVersion/Includes/AdminExtensions/AdminPage/Tabs/Options.php (modified) (2 diffs)
-
BaseVersion/Includes/AdminExtensions/AdminPage/Tabs/Rules.php (modified) (1 diff)
-
BaseVersion/Includes/AdminExtensions/AdminPage/Tabs/Tools.php (modified) (5 diffs)
-
BaseVersion/Includes/AdminExtensions/Ajax.php (modified) (1 diff)
-
BaseVersion/Includes/Cache/CacheHelper.php (modified) (5 diffs)
-
BaseVersion/Includes/CartProcessor/CartProcessor.php (modified) (1 diff)
-
BaseVersion/Includes/CartProcessor/FreeAutoAddItemsController.php (modified) (1 diff)
-
BaseVersion/Includes/CartProcessor/OriginalPriceCalculation.php (modified) (1 diff)
-
BaseVersion/Includes/Compatibility/Container/SomewhereWarmBundlesCmp.php (modified) (2 diffs)
-
BaseVersion/Includes/Compatibility/WcSubscriptionsCmp.php (modified) (2 diffs)
-
BaseVersion/Includes/Context/Container/ContainerCompatibilityManager.php (modified) (1 diff)
-
BaseVersion/Includes/Context/CurrencyController.php (modified) (2 diffs)
-
BaseVersion/Includes/Core/Cart/CartCustomer.php (modified) (2 diffs)
-
BaseVersion/Includes/Core/Cart/CartItem/CartItemConverter.php (modified) (1 diff)
-
BaseVersion/Includes/Core/Cart/CartItem/Type/Base/CartItemPrices.php (modified) (4 diffs)
-
BaseVersion/Includes/Core/CartCalculator.php (modified) (3 diffs)
-
BaseVersion/Includes/Core/RuleProcessor/BulkDiscount/SingleItemRuleBulkDiscountProcessor.php (modified) (1 diff)
-
BaseVersion/Includes/CustomizerExtensions/CustomizerExtensions.php (modified) (2 diffs)
-
BaseVersion/Includes/Database/Repository/PersistentRuleRepository.php (modified) (3 diffs)
-
BaseVersion/Includes/Helpers/Helpers.php (modified) (1 diff)
-
BaseVersion/Includes/ImportExport/ImporterCSV.php (modified) (4 diffs)
-
BaseVersion/Includes/LoadStrategies/AdminCommon.php (modified) (1 diff)
-
BaseVersion/Includes/Loader.php (modified) (2 diffs)
-
BaseVersion/Includes/PriceDisplay/ConcreteProductPriceHtml/VariationProductPriceHtml.php (modified) (2 diffs)
-
BaseVersion/Includes/PriceDisplay/PriceAjax.php (modified) (2 diffs)
-
BaseVersion/Includes/PriceDisplay/PriceFormatters/DiscountRangeFormatter.php (modified) (4 diffs)
-
BaseVersion/Includes/PriceDisplay/ProcessedProductSimple.php (modified) (1 diff)
-
BaseVersion/Includes/PriceDisplay/ProcessedVariableProduct.php (modified) (3 diffs)
-
BaseVersion/Includes/PriceDisplay/Processor.php (modified) (6 diffs)
-
BaseVersion/Includes/Settings/CompatibilityStoreStrategy.php (modified) (2 diffs)
-
BaseVersion/Includes/Settings/OptionsInstaller.php (modified) (1 diff)
-
BaseVersion/Includes/Settings/StoreStrategy.php (modified) (2 diffs)
-
BaseVersion/Includes/Shortcodes/Products.php (modified) (3 diffs)
-
BaseVersion/Includes/Shortcodes/SqlGeneratorPersistent.php (modified) (2 diffs)
-
BaseVersion/Includes/Updater/UpdateFunctions.php (modified) (1 diff)
-
BaseVersion/Includes/Updater/Updater.php (modified) (1 diff)
-
BaseVersion/assets/images/discount_types/pro_threebytwo_discount.svg (added)
-
BaseVersion/assets/js/cache-recalculation.js (modified) (1 diff)
-
BaseVersion/assets/js/frontend.js (modified) (2 diffs)
-
BaseVersion/assets/js/options.js (modified) (1 diff)
-
BaseVersion/assets/js/rules.js (modified) (4 diffs)
-
BaseVersion/views/admin_page/tabs/options/replace_price_with_min_bulk_price.php (modified) (1 diff)
-
BaseVersion/views/admin_page/tabs/rules/persistent_rule.php (modified) (1 diff)
-
BaseVersion/views/admin_page/tabs/rules/rule.php (modified) (1 diff)
-
advanced-dynamic-pricing-for-woocommerce.php (modified) (2 diffs)
-
languages/advanced-dynamic-pricing-for-woocommerce.pot (modified) (42 diffs)
-
readme.txt (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
advanced-dynamic-pricing-for-woocommerce/trunk/BaseVersion/Includes/AdminExtensions/AdminPage/Tabs/Options.php
r3384329 r3412190 90 90 $settings->save(); 91 91 //phpcs:ignore WordPress.Security.ValidatedSanitizedInput 92 wp_redirect($_SERVER['HTTP_REFERER']); 92 wp_safe_redirect($_SERVER['HTTP_REFERER']); 93 exit(); 93 94 } else if(isset($_POST['reset-options'])) { 94 95 //phpcs:ignore WordPress.Security.ValidatedSanitizedInput … … 105 106 $settings->drop(); 106 107 //phpcs:ignore WordPress.Security.ValidatedSanitizedInput 107 wp_redirect($_SERVER['HTTP_REFERER']); 108 wp_safe_redirect($_SERVER['HTTP_REFERER']); 109 exit(); 108 110 } 109 111 } -
advanced-dynamic-pricing-for-woocommerce/trunk/BaseVersion/Includes/AdminExtensions/AdminPage/Tabs/Rules.php
r3386161 r3412190 73 73 } 74 74 //phpcs:ignore WordPress.Security.ValidatedSanitizedInput 75 wp_ redirect($_SERVER['HTTP_REFERER']);75 wp_safe_redirect($_SERVER['HTTP_REFERER']); 76 76 exit(); 77 77 } -
advanced-dynamic-pricing-for-woocommerce/trunk/BaseVersion/Includes/AdminExtensions/AdminPage/Tabs/Tools.php
r3384329 r3412190 5 5 use ADP\BaseVersion\Includes\Core\Rule\Rule; 6 6 use ADP\BaseVersion\Includes\Helpers\Helpers; 7 use ADP\BaseVersion\Includes\Cache\CacheHelper; 7 8 use ADP\BaseVersion\Includes\ImportExport\Importer; 8 9 use ADP\BaseVersion\Includes\ImportExport\Exporter; … … 11 12 use ADP\BaseVersion\Includes\AdminExtensions\AdminPage\AdminTabInterface; 12 13 use ADP\BaseVersion\Includes\Database\Repository\RuleRepository; 14 use ADP\BaseVersion\Includes\Database\Repository\PersistentRuleRepository; 13 15 use ADP\Factory; 14 16 use Exception; … … 127 129 128 130 $repo = new RuleRepository(); 129 wp_send_json_success("Done: " . $repo->migrateSuitableCommonRulesToPersistence() . " affected"); 131 $count = $repo->migrateSuitableCommonRulesToPersistence(); 132 133 CacheHelper::flush(); 134 wp_send_json_success("Done: $count affected"); 130 135 } 131 136 … … 134 139 135 140 $repo = new RuleRepository(); 136 wp_send_json_success("Done: " . $repo->migrateSuitablePersistenceRulesToCommon() . " affected"); 141 $count = $repo->migrateSuitablePersistenceRulesToCommon(); 142 143 // should clear database cache too 144 $persistentRuleRepository = new PersistentRuleRepository(); 145 $persistentRuleRepository->truncate(); 146 $persistentRuleRepository->clearCacheInProductMetaData(); 147 148 CacheHelper::flush(); 149 150 wp_send_json_success("Done: $count affected"); 137 151 } 138 152 … … 182 196 ); 183 197 //phpcs:ignore WordPress.Security.ValidatedSanitizedInput 184 wp_ redirect($_SERVER['HTTP_REFERER']);198 wp_safe_redirect($_SERVER['HTTP_REFERER']); 185 199 exit(); 186 200 //phpcs:ignore WordPress.Security.NonceVerification.Missing -
advanced-dynamic-pricing-for-woocommerce/trunk/BaseVersion/Includes/AdminExtensions/Ajax.php
r3349520 r3412190 613 613 // phpcs:ignore WordPress.DB 614 614 $totalCount = (int)($wpdb->get_var($sql)); 615 CacheHelper::flush RulesCache();615 CacheHelper::flush(); 616 616 wp_send_json_success( 617 617 [ -
advanced-dynamic-pricing-for-woocommerce/trunk/BaseVersion/Includes/Cache/CacheHelper.php
r3349520 r3412190 75 75 } 76 76 77 public static function flushRulesCache() 78 { 79 self::cacheDelete(self::KEY_ACTIVE_RULES_COLLECTION); 80 self::cacheFlushGroup(self::GROUP_RULES_CACHE); 81 self::cacheFlushGroup(self::GROUP_PROCESSED_PRODUCTS_TO_DISPLAY); 82 } 83 84 public static function flushCollectionsCache() 85 { 86 self::cacheFlushGroup(self::GROUP_COLLECTIONS); 87 self::flushRulesCache(); 88 } 89 90 77 91 /** 78 92 * @param null $deprecated … … 261 275 262 276 return $product_data ? $product_data->meta : array(); 263 }264 265 public static function flushRulesCache()266 {267 self::cacheDelete(self::KEY_ACTIVE_RULES_COLLECTION);268 self::cacheFlushGroup(self::GROUP_RULES_CACHE);269 277 } 270 278 … … 327 335 * @return string 328 336 */ 329 p rotectedstatic function calcHashProcessedProduct(330 $ productId,337 public static function calcHashProcessedProduct( 338 $theProduct, 331 339 $variationAttributes, 332 340 $qty, … … 335 343 $calc 336 344 ) { 345 if ($theProduct instanceof WC_Product) { 346 $productId = $theProduct->get_id(); 347 } elseif (is_numeric($theProduct)) { 348 $productId = $theProduct; 349 } elseif ($theProduct instanceof \WP_Post) { 350 $productId = $theProduct->ID; 351 } else { 352 $productId = $theProduct; 353 } 354 337 355 $parts = array($productId, $qty); 338 356 … … 361 379 } 362 380 363 $parts = apply_filters("adp_calculate_processed_product_hash", $parts); 364 365 return md5(implode('_', $parts)); 381 $parts[]= md5( json_encode( $cart->getContext()->getCustomer() ) ); 382 383 $parts = apply_filters("adp_calculate_processed_product_hash", $parts, 384 $theProduct, $variationAttributes, $qty, $cartItemData, $cart, $calc); 385 386 $hash = md5(implode('_', $parts)); 387 388 return $hash; 366 389 } 367 390 -
advanced-dynamic-pricing-for-woocommerce/trunk/BaseVersion/Includes/CartProcessor/CartProcessor.php
r3384329 r3412190 263 263 } 264 264 265 $this->context->getContainerCompatibilityManager()->addFilters(); 266 265 267 $this->cartItemConverter = new CartItemConverter(); 266 268 } -
advanced-dynamic-pricing-for-woocommerce/trunk/BaseVersion/Includes/CartProcessor/FreeAutoAddItemsController.php
r3297317 r3412190 91 91 } 92 92 93 wp_ redirect(wc_get_page_permalink('cart'));94 die();93 wp_safe_redirect(wc_get_page_permalink('cart')); 94 exit(); 95 95 } 96 96 -
advanced-dynamic-pricing-for-woocommerce/trunk/BaseVersion/Includes/CartProcessor/OriginalPriceCalculation.php
r3385738 r3412190 93 93 $this->trdPartyAdjustmentsAmount = 0.0; 94 94 $this->basePrice = $this->priceToAdjust; 95 } elseif ($wcCartItem->getInitialCustomPrice() && 96 !($priceMod === self::COMPARE_WC_AND_ADP && ($tmCmp = new TmExtraOptionsCmp($context)) && $tmCmp->isActive())) { 95 } elseif ($wcCartItem->getInitialCustomPrice()) { 97 96 $this->priceToAdjust = $this->getPrice($product, $wcCartItem, $prodPropsWithFilters, true); 98 97 -
advanced-dynamic-pricing-for-woocommerce/trunk/BaseVersion/Includes/Compatibility/Container/SomewhereWarmBundlesCmp.php
r3384329 r3412190 64 64 }, 10, 6); 65 65 } 66 67 add_filter('woocommerce_bundle_price_data', function($data, $product) { 68 $discountPrice = adp_functions()->getDiscountedProductPrice($product, 1, true); 69 if (!empty($discountPrice)) { 70 if( is_array($discountPrice) ) { 71 $data['base_price'] = reset($discountPrice); //take min value 72 } else { 73 $data['base_price'] = $discountPrice; 74 } 75 } 76 77 return $data; 78 }, 10, 2); 66 79 } 67 80 … … 110 123 $bundledProduct, 111 124 (float)$price, 112 (float)$bundleItem->get_quantity(" default"),125 (float)$bundleItem->get_quantity("min", array( 'check_optional' => true )), 113 126 $bundleItem->is_priced_individually() 114 127 ); -
advanced-dynamic-pricing-for-woocommerce/trunk/BaseVersion/Includes/Compatibility/WcSubscriptionsCmp.php
r3297317 r3412190 59 59 add_action( 'woocommerce_subscription_cart_after_grouping', [$this,"setRecurringCalculationType"], 10 ); 60 60 add_filter( 'woocommerce_subscriptions_calculated_total', [$this,"setNoneCalculationType"], 10 ); 61 62 if(defined('BOS_IS_PLUGIN')) { 63 add_filter('adp_get_wc_sale_price', [$this,"getBOSWCSalePrice"], 10, 4); 64 } 61 65 } 62 66 … … 162 166 } 163 167 168 public function getBOSWCSalePrice($wcSalePrice, $product, $item, $prodPropsWithFilters) { 169 if(apply_filters( 'bos_use_regular_price', false )) { 170 return null; 171 } 172 return $wcSalePrice; 173 } 174 164 175 } -
advanced-dynamic-pricing-for-woocommerce/trunk/BaseVersion/Includes/Context/Container/ContainerCompatibilityManager.php
r3040996 r3412190 82 82 return null; 83 83 } 84 85 public function addFilters() 86 { 87 foreach ($this->registeredContainerCompatibilities as $compatibility) { 88 if ($compatibility->isActive()) 89 $compatibility->addFilters(); 90 } 91 } 84 92 } -
advanced-dynamic-pricing-for-woocommerce/trunk/BaseVersion/Includes/Context/CurrencyController.php
r3297317 r3412190 59 59 { 60 60 $this->context = $context; 61 if(!$defaultCurrency) { 62 $defaultCurrency = self::getDefaultWoocomerceCurrency(); 63 } 61 64 $this->defaultCurrency = $defaultCurrency; 62 65 $this->currentCurrency = $defaultCurrency; … … 467 470 } 468 471 472 public static function getDefaultWoocomerceCurrency() 473 { 474 $currencyCode = get_option('woocommerce_currency'); 475 $symbols = self::getDefaultCurrencySymbols(); 476 477 $symbol = isset($symbols[$currencyCode]) ? $symbols[$currencyCode] : ''; 478 return new Currency($currencyCode, $symbol, 1); 479 } 480 469 481 } -
advanced-dynamic-pricing-for-woocommerce/trunk/BaseVersion/Includes/Core/Cart/CartCustomer.php
r2852738 r3412190 10 10 defined('ABSPATH') or exit; 11 11 12 class CartCustomer 12 class CartCustomer implements \JsonSerializable 13 13 { 14 14 /** … … 97 97 } 98 98 99 public function jsonSerialize(): mixed { 100 return [ 101 'id' => $this->getId(), 102 'billingAddress' => $this->getBillingAddress(), 103 'shippingAddress' => $this->getShippingAddress(), 104 'selectedPaymentMethod' => $this->getSelectedPaymentMethod(), 105 'selectedShippingMethods' => $this->getSelectedShippingMethods(), 106 'isVatExempt' => $this->isVatExempt(), 107 'roles' => $this->getRoles(), 108 ]; 109 } 110 99 111 /** 100 112 * @param array $metaArray -
advanced-dynamic-pricing-for-woocommerce/trunk/BaseVersion/Includes/Core/Cart/CartItem/CartItemConverter.php
r3022127 r3412190 57 57 $facade->setDiscounts($cartItem->getDiscounts()); 58 58 $facade->setPriceAdjustments($cartItem->getPriceAdjustments()); 59 60 $facade->setOriginalPriceWithoutTax( $facade->getSubtotal() / $facade->getQty());61 $facade->setOriginalPriceTax($ facade->getExactSubtotalTax() / $facade->getQty());59 $qty = $facade->getQty(); 60 $facade->setOriginalPriceWithoutTax( $qty > 0 ? $facade->getSubtotal() / $facade->getQty() : 0 ); 61 $facade->setOriginalPriceTax($qty > 0 ? $facade->getExactSubtotalTax() / $facade->getQty() : 0 ); 62 62 $facade->setQty($cartItem->getQty()); 63 63 -
advanced-dynamic-pricing-for-woocommerce/trunk/BaseVersion/Includes/Core/Cart/CartItem/Type/Base/CartItemPrices.php
r3022127 r3412190 8 8 protected $originalPriceToDisplay; 9 9 protected $minDiscountRangePrice; 10 protected $maxDiscountRangePrice; 10 11 protected $trdPartyAdjustmentsTotal; 11 12 … … 19 20 $obj->originalPriceToDisplay = $originalPriceToDisplay; 20 21 $obj->minDiscountRangePrice = null; 22 $obj->maxDiscountRangePrice = null; 21 23 $obj->trdPartyAdjustmentsTotal = 0.0; 22 24 … … 77 79 78 80 /** 81 * @return mixed 82 */ 83 public function getMaxDiscountRangePrice() 84 { 85 return $this->maxDiscountRangePrice; 86 } 87 88 /** 79 89 * @param mixed $minDiscountRangePrice 80 90 * @return CartItemPrices … … 83 93 { 84 94 $this->minDiscountRangePrice = $minDiscountRangePrice; 95 return $this; 96 } 97 98 /** 99 * @param mixed $minDiscountRangePrice 100 * @return CartItemPrices 101 */ 102 public function setDiscountRangePrice($discountRangePrice) 103 { 104 if($this->minDiscountRangePrice == null || $discountRangePrice < $this->minDiscountRangePrice) { 105 $this->minDiscountRangePrice = $discountRangePrice; 106 } 107 108 if($this->maxDiscountRangePrice == null || $discountRangePrice > $this->maxDiscountRangePrice) { 109 $this->maxDiscountRangePrice = $discountRangePrice; 110 } 111 85 112 return $this; 86 113 } -
advanced-dynamic-pricing-for-woocommerce/trunk/BaseVersion/Includes/Core/CartCalculator.php
r3349520 r3412190 11 11 use ADP\BaseVersion\Includes\Core\RuleProcessor\Listener; 12 12 use ADP\BaseVersion\Includes\Core\RuleProcessor\RuleProcessor; 13 use ADP\BaseVersion\Includes\Core\RuleProcessor\PersistentRuleProcessor; 13 14 use ADP\BaseVersion\Includes\Database\Repository\PersistentRuleRepository; 14 15 use ADP\BaseVersion\Includes\Database\Repository\PersistentRuleRepositoryInterface; … … 280 281 } 281 282 } 282 return $wcSalePrice;283 return apply_filters('adp_get_wc_sale_price', $wcSalePrice, $product, $item, $prodPropsWithFilters); 283 284 284 285 //Failed code, caused infinite loop - some plugins add hook for 'view' context … … 422 423 } 423 424 424 if ( ! $object || ! $object->rule || ! $object->price ) {425 if ( ! $object || ! $object->rule || ! $object->price || !($processor instanceof PersistentRuleProcessor) ) { 425 426 continue; 426 427 } -
advanced-dynamic-pricing-for-woocommerce/trunk/BaseVersion/Includes/Core/RuleProcessor/BulkDiscount/SingleItemRuleBulkDiscountProcessor.php
r3384329 r3412190 295 295 } 296 296 297 $minPrice = $item->prices()->getMinDiscountRangePrice(); 298 299 if ($minPrice !== null) { 300 if ($price < $minPrice) { 301 $item->prices()->setMinDiscountRangePrice($price); 302 } 303 } else { 304 $item->prices()->setMinDiscountRangePrice($price); 305 } 297 $item->prices()->setDiscountRangePrice($price); 306 298 } 307 299 } -
advanced-dynamic-pricing-for-woocommerce/trunk/BaseVersion/Includes/CustomizerExtensions/CustomizerExtensions.php
r3297317 r3412190 630 630 'choices' => apply_filters("wdp_" . "cart" . "_discount_message_places", 631 631 array( 632 'woocommerce_cart_totals_before_shipping' => __(' After subtotal',632 'woocommerce_cart_totals_before_shipping' => __('Before shipping', 633 633 'advanced-dynamic-pricing-for-woocommerce'), 634 634 'woocommerce_cart_totals_before_order_total' => __('Before order total', … … 678 678 'woocommerce_review_order_after_cart_contents' => __('After cart contents', 679 679 'advanced-dynamic-pricing-for-woocommerce'), 680 'woocommerce_review_order_before_shipping' => __(' After subtotal',680 'woocommerce_review_order_before_shipping' => __('Before shipping', 681 681 'advanced-dynamic-pricing-for-woocommerce'), 682 682 'woocommerce_review_order_before_order_total' => __('Before order total', -
advanced-dynamic-pricing-for-woocommerce/trunk/BaseVersion/Includes/Database/Repository/PersistentRuleRepository.php
r3384329 r3412190 279 279 return $key; 280 280 }; 281 add_filter("adp_calculate_product_hash", $customHash);282 add_filter("adp_calculate_processed_product_hash", $customHash);283 281 add_filter("adp_calculate_persistent_rule_product_hash", $customHash); 284 282 … … 287 285 $processedProduct = $productProcessor->calculateProduct($product, 1.0, $cartItemData); 288 286 289 remove_filter("adp_calculate_product_hash", $customHash);290 remove_filter("adp_calculate_processed_product_hash", $customHash);291 287 remove_filter("adp_calculate_persistent_rule_product_hash", $customHash); 292 288 $customer->setRoles($initialRoles); … … 375 371 return $key; 376 372 }; 377 add_filter("adp_calculate_product_hash", $customHash);378 add_filter("adp_calculate_processed_product_hash", $customHash);379 373 add_filter("adp_calculate_persistent_rule_product_hash", $customHash); 380 374 381 375 $hash[] = $this->calculateDbHash($item); 382 376 383 remove_filter("adp_calculate_product_hash", $customHash);384 remove_filter("adp_calculate_processed_product_hash", $customHash);385 377 remove_filter("adp_calculate_persistent_rule_product_hash", $customHash); 386 378 } -
advanced-dynamic-pricing-for-woocommerce/trunk/BaseVersion/Includes/Helpers/Helpers.php
r3319660 r3412190 366 366 /** @var WC_Product[] $posts */ 367 367 $posts = wc_get_products(array( 368 ' title' => $name,368 'name' => $name, 369 369 'type' => array_merge(array_keys(wc_get_product_types()), array('variation')) 370 370 )); -
advanced-dynamic-pricing-for-woocommerce/trunk/BaseVersion/Includes/ImportExport/ImporterCSV.php
r3297317 r3412190 124 124 125 125 public static function prepareCSV($file){ 126 $separator = apply_filters("adp_import_rules_separator",","); 126 $separator = apply_filters("adp_import_rules_separator", ","); 127 $enclosure = apply_filters("adp_import_rules_enclosure", "\""); 128 $escape = apply_filters("adp_import_rules_escape", "\\"); 129 127 130 // phpcs:ignore WordPress.WP.AlternativeFunctions.file_system_operations_fopen 128 131 if (($handle = fopen($file, "r")) !== false) { 129 132 $filterType = ''; 130 if (($data = fgetcsv($handle, null, $separator )) !== false && is_array($data)) {133 if (($data = fgetcsv($handle, null, $separator, $enclosure, $escape)) !== false && is_array($data)) { 131 134 if (str_contains(strtolower($data[0]), 'type')) { 132 135 $filterType = self::convertSupportedValueToType($data[1]); … … 134 137 } 135 138 $discountType = ''; 136 if (($data = fgetcsv($handle, null, $separator )) !== false && is_array($data)) {139 if (($data = fgetcsv($handle, null, $separator, $enclosure, $escape)) !== false && is_array($data)) { 137 140 if (str_contains(strtolower($data[0]), 'type')) { 138 141 $discountType = self::convertSupportedValueToType($data[1]); … … 140 143 } 141 144 $ruleBlocksSet = array(); 142 while (($data = fgetcsv($handle, null, $separator )) !== false) {145 while (($data = fgetcsv($handle, null, $separator, $enclosure, $escape)) !== false) { 143 146 $data = array_map('strtolower', $data); 144 147 if (in_array($data[0], array('filter', 'discountedprice', 'fromqty', 'toqty', 'role'))) { … … 164 167 $rules = array(); 165 168 $newRule = array(); 166 while (($data = fgetcsv($handle, null, $separator )) !== false) {169 while (($data = fgetcsv($handle, null, $separator, $enclosure, $escape)) !== false) { 167 170 if (empty($data[0])) { 168 171 for ($setIter = 1; $setIter < $ruleBlocksSetLength; $setIter++) { -
advanced-dynamic-pricing-for-woocommerce/trunk/BaseVersion/Includes/LoadStrategies/AdminCommon.php
r3351718 r3412190 61 61 $orderPreview->register(); 62 62 63 $engine = Factory::get("Engine", WC()->cart);64 $engine->getCartProcessor()->installActionFirstProcess_Blocks(); //installs only cartCouponsProcessor65 66 63 /** @see Functions::install() */ 67 64 Factory::callStaticMethod("Functions", 'install'); -
advanced-dynamic-pricing-for-woocommerce/trunk/BaseVersion/Includes/Loader.php
r3384329 r3412190 45 45 public function initPlugin() 46 46 { 47 // must load langs ASAP 48 // as Wordpress loads default transations on first usage __() 49 $this->loadTextDomain(); 50 47 51 if ( ! $this->checkRequirements()) { 48 52 return; … … 51 55 $context = adp_context(); // do not remove! Required for correct initialization 52 56 $this->load($context); 57 } 58 59 protected function loadTextDomain() 60 { 61 // do nothing if loaded free version , it reads translations from Wordpress.org 62 if(!defined('WC_ADP_PRO_VERSION_PATH')) 63 return; 64 65 $pricingDomain = 'advanced-dynamic-pricing-for-woocommerce'; 66 add_filter('load_textdomain_mofile', function ($moFile, $domain) use ($pricingDomain) { 67 if ($domain !== $pricingDomain) { 68 return $moFile; 69 } 70 $path = WP_PLUGIN_DIR . '/' . trim(basename(dirname(dirname(dirname(__FILE__)))) . '/languages/', '/'); 71 $plugin_file = $path . '/' . substr($moFile, strrpos($moFile, '/') + 1); 72 return file_exists($plugin_file) ? $plugin_file : $moFile; 73 }, 10, 2); 74 load_plugin_textdomain($pricingDomain, false, basename(dirname(dirname(dirname(__FILE__)))) . '/languages/'); 53 75 } 54 76 -
advanced-dynamic-pricing-for-woocommerce/trunk/BaseVersion/Includes/PriceDisplay/ConcreteProductPriceHtml/VariationProductPriceHtml.php
r2661390 r3412190 4 4 5 5 use ADP\BaseVersion\Includes\PriceDisplay\ConcreteProductPriceHtml; 6 use ADP\BaseVersion\Includes\PriceDisplay\PriceFormatters\DefaultFormatter; 6 7 7 8 defined('ABSPATH') or exit; … … 9 10 class VariationProductPriceHtml extends SimpleProductPriceHtml implements ConcreteProductPriceHtml 10 11 { 12 /** 13 * @param string $priceHtml 14 * 15 * @return string 16 */ 17 public function getFormattedPriceHtml($priceHtml) 18 { 19 $processedProduct = $this->processedProduct; 20 $defaultFormatter = new DefaultFormatter($this->context); 11 21 22 if ($processedProduct->areRulesApplied()) { 23 $priceHtml = $this->getHtml(1.0); 24 } 25 26 return $defaultFormatter->isNeeded($processedProduct) 27 ? $defaultFormatter->getHtml($priceHtml, $processedProduct) 28 : $priceHtml; 29 } 12 30 } -
advanced-dynamic-pricing-for-woocommerce/trunk/BaseVersion/Includes/PriceDisplay/PriceAjax.php
r3319660 r3412190 259 259 } elseif (!$processedProduct->areRulesAppliedAtAll()) { 260 260 return array( 261 'price_html' => $prodPriceDisplay->get FormattedPriceHtml($prodPriceDisplay->getPriceHtml()),261 'price_html' => $prodPriceDisplay->getPriceHtmlWithoutFormatting($prodPriceDisplay->getPriceHtml()), 262 262 'subtotal_html' => $prodPriceDisplay->getFormattedSubtotalHtml($qty), 263 263 'total_price_html' => $totalProductPriceFormatter->getHtmlAreRulesNotApplied($product, $qty), … … 269 269 } else { 270 270 return array( 271 'price_html' => $prodPriceDisplay->get FormattedPriceHtml($prodPriceDisplay->getPriceHtml()),271 'price_html' => $prodPriceDisplay->getPriceHtmlWithoutFormatting($prodPriceDisplay->getPriceHtml()), 272 272 'subtotal_html' => $prodPriceDisplay->getFormattedSubtotalHtml($qty), 273 273 'total_price_html' => $totalProductPriceFormatter->getHtmlProcessedProductSimple($processedProduct), -
advanced-dynamic-pricing-for-woocommerce/trunk/BaseVersion/Includes/PriceDisplay/PriceFormatters/DiscountRangeFormatter.php
r3297317 r3412190 100 100 101 101 $minDiscountRangePriceForDisplay = null; 102 $maxDiscountRangePriceForDisplay = null; 102 103 $initialPriceForDisplay = null; 103 104 $minDiscountRangePrice = null; 105 $maxDiscountRangePrice = null; 104 106 $regularPrice = null; 105 107 $pos = null; 108 $minMaxRange = ''; 109 106 110 if ($processedProduct instanceof ProcessedVariableProduct) { 107 111 if ($discountRangeProcessed = $processedProduct->getLowestRangeDiscountPriceProduct()) { … … 120 124 ); 121 125 $pos = $discountRangeProcessed->getPos(); 122 $regularPrice = $processedProduct->getLowestRangeDiscountPriceProduct()->getProduct()->get_regular_price(); 126 $regularPrice = $discountRangeProcessed->getProduct()->get_regular_price(); 127 } 128 129 if ($discountRangeProcessed = $processedProduct->getHighestRangeDiscountPriceProduct()) { 130 $maxDiscountRangePrice = $discountRangeProcessed->getMaxDiscountRangePrice(); 131 $maxDiscountRangePriceForDisplay = $this->priceFunctions->getPriceToDisplay( 132 $product, 133 array( 134 'price' => $maxDiscountRangePrice, 135 ) 136 ); 123 137 } 124 138 } else { … … 138 152 $pos = $processedProduct->getPos(); 139 153 $regularPrice = $product->get_regular_price(); 140 } 154 155 $maxDiscountRangePrice = $processedProduct->getMaxDiscountRangePrice(); 156 $maxDiscountRangePriceForDisplay = $this->priceFunctions->getPriceToDisplay( 157 $product, 158 array( 159 'price' => $maxDiscountRangePrice, 160 ) 161 ); 162 } 163 164 if (!is_null($minDiscountRangePriceForDisplay)) { 165 $minMaxRange = $this->priceFunctions->format($minDiscountRangePriceForDisplay); 166 167 if(!is_null($maxDiscountRangePriceForDisplay) && $minDiscountRangePriceForDisplay != $maxDiscountRangePriceForDisplay) { 168 $minMaxRange .= " - " . $this->priceFunctions->format($maxDiscountRangePriceForDisplay); 169 } 170 } 171 141 172 142 173 $replacements = array( … … 153 184 ? '<del>' . $this->priceFunctions->format($minDiscountRangePriceForDisplay) . '</del>' 154 185 : "", 186 'min_max_range' => $minMaxRange, 155 187 ); 156 188 -
advanced-dynamic-pricing-for-woocommerce/trunk/BaseVersion/Includes/PriceDisplay/ProcessedProductSimple.php
r3319660 r3412190 381 381 * @param int|null $pos 382 382 * 383 * @return float|null 384 */ 385 public function getMaxDiscountRangePrice($pos = null) 386 { 387 $item = $this->getItemByPos($pos); 388 389 if ( ! isset($item)) { 390 return null; 391 } 392 393 return $item->prices()->getMaxDiscountRangePrice(); 394 } 395 396 /** 397 * @param int|null $pos 398 * 383 399 * @return BasicCartItem|null 384 400 */ -
advanced-dynamic-pricing-for-woocommerce/trunk/BaseVersion/Includes/PriceDisplay/ProcessedVariableProduct.php
r3057229 r3412190 15 15 const KEY_LOWEST_PRICE_PROD = 'min_calculated_price'; 16 16 const KEY_LOWEST_RANGE_PRICE_PROD = 'min_range_calculated_price'; 17 const KEY_HIGHEST_RANGE_PRICE_PROD = 'max_range_calculated_price'; 17 18 const KEY_HIGHEST_PRICE_PROD = 'max_calculated_price'; 18 19 const KEY_LOWEST_INITIAL_PRICE_PROD = 'min_initial_price'; … … 186 187 * @return ProcessedProductSimple|null 187 188 */ 189 public function getHighestRangeDiscountPriceProduct() 190 { 191 if (isset($this->childSummary[self::KEY_HIGHEST_RANGE_PRICE_PROD])) { 192 /** @var ProcessedProductSimple $prod */ 193 $prod = $this->childSummary[self::KEY_HIGHEST_RANGE_PRICE_PROD]; 194 } else { 195 $prod = null; 196 } 197 198 return $prod; 199 } 200 201 /** 202 * @return ProcessedProductSimple|null 203 */ 188 204 public function getLowestInitialPriceProduct() 189 205 { … … 238 254 239 255 if ($product->isAffectedByRangeDiscount()) { 256 $childLowestRangePrice = $product->getMinDiscountRangePrice(); 257 $lowestRangePrice = null; 240 258 if (isset($this->childSummary[self::KEY_LOWEST_RANGE_PRICE_PROD])) { 241 259 /** @var ProcessedProductSimple $prod */ 242 260 $prod = $this->childSummary[self::KEY_LOWEST_RANGE_PRICE_PROD]; 243 261 $lowestRangePrice = $prod->getMinDiscountRangePrice(); 244 } else { 245 $lowestRangePrice = null; 246 } 247 248 if (is_null($lowestRangePrice) || ($childPrice < $lowestRangePrice)) { 262 } 263 264 if (is_null($lowestRangePrice) || $childLowestRangePrice < $lowestRangePrice) { 249 265 $this->childSummary[self::KEY_LOWEST_RANGE_PRICE_PROD] = $product; 266 } 267 268 $childHighestRangePrice = $product->getMaxDiscountRangePrice(); 269 $highestRangePrice = null; 270 if (isset($this->childSummary[self::KEY_HIGHEST_RANGE_PRICE_PROD])) { 271 /** @var ProcessedProductSimple $prod */ 272 $prod = $this->childSummary[self::KEY_HIGHEST_RANGE_PRICE_PROD]; 273 $highestRangePrice = $prod->getMaxDiscountRangePrice(); 274 } 275 276 if (is_null($highestRangePrice) || $childHighestRangePrice > $highestRangePrice) { 277 $this->childSummary[self::KEY_HIGHEST_RANGE_PRICE_PROD] = $product; 250 278 } 251 279 -
advanced-dynamic-pricing-for-woocommerce/trunk/BaseVersion/Includes/PriceDisplay/Processor.php
r3349520 r3412190 122 122 123 123 //try cache 124 $key = array( $product->get_id() , $qty, json_encode($cartItemData) ); 125 foreach ($this->cart->getItems() as $item) { 126 $key[] = "T".$item->getHash(); 127 } 128 foreach ($this->calc->getRulesCollection()->getRules() as $rule) { 129 $key[] = "R".$rule->getId(); 130 } 131 132 $key = apply_filters("adp_calculate_product_hash", $key); 133 134 $key = md5(implode('_', $key)); 124 // $key = array( $product->get_id() , $qty, json_encode($cartItemData) ); 125 // foreach ($this->cart->getItems() as $item) { 126 // $key[] = "T".$item->getHash(); 127 // } 128 // foreach ($this->calc->getRulesCollection()->getRules() as $rule) { 129 // $key[] = "R".$rule->getId(); 130 // } 131 // foreach ($this->cart->getContext()->getCustomer()->getRoles() as $role) { 132 // $key[] = "U".$role; 133 // } 134 // $key = apply_filters("adp_calculate_product_hash", $key); 135 136 // $key = md5(implode('_', $key)); 137 138 $key = CacheHelper::calcHashProcessedProduct($product, [], $qty, $cartItemData, $this->cart, $this->calc); 139 135 140 if( $key == $last_product_key ) 136 141 return $last_product_result; … … 163 168 ); 164 169 foreach ($children as $childId) { 165 $processedChild = $this->checkCacheF roProcessedProduct($childId, $qty, [], $cartItemData);170 $processedChild = $this->checkCacheForProcessedProduct($childId, $qty, [], $cartItemData); 166 171 167 172 if (is_null($processedChild)) { … … 196 201 197 202 foreach ($children as $childId) { 198 $processedChild = $this->checkCacheF roProcessedProduct($childId, $qty, [], $cartItemData);203 $processedChild = $this->checkCacheForProcessedProduct($childId, $qty, [], $cartItemData); 199 204 200 205 if (is_null($processedChild)) { … … 217 222 } elseif ( WcProductProcessorHelper::isCalculatingPartOfContainerProduct($product) ) { 218 223 $containerProduct = WcProductProcessorHelper::getBundleProductFromBundled($product); 219 $processedParent = $this->checkCacheF roProcessedProduct($containerProduct, $qty, [], $cartItemData);224 $processedParent = $this->checkCacheForProcessedProduct($containerProduct, $qty, [], $cartItemData); 220 225 221 226 if ( is_null($processedParent) ) { … … 235 240 } 236 241 } else { 237 $processed = $this->checkCacheF roProcessedProduct($product, $qty, [], $cartItemData);242 $processed = $this->checkCacheForProcessedProduct($product, $qty, [], $cartItemData); 238 243 239 244 if ( is_null($processed) ) { … … 292 297 293 298 294 protected function checkCacheF roProcessedProduct($prodID, $qty, $variationAttributes, $cartItemData)299 protected function checkCacheForProcessedProduct($prodID, $qty, $variationAttributes, $cartItemData) 295 300 { 296 301 if ($prodID && $processedProduct = CacheHelper::maybeGetProcessedProductToDisplay( -
advanced-dynamic-pricing-for-woocommerce/trunk/BaseVersion/Includes/Settings/CompatibilityStoreStrategy.php
r2804362 r3412190 6 6 use ADP\Settings\Interfaces\StoreStrategyInterface; 7 7 use ADP\Settings\OptionsList; 8 use ADP\BaseVersion\Includes\Cache\CacheHelper; 8 9 9 10 defined('ABSPATH') or exit; … … 20 21 if ($optionsList->getOptionsArray()) { 21 22 update_option(self::OPTION_KEY, $optionsList->getOptionsArray()); 22 wp_cache_flush();23 CacheHelper::flush(); 23 24 } 24 25 } -
advanced-dynamic-pricing-for-woocommerce/trunk/BaseVersion/Includes/Settings/OptionsInstaller.php
r3384329 r3412190 480 480 'clickable_bulk_rows', 481 481 false, 482 __(' Clickable bulk rows', 'advanced-dynamic-pricing-for-woocommerce')482 __('Highlight rows (on hover) and set qty on click', 'advanced-dynamic-pricing-for-woocommerce') 483 483 ) 484 484 ); -
advanced-dynamic-pricing-for-woocommerce/trunk/BaseVersion/Includes/Settings/StoreStrategy.php
r2661390 r3412190 6 6 use ADP\Settings\Interfaces\StoreStrategyInterface; 7 7 use ADP\Settings\OptionsList; 8 use ADP\BaseVersion\Includes\Cache\CacheHelper; 8 9 9 10 defined('ABSPATH') or exit; … … 20 21 if ($optionsList->getOptionsArray()) { 21 22 update_option(self::OPTION_KEY, $optionsList->getOptionsArray()); 22 wp_cache_flush();23 CacheHelper::flush(); 23 24 } 24 25 } -
advanced-dynamic-pricing-for-woocommerce/trunk/BaseVersion/Includes/Shortcodes/Products.php
r3106428 r3412190 71 71 */ 72 72 protected function parse_attributes( $attributes ) { 73 $this->type = 'products'; //required 73 74 $parsed_attributes = parent::parse_attributes( $attributes ); 75 $this->type = static::NAME; 76 74 77 //parse own attrubutes 75 78 $parsed_attributes['show_wc_onsale_products'] = false; … … 91 94 */ 92 95 protected function parse_query_args() { 93 $queryArgs = parent::parse_query_args();94 95 96 if ($this->attributes['rule_id'] !== false) { 96 97 $productIds = static::getCachedProductsIdsByRule($this->attributes['rule_id']); … … 98 99 $productIds = static::getCachedProductsIdsByRule(); //get all 99 100 } 100 101 101 if ($this->attributes["show_wc_onsale_products"]) { 102 $ queryArgs['post__in']= array_unique(array_merge(array(0), $productIds, wc_get_product_ids_on_sale()));102 $post__in = array_unique(array_merge(array(0), $productIds, wc_get_product_ids_on_sale())); 103 103 } else { 104 $queryArgs['post__in'] = array_merge(array(0), $productIds); 105 } 104 $post__in = array_merge(array(0), $productIds); 105 } 106 107 add_filter( 'woocommerce_shortcode_products_query', function($query_args, $attributes, $type ) use ($post__in){ 108 $query_args['post__in'] = $post__in; 109 return $query_args; 110 },0,4); 111 $queryArgs = parent::parse_query_args(); 112 $queryArgs['post__in'] = $post__in;//force own ids only 106 113 107 114 return $queryArgs; -
advanced-dynamic-pricing-for-woocommerce/trunk/BaseVersion/Includes/Shortcodes/SqlGeneratorPersistent.php
r3384329 r3412190 309 309 protected function genSqlProduct_attributes($termIds, $comparisonMethod = ComparisonMethods::IN_LIST) 310 310 { 311 static $i =0; 312 global $wpdb; 313 314 //TODO check_lookup_table_exists 315 $data_store = wc_get_container()->get( LookupDataStore::class ); 316 $lookupTable = $data_store->get_lookup_table_name(); 317 318 $where = $this->compareToSql("term_id", ComparisonMethods::IN_LIST, $termIds); 311 global $wpdb; 312 313 $ids = implode(', ', $termIds); 314 $where = $this->compareToSql("{$wpdb->terms}.term_id", ComparisonMethods::IN_LIST, $termIds); 319 315 // phpcs:ignore WordPress.DB.DirectDatabaseQuery, WordPress.DB.PreparedSQL.InterpolatedNotPrepared 320 $taxanomies = $wpdb->get_results("SELECT DISTINCT term_id, taxonomy FROM {$lookupTable} WHERE {$where} "); 321 322 $termIdsByTaxanomy = []; 323 foreach ($taxanomies as $obj) { 324 if(!isset($termIdsByTaxanomy[$obj->taxonomy])) { 325 $termIdsByTaxanomy[$obj->taxonomy] = []; 326 } 327 328 $termIdsByTaxanomy[$obj->taxonomy][] = $obj->term_id; 329 } 330 331 $productIds = []; 332 foreach ($termIdsByTaxanomy as $taxanomy => $termIds) { 333 $where = $this->compareToSql("term_id", ComparisonMethods::IN_LIST, $termIds); 334 // phpcs:ignore WordPress.DB.DirectDatabaseQuery, WordPress.DB.PreparedSQL.InterpolatedNotPrepared 335 $products = $wpdb->get_results("SELECT product_id, product_or_parent_id FROM {$lookupTable} WHERE {$where} "); 336 337 $productIds = array_merge($productIds, wp_list_pluck($products, 'product_id')); 338 } 339 $productIds = array_unique($productIds); 316 $items = $wpdb->get_results("SELECT taxonomy, {$wpdb->terms}.slug, {$wpdb->terms}.term_id 317 FROM {$wpdb->term_taxonomy} 318 INNER JOIN {$wpdb->terms} 319 USING (term_id) 320 WHERE {$where}"); 321 322 $where = []; 323 foreach ($items as $item) { 324 $tmp_where = [ 325 $this->compareToSql("meta_key", ComparisonMethods::EQ, "attribute_{$item->taxonomy}"), 326 $this->compareToSql("meta_value", ComparisonMethods::EQ, $item->slug), 327 ]; 328 329 $where[] = "(" . implode(" AND ", $tmp_where) . ")"; 330 } 331 $where = "( " . implode(' OR ', $where) . " )"; 332 333 // phpcs:ignore WordPress.DB.DirectDatabaseQuery, WordPress.DB.DirectDatabaseQuery.NoCaching 334 $productIds = $wpdb->get_col("SELECT post_id FROM {$wpdb->postmeta} WHERE {$where}"); 340 335 341 336 return $this->compareToSql('post_children.ID', $comparisonMethod, $productIds); … … 449 444 break; 450 445 case ComparisonMethods::LATER: 451 $sql_method = ComparisonMethods:: LT;446 $sql_method = ComparisonMethods::MT; 452 447 break; 453 448 case ComparisonMethods::EARLIER: 454 $sql_method = ComparisonMethods:: MT;449 $sql_method = ComparisonMethods::LT; 455 450 break; 456 451 case in_array($comparisonMethod, ComparisonMethods::BASIC_METHODS): -
advanced-dynamic-pricing-for-woocommerce/trunk/BaseVersion/Includes/Updater/UpdateFunctions.php
r3297317 r3412190 639 639 } 640 640 } 641 642 public static function migrateSummaryTo_4_10_4() 643 { 644 global $wpdb; 645 646 if(!class_exists('\ADP\ProVersion\Includes\Database\Models\Collection')) { 647 return; 648 } 649 650 $table = $wpdb->prefix . \ADP\ProVersion\Includes\Database\Models\Collection::TABLE_NAME; 651 652 //phpcs:disable WordPress.DB.DirectDatabaseQuery 653 $column_exists = $wpdb->get_results( 654 //phpcs:disable WordPress.DB.PreparedSQL.InterpolatedNotPrepared 655 $wpdb->prepare("SHOW COLUMNS FROM {$table} LIKE %s", 'conditions_relationship') 656 ); 657 658 if (empty($column_exists)) { 659 //phpcs:disable WordPress.DB.PreparedSQL, WordPress.DB.DirectDatabaseQuery 660 $wpdb->query("ALTER TABLE {$table} ADD COLUMN conditions_relationship BOOLEAN DEFAULT TRUE"); 661 //phpcs:disable WordPress.DB.PreparedSQL, WordPress.DB.DirectDatabaseQuery 662 $wpdb->query("UPDATE {$table} SET conditions_relationship = TRUE"); 663 } 664 665 //phpcs:disable WordPress.DB.DirectDatabaseQuery 666 $column_exists = $wpdb->get_results( 667 //phpcs:disable WordPress.DB.PreparedSQL.InterpolatedNotPrepared 668 $wpdb->prepare("SHOW COLUMNS FROM {$table} LIKE %s", 'summary') 669 ); 670 671 if (empty($column_exists)) { 672 //phpcs:disable WordPress.DB.PreparedSQL, WordPress.DB.DirectDatabaseQuery 673 $wpdb->query("ALTER TABLE {$table} ADD COLUMN summary TEXT DEFAULT NULL"); 674 } 675 676 if (!class_exists("\ADP\ProVersion\Includes\Database\Repository\CollectionRepository")) { 677 return; 678 } 679 680 $productCollections = \ADP\ProVersion\Includes\Database\Repository\CollectionRepository::getProductCollections(); 681 682 foreach ($productCollections as $collection) { 683 \ADP\ProVersion\Includes\Database\Repository\CollectionRepository::storeProductCollection($collection); 684 } 685 } 641 686 } 642 687 -
advanced-dynamic-pricing-for-woocommerce/trunk/BaseVersion/Includes/Updater/Updater.php
r3004075 r3412190 55 55 'migratePostalCodesConditionsTo_4_5_3', 56 56 'migrateSpentConditionsTo_4_5_3' 57 ) 57 ), 58 '4.10.4' => array( 59 'migrateSummaryTo_4_10_4', 60 ), 58 61 ); 59 62 -
advanced-dynamic-pricing-for-woocommerce/trunk/BaseVersion/assets/js/cache-recalculation.js
r3384329 r3412190 53 53 } 54 54 55 const PAGE_SIZE = selector == 'recalculate_persistence_cache' ? 10 :1;55 const PAGE_SIZE = 1; 56 56 let processedCount = 0; 57 57 -
advanced-dynamic-pricing-for-woocommerce/trunk/BaseVersion/assets/js/frontend.js
r3384329 r3412190 49 49 } 50 50 51 jQItem.html(jQuery(response.data).children()) 51 jQItem.html(jQuery(response.data).children()).trigger('update'); 52 52 }); 53 53 init_custom_event(); … … 59 59 } 60 60 61 DynamicPrice.prototype.clickableBulkRows()62 61 }, 63 62 error: function (response) { -
advanced-dynamic-pricing-for-woocommerce/trunk/BaseVersion/assets/js/options.js
r3384329 r3412190 139 139 }); 140 140 141 $(document).on(' click', function(e) {141 $(document).on('mousedown', function(e) { 142 142 if(!$(e.target).closest('.wdp-settings-template-wrap').length) { 143 143 $('.wdp-settings-template-wrap').removeClass('wdp-settings-template-active'); -
advanced-dynamic-pricing-for-woocommerce/trunk/BaseVersion/assets/js/rules.js
r3384329 r3412190 1168 1168 } 1169 1169 1170 function show_buy_three_for_x(rule_type_selector, new_rule) { 1171 let linkOnExample = $(rule_type_selector).parent().find('a'); 1172 linkOnExample.attr('href', 'https://docs.algolplus.com/algol_pricing/cart-discount-help/').show(); 1173 1174 var filter_data = { 1175 qty: 3, 1176 type: "any", 1177 limitation: "product" 1178 }; 1179 1180 var adjustment_data = { 1181 type: 'total', 1182 total: { 1183 type: 'price__fixed', 1184 } 1185 }; 1186 1187 add_product_filter(new_rule.find('.wdp-filter-block'), filter_data); 1188 add_product_adjustment(new_rule.find('.wdp-product-adjustments'), adjustment_data); 1189 } 1190 1191 function show_disc_cheapest_fifty_perc(rule_type_selector, new_rule){ 1170 function show_pro_threebytwo_discount_type(rule_type_selector, new_rule){ 1192 1171 let linkOnExample = $(rule_type_selector).parent().find('a'); 1193 1172 linkOnExample.attr('href', 'https://docs.algolplus.com/algol_pricing/cart-discount-help/').show(); … … 1206 1185 console.error(response.data); 1207 1186 return; 1187 } else { 1188 new_rule.find('.wdp-select-filter-priority-temp') 1189 .removeClass('wdp-select-filter-priority-temp') 1190 .addClass('wdp-select-filter-priority') 1191 .show(); 1192 } 1193 }, 1194 'json' 1195 ); 1196 } 1197 1198 var filter_data_1 = { 1199 qty: 2, 1200 type: "products", 1201 limitation: "none", 1202 select_priority: "expensive", 1203 }; 1204 1205 var filter_data_2 = { 1206 qty: 1, 1207 type: "products", 1208 limitation: "none", 1209 select_priority: "cheap", 1210 }; 1211 1212 var adjustment_data = { 1213 type: 'split', 1214 split: [ 1215 { 1216 type: 'discount__amount', 1217 }, 1218 { 1219 type: 'discount__percentage', 1220 value: 100 1221 } 1222 ] 1223 }; 1224 1225 add_product_filter(new_rule.find('.wdp-filter-block'), filter_data_1); 1226 add_product_filter(new_rule.find('.wdp-filter-block'), filter_data_2); 1227 1228 add_product_adjustment(new_rule.find('.wdp-product-adjustments'), adjustment_data); 1229 } 1230 1231 function show_buy_three_for_x(rule_type_selector, new_rule) { 1232 let linkOnExample = $(rule_type_selector).parent().find('a'); 1233 linkOnExample.attr('href', 'https://docs.algolplus.com/algol_pricing/cart-discount-help/').show(); 1234 1235 var filter_data = { 1236 qty: 3, 1237 type: "any", 1238 limitation: "product" 1239 }; 1240 1241 var adjustment_data = { 1242 type: 'total', 1243 total: { 1244 type: 'price__fixed', 1245 } 1246 }; 1247 1248 add_product_filter(new_rule.find('.wdp-filter-block'), filter_data); 1249 add_product_adjustment(new_rule.find('.wdp-product-adjustments'), adjustment_data); 1250 } 1251 1252 function show_disc_cheapest_fifty_perc(rule_type_selector, new_rule){ 1253 let linkOnExample = $(rule_type_selector).parent().find('a'); 1254 linkOnExample.attr('href', 'https://docs.algolplus.com/algol_pricing/cart-discount-help/').show(); 1255 1256 if(!wdp_data.options.filter_priority) { 1257 let params = { 1258 action: 'wdp_ajax', 1259 method: 'check_filter_priority', 1260 }; 1261 params[wdp_data.security_query_arg] = wdp_data.security; 1262 $.post( 1263 ajaxurl, 1264 params, 1265 function (response) { 1266 if (!response.success) { 1267 console.error(response.data); 1268 return; 1269 } else { 1270 new_rule.find('.wdp-select-filter-priority-temp') 1271 .removeClass('wdp-select-filter-priority-temp') 1272 .addClass('wdp-select-filter-priority') 1273 .show(); 1208 1274 } 1209 1275 }, … … 1303 1369 show_pro_bogo_discount_type(this, new_rule); 1304 1370 break; 1371 case 'pro_threebytwo_discount': 1372 show_pro_threebytwo_discount_type(this, new_rule); 1373 break; 1305 1374 case 'bogo_discount': 1306 1375 show_bogo_discount_type(this, new_rule); … … 2102 2171 /** pro version functionality */ 2103 2172 if ( data.select_priority ) { 2173 $container.find('.wdp-select-filter-priority-temp select').val(data.select_priority); 2104 2174 $container.find('.wdp-select-filter-priority select').val(data.select_priority); 2105 2175 } -
advanced-dynamic-pricing-for-woocommerce/trunk/BaseVersion/views/admin_page/tabs/options/replace_price_with_min_bulk_price.php
r3349577 r3412190 43 43 <div> 44 44 <?php esc_html_e('Available tags', 'advanced-dynamic-pricing-for-woocommerce') ?> 45 : <?php esc_html_e('{{price}}, {{price_suffix}}, {{price_striked}}, {{initial_price}}, {{regular_price_striked}} ',45 : <?php esc_html_e('{{price}}, {{price_suffix}}, {{price_striked}}, {{initial_price}}, {{regular_price_striked}}, {{min_max_range}}', 46 46 'advanced-dynamic-pricing-for-woocommerce') ?> 47 47 </div> -
advanced-dynamic-pricing-for-woocommerce/trunk/BaseVersion/views/admin_page/tabs/rules/persistent_rule.php
r3385738 r3412190 205 205 <div style="display: inline-block;margin: 0 10px 0 0;"> 206 206 <label> 207 <?php esc_html_e('Limit discount to amount :', 'advanced-dynamic-pricing-for-woocommerce') ?>207 <?php esc_html_e('Limit discount to amount', 'advanced-dynamic-pricing-for-woocommerce') ?> 208 208 <input style="display: inline-block; width: 200px;" 209 209 name="rule[product_adjustments][max_discount_sum]" type="number" 210 class="product-adjustments-max-discount" placeholder=" 0.00" min="0" step="any"/>210 class="product-adjustments-max-discount" placeholder="<?php esc_html_e('Unlimited', 'advanced-dynamic-pricing-for-woocommerce') ?>" min="0" step="any"/> 211 211 </label> 212 212 </div> -
advanced-dynamic-pricing-for-woocommerce/trunk/BaseVersion/views/admin_page/tabs/rules/rule.php
r3385738 r3412190 322 322 <div style="display: inline-block;margin: 0 10px 0 0;"> 323 323 <label> 324 <?php esc_html_e('Limit discount to amount :', 'advanced-dynamic-pricing-for-woocommerce') ?>325 <input style="display: inline-block; width: 200px;" name="rule[product_adjustments][max_discount_sum]" type="number" class="product-adjustments-max-discount" placeholder=" 0.00" min="0" step="any"/>324 <?php esc_html_e('Limit discount to amount', 'advanced-dynamic-pricing-for-woocommerce') ?> 325 <input style="display: inline-block; width: 200px;" name="rule[product_adjustments][max_discount_sum]" type="number" class="product-adjustments-max-discount" placeholder="<?php esc_html_e('Unlimited', 'advanced-dynamic-pricing-for-woocommerce') ?>" min="0" step="any"/> 326 326 </label> 327 327 </div> -
advanced-dynamic-pricing-for-woocommerce/trunk/advanced-dynamic-pricing-for-woocommerce.php
r3386169 r3412190 4 4 * Plugin URI: 5 5 * Description: Manage WooCommerce discounts 6 * Version: 4.10. 36 * Version: 4.10.4 7 7 * Author: AlgolPlus 8 8 * Author URI: https://algolplus.com/ … … 44 44 define('WC_ADP_MIN_PHP_VERSION', '7.0.0'); 45 45 define('WC_ADP_MIN_WC_VERSION', '3.6'); 46 define('WC_ADP_VERSION', '4.10. 3');46 define('WC_ADP_VERSION', '4.10.4'); 47 47 define('WC_ADP_WC_TIPTIP_SINCE_VERSION', '10.3'); 48 48 -
advanced-dynamic-pricing-for-woocommerce/trunk/languages/advanced-dynamic-pricing-for-woocommerce.pot
r3386161 r3412190 2 2 msgid "" 3 3 msgstr "" 4 "Project-Id-Version: Advanced Dynamic Pricing for WooCommerce (Pro)\n" 4 "Project-Id-Version: Advanced Dynamic Pricing and Discount Rules for " 5 "WooCommerce (Pro)\n" 5 6 "Report-Msgid-Bugs-To: \n" 6 "POT-Creation-Date: 2025-1 0-29 05:01+0000\n"7 "POT-Creation-Date: 2025-12-05 12:23+0000\n" 7 8 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 8 9 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" … … 14 15 "Content-Transfer-Encoding: 8bit\n" 15 16 "X-Generator: Loco https://localise.biz/\n" 16 "X-Loco-Version: 2. 5.5; wp-5.8.3\n"17 "X-Loco-Version: 2.8.0; wp-6.9-RC3; php-8.4.6\n" 17 18 "X-Domain: advanced-dynamic-pricing-for-woocommerce" 18 19 … … 245 246 246 247 #. Name of the plugin 247 msgid "Advanced Dynamic Pricing and Discount Rules for WooCommerce "248 msgid "Advanced Dynamic Pricing and Discount Rules for WooCommerce (Pro)" 248 249 msgstr "" 249 250 … … 252 253 msgstr "" 253 254 254 #: BaseVersion/Includes/Loader.php:1 06255 #: BaseVersion/Includes/Loader.php:128 255 256 msgid "Advanced Dynamic Pricing for WooCommerce requires active WooCommerce!" 256 257 msgstr "" 257 258 258 259 #. A message about the need for a specific php version 259 #: BaseVersion/Includes/Loader.php:1 00260 #: BaseVersion/Includes/Loader.php:122 260 261 #, php-format 261 262 msgid "" … … 264 265 265 266 #. A message about the need for a specific php version 266 #: BaseVersion/Includes/Loader.php:1 13267 #: BaseVersion/Includes/Loader.php:135 267 268 #, php-format 268 269 msgid "" … … 271 272 msgstr "" 272 273 273 #: BaseVersion/Includes/AdminExtensions/AdminPage/Tabs/Options.php:26 1274 #: BaseVersion/Includes/AdminExtensions/AdminPage/Tabs/Options.php:263 274 275 msgid "Advertising" 275 276 msgstr "" … … 302 303 msgstr "" 303 304 304 #: BaseVersion/Includes/CustomizerExtensions/CustomizerExtensions.php:632305 #: BaseVersion/Includes/CustomizerExtensions/CustomizerExtensions.php:680306 msgid "After subtotal"307 msgstr ""308 309 305 #. Author of the plugin 310 306 msgid "AlgolPlus" … … 313 309 #: BaseVersion/Includes/Helpers/Helpers.php:200 314 310 #: BaseVersion/views/admin_page/tabs/rules.php:31 315 #: BaseVersion/Includes/AdminExtensions/AdminPage/Tabs/Tools.php:4 55311 #: BaseVersion/Includes/AdminExtensions/AdminPage/Tabs/Tools.php:469 316 312 msgid "All" 317 313 msgstr "" … … 433 429 msgstr "" 434 430 435 #: BaseVersion/Includes/AdminExtensions/AdminPage/Tabs/Options.php:13 5431 #: BaseVersion/Includes/AdminExtensions/AdminPage/Tabs/Options.php:137 436 432 msgid "Are you sure to reset all settings to default?" 437 433 msgstr "" … … 483 479 msgstr "" 484 480 485 #: BaseVersion/Includes/AdminExtensions/AdminPage/Tabs/Tools.php:5 32481 #: BaseVersion/Includes/AdminExtensions/AdminPage/Tabs/Tools.php:546 486 482 msgid "Backup" 487 483 msgstr "" … … 558 554 msgstr "" 559 555 556 #: BaseVersion/Includes/CustomizerExtensions/CustomizerExtensions.php:632 557 #: BaseVersion/Includes/CustomizerExtensions/CustomizerExtensions.php:680 558 msgid "Before shipping" 559 msgstr "" 560 560 561 #: BaseVersion/Includes/CustomizerExtensions/CustomizerExtensions.php:200 561 562 msgid "Below add to cart" … … 591 592 msgstr "" 592 593 593 #: BaseVersion/Includes/ImportExport/ImporterCSV.php:21 3594 #: BaseVersion/Includes/ImportExport/ImporterCSV.php:216 594 595 #: BaseVersion/views/admin_page/tabs/rules/rule.php:180 595 596 #: BaseVersion/views/admin_page/tabs/rules/templates/wdp-sortable-blocks.php:110 … … 659 660 msgstr "" 660 661 661 #: BaseVersion/Includes/AdminExtensions/AdminPage/Tabs/Options.php:23 5662 #: BaseVersion/Includes/AdminExtensions/AdminPage/Tabs/Options.php:237 662 663 msgid "Bulk table" 663 664 msgstr "" … … 690 691 msgstr "" 691 692 692 #: BaseVersion/Includes/AdminExtensions/AdminPage/Tabs/Options.php:18 1693 #: BaseVersion/Includes/AdminExtensions/AdminPage/Tabs/Options.php:183 693 694 msgid "Calculation" 694 695 msgstr "" … … 705 706 msgstr "" 706 707 707 #: BaseVersion/Includes/ImportExport/ImporterCSV.php:27 5708 #: BaseVersion/Includes/ImportExport/ImporterCSV.php:278 708 709 msgid "Can not find " 709 710 msgstr "" 710 711 711 #: BaseVersion/Includes/ImportExport/ImporterCSV.php:20 1712 #: BaseVersion/Includes/ImportExport/ImporterCSV.php:204 712 713 msgid "Can't open file." 713 714 msgstr "" … … 717 718 #: BaseVersion/templates/reporter/main.php:20 718 719 #: BaseVersion/Includes/Core/Rule/CartCondition/ConditionsLoader.php:75 719 #: BaseVersion/Includes/AdminExtensions/AdminPage/Tabs/Options.php:21 0720 #: BaseVersion/Includes/AdminExtensions/AdminPage/Tabs/Options.php:212 720 721 msgid "Cart" 721 722 msgstr "" … … 763 764 msgstr "" 764 765 765 #: BaseVersion/Includes/AdminExtensions/AdminPage/Tabs/Options.php:2 28766 #: BaseVersion/Includes/AdminExtensions/AdminPage/Tabs/Options.php:230 766 767 msgid "Category page" 767 768 msgstr "" … … 812 813 #: BaseVersion/views/admin_page/tabs/tools/backup.php:81 813 814 msgid "Clear all rules before import" 814 msgstr ""815 816 #: BaseVersion/Includes/Settings/OptionsInstaller.php:482817 msgid "Clickable bulk rows"818 815 msgstr "" 819 816 … … 868 865 msgstr "" 869 866 870 #: BaseVersion/Includes/AdminExtensions/AdminPage/Tabs/Tools.php:5 38867 #: BaseVersion/Includes/AdminExtensions/AdminPage/Tabs/Tools.php:552 871 868 msgid "Convert rules" 872 869 msgstr "" … … 907 904 #: BaseVersion/Includes/Debug/DebugBar.php:71 908 905 #: BaseVersion/Includes/Core/Rule/CartAdjustment/CartAdjustmentsLoader.php:50 909 #: BaseVersion/Includes/AdminExtensions/AdminPage/Tabs/Options.php:25 2906 #: BaseVersion/Includes/AdminExtensions/AdminPage/Tabs/Options.php:254 910 907 msgid "Coupons" 911 908 msgstr "" … … 1006 1003 msgstr "" 1007 1004 1008 #: BaseVersion/Includes/AdminExtensions/AdminPage/Tabs/Options.php:29 71005 #: BaseVersion/Includes/AdminExtensions/AdminPage/Tabs/Options.php:299 1009 1006 msgid "Debug" 1010 1007 msgstr "" … … 1222 1219 #: BaseVersion/Includes/AdminExtensions/AdminPage/Tabs/Rules.php:58 1223 1220 #: BaseVersion/Includes/AdminExtensions/AdminPage/Tabs/Options.php:58 1224 #: BaseVersion/Includes/AdminExtensions/AdminPage/Tabs/Options.php:9 81225 #: BaseVersion/Includes/AdminExtensions/AdminPage/Tabs/Tools.php:7 71221 #: BaseVersion/Includes/AdminExtensions/AdminPage/Tabs/Options.php:99 1222 #: BaseVersion/Includes/AdminExtensions/AdminPage/Tabs/Tools.php:79 1226 1223 msgid "Error" 1227 1224 msgstr "" … … 1307 1304 msgstr "" 1308 1305 1309 #: BaseVersion/Includes/ImportExport/ImporterCSV.php:15 51306 #: BaseVersion/Includes/ImportExport/ImporterCSV.php:158 1310 1307 msgid "File must contain one rule or more." 1311 1308 msgstr "" … … 1403 1400 msgstr "" 1404 1401 1405 #: BaseVersion/Includes/ImportExport/ImporterCSV.php:21 61402 #: BaseVersion/Includes/ImportExport/ImporterCSV.php:219 1406 1403 msgid "for Roles" 1407 1404 msgstr "" … … 1414 1411 1415 1412 #: BaseVersion/Includes/Helpers/Helpers.php:573 1416 #: BaseVersion/Includes/AdminExtensions/AdminPage/Tabs/Options.php:24 51413 #: BaseVersion/Includes/AdminExtensions/AdminPage/Tabs/Options.php:247 1417 1414 #: BaseVersion/views/admin_page/tabs/rules/persistent_rule.php:571 1418 1415 #: BaseVersion/views/admin_page/tabs/rules/rule.php:564 … … 1530 1527 #: BaseVersion/views/admin_page/tabs/options/create_blank_rule.php:12 1531 1528 msgid "Hide rules wizard" 1529 msgstr "" 1530 1531 #: BaseVersion/Includes/Settings/OptionsInstaller.php:482 1532 msgid "Highlight rows (on hover) and set qty on click" 1532 1533 msgstr "" 1533 1534 … … 1608 1609 msgstr "" 1609 1610 1610 #: BaseVersion/Includes/AdminExtensions/AdminPage/Tabs/Tools.php:5 191611 #: BaseVersion/Includes/AdminExtensions/AdminPage/Tabs/Tools.php:533 1611 1612 msgid "Import rules (CSV)" 1612 1613 msgstr "" … … 1616 1617 msgstr "" 1617 1618 1618 #: BaseVersion/Includes/ImportExport/ImporterCSV.php:2 291619 #: BaseVersion/Includes/ImportExport/ImporterCSV.php:232 1619 1620 msgid "Imported Rule" 1620 1621 msgstr "" … … 1682 1683 #: BaseVersion/Includes/AdminExtensions/AdminPage/Tabs/Rules.php:57 1683 1684 #: BaseVersion/Includes/AdminExtensions/AdminPage/Tabs/Options.php:57 1684 #: BaseVersion/Includes/AdminExtensions/AdminPage/Tabs/Options.php:9 71685 #: BaseVersion/Includes/AdminExtensions/AdminPage/Tabs/Tools.php:7 61685 #: BaseVersion/Includes/AdminExtensions/AdminPage/Tabs/Options.php:98 1686 #: BaseVersion/Includes/AdminExtensions/AdminPage/Tabs/Tools.php:78 1686 1687 msgid "Invalid nonce specified" 1687 1688 msgstr "" … … 1731 1732 #: BaseVersion/views/admin_page/tabs/rules/persistent_rule.php:207 1732 1733 #: BaseVersion/views/admin_page/tabs/rules/rule.php:324 1733 msgid "Limit discount to amount :"1734 msgid "Limit discount to amount" 1734 1735 msgstr "" 1735 1736 … … 2006 2007 #: BaseVersion/Includes/CustomizerExtensions/CustomizerExtensions.php:164 2007 2008 #: BaseVersion/Includes/CustomizerExtensions/CustomizerExtensions.php:415 2008 #: BaseVersion/Includes/AdminExtensions/AdminPage/Tabs/Tools.php:6 02009 #: BaseVersion/Includes/AdminExtensions/AdminPage/Tabs/Tools.php:3 162010 #: BaseVersion/Includes/AdminExtensions/AdminPage/Tabs/Tools.php:3 212009 #: BaseVersion/Includes/AdminExtensions/AdminPage/Tabs/Tools.php:62 2010 #: BaseVersion/Includes/AdminExtensions/AdminPage/Tabs/Tools.php:330 2011 #: BaseVersion/Includes/AdminExtensions/AdminPage/Tabs/Tools.php:335 2011 2012 msgid "Options" 2012 2013 msgstr "" … … 2016 2017 msgstr "" 2017 2018 2018 #: BaseVersion/Includes/AdminExtensions/AdminPage/Tabs/Options.php:26 62019 #: BaseVersion/Includes/AdminExtensions/AdminPage/Tabs/Options.php:268 2019 2020 msgid "Order" 2020 2021 msgstr "" … … 2224 2225 msgstr "" 2225 2226 2226 #: BaseVersion/Includes/AdminExtensions/AdminPage/Tabs/Options.php:2 192227 #: BaseVersion/Includes/AdminExtensions/AdminPage/Tabs/Options.php:221 2227 2228 msgid "Product page" 2228 2229 msgstr "" 2229 2230 2230 #: BaseVersion/Includes/AdminExtensions/AdminPage/Tabs/Options.php: 1982231 #: BaseVersion/Includes/AdminExtensions/AdminPage/Tabs/Options.php:200 2231 2232 msgid "Product price" 2232 2233 msgstr "" … … 2436 2437 msgstr "" 2437 2438 2438 #: BaseVersion/Includes/CartProcessor/CartProcessor.php:108 12439 #: BaseVersion/Includes/CartProcessor/CartProcessor.php:1083 2439 2440 msgid "Removed {{qty}} free {{product_name}}" 2440 2441 msgstr "" … … 2502 2503 msgstr "" 2503 2504 2504 #: BaseVersion/Includes/ImportExport/ImporterCSV.php:22 02505 #: BaseVersion/Includes/ImportExport/ImporterCSV.php:22 22505 #: BaseVersion/Includes/ImportExport/ImporterCSV.php:223 2506 #: BaseVersion/Includes/ImportExport/ImporterCSV.php:225 2506 2507 msgid "Roles" 2507 2508 msgstr "" … … 2533 2534 #: BaseVersion/templates/reporter/main.php:24 2534 2535 #: BaseVersion/Includes/AdminExtensions/AdminPage/Tabs/Rules.php:97 2535 #: BaseVersion/Includes/AdminExtensions/AdminPage/Tabs/Options.php:27 32536 #: BaseVersion/Includes/AdminExtensions/AdminPage/Tabs/Tools.php:6 12537 #: BaseVersion/Includes/AdminExtensions/AdminPage/Tabs/Tools.php:4 672536 #: BaseVersion/Includes/AdminExtensions/AdminPage/Tabs/Options.php:275 2537 #: BaseVersion/Includes/AdminExtensions/AdminPage/Tabs/Tools.php:63 2538 #: BaseVersion/Includes/AdminExtensions/AdminPage/Tabs/Tools.php:481 2538 2539 msgid "Rules" 2539 2540 msgstr "" … … 2714 2715 2715 2716 #: BaseVersion/Includes/PluginActions.php:58 2716 #: BaseVersion/Includes/AdminExtensions/AdminPage/Tabs/Options.php:16 02717 #: BaseVersion/Includes/AdminExtensions/AdminPage/Tabs/Options.php:162 2717 2718 #: BaseVersion/Includes/AdminExtensions/AdminPage/Tabs/Help.php:103 2718 2719 msgid "Settings" … … 2982 2983 msgstr "" 2983 2984 2984 #: BaseVersion/Includes/AdminExtensions/AdminPage/Tabs/Options.php:28 62985 #: BaseVersion/Includes/AdminExtensions/AdminPage/Tabs/Options.php:288 2985 2986 msgid "System" 2986 2987 msgstr "" 2987 2988 2988 #: BaseVersion/Includes/AdminExtensions/AdminPage/Tabs/Tools.php:5 132989 #: BaseVersion/Includes/AdminExtensions/AdminPage/Tabs/Tools.php:527 2989 2990 msgid "System report" 2990 2991 msgstr "" … … 3084 3085 msgstr "" 3085 3086 3086 #: BaseVersion/Includes/AdminExtensions/AdminPage/Tabs/Tools.php:2 333087 #: BaseVersion/Includes/AdminExtensions/AdminPage/Tabs/Tools.php:247 3087 3088 #: BaseVersion/Includes/AdminExtensions/AdminPage/Tabs/Help.php:118 3088 3089 msgid "Tools" … … 3106 3107 msgstr "" 3107 3108 3109 #: BaseVersion/views/admin_page/tabs/rules/persistent_rule.php:210 3108 3110 #: BaseVersion/views/admin_page/tabs/rules/persistent_rule.php:258 3109 3111 #: BaseVersion/views/admin_page/tabs/rules/rule.php:112 3112 #: BaseVersion/views/admin_page/tabs/rules/rule.php:325 3110 3113 #: BaseVersion/views/admin_page/tabs/rules/rule.php:369 3111 3114 msgid "Unlimited" … … 3116 3119 msgstr "" 3117 3120 3118 #: BaseVersion/Includes/AdminExtensions/AdminPage/Tabs/Tools.php:5 253121 #: BaseVersion/Includes/AdminExtensions/AdminPage/Tabs/Tools.php:539 3119 3122 msgid "Update bulk ranges (CSV)" 3120 3123 msgstr "" … … 3304 3307 msgid "" 3305 3308 "{{price}}, {{price_suffix}}, {{price_striked}}, {{initial_price}}, " 3306 "{{regular_price_striked}} "3309 "{{regular_price_striked}}, {{min_max_range}}" 3307 3310 msgstr "" 3308 3311 -
advanced-dynamic-pricing-for-woocommerce/trunk/readme.txt
r3405643 r3412190 184 184 == Changelog == 185 185 186 = 4.10.4 - 2025-12-08 = 187 * Fixed bug - wrong prices for guests when use Redis/Memcached 188 * Fixed bug - "Amount saved" didn't show the cart/checkout for virtual products 189 * Fixed bug - internal "WDP Coupon" was visible at >Marketing>Coupons 190 * Fixed bug - fatal error after conversion "Product Only" back to "Common" rules 191 * Fixed bug - deprecation warnings during >Tools>Import Rules(CSV) 192 * Fixed bug - js error at product page when switch variations 193 * Fixed bug - "division by zero" when "Order Minimum/Maximum Amount Limits for WooCommerce" active 194 * Added tag {min_max_range} to option "Replace price with lowest bulk price" 195 * Added compatibility with "Buy once or subscribe" 196 * Updated compatibility with "WPC Product Bundles for WooCommerce" 197 * Updated compatibility with WOOCS, fatal error if default currency was not set 198 186 199 = 4.10.3 - 2025-10-29 = 187 200 * Fixed critical bug - fatal error in PHP 7.4(or less)
Note: See TracChangeset
for help on using the changeset viewer.