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 / Settings.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
Settings.php
109 lines
1 <?php
2
3 namespace WCML\EditorScopedSync;
4
5 use WCML\PostHog\Event\EditorScopedSyncSettingChanged;
6 use WPML\PostHog\Event\CaptureEvent;
7
8 class Settings implements \IWPML_Backend_Action {
9
10 const PRIORITY_AFTER_WCML_REQUESTS = 11;
11
12 const FIELD_SAVE_MODE = 'wcml_editor_save_mode';
13
14 private $mode;
15
16 public function __construct( Mode $mode ) {
17 $this->mode = $mode;
18 }
19
20 public function add_hooks() {
21 add_action( 'wcml_settings_before_synchronization', [ $this, 'renderSection' ] );
22
23 if ( $this->isWcmlSettingsSubmit() ) {
24 add_action( 'init', [ $this, 'maybeSaveOnWcmlSubmit' ], self::PRIORITY_AFTER_WCML_REQUESTS );
25 }
26 }
27
28 private function isWcmlSettingsSubmit() {
29 return ! empty( $_POST['wcml_save_settings'] );
30 }
31
32 public function maybeSaveOnWcmlSubmit() {
33 $nonce = isset( $_POST['wcml_nonce'] ) ? sanitize_text_field( wp_unslash( $_POST['wcml_nonce'] ) ) : '';
34 if ( ! wp_verify_nonce( $nonce, 'wcml_save_settings_nonce' ) ) {
35 return;
36 }
37
38 if ( ! current_user_can( 'wpml_operate_woocommerce_multilingual' ) && ! current_user_can( 'manage_options' ) ) {
39 return;
40 }
41
42 $value = Mode::VALUE_EDITOR_SCOPED === sanitize_text_field( wp_unslash( $_POST[ self::FIELD_SAVE_MODE ] ?? '' ) )
43 ? Mode::VALUE_EDITOR_SCOPED
44 : Mode::VALUE_COMPLETE;
45
46 if ( $value === $this->mode->current() ) {
47 return;
48 }
49
50 $this->mode->set( $value );
51
52 try {
53 CaptureEvent::capture(
54 new EditorScopedSyncSettingChanged( [ 'mode' => $value ] )
55 );
56 } catch ( \Throwable $e ) {
57 }
58 }
59
60 public function renderSection() {
61 $mode = $this->mode->current();
62 ?>
63 <div class="wcml-section">
64 <div class="wcml-section-header">
65 <h3>
66 <?php esc_html_e( 'Variation translation sync on product save', 'woocommerce-multilingual' ); ?>
67 <i class="otgs-ico-help wcml-tip" data-tip="<?php echo esc_attr__( 'Choose how WPML updates variation translations when you save a variable product. Affects saves in the WooCommerce product editor only — Translation Dashboard and Translate Everything Automatically always run a complete sync.', 'woocommerce-multilingual' ); ?>"></i>
68 </h3>
69 </div>
70 <div class="wcml-section-content">
71 <p style="margin:0 0 8px;color:#3c434a;">
72 <?php esc_html_e( 'Choose how WPML updates variation translations when you save a variable product.', 'woocommerce-multilingual' ); ?>
73 </p>
74 <p style="margin:0 0 12px;color:#646970;font-style:italic;font-size:13px;">
75 <?php esc_html_e( 'Affects saves in the WooCommerce product editor only. Translation Dashboard and Translate Everything Automatically always run a complete sync.', 'woocommerce-multilingual' ); ?>
76 </p>
77 <ul>
78 <li>
79 <input type="radio" name="<?php echo esc_attr( self::FIELD_SAVE_MODE ); ?>"
80 value="<?php echo esc_attr( Mode::VALUE_COMPLETE ); ?>"
81 <?php checked( $mode, Mode::VALUE_COMPLETE ); ?>
82 id="wcml_editor_save_mode_complete" />
83 <label for="wcml_editor_save_mode_complete">
84 <strong><?php esc_html_e( 'Always check all variations', 'woocommerce-multilingual' ); ?></strong><br/>
85 <span style="color:#3c434a;">
86 <?php esc_html_e( "On every save, WPML checks every variation in every language and syncs anything that's out of date.", 'woocommerce-multilingual' ); ?>
87 </span>
88 </label>
89 </li>
90 <li>
91 <input type="radio" name="<?php echo esc_attr( self::FIELD_SAVE_MODE ); ?>"
92 value="<?php echo esc_attr( Mode::VALUE_EDITOR_SCOPED ); ?>"
93 <?php checked( $mode, Mode::VALUE_EDITOR_SCOPED ); ?>
94 id="wcml_editor_save_mode_editor_scoped" />
95 <label for="wcml_editor_save_mode_editor_scoped">
96 <strong><?php esc_html_e( 'Only sync variations edited in the editor', 'woocommerce-multilingual' ); ?></strong><br/>
97 <span style="color:#3c434a;">
98 <?php esc_html_e( 'WPML syncs only the variations changed in this save. After each save, WPML shows what was synced and offers a one-click full sync.', 'woocommerce-multilingual' ); ?>
99 </span>
100 </label>
101 </li>
102 </ul>
103 </div>
104 </div>
105 <?php
106 }
107 }
108
109