Passed
Push — master ( 45bd4f...4fa271 )
by Anthony
03:17
created

CheckVersionModule::getCheckModuleUpToDate()   B

Complexity

Conditions 3
Paths 3

Size

Total Lines 29
Code Lines 14

Duplication

Lines 0
Ratio 0 %

Importance

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