Completed
Branch release-2.1 (e49a83)
by Mert
04:10
created

cache_api::setDefaultTTL()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 3
nc 1
nop 1
dl 0
loc 6
rs 9.4285
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 2016 Simple Machines and individual contributors
9
 * @license http://www.simplemachines.org/about/smf/license.php BSD
10
 *
11
 * @version 2.1 Beta 3
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 getMiniumnVersion();
141
}
142
143
/**
144
 * Class cache_api
145
 */
146
abstract class cache_api implements cache_api_interface
147
{
148
	/**
149
	 * @var string The last version of SMF that this was tested on. Helps protect against API changes.
150
	 */
151
	protected $version_compatible = 'SMF 2.1 Beta 3';
152
153
	/**
154
	 * @var string The minimum SMF version that this will work with
155
	 */
156
	protected $min_smf_version = 'SMF 2.1 Beta 3';
157
158
	/**
159
	 * @var string The prefix for all keys.
160
	 */
161
	protected $prefix = '';
162
163
	/**
164
	 * @var string The default TTL.
165
	 */
166
	protected $ttl = 120;
167
168
	/**
169
	 * Does basic setup of a cache method when we create the object but before we call connect.
170
	 *
171
	 * @access public
172
	 * @return void No return is needed.
0 ignored issues
show
Comprehensibility Best Practice introduced by
Adding a @return annotation to constructors is generally not recommended as a constructor does not have a meaningful return value.

Adding a @return annotation to a constructor is not recommended, since a constructor does not have a meaningful return value.

Please refer to the PHP core documentation on constructors.

Loading history...
173
	 */
174
	public function __construct()
175
	{
176
		global $boardurl, $cachedir;
177
178
		// Set our default prefix. setPrefix can still change this.
179
		$this->setPrefix('');
180
	}
181
182
	/**
183
	 * {@inheritDoc}
184
	 */
185
	public function isSupported($test = false)
186
	{
187
		global $cache_enable;
188
189
		if ($test)
190
			return true;
191
		return !empty($cache_enable);
192
	}
193
194
	/**
195
	 * {@inheritDoc}
196
	 */
197
	public function connect()
198
	{
199
	}
200
201
	/**
202
	 * {@inheritDoc}
203
	 */
204
	public function setPrefix($prefix = '')
205
	{
206
		global $boardurl, $cachedir;
207
208
		// Set the default if no prefix was specified.
209
		if (empty($prefix))
210
			$this->prefix = md5($boardurl . filemtime($cachedir . '/' . 'index.php')) . '-SMF-';
211
		else
212
			$this->prefix = $prefix;
213
214
		return true;
215
	}
216
217
	/**
218
	 * {@inheritDoc}
219
	 */
220
	public function getPrefix()
221
	{
222
		return $this->prefix;
223
	}
224
225
	/**
226
	 * {@inheritDoc}
227
	 */
228
	public function setDefaultTTL($ttl = 120)
229
	{
230
		$this->ttl = $ttl;
0 ignored issues
show
Documentation Bug introduced by
The property $ttl was declared of type string, but $ttl is of type integer. Maybe add a type cast?

This check looks for assignments to scalar types that may be of the wrong type.

To ensure the code behaves as expected, it may be a good idea to add an explicit type cast.

$answer = 42;

$correct = false;

$correct = (bool) $answer;
Loading history...
231
232
		return true;
233
	}
234
235
	/**
236
	 * {@inheritDoc}
237
	 */
238
	public function getDefaultTTL()
239
	{
240
		return $this->ttl;
241
	}
242
243
	/**
244
	 * {@inheritDoc}
245
	 */
246
	public function getData($key, $ttl = null)
247
	{
248
	}
249
250
	/**
251
	 * {@inheritDoc}
252
	 */
253
	public function putData($key, $value, $ttl = null)
254
	{
255
	}
256
257
	/**
258
	 * {@inheritDoc}
259
	 */
260
	public function cleanCache($type = '')
261
	{
262
	}
263
264
	/**
265
	 * Invalidate all cached data.
266
	 *
267
	 * @return bool Whether or not we could invalidate the cache.
268
	 */
269
	public function invalidateCache()
270
	{
271
		global $cachedir;
272
273
		// Invalidate cache, to be sure!
274
		// ... as long as index.php can be modified, anyway.
275
		if (is_writable($cachedir . '/' . 'index.php'))
276
			@touch($cachedir . '/' . 'index.php');
0 ignored issues
show
Security Best Practice introduced by
It seems like you do not handle an error condition here. This can introduce security issues, and is generally not recommended.

If you suppress an error, we recommend checking for the error condition explicitly:

// For example instead of
@mkdir($dir);

// Better use
if (@mkdir($dir) === false) {
    throw new \RuntimeException('The directory '.$dir.' could not be created.');
}
Loading history...
277
278
		return true;
279
	}
280
281
	/**
282
	 * {@inheritDoc}
283
	 */
284
	public function quit()
285
	{
286
	}
287
288
	/**
289
	 * {@inheritDoc}
290
	 */
291
	public function cacheSettings(array &$config_vars)
292
	{
293
	}
294
295
	/**
296
	 * {@inheritDoc}
297
	 */
298
	public function getCompatibleVersion()
299
	{
300
		return $this->version_compatible;
301
	}
302
303
	/**
304
	 * {@inheritDoc}
305
	 */
306
	public function getMiniumnVersion()
307
	{
308
		return $this->min_smf_version;
309
	}
310
}