Passed
Push — release-2.1 ( 59d839...229f76 )
by Mert
05:21
created

cache_api::getMinimumVersion()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 0
dl 0
loc 3
rs 10
c 0
b 0
f 0
1
<?php
2
3
/**
4
 * Simple Machines Forum (SMF)
5
 *
6
 * @package SMF
7
 * @author Simple Machines http://www.simplemachines.org
8
 * @copyright 2019 Simple Machines and individual contributors
9
 * @license http://www.simplemachines.org/about/smf/license.php BSD
10
 *
11
 * @version 2.1 RC2
12
 */
13
14
if (!defined('SMF'))
15
	die('Hacking attempt...');
16
17
/**
18
 * Interface cache_api_interface
19
 */
20
interface cache_api_interface
21
{
22
	/**
23
	 * Checks whether we can use the cache method performed by this API.
24
	 *
25
	 * @access public
26
	 * @param boolean $test Test if this is supported or enabled.
27
	 * @return boolean Whether or not the cache is supported
28
	 */
29
	public function isSupported($test = false);
30
31
	/**
32
	 * Connects to the cache method. This defines our $key. If this fails, we return false, otherwise we return true.
33
	 *
34
	 * @access public
35
	 * @return boolean Whether or not the cache method was connected to.
36
	 */
37
	public function connect();
38
39
	/**
40
	 * Overrides the default prefix. If left alone, this will use the default key defined in the class.
41
	 *
42
	 * @access public
43
	 * @param string $key The key to use
44
	 * @return boolean If this was successful or not.
45
	 */
46
	public function setPrefix($key = '');
47
48
	/**
49
	 * Gets the prefix as defined from set or the default.
50
	 *
51
	 * @access public
52
	 * @return string the value of $key.
53
	 */
54
	public function getPrefix();
55
56
	/**
57
	 * Sets a default Time To Live, if this isn't specified we let the class define it.
58
	 *
59
	 * @access public
60
	 * @param int $ttl The default TTL
61
	 * @return boolean If this was successful or not.
62
	 */
63
	public function setDefaultTTL($ttl = 120);
64
65
	/**
66
	 * Gets the TTL as defined from set or the default.
67
	 *
68
	 * @access public
69
	 * @return string the value of $ttl.
70
	 */
71
	public function getDefaultTTL();
72
73
	/**
74
	 * Gets data from the cache.
75
	 *
76
	 * @access public
77
	 * @param string $key The key to use, the prefix is applied to the key name.
78
	 * @param string $ttl Overrides the default TTL.
79
	 * @return mixed The result from the cache, if there is no data or it is invalid, we return null.
80
	 */
81
	public function getData($key, $ttl = null);
82
83
	/**
84
	 * Saves to data the cache.
85
	 *
86
	 * @access public
87
	 * @param string $key The key to use, the prefix is applied to the key name.
88
	 * @param mixed $value The data we wish to save.
89
	 * @param string $ttl Overrides the default TTL.
90
	 * @return bool Whether or not we could save this to the cache.
91
	 */
92
	public function putData($key, $value, $ttl = null);
93
94
	/**
95
	 * Clean out the cache.
96
	 *
97
	 * @param string $type If supported, the type of cache to clear, blank/data or user.
98
	 * @return bool Whether or not we could clean the cache.
99
	 */
100
	public function cleanCache($type = '');
101
102
	/**
103
	 * Invalidate all cached data.
104
	 *
105
	 * @return bool Whether or not we could invalidate the cache.
106
	 */
107
	public function invalidateCache();
108
109
	/**
110
	 * Closes connections to the cache method.
111
	 *
112
	 * @access public
113
	 * @return bool Whether or not we could close connections.
114
	 */
115
	public function quit();
116
117
	/**
118
	 * Specify custom settings that the cache API supports.
119
	 *
120
	 * @access public
121
	 * @param array $config_vars Additional config_vars, see ManageSettings.php for usage.
122
	 * @return void No return is needed.
123
	 */
124
	public function cacheSettings(array &$config_vars);
125
126
	/**
127
	 * Gets the latest version of SMF this is compatible with.
128
	 *
129
	 * @access public
130
	 * @return string the value of $key.
131
	 */
132
	public function getCompatibleVersion();
133
134
	/**
135
	 * Gets the min version that we support.
136
	 *
137
	 * @access public
138
	 * @return string the value of $key.
139
	 */
140
	public function getMinimumVersion();
141
142
	/**
143
	 * Gets the Version of the Caching API.
144
	 *
145
	 * @access public
146
	 * @return string the value of $key.
147
	 */
148
	public function getVersion();
149
150
	/**
151
	 * Run housekeeping of this cache
152
	 * exp. clean up old data or do optimization
153
	 *
154
	 * @access public
155
	 * @return void
156
	 */
157
	public function housekeeping();
158
}
159
160
/**
161
 * Class cache_api
162
 */
