PluginProbe ʕ •ᴥ•ʔ
WPML Multilingual & Multicurrency for WooCommerce / trunk
WPML Multilingual & Multicurrency for WooCommerce vtrunk
5.3.8 5.3.9 5.4.3 5.4.4 5.4.5 5.5.1 5.5.1.1 5.5.2.2 5.5.2.3 5.5.3 5.5.3.1 5.5.4 5.5.5 5.5.6 trunk 0.9 1.0 1.1 1.2 1.3 1.4 1.5 2.0 2.2 2.3 2.3.1 2.3.2 3.0 3.0.1 3.1 3.2 3.2.1 3.2.2 3.3 3.3.1 3.3.2 3.3.3 3.3.4 3.4 3.4.1 3.4.2 3.4.3 3.5 3.5.1 3.5.2 3.5.3 3.5.4 3.5.5 3.6 3.6.1 3.6.10 3.6.11 3.6.2 3.6.3 3.6.4 3.6.5 3.6.5.1 3.6.6 3.6.7 3.6.8 3.6.9 3.7 3.7.1 3.7.10 3.7.11 3.7.12 3.7.13 3.7.14 3.7.15 3.7.16 3.7.2 3.7.3 3.7.4 3.7.5 3.7.6 3.7.7 3.7.8 3.7.9 3.8.0 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5 3.8.6 3.9.0 3.9.1 3.9.1.1 3.9.2 3.9.3 3.9.4 3.9.5 4.0.0 4.0.1 4.0.2 4.0.3 4.0.4 4.1.0 4.1.1 4.1.2 4.1.3 4.1.4 4.10.0 4.10.1 4.10.2 4.10.3 4.10.4 4.11.2 4.11.3.2 4.11.5 4.11.6 4.12.1 4.12.4 4.12.5 4.12.6 4.2.0 4.2.0.1 4.2.1 4.2.1.1 4.2.10 4.2.2 4.2.3 4.2.4 4.2.5 4.2.6 4.2.7 4.2.7.1 4.2.8 4.2.8.1 4.2.9 4.3.0 4.3.1 4.3.2 4.3.2.1 4.3.3 4.3.4 4.3.5 4.3.6 4.3.7 4.4.0 4.4.1 4.4.2 4.4.2.1 4.5.0 4.6.0 4.6.1 4.6.2 4.6.2.1 4.6.3 4.6.5 4.6.6 4.6.7 4.7.0 4.7.1 4.7.2 4.7.3 4.7.4 4.7.5 4.7.6 4.7.7 4.7.8 4.7.9 4.8.0 4.9.0 4.9.1 5.0.1 5.0.2 5.1.1 5.1.2 5.1.3 5.2.0 5.2.1 5.3.2 5.3.3.1 5.3.4 5.3.5 5.3.6 5.3.7
woocommerce-multilingual / classes / Rest / ProductSaveActions.php
woocommerce-multilingual / classes / Rest Last commit date
Exceptions 8 months ago Frontend 5 years ago Language 3 years ago Store 1 month ago Wrapper 4 months ago Functions.php 3 years ago Generic.php 1 year ago Hooks.php 2 years ago ProductSaveActions.php 8 months ago
ProductSaveActions.php
99 lines
1 <?php
2
3 namespace WCML\Rest;
4
5 use function WCML\functions\getId;
6
7 /**
8 * We need to reuse the `after_save_post` protected method
9 * of the \WPML_Post_Translation and the only way is by inheritance.
10 * The abstract methods are not used in the parent, but
11 * we need implement it to respect the contract.
12 * We are also including the WCML logic to `synchronize_products`.
13 */
14 class ProductSaveActions extends \WPML_Post_Translation {
15
16 /** @var \SitePress $sitepress */
17 private $sitepress;
18
19 /** @var \woocommerce_wpml $woocommerceWpml */
20 private $woocommerceWpml;
21
22 public function __construct(
23 array $settings,
24 \wpdb $wpdb,
25 \SitePress $sitepress,
26 \woocommerce_wpml $woocommerceWpml
27 ) {
28 parent::__construct( $settings, $wpdb );
29 $this->sitepress = $sitepress;
30 $this->woocommerceWpml = $woocommerceWpml;
31 }
32
33 /**
34 * @param object|\WC_Abstract_Legacy_Product $product
35 * @param int|null $trid
36 * @param string $langCode
37 * @param int|null $translationOf
38 * @param ?\WP_REST_Request $wpRestRequest
39 */
40 public function run( $product, $trid, $langCode, $translationOf, $wpRestRequest = null ) {
41 $productId = getId( $product );
42 $trid = $trid ?: $this->get_save_post_trid( $productId, null );
43 $langCode = $langCode ?: parent::get_save_post_lang( $productId, $this->sitepress );
44 $sourceLangCode = $this->get_element_lang_code( $translationOf );
45
46 if ( ! $this->synchronize_product_stock_only( $wpRestRequest ) ) {
47 $this->after_save_post( $trid, get_post( $productId, ARRAY_A ), $langCode, $sourceLangCode );
48 }
49
50 $originalProductId = $translationOf ?: $productId;
51 do_action( \WCML\Synchronization\Hooks::HOOK_SYNCHRONIZE_PRODUCT_TRANSLATIONS, get_post( $originalProductId ), [], [] );
52 if ( WCML_MULTI_CURRENCIES_INDEPENDENT === $this->woocommerceWpml->settings['enable_multi_currency'] ) {
53 $this->woocommerceWpml->multi_currency->custom_prices->save_custom_prices_on_rest( $originalProductId, $wpRestRequest );
54 }
55 }
56
57 /**
58 * @param ?\WP_REST_Request $wpRestRequest
59 *
60 * @return bool
61 */
62 private function synchronize_product_stock_only( $wpRestRequest ) {
63 if ( $wpRestRequest instanceof \WP_REST_Request ) {
64 $stockSyncFields = [
65 'id',
66 'manage_stock',
67 'stock_quantity',
68 ];
69
70 $requestParamsArray = $wpRestRequest->get_params();
71 $requestFields = array_keys( $requestParamsArray );
72
73 $nonStockFields = array_diff( $requestFields, $stockSyncFields );
74
75 return empty( $nonStockFields );
76 }
77
78 return false;
79 }
80
81 public function save_post_actions( $postId, $post ) {
82 throw new \Exception( 'This method should not be called, use `run` instead.' );
83 }
84
85 /**
86 * @inheritDoc
87 */
88 public function get_save_post_trid( $postId, $post_status ) {
89 return $this->get_element_trid( $postId );
90 }
91
92 /**
93 * @inheritDoc
94 */
95 protected function get_save_post_source_lang( $trid, $language_code, $default_language ) {
96 return $this->get_source_lang_code( $this->get_element_id( $language_code, $trid ) );
97 }
98 }
99