summaryrefslogtreecommitdiff
path: root/lib/Minz/Cache.php
blob: fcb627eb24afba218969925c31ae416e31ead4f9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
<?php
/** 
 * MINZ - Copyright 2011 Marien Fressinaud
 * Sous licence AGPL3 <http://www.gnu.org/licenses/>
*/

/**
 * La classe Cache permet de gérer facilement les pages en cache
 */
class Minz_Cache {
	/**
	 * $expire timestamp auquel expire le cache de $url
	 */
	private $expire = 0;

	/**
	 * $file est le nom du fichier de cache
	 */
	private $file = '';

	/**
	 * $enabled permet de déterminer si le cache est activé
	 */
	private static $enabled = true;

	/**
	 * Constructeur
	 */
	public function __construct () {
		$this->_fileName ();
		$this->_expire ();
	}

	/**
	 * Setteurs
	 */
	public function _fileName () {
		$file = md5 (Minz_Request::getURI ());

		$this->file = CACHE_PATH . '/'.$file;
	}

	public function _expire () {
		if ($this->exist ()) {
			$this->expire = filemtime ($this->file)
			              + Minz_Configuration::delayCache ();
		}
	}

	/**
	 * Permet de savoir si le cache est activé
	 * @return true si activé, false sinon
	 */
	public static function isEnabled () {
		return Minz_Configuration::cacheEnabled () && self::$enabled;
	}

	/**
	 * Active / désactive le cache
	 */
	public static function switchOn () {
		self::$enabled = true;
	}
	public static function switchOff () {
		self::$enabled = false;
	}

	/**
	 * Détermine si le cache de $url a expiré ou non
	 * @return true si il a expiré, false sinon
	 */
	public function expired () {
		return time () > $this->expire;
	}

	/**
	 * Affiche le contenu du cache
	 * @print le code html du cache
	 */
	public function render () {
		if ($this->exist ()) {
			include ($this->file);
		}
	}

	/**
	 * Enregistre $html en cache
	 * @param $html le html à mettre en cache
	 */
	public function cache ($html) {
		file_put_contents ($this->file, $html);
	}

	/**
	 * Permet de savoir si le cache existe
	 * @return true si il existe, false sinon
	 */
	public function exist () {
		return file_exists ($this->file);
	}

	/**
	 * Nettoie le cache en supprimant tous les fichiers
	 */
	public static function clean () {
		$files = opendir (CACHE_PATH);

		while ($fic = readdir ($files)) {
			if ($fic != '.' && $fic != '..') {
				unlink (CACHE_PATH.'/'.$fic);
			}
		}

		closedir ($files);
	}
}