Passed
Push — master ( 32a5e6...46243c )
by Anthony
03:13
created

CheckVersionModule::getCheckModuleVersion()   B

Complexity

Conditions 6
Paths 4

Size

Total Lines 25
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Importance

Changes 4
Bugs 0 Features 0
Metric Value
c 4
b 0
f 0
dl 0
loc 25
rs 8.439
cc 6
eloc 13
nc 4
nop 0
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 <= $today) && ($obj->mettre_jour != 1)) {
66
						//avant tout on regarde si on doit delete une vieille version
67
						$this->setDeleteOldVersionModule($obj->delete_old_version, $obj->ID_module);
68
69
						//on recupere le nom du dossier + extention
70
						$explode = explode(".", $obj->url_telechargement);
71
						array_pop($explode);
72
73
						$version_txt = implode(".", $explode)."_version.txt";
74
75
						$this->getCheckModuleUpToDate($version_txt, $obj->version, $obj->ID_module);
76
					}
77
78
					$this->setNextCheckUpdate($obj->ID_module);
79
				}
80
			}
81
		}
82
83
84
85
		//-------------------------- SETTER ----------------------------------------------------------------------------//
86
		private function setListeModuleMettreJour($nom_module, $version, $online_version) {
87
			$this->nom = $nom_module;
88
			$this->version = $version;
89
			$this->online_version = $online_version;
90
		}
91
92
		/**
93
		 * @param $id_module
94
		 * fonction qui permet de palnnifier la nouvelle check de si il il y aa une new maj du module
95
		 */
96
		private function setNextCheckUpdate($id_module) {
97
			$dbc = App::getDb();
98
			$today_o = new \DateTime(date("Y-m-d"));
99
100
			$value = [
101
				"next_check" => $today_o->add(new \DateInterval("P1W"))->format("Y-m-d"),
102
				"id_module" => $id_module
103
			];
104
105
			$dbc->prepare("UPDATE module SET next_check_version=:next_check WHERE ID_module=:id_module", $value);
106
		}
107
108
		/**
109
		 * @param $version_txt
110
		 * @param $version
111
		 * @param $id_module
112
		 * fonction qui va vérifier si notre mdule est bien a jour
113
		 */
114
		private function getCheckModuleUpToDate($version_txt, $version, $id_module) {
115
			$dbc = App::getDb();
116
117
			if (file_get_contents($version_txt) !== "") {
118
				//online pour bdd
119
				$version_online_txt = file_get_contents($version_txt);
120
121
				$version_online = floatval($version_online_txt);
122
				$version_site = floatval($version);
123
124
				//la version sur le serveur de telechargement est plus récente, on va donc proposer
125
				//en passant la valeur update a 1 dans la table module pour ce module
126
				// au client de mettre a jour sa version sinon on met la next check a la semaine pro
127
				if ($version_online > $version_site) {
128
					$value = [
129
						"update" => 1,
130
						"online_version" => $version_online_txt,
131
						"id_module" => $id_module
132
					];
133
134
					//on met la notification admin à 1
135
					$dbc->query("UPDATE notification SET admin=1 WHERE ID_notification=1");
136
137
					$dbc->prepare("UPDATE module SET mettre_jour=:update, online_version=:online_version WHERE ID_module=:id_module", $value);
138
				}
139
			}
140
		}
141
142
		/**
143
		 * @param $delete
144
		 * @param $id_module
145
		 * fonction qui sert à supprimer un module
146
		 */
147
		public function setDeleteOldVersionModule($delete, $id_module) {
148
			if ($delete == 1) {
149
				$import = new ImportModule();
150
				$import->setSupprimerOldModule($id_module);
151
			}
152
		}
153
	}