Completed
Push — master ( 4304d8...a737ee )
by Jean-Christophe
01:37
created

PhpFastCacheDriver::getCacheEntries()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 3
rs 10
cc 1
eloc 2
nc 1
nop 1
1
<?php
2
namespace micro\cache\system;
3
4
use micro\controllers\admin\popo\CacheFile;
5
use phpFastCache\CacheManager;
6
use phpFastCache\Core\Pool\ExtendedCacheItemPoolInterface;
7
8
/**
9
 * This class is responsible for storing values with PhpFastCache.
10
 */
11
class PhpFastCacheDriver extends AbstractDataCache{
12
	/**
13
	 * @var ExtendedCacheItemPoolInterface
14
	 */
15
	private $cacheInstance;
16
	/**
17
	 * Initializes the cache-provider
18
	 */
19
	public function __construct($root,$postfix="",$cacheType="Mongodb") {
20
		parent::__construct($root,$postfix);
21
		$this->cacheInstance = CacheManager::getInstance($cacheType,["itemDetailedDate"=>true,'host' => '127.0.0.1',
22
  'port' => '27017',
23
  'username' => '',
24
  'password' => '',
25
  'timeout' => '1']);
26
	}
27
28
	/**
29
	 * Check if annotation-data for the key has been stored.
30
	 * @param string $key cache key
31
	 * @return boolean true if data with the given key has been stored; otherwise false
32
	 */
33
	public function exists($key) {
34
		return $this->cacheInstance->hasItem($this->getRealKey($key));
35
	}
36
37
	public function store($key, $code,$tag=null, $php=true) {
38
		$this->storeContent($key, $code,$tag);
39
	}
40
41
	/**
42
	 * Caches the given data with the given key.
43
	 * @param string $key cache key
44
	 * @param string $content the source-code to be cached
45
	 * @param string $tag
46
	 */
47
	protected function storeContent($key,$content,$tag) {
48
		$key=$this->getRealKey($key);
49
		$item=$this->cacheInstance->getItem($key);
50
		$item->set($content);
51
		$item->addTag($tag);
52
		$this->cacheInstance->save($item);
53
	}
54
55
	protected function getRealKey($key){
56
		$key=\str_replace("/", "-", $key);
57
		return \str_replace("\\", "-", $key);
58
	}
59
60
	/**
61
	 * Fetches data stored for the given key.
62
	 * @param string $key cache key
63
	 * @return mixed the cached data
64
	 */
65
	public function fetch($key) {
66
		$result=$this->cacheInstance->getItem($this->getRealKey($key))->get();
67
		return eval($result);
1 ignored issue
show
Coding Style introduced by
It is generally not recommended to use eval unless absolutely required.

On one hand, eval might be exploited by malicious users if they somehow manage to inject dynamic content. On the other hand, with the emergence of faster PHP runtimes like the HHVM, eval prevents some optimization that they perform.

Loading history...
68
	}
69
70
	/**
71
	 * return data stored for the given key.
72
	 * @param string $key cache key
73
	 * @return mixed the cached data
74
	 */
75
	public function file_get_contents($key) {
76
		return $this->cacheInstance->getItem($this->getRealKey($key))->get();
77
	}
78
79
	/**
80
	 * Returns the timestamp of the last cache update for the given key.
81
	 *
82
	 * @param string $key cache key
83
	 * @return int unix timestamp
84
	 */
85
	public function getTimestamp($key) {
86
		$key=$this->getRealKey($key);
87
		return $this->cacheInstance->getItem($key)->getCreationDate()->getTimestamp();
88
	}
89
90
	public function remove($key) {
91
		$key=$this->getRealKey($key);
92
		$this->cacheInstance->deleteItem($this->getRealKey($key));
93
	}
94
95
	public function clear() {
96
		$this->cacheInstance->clear();
97
	}
98
99
	protected function getCacheEntries($type){
100
		return $this->cacheInstance->getItemsByTag($type);
101
	}
102
103
	public function getCacheFiles($type){
104
		$result=[];
105
		$entries=$this->getCacheEntries($type);
106
107
		foreach ($entries as $entry) {
108
			$key=$entry->getKey();
109
			$result[]=new CacheFile(\ucfirst($type),$key,$entry->getCreationDate()->getTimestamp(),"",$key);
110
		}
111 View Code Duplication
		if(\sizeof($result)===0)
1 ignored issue
show
Duplication introduced by
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
112
			$result[]=new CacheFile(\ucfirst($type),"","","");
113
		return $result;
114
	}
115
116
	public function clearCache($type){
117
		$this->cacheInstance->deleteItemsByTag($type);
118
	}
119
}
120