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
Option.php
61 lines
| 1 | <?php |
| 2 | |
| 3 | namespace WPML\LIB\WP; |
| 4 | |
| 5 | use WPML\Collect\Support\Traits\Macroable; |
| 6 | use function WPML\FP\curryN; |
| 7 | use function WPML\FP\partialRight; |
| 8 | |
| 9 | class Option { |
| 10 | use Macroable; |
| 11 | |
| 12 | public static function init() { |
| 13 | self::macro( 'get', curryN( 1, 'get_option' ) ); |
| 14 | self::macro( 'getOr', curryN( 2, 'get_option' ) ); |
| 15 | |
| 16 | self::macro( 'update', curryN( 2, 'update_option' ) ); |
| 17 | self::macro( 'updateWithoutAutoLoad', curryN( 2, partialRight( 'update_option', false ) ) ); |
| 18 | |
| 19 | self::macro( 'delete', curryN( 1, 'delete_option' ) ); |
| 20 | |
| 21 | self::macro( 'getRaw', curryN( 1, function( $name ) { |
| 22 | global $wpdb; |
| 23 | $p = $wpdb->prepare( "SELECT option_value FROM {$wpdb->options} WHERE option_name = %s", $name ); |
| 24 | return $wpdb->get_var( $p ) ?: null; |
| 25 | } ) ); |
| 26 | |
| 27 | self::macro( 'attemptSerializedRecovery', curryN( 1, function( $name, $default ) { |
| 28 | $value = $default; |
| 29 | $dbValue = self::getRaw( $name ); |
| 30 | if ( $dbValue && is_serialized( $dbValue ) ) { |
| 31 | $dbValueRecoveringStringIntegrityChecks = preg_replace_callback( |
| 32 | '/(?<=^|\{|;)s:(\d+):[\"|\'](.*?)[\"|\'];(?=[asbdiO]\:\d|N;|\}|$)/s', |
| 33 | function($m){ |
| 34 | return 's:' . strlen($m[2]) . ':"' . $m[2] . '";'; |
| 35 | }, |
| 36 | $dbValue |
| 37 | ); |
| 38 | $restoredValue = maybe_unserialize( $dbValueRecoveringStringIntegrityChecks ); |
| 39 | if ( ( !is_string($restoredValue) || $dbValueRecoveringStringIntegrityChecks != $restoredValue ) && $restoredValue !== false ) { |
| 40 | $value = $restoredValue; |
| 41 | } |
| 42 | self::update( $name, $value ); |
| 43 | } |
| 44 | return $value; |
| 45 | } ) ); |
| 46 | } |
| 47 | |
| 48 | public static function getOrAttemptRecovery( $name = null, $default = null ) { |
| 49 | return call_user_func_array( curryN( 2, |
| 50 | function( $name, $default ) { |
| 51 | $value = self::get( $name ); |
| 52 | if ( $value === false ) { |
| 53 | return self::attemptSerializedRecovery($name, $default); |
| 54 | } |
| 55 | return $value; |
| 56 | }), func_get_args() ); |
| 57 | } |
| 58 | } |
| 59 | |
| 60 | Option::init(); |
| 61 |