<?php
namespace WCML\Multicurrency\Transient;
use WCML\MultiCurrency\Settings as McSettings;
use WPML\FP\Fns;
use WPML\FP\Str;
use WPML\LIB\WP\Hooks as WpHooks;
use function WCML\functions\getClientCurrency;
use function WPML\FP\spreadArgs;
class Hooks {
/**
* @param string $key
*/
public static function addHooks( $key ) {
$getKeyWithCurrency = Str::concat( $key . '_' );
$getKeyWithClientCurrency = function() use ( $getKeyWithCurrency ) {
return $getKeyWithCurrency( getClientCurrency() );
};
$getTransient = function() use ( $getKeyWithClientCurrency ) {
return get_transient( $getKeyWithClientCurrency() );
};
$setTransient = function( $value ) use ( $key, $getKeyWithClientCurrency ) {
delete_transient( $key );
return set_transient( $getKeyWithClientCurrency(), $value );
};
$deleteTransient = function() use ( $getKeyWithCurrency ) {
foreach ( McSettings::getActiveCurrencyCodes() as $code ) {
delete_transient( $getKeyWithCurrency( $code ) );
}
};
$withLock = Fns::withNamedLock( __CLASS__ . "_$key", Fns::identity() );
WpHooks::onFilter( 'pre_transient_' . $key )
->then( $getTransient );
WpHooks::onAction( 'set_transient_' . $key )
->then( spreadArgs( $withLock( $setTransient ) ) );
WpHooks::onAction( 'delete_transient_' . $key )
->then( $withLock( $deleteTransient ) );
}
}