PluginProbe
ووسلام – همگام سازی ووکامرس و باسلام / 1.10.21
ووسلام – همگام سازی ووکامرس و باسلام v1.10.21
1.10.21 1.10.19 1.10.20 1.10.18 1.10.17 1.10.15 1.10.14 1.10.13 1.10.12 1.10.10 1.10.9 1.10.8 1.10.7 1.10.6 1.10.5 1.10.4 1.10.3 1.10.2 1.10.1 1.10.0 1.9.2 1.9.1 1.9.0 1.8.8 1.8.5 All 54 releases
← All changes | includes/Admin/Product/Data/ProductDataFacade.php +24 -10 1.9.01.10.21 View file →
@@ -1,4 +1,4 @@
1 1 <?php
2 2
3 3 namespace SyncBasalam\Admin\Product\Data;
4 4
@@ -6,10 +6,14 @@
6 6 use SyncBasalam\Admin\Product\Data\Validators\ImageValidator;
7 7 use SyncBasalam\Admin\Product\Data\Validators\ProductExistenceValidator;
8 8 use SyncBasalam\Admin\Product\Data\Validators\ProductStatusValidator;
9 9 use SyncBasalam\Admin\Product\Data\Validators\WeightValidator;
10 -use SyncBasalam\Admin\Product\ProductDataFactory;
11 -use SyncBasalam\Utilities\ProductMetaKey;
10 +use SyncBasalam\Admin\Product\ProductDataFactory;
11 +use SyncBasalam\Admin\Settings\SettingsConfig;
12 +use SyncBasalam\Admin\Settings\SettingsManager;
13 +use SyncBasalam\Jobs\Exceptions\NonRetryableException;
14 +use SyncBasalam\Services\VendorSyncPolicy;
15 +use SyncBasalam\Utilities\ProductMetaKey;
12 16
13 17 defined('ABSPATH') || exit;
14 18
15 19 class ProductDataFacade
@@ -37,21 +41,31 @@
37 41 {
38 42 self::initialize();
39 43
40 44 $product = wc_get_product($productId);
41 - if (!$product) throw new \InvalidArgumentException("Product with ID {$productId} not found");
45 + if (!$product) throw new \InvalidArgumentException(esc_html("Product with ID {$productId} not found"));
42 46
43 47 $basalamProductId = get_post_meta($productId, ProductMetaKey::basalamProductId(), true);
44 48 $isUpdate = !empty($basalamProductId);
45 49
46 - $syncFields = syncBasalamSettings()->getSettings(\SyncBasalam\Admin\Settings\SettingsConfig::SYNC_PRODUCT_FIELDS);
50 + $settings = SettingsManager::getSettings();
51 + $syncFields = $settings[SettingsConfig::SYNC_PRODUCT_FIELDS] ?? 'all';
52 + $vendorSyncPolicy = syncBasalamContainer()->get(VendorSyncPolicy::class);
53 +
54 + if (
55 + $isUpdate
56 + && !$vendorSyncPolicy->shouldRestrictUpdateFields(false)
57 + && !SettingsManager::isProductUpdateSelectionValid($settings)
58 + ) {
59 + throw NonRetryableException::invalidData(SettingsConfig::CUSTOM_PRODUCT_UPDATE_REQUIRED_MESSAGE);
60 + }
47 61
48 - $strategy = 'create';
49 - if ($isUpdate) {
50 - if ($syncFields === 'price_stock') $strategy = 'quick_update';
51 - elseif ($syncFields === 'custom') $strategy = 'custom_update';
52 - else $strategy = 'update';
53 - }
62 + $strategy = 'create';
63 + if ($isUpdate) {
64 + if ($vendorSyncPolicy->shouldRestrictUpdateFields() || $syncFields === 'price_stock') $strategy = 'quick_update';
65 + elseif ($syncFields === 'custom') $strategy = 'custom_update';
66 + else $strategy = 'update';
67 + }
54 68
55 69 return self::$builder
56 70 ->reset()
57 71 ->setStrategy(self::$factory->createStrategy($strategy))