Passed
Push — master ( 8ea442...f74d4d )
by Anthony
02:56
created

CheckVersionModule   A

Complexity

Total Complexity 21

Size/Duplication

Total Lines 126
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 3

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 21
c 1
b 0
f 0
lcom 1
cbo 3
dl 0
loc 126
rs 10

4 Methods

Rating   Name   Duplication   Size   Complexity  
A getModuleAJour() 0 11 4
A getListeModuleMettreJour() 0 21 4
C getCheckModuleVersion() 0 69 12
A setListeModuleMettreJour() 0 5 1
1
<?php
2
	namespace core\modules;
3
	
4
	
5
	use core\App;
6
7
	trait CheckVersionModule {
8
9
		//-------------------------- GETTER ----------------------------------------------------------------------------//
10
		/**
11
		 * @param $nom_module
12
		 * @return boolean|null
13
		 * fonction qui permet de savoir si un module est à jour ou non
14
		 * si a jour renvoi true sinon renvoi false
15
		 */
16
		public static function getModuleAJour($nom_module) {
17
			$dbc = App::getDb();
18
19
			$query = $dbc->query("SELECT mettre_jour FROM module WHERE nom_module = ".$dbc->quote($nom_module));
20
21
			if ((is_array($query)) && (count($query) > 0)) {
22
				foreach ($query as $obj) {
23
					return $obj->mettre_jour;
24
				}
25
			}
26
		}
27
28
		public function getListeModuleMettreJour() {
29
			$dbc = App::getDb();
30
31
			$query = $dbc->query("SELECT * FROM module WHERE mettre_jour=1");
32
33
			if ((is_array($query)) && (count($query) > 0)) {
34
				$nom_module = [];
35
				$version = [];
36
				$online_version = [];
37
38
				foreach ($query as $obj) {
39
					$nom_module[] = $obj->nom_module;
40
					$version[] = $obj->version;
41
					$online_version[] = $obj->online_version;
42
				}
43
44
				$this->setListeModuleMettreJour($nom_module, $version, $online_version);
45
46
				return true;
47
			}
48
		}
49
50
		/**
51
		 * fonction qui se lance à chaquer fois que l'on ouvre l'admin
52
		 * permet de tester si tous les modules présent sur le site sont bien à jour
53
		 */
54
		public function getCheckModuleVersion() {
55
			$dbc = App::getDb();
56
			$today = date("Y-m-d");
57
			$today_o = new \DateTime($today);
58
59
			$query = $dbc->query("SELECT next_check_version, version, url_telechargement, mettre_jour, delete_old_version, ID_module FROM module");
60
61
			if ((is_array($query)) && (count($query) > 0)) {
62
				foreach ($query as $obj) {
63
					if ($obj->next_check_version == null) {
64
						//si pas de version a checker, cela veut dire qu'on vient d'installer le module
65
						//du coup on met le next_check aa la semaine pro
66
						$set_next = true;
67
					}
68
					else if (($obj->next_check_version <= $today) && ($obj->mettre_jour != 1)) {
69
						//avant tout on regarde si on doit delete une vieille version
70
						if ($obj->delete_old_version == 1) {
71
							$import = new ImportModule();
72
							$import->setSupprimerOldModule($obj->ID_module);
73
						}
74
75
						//on recupere le nom du dossier + extention
76
						$explode = explode(".", $obj->url_telechargement);
77
						array_pop($explode);
78
79
						$version_txt = implode(".", $explode)."_version.txt";
80
81
						if (file_get_contents($version_txt) !== "") {
82
83
							//online pour bdd
84
							$version_online_txt = file_get_contents($version_txt);
85
86
							$version_online = floatval($version_online_txt);
87
							$version_site = floatval($obj->version);
88
89
							//la version sur le serveur de telechargement est plus récente, on va donc proposer
90
							//en passant la valeur update a 1 dans la table module pour ce module
91
							// au client de mettre a jour sa version sinon on met la next check a la semaine pro
92
							if ($version_online > $version_site) {
93
								$value = [
94
									"update" => 1,
95
									"online_version" => $version_online_txt,
96
									"id_module" => $obj->ID_module
97
								];
98
99
								//on met la notification admin à 1
100
								$dbc->query("UPDATE notification SET admin=1 WHERE ID_notification=1");
101
102
								$dbc->prepare("UPDATE module SET mettre_jour=:update, online_version=:online_version WHERE ID_module=:id_module", $value);
103
104
								$set_next = true;
105
							}
106
							else {
107
								$set_next = true;
108
							}
109
						}
110
					}
111
112
					if ((isset($set_next)) && ($set_next === true)) {
113
						$value = [
114
							"next_check" => $today_o->add(new \DateInterval("P1W"))->format("Y-m-d"),
115
							"id_module" => $obj->ID_module
116
						];
117
118
						$dbc->prepare("UPDATE module SET next_check_version=:next_check WHERE ID_module=:id_module", $value);
119
					}
120
				}
121
			}
122
		}
123
124
125
126
		//-------------------------- SETTER ----------------------------------------------------------------------------//
127
		private function setListeModuleMettreJour($nom_module, $version, $online_version) {
128
			$this->nom = $nom_module;
0 ignored issues
show
Bug introduced by
The property nom does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
129
			$this->version = $version;
0 ignored issues
show
Bug introduced by
The property version does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
130
			$this->online_version = $online_version;
0 ignored issues
show
Bug introduced by
The property online_version does not seem to exist. Did you mean version?

An attempt at access to an undefined property has been detected. This may either be a typographical error or the property has been renamed but there are still references to its old name.

If you really want to allow access to undefined properties, you can define magic methods to allow access. See the php core documentation on Overloading.

Loading history...
131
		}
132
	}