Passed
Push — master ( 4fa271...32a5e6 )
by Anthony
02:54
created

CheckVersionModule::setDeleteOldVersionModule()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 6
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 6
rs 9.4285
cc 2
eloc 4
nc 2
nop 2
1
<?php
2
	namespace core\modules;
3
	
4
	
5
	use core\App;
6
7
	trait CheckVersionModule {
8
		private $nom;
9
		private $version;
10
		private $online_version;
11
12
		//-------------------------- GETTER ----------------------------------------------------------------------------//
13
		/**
14
		 * @param $nom_module
15
		 * @return boolean|null
16
		 * fonction qui permet de savoir si un module est à jour ou non
17
		 * si a jour renvoi true sinon renvoi false
18
		 */
19
		public static function getModuleAJour($nom_module) {
20
			$dbc = App::getDb();
21
22
			$query = $dbc->query("SELECT mettre_jour FROM module WHERE nom_module = ".$dbc->quote($nom_module));
23
24
			if ((is_array($query)) && (count($query) > 0)) {
25
				foreach ($query as $obj) {
26
					return $obj->mettre_jour;
27
				}
28
			}
29
		}
30
31
		public function getListeModuleMettreJour() {
32
			$dbc = App::getDb();
33
34
			$query = $dbc->query("SELECT * FROM module WHERE mettre_jour=1");
35
36
			if ((is_array($query)) && (count($query) > 0)) {
37
				$nom_module = [];
38
				$version = [];
39
				$online_version = [];
40
41
				foreach ($query as $obj) {
42
					$nom_module[] = $obj->nom_module;
43
					$version[] = $obj->version;
44
					$online_version[] = $obj->online_version;
45
				}
46
47
				$this->setListeModuleMettreJour($nom_module, $version, $online_version);
48
49
				return true;
50
			}
51
		}
52
53
		/**
54
		 * fonction qui se lance à chaquer fois que l'on ouvre l'admin
55
		 * permet de tester si tous les modules présent sur le site sont bien à jour
56
		 */
57
		public function getCheckModuleVersion() {
58
			$dbc = App::getDb();
59
			$today = date("Y-m-d");
60
61
			$query = $dbc->query("SELECT next_check_version, version, url_telechargement, mettre_jour, delete_old_version, ID_module FROM module");
62
63
			if ((is_array($query)) && (count($query) > 0)) {
64
				foreach ($query as $obj) {
65
					if ($obj->next_check_version == null) {
66
						//si pas de version a checker, cela veut dire qu'on vient d'installer le module
67
						//du coup on met le next_check aa la semaine pro
68
						$this->setNextCheckUpdate($obj->ID_module);
69
					}
70
					else if (($obj->next_check_version <= $today) && ($obj->mettre_jour != 1)) {
71
						//avant tout on regarde si on doit delete une vieille version
72
						$this->setDeleteOldVersionModule($obj->delete_old_version, $obj->ID_module);
73
74
						//on recupere le nom du dossier + extention
75
						$explode = explode(".", $obj->url_telechargement);
76
						array_pop($explode);
77
78
						$version_txt = implode(".", $explode)."_version.txt";
79
80
						$this->getCheckModuleUpToDate($version_txt, $obj->version, $obj->ID_module);
81
					}
82
				}
83
			}
84
		}
85
86
87
88
		//-------------------------- SETTER ----------------------------------------------------------------------------//
89
		private function setListeModuleMettreJour($nom_module, $version, $online_version) {
90
			$this->nom = $nom_module;
91
			$this->version = $version;
92
			$this->online_version = $online_version;
93
		}
94
95
		/**
96
		 * @param $id_module
97
		 * fonction qui permet de palnnifier la nouvelle check de si il il y aa une new maj du module
98
		 */
99
		private function setNextCheckUpdate($id_module) {
100
			$dbc = App::getDb();
101
			$today_o = new \DateTime(date("Y-m-d"));
102
103
			$value = [
104
				"next_check" => $today_o->add(new \DateInterval("P1W"))->format("Y-m-d"),
105
				"id_module" => $id_module
106
			];
107
108
			$dbc->prepare("UPDATE module SET next_check_version=:next_check WHERE ID_module=:id_module", $value);
109
		}
110
111
		/**
112
		 * @param $version_txt
113
		 * @param $version
114
		 * @param $id_module
115
		 * fonction qui va vérifier si notre mdule est bien a jour
116
		 */
117
		private function getCheckModuleUpToDate($version_txt, $version, $id_module) {
118
			$dbc = App::getDb();
119
120
			if (file_get_contents($version_txt) !== "") {
121
				//online pour bdd
122
				$version_online_txt = file_get_contents($version_txt);
123
124
				$version_online = floatval($version_online_txt);
125
				$version_site = floatval($version);
126
127
				//la version sur le serveur de telechargement est plus récente, on va donc proposer
128
				//en passant la valeur update a 1 dans la table module pour ce module
129
				// au client de mettre a jour sa version sinon on met la next check a la semaine pro
130
				if ($version_online > $version_site) {
131
					$value = [
132
						"update" => 1,
133
						"online_version" => $version_online_txt,
134
						"id_module" => $id_module
135
					];
136
137
					//on met la notification admin à 1
138
					$dbc->query("UPDATE notification SET admin=1 WHERE ID_notification=1");
139
140
					$dbc->prepare("UPDATE module SET mettre_jour=:update, online_version=:online_version WHERE ID_module=:id_module", $value);
141
				}
142
			}
143
144
			$this->setNextCheckUpdate($id_module);
145
		}
146
147
		/**
148
		 * @param $delete
149
		 * @param $id_module
150
		 * fonction qui sert à supprimer un module
151
		 */
152
		public function setDeleteOldVersionModule($delete, $id_module) {
153
			if ($delete == 1) {
154
				$import = new ImportModule();
155
				$import->setSupprimerOldModule($id_module);
156
			}
157
		}
158
	}