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 / Utilities / SyncHash.php
woocommerce-multilingual / classes / Utilities Last commit date
Suspend 2 years ago ActionScheduler.php 2 years ago AdminPages.php 8 months ago AdminUrl.php 8 months ago DB.php 4 years ago Post.php 5 years ago Resources.php 5 years ago SyncHash.php 8 months ago WCTaxonomies.php 1 year ago WcAdminPages.php 8 months ago WpAdminPages.php 1 year ago
SyncHash.php
123 lines
1 <?php
2
3 namespace WCML\Utilities;
4
5 use WPML\FP\Obj;
6
7 class SyncHash {
8
9 const META_KEY = 'wcml_sync_hash';
10 const HAS_CHANGES_FLAG = 'has_changes';
11 const GROUP_FIELDS = 'postmeta_fields';
12 const GROUP_TAXONOMIES = 'taxonomies';
13 const GROUP_DEFAULT_ATTRIBUTES = 'default_attributes';
14
15 const SOURCE_META = 'meta';
16 const SOURCE_EMPTY = 'empty';
17
18 /** @var array[] $hashes */
19 private $hashes = [];
20
21 /**
22 * @return string[]
23 */
24 private function getEmpty() {
25 return [
26 self::GROUP_FIELDS => '',
27 self::GROUP_TAXONOMIES => '',
28 self::GROUP_DEFAULT_ATTRIBUTES => '',
29 ];
30 }
31
32 /**
33 * @param mixed $hash
34 *
35 * @return array
36 */
37 private function validate( $hash ) {
38 if ( is_array( $hash ) ) {
39 return $hash;
40 }
41 return $this->getEmpty();
42 }
43
44 /**
45 * @param int $objectId
46 * @param string $source
47 * @param bool $setChanged
48 */
49 public function initialize( $objectId, $source, $setChanged = false ) {
50 switch ( $source ) {
51 case self::SOURCE_META:
52 $meta = get_post_meta( $objectId, self::META_KEY, true );
53 $this->hashes[ $objectId ] = empty( $meta ) ? $this->getEmpty() : $this->validate( maybe_unserialize( $meta ) );
54 $this->hashes[ $objectId ][ self::HAS_CHANGES_FLAG ] = $setChanged;
55 break;
56 case self::SOURCE_EMPTY:
57 $this->hashes[ $objectId ] = $this->getEmpty();
58 $this->hashes[ $objectId ][ self::HAS_CHANGES_FLAG ] = $setChanged;
59 break;
60 }
61 }
62
63 /**
64 * @param int $objectId
65 *
66 * @return array
67 */
68 private function getHash( $objectId ) {
69 return array_key_exists( $objectId, $this->hashes ) ? $this->validate( $this->hashes[ $objectId ] ) : $this->getEmpty();
70 }
71
72 /**
73 * @param int $objectId
74 * @param array $hash
75 */
76 private function setHash( $objectId, $hash ) {
77 $this->hashes[ $objectId ] = $hash;
78 }
79
80 /**
81 * @param int $objectId
82 * @param string $group
83 * @param string $hashValue
84 */
85 public function updateGroupValue( $objectId, $group, $hashValue ) {
86 if ( $this->isNewGroupValue( $objectId, $group, $hashValue ) ) {
87 $hash = $this->getHash( $objectId );
88 $hash[ $group ] = $hashValue;
89 $hash[ self::HAS_CHANGES_FLAG ] = true;
90 $this->setHash( $objectId, $hash );
91 }
92 }
93
94 /**
95 * @param int $objectId
96 * @param string $group
97 * @param string $hashValue
98 *
99 * @return bool
100 */
101 public function isNewGroupValue( $objectId, $group, $hashValue ) {
102 $hash = $this->getHash( $objectId );
103 return Obj::propOr( null, $group, $hash ) !== $hashValue;
104 }
105
106 /**
107 * @param int $objectId
108 * @param bool $clear
109 */
110 public function saveHash( $objectId, $clear = false ) {
111 $hash = $this->getHash( $objectId );
112 $hasChanges = (bool) Obj::propOr( null, self::HAS_CHANGES_FLAG, $hash );
113 if ( $hasChanges ) {
114 unset( $hash[ self::HAS_CHANGES_FLAG ] );
115 update_post_meta( $objectId, self::META_KEY, $hash );
116 }
117 if ( $clear ) {
118 unset( $this->hashes[ $objectId ] );
119 }
120 }
121
122 }
123