Passed
Push — master ( acb42d...3c39f1 )
by Anthony
03:03
created

Cache::setEnd()   A

Complexity

Conditions 4
Paths 3

Size

Total Lines 11
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 11
rs 9.2
cc 4
eloc 6
nc 3
nop 0
1
<?php
2
	namespace core;
3
	use core\functions\ChaineCaractere;
4
5
	class Cache {
6
		private $dossier_cache; //dossier ou sont stockés tous les caches
7
8
		private $chemin_page; //chemin vers la page a mettre ou aller chercher en cache
9
		private $page; //nom de la page a chercher ou a mettre en cache
10
		private $chemin_cache; //chemin du fichier dans le dossier cache
11
		private $no_cache; //definit dans get cache pour dire que cette page ne doit jamais etre en cache
12
13
		private $cache_active; //si == 1 le cache est actif sur le site
14
15
		private $reload_cache; //si == 1 cela veut dire que l'on doit recharger le cache de la page
16
17
18
19
		//-------------------------- CONSTRUCTEUR ----------------------------------------------------------------------------//
20
		public function __construct($page, $admin = null) {
21
			$config = new Configuration();
22
			$this->cache_active = 0;
23
			$this->dossier_cache = ROOT."cache/app/";
24
25
			//on test si le cache est bien active
26
			if ($config->getCache() == 1) {
27
				$this->cache_active = 1;
28
				$this->setCreerDossier();
29
			}
30
31
			if ($admin != null) {
32
				$this->dossier_cache = ROOT."cache/admin/";
33
			}
34
35
			$page = ChaineCaractere::setUrl($page);
36
			$page = str_replace("/", "-", $page);
37
38
			$this->page = $page.".php";
39
			$this->chemin_cache = $this->dossier_cache.$this->page;
40
			$this->chemin_page = $page.".php";
41
		}
42
		//-------------------------- FIN CONSTRUCTEUR ----------------------------------------------------------------------------//
43
		
44
		
45
		
46
		//-------------------------- GETTER ----------------------------------------------------------------------------//
47
		/**
48
		 * fonction qui test si on a besoin de racharger le cache d'une page
49
		 * et si la page a le droit d'etre mise en cache
50
		 */
51
		private function getTestCache() {
52
			$dbc = App::getDb();
53
54
			//on regarde si il existe et un cache et si il faut ou non le remettre à jour
55
			$query = $dbc->query("SELECT * FROM cache WHERE nom_fichier like '$this->page'");
56
57
			if ((is_array($query)) && (count($query) > 0)) {
58
				$this->reload_cache = 0;
59
				foreach ($query as $obj) {
60
					$this->reload_cache = $obj->reload_cache;
61
					$this->no_cache = $obj->no_cache;
62
				}
63
			}
64
			else {
65
				$value = [
66
						"nom_fichier" => $this->page,
67
						"reload_cache" => 0
68
				];
69
				$dbc->prepare("INSERT INTO cache (nom_fichier, reload_cache) VALUES (:nom_fichier, :reload_cache)", $value);
70
71
				$this->reload_cache = 0;
72
			}
73
		}
74
75
		/**
76
		 * @return boolean|null
77
		 * fonction verifie en bdd si on a déjà enregistrer le fichier en cache
78
		 * si il ne l'est pas on le met, et si il y est et que reload cache == 0 on prend le fichier qui est en cache
79
		 * sinon soit on update la bdd et on refait un cache soit on crée tout
80
		 */
81
		private function getCache() {
82
			$this->getTestCache();
83
84
			if ((file_exists($this->chemin_cache)) && ($this->reload_cache == 0) && ($this->no_cache == null)) {
85
				return true;
86
			}
87
		}
88
		//-------------------------- FIN GETTER ----------------------------------------------------------------------------//
89
		
90
		
91
		
92
		//-------------------------- SETTER ----------------------------------------------------------------------------//
93
		private function setCreerDossier() {
94
			//on crée les dossier du cache si ils n'existent pas deja
95
			if (!file_exists(ROOT."cache")) {
96
				mkdir(ROOT."cache");
97
				mkdir(ROOT."cache/admin");
98
				mkdir(ROOT."cache/app");
99
			}
100
		}
101
102
		/**
103
		 * @return bool
104
		 * fonction qui permet de démarrer l'affichage de la page
105
		 * soit en allant la chercher dans le cache
106
		 * sinon on lance un ob_start
107
		 */
108
		public function setStart() {
109
			if ($this->cache_active == 1) {
110
				if ($this->getCache() == true) {
111
					require_once($this->chemin_cache);
112
113
					return true;
114
				}
115
				else {
116
					if ($this->no_cache == null) {
117
						ob_start();
118
					}
119
120
					return false;
121
				}
122
			}
123
			else {
124
				return false;
125
			}
126
		}
127
128
		/**
129
		 * fonction qui fini de récupérer le contenu et qui le met en cache
130
		 * une fois mis en cache on affiche la page
131
		 */
132
		public function setEnd() {
133
			if ($this->cache_active == 1) {
134
				if (($this->getCache() != true) && ($this->no_cache == null)) {
135
					$contenu = ob_get_clean();
136
137
					$this->setCache($contenu);
138
139
					echo $contenu;
140
				}
141
			}
142
		}
143
144
		/**
145
		 * @param string $contenu_fichier
146
		 * fonction qui met en cache le contenu du fichier enregistrer dans le ob
147
		 */
148
		private function setCache($contenu_fichier) {
149
			$dbc = App::getDb();
150
151
			$fichier_cache = $this->chemin_cache;
152
153
			file_put_contents($fichier_cache, $contenu_fichier);
154
155
			$value = [
156
				"nom_fichier" => $this->page,
157
			];
158
159
			$dbc->prepare("UPDATE cache SET reload_cache=0 WHERE nom_fichier=:nom_fichier", $value);
160
		}
161
162
		/**
163
		 * @param $nom_fichier
164
		 * fonction qui permet de dire qu'il faut recharger le cache d'un fichier spécifique
165
		 * appeler par des controller (dans des modules ou dans l'admin...)
166
		 */
167
		public static function setReloadCache($nom_fichier) {
168
			$dbc = App::getDb();
169
170
			$nom_fichier = ChaineCaractere::setUrl($nom_fichier);
171
			$nom_fichier = str_replace("/", "-", $nom_fichier);
172
173
			$value = [
174
				"reload" => 1,
175
				"nom_fichier" => $nom_fichier
176
			];
177
178
			$dbc->prepare("UPDATE cache SET reload_cache=:reload WHERE nom_fichier LIKE :nom_fichier", $value);
179
		}
180
		//-------------------------- FIN SETTER ----------------------------------------------------------------------------//
181
	}