PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 1.2.1
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v1.2.1
4.4.2 4.4.1 4.4.0 4.3.3 4.3.2 4.3.1 4.3.0 4.2.3 4.2.2 4.2.1 1.0.3 1.0.4 1.0.5 1.0.6 1.1.0 1.1.1 1.1.10 1.1.11 1.1.12 1.1.13 1.1.14 1.1.15 1.1.16 1.1.17 1.1.18 1.1.19 1.1.2 1.1.3 1.1.4 1.1.5 1.1.6 1.1.7 1.1.8 1.1.9 1.10.0 1.10.1 1.10.2 1.10.3 1.10.4 1.11.0 1.11.1 1.11.2 1.2.0 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.4.0 1.4.1 1.4.2 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.7.0 1.7.1 1.7.2 1.8.0 1.8.1 1.8.2 1.8.3 1.8.4 1.8.5 1.9.0 1.9.1 1.9.2 1.9.3 1.9.4 1.9.5 2.0.0 2.0.1 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.10.0 2.10.1 2.11.0 2.11.1 2.11.2 2.11.3 2.11.4 2.12.0 2.13.0 2.14.0 2.14.1 2.15.0 2.15.1 2.16.0 2.16.1 2.16.2 2.16.3 2.17.0 2.17.1 2.17.2 2.18.0 2.19.0 2.19.2 2.19.3 2.19.4 2.2.0 2.2.1 2.20.0 2.20.1 2.20.2 2.20.3 2.20.4 2.20.5 2.20.6 2.21.0 2.22.0 2.22.1 2.23.0 2.24.0 2.25.0 2.25.1 2.25.2 2.26.0 2.27.0 2.27.1 2.28.0 2.29.0 2.29.1 2.29.2 2.29.3 2.29.4 2.3.0 2.3.1 2.30.0 2.31.0 2.31.1 2.31.2 2.31.3 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.40.0 2.40.1 2.5.0 2.5.1 2.5.2 2.6.0 2.6.1 2.6.2 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.8.2 2.8.3 2.8.4 2.9.0 3.0.0 3.0.0-RC1 3.0.0-RC2 3.0.0-beta1 3.0.0-beta2 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.1.0 3.1.1 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.10.0 3.10.1 3.11.0 3.12.0 3.13.0 3.13.1 3.13.2 3.13.3 3.13.4 3.14.0 3.15.0 3.15.1 3.15.2 3.15.3 3.15.4 3.15.5 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.16.6 3.16.7 3.16.8 3.17.0 3.17.1 3.17.2 3.17.3 3.17.4 3.17.5 3.17.6 3.18.0 3.19.0 3.19.1 3.19.2 3.2.0 3.2.1 3.2.2 3.20.0 3.20.1 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.4.3 3.5.0 3.5.1 3.5.2 3.5.3 3.6.0 3.6.1 3.6.2 3.7.0 3.7.1 3.7.2 3.7.3 3.8.0 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5 3.9.0 4.0.0 4.0.1 4.0.2 4.0.3 trunk 4.1.0 0.2.19.1 4.1.1 1.0.0 4.2.0 1.0.1 1.0.2
surecart / app / src / Request / RequestCacheService.php
surecart / app / src / Request Last commit date
RequestCacheService.php 3 years ago RequestService.php 3 years ago RequestServiceProvider.php 3 years ago
RequestCacheService.php
173 lines
1 <?php
2 namespace SureCart\Request;
3
4 /**
5 * Request caching service.
6 */
7 class RequestCacheService {
8 /**
9 * Has this been cached yet for the request?
10 *
11 * @var boolean
12 */
13 protected static $cached = false;
14
15 /**
16 * The endpoint for the request
17 *
18 * @var string
19 */
20 protected $endpoint = '';
21
22 /**
23 * The args for the request
24 *
25 * @var array
26 */
27 protected $args = [];
28
29 /**
30 * The cache key on the account.
31 *
32 * @var string
33 */
34 protected $account_cache_key = '';
35
36 /**
37 * Needs an endpoint and args
38 *
39 * @param string $endpoint The endpoint for the request.
40 * @param array $args The args for the request.
41 * @param string $account_cache_key The key on the account model to check for cache.
42 */
43 public function __construct( $endpoint, $args, $account_cache_key ) {
44 $this->endpoint = $endpoint;
45 $this->args = $args;
46 $this->account_cache_key = $account_cache_key;
47 }
48
49 /**
50 * Can we use transient caching.
51 *
52 * @return boolean
53 */
54 public function canUseTransient() {
55 $expand = $this->args['query']['expand'] ?? [];
56 // if any expand has nested expansion, do not cache.
57 foreach ( $expand as $item ) {
58 if ( strpos( '.', $item ) !== false ) {
59 return false;
60 }
61 }
62 return true;
63
64 }
65
66 /**
67 * Get the object cache key.
68 *
69 * @return string
70 */
71 public function getObjectCacheKey() {
72 return $this->endpoint . wp_json_encode( $this->args );
73 }
74
75 /**
76 * Get the transient cache key.
77 *
78 * @return string
79 */
80 public function getTransientCacheKey() {
81 $timestamp = \SureCart::account()->{$this->account_cache_key} ?? 0;
82 if ( ! $timestamp ) {
83 return false;
84 }
85
86 return $this->endpoint . wp_json_encode( $this->args ) . $timestamp;
87 }
88
89 /**
90 * Set the cache.
91 *
92 * @param mixed $data Data to set.
93 * @param string $type The type of cache to set.
94 *
95 * @return boolean
96 */
97 public function setCache( $data, $type ) {
98 switch ( $type ) {
99 case 'object':
100 return $this->setObjectCache( $data );
101 case 'transient':
102 return $this->setTransientCache( $data );
103 }
104 return false;
105 }
106
107 /**
108 * Set the object cache.
109 *
110 * @param mixed $data Data to set.
111 *
112 * @return boolean
113 */
114 public function setObjectCache( $data ) {
115 $object_cache_key = $this->getObjectCacheKey();
116 // set in object cache.
117 if ( $object_cache_key ) {
118 return wp_cache_set( $object_cache_key, $data );
119 }
120 return false;
121 }
122
123 /**
124 * Get request from object cache.
125 *
126 * @return mixed
127 */
128 public function getObjectCache() {
129 // we cache this so we can request it several times.
130 $object_cache_key = $this->getObjectCacheKey();
131
132 // flush the cache on the first request to clear any redis caching.
133 if ( ! self::$cached ) {
134 wp_cache_flush();
135 self::$cached = true;
136 }
137
138 // already made the request this cycle.
139 return wp_cache_get( $object_cache_key );
140 }
141
142 /**
143 * Set the transient cache.
144 *
145 * @param mixed $data Data to set.
146 *
147 * @return boolean
148 */
149 public function setTransientCache( $data ) {
150 if ( ! $this->canUseTransient() ) {
151 return false;
152 }
153
154 $transient_cache_key = $this->getTransientCacheKey();
155 if ( $transient_cache_key ) {
156 return set_transient( $transient_cache_key, $data, 60 * MINUTE_IN_SECONDS );
157 }
158 return false;
159 }
160
161 /**
162 * Get the transient cache.
163 *
164 * @return mixed
165 */
166 public function getTransientCache() {
167 if ( ! $this->canUseTransient() ) {
168 return false;
169 }
170 return get_transient( $this->getTransientCacheKey() );
171 }
172 }
173