Passed
Push — master ( 909871...5777a6 )
by Anthony
03:14
created

ImportModule::supprimerDossier()   B

Complexity

Conditions 6
Paths 5

Size

Total Lines 12
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
c 2
b 0
f 0
dl 0
loc 12
rs 8.8571
cc 6
eloc 8
nc 5
nop 1
1
<?php
2
	namespace core\modules;
3
4
	use core\App;
5
	use core\HTML\flashmessage\FlashMessage;
6
7
	class ImportModule {
8
		private $nom_dossier;
9
		private $nom_fichier;
10
		private $extension;
11
		private $erreur;
12
13
		//pour les infos du module
14
		private $id_module;
15
		private $url_telechargement;
16
		private $version_ok;
17
		private $dossier_module;
18
		private $url_module;
19
20
		
21
		//-------------------------- CONSTRUCTEUR ----------------------------------------------------------------------------//
22
		public function __construct() {
23
			//On test si dossier temporaire + modules a la racines existes bien sinon on les crées
24
			if (!file_exists(ROOT."temp")) mkdir(ROOT."temp");
25
			if (!file_exists(ROOT."modules")) mkdir(ROOT."modules");
26
		}
27
		//-------------------------- FIN CONSTRUCTEUR ----------------------------------------------------------------------------//
28
		
29
		
30
		//-------------------------- GETTER ----------------------------------------------------------------------------//
31
		/**
32
		 * @param $id_module
33
		 * permets de récupérer des informations sur un module
34
		 */
35
		private function getInfoModule($id_module) {
36
			$dbc = App::getDb();
37
38
			$query = $dbc->select()->from("module")->where("ID_module", "=", $id_module)->get();
39
40
			if ((is_array($query)) && (count($query) > 0)) {
41
				foreach ($query as $obj) {
42
					$this->id_module = $obj->ID_module;
43
					$this->url_telechargement = $obj->url_telechargement;
44
					$this->version_ok = $obj->online_version;
45
					$this->dossier_module = str_replace("/", "", $obj->url);
46
					$this->url_module = $obj->url;
47
				}
48
			}
49
		}
50
		//-------------------------- FIN GETTER ----------------------------------------------------------------------------//
51
52
53
		//-------------------------- SETTER ----------------------------------------------------------------------------//
54
		private function setInstallModule($url_module) {
55
			$zip = new \ZipArchive();
56
57
			if (($this->extension == "zip") &&
58
				(file_exists(MODULEROOT.$this->nom_dossier) == false) &&
59
				(file_put_contents(TEMPROOT.$this->nom_fichier, fopen($url_module, 'r')) != false) &&
0 ignored issues
show
Bug Best Practice introduced by
It seems like you are loosely comparing file_put_contents(TEMPRO...open($url_module, 'r')) of type integer to the boolean false. If you are specifically checking for non-zero, consider using something more explicit like > 0 or !== 0 instead.
Loading history...
60
				($zip->open(TEMPROOT.$this->nom_fichier) == true) &&
61
				($zip->extractTo(TEMPROOT) == true) &&
62
				(rename(TEMPROOT.$this->nom_dossier, MODULEROOT.$this->nom_dossier) == true)) {
63
64
				$zip->close();
65
				return true;
66
			}
67
68
			return false;
69
		}
70
		/**
71
		 * @param $url_module
72
		 * @param boolean $update
73
		 * fonction qui permets d'importer un module dans notre site internet
74
		 */
75
		public function setImportModule($url_module, $update = null) {
76
			$dbc = App::getDb();
77
78
			//avant tout on récupère le nom du fichier pour le mettre dans le dossier temporaire
79
			$explode = explode("/", $url_module);
80
			$this->nom_fichier = end($explode);
81
82
			//on recupere le nom du dossier + extention
83
			$explode = explode(".", $this->nom_fichier);
84
			$this->nom_dossier = $explode[0];
85
			$this->extension = $explode[1];
86
87
			if ($this->setInstallModule($url_module) == true) {
88
				$this->setSupprimerArchiveTemp();
89
90
				//si c'est une install et non une mise à jour
91
				if ($update == null) {
92
					$requete = "";
93
					require_once(MODULEROOT.$this->nom_dossier."/install.php");
94
					$dbc->query($requete);
95
				}
96
97
				FlashMessage::setFlash("Votre module a bien été ajouté au site.", "success");
98
			}
99
			else {
100
				FlashMessage::setFlash("Le module n'a pas pu être correctement téléchargé et installé, veuillez réesseyer dans un instant");
101
			}
102
		}
103
104
		/**
105
		 * @param $id_module
106
		 * permet de mettre à jour un module en gardant une copie de l'ancienne version pendant une semaine
107
		 */
108
		Public function setUpdateModule($id_module) {
109
			$dbc = App::getDb();
110
111
			$this->getInfoModule($id_module);
112
113
			//on rename le dossier actuel du module
114
			if (rename(MODULEROOT.$this->dossier_module, MODULEROOT.$this->dossier_module."_OLDVERSION")) {
115
				$this->setImportModule($this->url_telechargement, true);
116
117
				//si pas d'erreur on met la date de next check a la semaine pro ++ on dit
118
				//de delete l'ancienne version au next check
119
				if (($this->erreur !== true) || (!isset($this->erreur))) {
120
					$today = date("Y-m-d");
121
					$today = new \DateTime($today);
122
123
					$dbc->update("next_check_version", $today->add(new \DateInterval("P1W"))->format("Y-m-d"))
124
						->update("version", $this->version_ok)
125
						->update("online_version", "")
126
						->update("mettre_jour", "")
127
						->update("delete_old_version", "1")
128
						->from("module")
129
						->where("ID_module", "=", $id_module)
130
						->set();
131
132
					FlashMessage::setFlash("Votre module a bien été mis à jour", "success");
133
				}
134
			}
135
			else {
136
				FlashMessage::setFlash("Impossible de télécharger la mise à jour, veuillez réesseyer dans un instant");
137
			}
138
		}
139
140
		/**
141
		 * @return bool
142
		 * fonction qui après l'installation d'un module supprime les fichier temporaires
143
		 */
144
		private function setSupprimerArchiveTemp() {
145
			if (unlink(TEMPROOT.$this->nom_fichier) == true) {
146
				return true;
147
			}
148
			else {
149
				return false;
150
			}
151
		}
152
153
		/**
154
		 * @param $id_module
155
		 * fonction qui permet de supprimer un module (suppression des tables + appel fonction supprimer dossier)
156
		 */
157
		public function setSupprimerModule($id_module) {
158
			$dbc = App::getDb();
159
			$this->getInfoModule($id_module);
160
161
			$dbc->delete()->from("module")->where("ID_module", "=", $id_module)->del();
162
163
			$requete = "";
164
			require_once(MODULEROOT.$this->url_module."uninstall.php");
165
			$dbc->query($requete);
166
167
			App::supprimerDossier(str_replace("/", "", $this->url_module));
168
		}
169
170
		/**
171
		 * @param $id_module
172
		 * fonction qui permet de supprimer le dossier d'une vielle version d'un module une semaine après son ajout
173
		 */
174
		public function setSupprimerOldModule($id_module) {
175
			$dbc = App::getDb();
176
177
			$this->getInfoModule($id_module);
178
179
			App::supprimerDossier(MODULEROOT.$this->dossier_module);
180
181
			$dbc->update("delete_old_version", "")->from("module")->where("ID_module", "=", $this->id_module)->set();
182
		}
183
		//-------------------------- FIN SETTER ----------------------------------------------------------------------------//
184
	}