PluginProbe ʕ •ᴥ•ʔ
WPML Multilingual & Multicurrency for WooCommerce / 5.5.7
WPML Multilingual & Multicurrency for WooCommerce v5.5.7
5.5.7 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 / EditorScopedSync / ForceUpdateEndpoint.php
woocommerce-multilingual / classes / EditorScopedSync Last commit date
EditorChangeTracker.php 1 week ago ForceUpdateEndpoint.php 1 week ago HooksFactory.php 1 week ago Mode.php 1 week ago Notices.php 1 week ago Settings.php 1 week ago SyncGate.php 1 week ago
ForceUpdateEndpoint.php
63 lines
1 <?php
2
3 namespace WCML\EditorScopedSync;
4
5 use WCML\Synchronization\Manager as SyncManager;
6 use function WPML\Container\make;
7
8 class ForceUpdateEndpoint implements \IWPML_Backend_Action {
9
10 const ACTION = 'wcml_force_full_variation_sync';
11 const NONCE = 'wcml_force_full_variation_sync';
12
13 const PRIORITY_OVERRIDE_SYNC_GATE = 100;
14
15 public function add_hooks() {
16 add_action( 'wp_ajax_' . self::ACTION, [ __CLASS__, 'handle' ] );
17 }
18
19 public static function handle() {
20 check_ajax_referer( self::NONCE, '_wpnonce' );
21 if ( ! current_user_can( 'edit_products' ) ) {
22 wp_send_json_error( [ 'message' => 'forbidden' ], 403 );
23 }
24
25 $productId = isset( $_POST['product_id'] ) ? absint( $_POST['product_id'] ) : 0;
26 if ( ! $productId ) {
27 wp_send_json_error( [ 'message' => 'missing product_id' ], 400 );
28 }
29
30 $product = get_post( $productId );
31 if ( ! $product || 'product' !== $product->post_type) {
32 wp_send_json_error( [ 'message' => 'invalid product' ], 404 );
33 }
34
35 add_filter( 'wcml_editor_scoped_variation_ids', '__return_null', self::PRIORITY_OVERRIDE_SYNC_GATE );
36
37 try {
38 do_action( 'wcml_force_full_product_sync_run', $productId, $product );
39 make( SyncManager::class )->run( $product );
40 $message = 'sync completed';
41 $success = true;
42 } catch ( \Throwable $e ) {
43 $message = 'error: ' . $e->getMessage();
44 $success = false;
45 }
46
47 remove_filter( 'wcml_editor_scoped_variation_ids', '__return_null', self::PRIORITY_OVERRIDE_SYNC_GATE );
48
49 wp_send_json(
50 [
51 'product_id' => $productId,
52 'message' => $message,
53 'success' => $success,
54 ],
55 200
56 );
57 }
58
59 public static function nonce() {
60 return wp_create_nonce( self::NONCE );
61 }
62 }
63