163
abstract class cache_api implements cache_api_interface
164
{
165
	/**
166
	 * @var string The maximum SMF version that this will work with.
167
	 */
168
	protected $version_compatible = '2.1.999';
169
170
	/**
171
	 * @var string The minimum SMF version that this will work with.
172
	 */
173
	protected $min_smf_version = '2.1 RC1';
174
175
	/**
176
	 * @var string The prefix for all keys.
177
	 */
178
	protected $prefix = '';
179
180
	/**
181
	 * @var int The default TTL.
182
	 */
183
	protected $ttl = 120;
184
185
	/**
186
	 * Does basic setup of a cache method when we create the object but before we call connect.
187
	 *
188
	 * @access public
189
	 */
190
	public function __construct()
191
	{
192
		$this->setPrefix('');
193
	}
194
195
	/**
196
	 * {@inheritDoc}
197
	 */
198
	public function isSupported($test = false)
199
	{
200
		global $cache_enable;
201
202
		if ($test)
203
			return true;
204
		return !empty($cache_enable);
205
	}
206
207
	/**
208
	 * {@inheritDoc}
209
	 */
210
	public function connect()
211
	{
212
	}
213
214
	/**
215
	 * {@inheritDoc}
216
	 */
217
	public function setPrefix($prefix = '')
218
	{
219
		global $boardurl, $cachedir;
220
221
		// Find a valid good file to do mtime checks on.
222
		if (file_exists($cachedir . '/' . 'index.php'))
223
			$filemtime = $cachedir . '/' . 'index.php';
224
		elseif (is_dir($cachedir . '/'))
225
			$filemtime = $cachedir . '/';
226
		else
227
			$filemtime = $boardurl . '/index.php';
228
229
		// Set the default if no prefix was specified.
230
		if (empty($prefix))
231
			$this->prefix = md5($boardurl . filemtime($filemtime)) . '-SMF-';
232
		else
233
			$this->prefix = $prefix;
234
235
		return true;
236
	}
237
238
	/**
239
	 * {@inheritDoc}
240
	 */
241
	public function getPrefix()
242
	{
243
		return $this->prefix;
244
	}
245
246
	/**
247
	 * {@inheritDoc}
248
	 */
249
	public function setDefaultTTL($ttl = 120)
250
	{
251
		$this->ttl = $ttl;
252
253
		return true;
254
	}
255
256
	/**
257
	 * {@inheritDoc}
258
	 */
259
	public function getDefaultTTL()
260
	{
261
		return $this->ttl;
262
	}
263
264
	/**
265
	 * {@inheritDoc}
266
	 */
267
	public function getData($key, $ttl = null)
268
	{
269
	}
270
271
	/**
272
	 * {@inheritDoc}
273
	 */
274
	public function putData($key, $value, $ttl = null)
275
	{
276
	}
277
278
	/**
279
	 * {@inheritDoc}
280
	 */
281
	public function cleanCache($type = '')
282
	{
283
	}
284
285
	/**
286
	 * Invalidate all cached data.
287
	 *
288
	 * @return bool Whether or not we could invalidate the cache.
289
	 */
290
	public function invalidateCache()
291
	{
292
		global $cachedir;
293
294
		// Invalidate cache, to be sure!
295
		// ... as long as index.php can be modified, anyway.
296
		if (is_writable($cachedir . '/' . 'index.php'))
297
			@touch($cachedir . '/' . 'index.php');
298
299
		return true;
300
	}
301
302
	/**
303
	 * {@inheritDoc}
304
	 */
305
	public function quit()
306
	{
307
	}
308
309
	/**
310
	 * {@inheritDoc}
311
	 */
312
	public function cacheSettings(array &$config_vars)
313
	{
314
	}
315
316
	/**
317
	 * {@inheritDoc}
318
	 */
319
	public function getCompatibleVersion()
320
	{
321
		return $this->version_compatible;
322
	}
323
324
	/**
325
	 * {@inheritDoc}
326
	 */
327
	public function getMinimumVersion()
328
	{
329
		return $this->min_smf_version;
330
	}
331
332
	/**
333
	 * {@inheritDoc}
334
	 */
335
	public function getVersion()
336
	{
337
		return $this->min_smf_version;
338
	}
339
340
	/**
341
	 * {@inheritDoc}
342
	 */
343
	public function housekeeping()
344
	{
345
	}
346
}
347
348
?>