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 / addons / wpml-dependencies / vendor / wpml / wp / classes / Cache.php
woocommerce-multilingual / addons / wpml-dependencies / vendor / wpml / wp / classes Last commit date
Attachment.php 1 month ago Cache.php 1 month ago Gutenberg.php 1 month ago Hooks.php 1 month ago Http.php 1 month ago Nonce.php 1 month ago Option.php 1 month ago Post.php 1 month ago PostType.php 1 month ago Resources.php 1 month ago Roles.php 4 years ago Transient.php 1 month ago Url.php 1 month ago User.php 1 month ago WP.php 1 month ago WPDB.php 1 month ago
Cache.php
95 lines
1 <?php
2
3 namespace WPML\LIB\WP;
4
5 use WPML\Collect\Support\Traits\Macroable;
6 use WPML\FP\Fns;
7 use WPML\FP\Just;
8 use WPML\FP\Maybe;
9 use WPML\FP\Nothing;
10 use function WPML\FP\curryN;
11
12 class Cache {
13
14 const KEYS = 'WPML_WP_Cache__group_keys';
15
16 use Macroable;
17
18 public static function init() {
19 self::macro( 'get', curryN( 2, [ self::class, 'getInternal' ] ) );
20
21 self::macro( 'set', curryN( 4, function ( $group, $key, $expire, $value ) {
22 $keys = self::getKeysInGroup( $group );
23 if ( ! in_array( $key, $keys, true ) ) {
24 $keys[] = $key;
25 \wp_cache_set( $group, [ 'data' => $keys ], self::KEYS );
26 }
27
28 return \wp_cache_set( $key, [ 'data' => $value ], $group, $expire );
29 } ) );
30
31 self::macro( 'memorizeWithCheck', curryN( 4, function ( $group, $checkingFn, $expire, $fn ) {
32 return function () use ( $fn, $group, $checkingFn, $expire ) {
33 $args = func_get_args();
34 $key = self::_buildKeyForFunctionArguments( $args );
35
36 $result = Cache::get( $group, $key );
37 if ( Fns::isNothing( $result ) || ! $checkingFn( $result->get() ) ) {
38 $result = call_user_func_array( $fn, $args );
39 Cache::set( $group, $key, $expire, $result );
40
41 return $result;
42 }
43
44 return $result->get();
45 };
46 } ) );
47
48 self::macro( 'memorize', self::memorizeWithCheck( Fns::__, Fns::always( true ), Fns::__, Fns::__ ) );
49
50 }
51
52 public static function getInternal( $group, $key ) {
53 $found = false;
54 $result = wp_cache_get( $key, $group, false, $found );
55
56 if ( $found && is_array( $result ) && array_key_exists( 'data', $result ) ) {
57 return Maybe::just( $result['data'] );
58 }
59
60 return Maybe::nothing();
61 }
62
63 public static function flushGroup( $group ) {
64 $keys = self::getKeysInGroup( $group );
65
66 foreach ( $keys as $key ) {
67 wp_cache_delete( $key, $group );
68 }
69
70 wp_cache_delete( $group, self::KEYS );
71 }
72
73 public static function clearMemoizedFunction( $group, ...$functionArgs ) {
74 self::delete( $group, self::_buildKeyForFunctionArguments( $functionArgs ) );
75 }
76
77 public static function delete( $group, $key ) {
78 wp_cache_delete( $key, $group );
79
80 $keys = self::getKeysInGroup( $group );
81 $keys = array_values( array_diff( $keys, [ $key ] ) );
82 wp_cache_set( $group, [ 'data' => $keys ], self::KEYS );
83 }
84
85 public static function getKeysInGroup( $group ) {
86 return self::getInternal( self::KEYS, $group )->getOrElse( [] );
87 }
88
89 public static function _buildKeyForFunctionArguments( array $args ) {
90 return serialize( $args );
91 }
92 }
93
94 Cache::init();
95