Completed
Push — release-2.1 ( 4bdd41...11eb43 )
by Mathias
07:36
created

cache_api::cleanCache()   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 1
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 2017 Simple Machines and individual contributors
9
 * @license http://www.simplemachines.org/about/smf/license.php BSD
10
 *
11
 * @version 2.1 Beta 4
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.
0 ignored issues
show
Documentation introduced by
Should the type for parameter $ttl not be string|null?

This check looks for @param annotations where the type inferred by our type inference engine differs from the declared type.

It makes a suggestion as to what type it considers more descriptive.

Most often this is a case of a parameter that can be null in addition to its declared types.

Loading history...
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.
0 ignored issues
show
Documentation introduced by
Should the type for parameter $ttl not be string|null?

This check looks for @param annotations where the type inferred by our type inference engine differs from the declared type.

It makes a suggestion as to what type it considers more descriptive.

Most often this is a case of a parameter that can be null in addition to its declared types.

Loading history...
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
	 * 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
/**
152
 * Class cache_api
153
 */
154
abstract class cache_api implements cache_api_interface
155
{
156
	/**
157
	 * @var string The last version of SMF that this was tested on. Helps protect against API changes.
158
	 */
159
	protected $version_compatible = 'SMF 2.1 Beta 4';
160
161
	/**
162
	 * @var string The minimum SMF version that this will work with
163
	 */
164
	protected $min_smf_version = 'SMF 2.1 Beta 4';
165
166
	/**
167
	 * @var string The prefix for all keys.
168
	 */
169
	protected $prefix = '';
170
171
	/**
172
	 * @var int The default TTL.
173
	 */
174
	protected $ttl = 120;
175
176
	/**
177
	 * Does basic setup of a cache method when we create the object but before we call connect.
178
	 *
179
	 * @access public
180
	 */
181
	public function __construct()
182
	{
183
		$this->setPrefix('');
184
	}
185
186
	/**
187
	 * {@inheritDoc}
188
	 */
189
	public function isSupported($test = false)
190
	{
191
		global $cache_enable;
0 ignored issues
show
Compatibility Best Practice introduced by
Use of global functionality is not recommended; it makes your code harder to test, and less reusable.

Instead of relying on global state, we recommend one of these alternatives:

1. Pass all data via parameters

function myFunction($a, $b) {
    // Do something
}

2. Create a class that maintains your state

class MyClass {
    private $a;
    private $b;

    public function __construct($a, $b) {
        $this->a = $a;
        $this->b = $b;
    }

    public function myFunction() {
        // Do something
    }
}
Loading history...
192
193
		if ($test)
194
			return true;
195
		return !empty($cache_enable);
196
	}
197
198
	/**
199
	 * {@inheritDoc}
200
	 */
201
	public function connect()
202
	{
203
	}
204
205
	/**
206
	 * {@inheritDoc}
207
	 */
208
	public function setPrefix($prefix = '')
209
	{
210
		global $boardurl, $cachedir;
0 ignored issues
show
Compatibility Best Practice introduced by
Use of global functionality is not recommended; it makes your code harder to test, and less reusable.

Instead of relying on global state, we recommend one of these alternatives:

1. Pass all data via parameters

function myFunction($a, $b) {
    // Do something
}

2. Create a class that maintains your state

class MyClass {
    private $a;
    private $b;

    public function __construct($a, $b) {
        $this->a = $a;
        $this->b = $b;
    }

    public function myFunction() {
        // Do something
    }
}
Loading history...
211
212
		// Find a valid good file to do mtime checks on.
213
		if (file_exists($cachedir . '/' . 'index.php'))
214
			$filemtime = $cachedir . '/' . 'index.php';
215
		elseif (is_dir($cachedir . '/'))
216
			$filemtime = $cachedir . '/';
217
		else
218
			$filemtime = $boardurl . '/index.php';
219
220
		// Set the default if no prefix was specified.
221
		if (empty($prefix))
222
			$this->prefix = md5($boardurl . filemtime($filemtime)) . '-SMF-';
223
		else
224
			$this->prefix = $prefix;
225
226
		return true;
227
	}
228
229
	/**
230
	 * {@inheritDoc}
231
	 */
232
	public function getPrefix()
233
	{
234
		return $this->prefix;
235
	}
236
237
	/**
238
	 * {@inheritDoc}
239
	 */
240
	public function setDefaultTTL($ttl = 120)
241
	{
242
		$this->ttl = $ttl;
243
244
		return true;
245
	}
246
247
	/**
248
	 * {@inheritDoc}
249
	 */
250
	public function getDefaultTTL()
251
	{
252
		return $this->ttl;
253
	}
254
255
	/**
256
	 * {@inheritDoc}
257
	 */
258
	public function getData($key, $ttl = null)
259
	{
260
	}
261
262
	/**
263
	 * {@inheritDoc}
264
	 */
265
	public function putData($key, $value, $ttl = null)
266
	{
267
	}
268
269
	/**
270
	 * {@inheritDoc}
271
	 */
272
	public function cleanCache($type = '')
273
	{
274
	}
275
276
	/**
277
	 * Invalidate all cached data.
278
	 *
279
	 * @return bool Whether or not we could invalidate the cache.
280
	 */
281
	public function invalidateCache()
282
	{
283
		global $cachedir;
0 ignored issues
show
Compatibility Best Practice introduced by
Use of global functionality is not recommended; it makes your code harder to test, and less reusable.

Instead of relying on global state, we recommend one of these alternatives:

1. Pass all data via parameters

function myFunction($a, $b) {
    // Do something
}

2. Create a class that maintains your state

class MyClass {
    private $a;
    private $b;

    public function __construct($a, $b) {
        $this->a = $a;
        $this->b = $b;
    }

    public function myFunction() {
        // Do something
    }
}
Loading history...
284
285
		// Invalidate cache, to be sure!
286
		// ... as long as index.php can be modified, anyway.
287
		if (is_writable($cachedir . '/' . 'index.php'))
288
			@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...
289
290
		return true;
291
	}
292
293
	/**
294
	 * {@inheritDoc}
295
	 */
296
	public function quit()
297
	{
298
	}
299
300
	/**
301
	 * {@inheritDoc}
302
	 */
303
	public function cacheSettings(array &$config_vars)
304
	{
305
	}
306
307
	/**
308
	 * {@inheritDoc}
309
	 */
310
	public function getCompatibleVersion()
311
	{
312
		return $this->version_compatible;
313
	}
314
315
	/**
316
	 * {@inheritDoc}
317
	 */
318
	public function getMiniumnVersion()
319
	{
320
		return $this->min_smf_version;
321
	}
322
323
	/**
324
	 * {@inheritDoc}
325
	 */
326
	public function getVersion()
327
	{
328
		return $this->min_smf_version;
329
	}
330
}
331
332
?>