Subversion Repositories eFlore/Applications.cel

Rev

Rev 3886 | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 3886 Rev 3890
1
<?php
1
 <?php
2
// declare(encoding='UTF-8');
2
// declare(encoding='UTF-8');
3
/**
3
/**
4
 * Service fournissant des informations sur les widgets existants et permettant d'en créer d'autres.
4
 * Service fournissant des informations sur les widgets existants et permettant d'en créer d'autres.
5
 *
5
 *
6
 * Format du service :
6
 * Format du service :
7
 * /CelWidgetExport/format
7
 * /CelWidgetExport/format
8
 * /CelWidgetExport/csv
8
 * /CelWidgetExport/csv
9
 *
9
 *
10
 * Les paramêtres :
10
 * Les paramêtres :
11
 *  - "start" indique le numéro du premier item à afficher
11
 *  - "start" indique le numéro du premier item à afficher
12
 *  - "limit" nombre d'items à afficher
12
 *  - "limit" nombre d'items à afficher
13
 *
13
 *
14
 * @internal   Mininum PHP version : 5.2
14
 * @internal   Mininum PHP version : 5.2
15
 * @category   CEL
15
 * @category   CEL
16
 * @package    Services
16
 * @package    Services
17
 * @subpackage Widget
17
 * @subpackage Widget
18
 * @version    0.1
18
 * @version    0.1
19
 * @author     Delphine CAUQUIL <delphine@tela-botanica.org>
19
 * @author     Delphine CAUQUIL <delphine@tela-botanica.org>
20
 * @license    GPL v3 <http://www.gnu.org/licenses/gpl.txt>
20
 * @license    GPL v3 <http://www.gnu.org/licenses/gpl.txt>
21
 * @license    CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
21
 * @license    CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
22
 * @copyright  1999-2017 Tela Botanica <accueil@tela-botanica.org>
22
 * @copyright  1999-2017 Tela Botanica <accueil@tela-botanica.org>
23
 */
23
 */
24
 
24
 
25
 
25
 
26
class CelWidgetManager extends Cel {
26
class CelWidgetManager extends Cel {
27
 
27
 
28
	// correspondance entre les champs de l'interface et les champs de la BD (format 2018 / 2019)
28
        // correspondance entre les champs de l'interface et les champs de la BD (format 2018 / 2019)
29
	private $parametres_autorises = array(
29
        private $parametres_autorises = array(
30
			'projet' => 'project',
30
                        'projet' => 'project',
31
			'type' => 'type',
31
                        'type' => 'type',
32
			'esttype' => 'is_type',
32
                        'esttype' => 'is_type',
33
			'langue' => 'language',
33
                        'langue' => 'language',
34
			'order' => 'order'
34
                        'order' => 'order'
35
	);
35
        );
36
	
36
       
37
	private $correspondance_config_widget= array(
37
        private $correspondance_config_widget= array(
38
			'projet' =>  'project',
38
                        'projet' =>  'project',
39
			'langue' =>  'language',
39
                        'langue' =>  'language',
40
			'titre' =>  'title',
40
                        'titre' =>  'title',
41
			'logo' =>  'logo',
41
                        'logo' =>  'logo',
42
			'description' =>  'description',
42
                        'description' =>  'description',
43
			'type' =>  'type',
43
                        'type' =>  'type',
44
			'est_type' =>  'is_type',
44
                        'est_type' =>  'is_type',
45
			'style_css' =>  'css_style',
45
                        'style_css' =>  'css_style',
46
			'image_fond' =>  'image_font',
46
                        'image_fond' =>  'image_font',
47
			'date_creation' =>  'date_created',
47
                        'date_creation' =>  'date_created',
48
			'type_especes' =>  'taxo_restriction_type',
48
                        'type_especes' =>  'taxo_restriction_type',
49
			'referentiel' =>  'taxo_restriction_value',
49
                        'referentiel' =>  'taxo_restriction_value',
50
			'type_localisation' =>  'location_type',
50
                        'type_localisation' =>  'location_type',
51
			'localisation' =>  'location',
51
                        'localisation' =>  'location',
52
	        'fond_carte' => 'basemap', 
52
                'fond_carte' => 'basemap',
53
	        'adresse' => 'is_mandatory_address',
53
                'adresse' => 'is_mandatory_address',
54
	        'photo_obligatoire' => 'is_mandatory_photo',
54
                'photo_obligatoire' => 'is_mandatory_photo',
55
			'milieux' =>  'environment',
55
                        'milieux' =>  'environment',
56
			'motscles' =>  'project_tag_name',
56
                        'motscles' =>  'project_tag_name',
57
			'info' =>  'info',
57
                        'info' =>  'info',
58
	        'id_projet' => 'project_id'
58
                'id_projet' => 'project_id'
59
	);
59
        );
60
	
60
       
61
	private $correspondance_champs_etendus = array(
61
        private $correspondance_champs_etendus = array(
62
			"key" => "field_id",
62
                        "key" => "field_id",
63
			"element" => "data_type",
63
                        "element" => "data_type",
64
			"mandatory" => "is_mandatory",
64
                        "mandatory" => "is_mandatory",
65
			"unit" => "unit"
65
                        "unit" => "unit",
-
 
66
                        "is_visible" => "is_visible"
66
	);
67
        );
67
	
68
       
68
	private $correspondance_champs_etendus_trad = array(
69
        private $correspondance_champs_etendus_trad = array(
69
			"key" => "extended_field_id",
70
                        "key" => "extended_field_id",
70
			"name" => "label",
71
                        "name" => "label",
71
			"description" => "description",
72
                        "description" => "description",
72
			"fieldValues" => "default_value",
73
                        "fieldValues" => "default_value",
73
			"help" => "help"
74
                        "help" => "help"
74
	);
75
        );
75
 
76
 
76
	public function getRessource() {
77
        public function getRessource() {
77
		return $this->getElement(array());
78
                return $this->getElement(array());
78
	}
79
        }
79
 
80
 
80
	/**
81
        /**
81
	 * Méthode appelée avec une requête de type GET.
82
         * Méthode appelée avec une requête de type GET.
82
	 */
83
         */
83
	public function getElement($params = array()) { 
84
        public function getElement($params = array()) {
84
		switch(@strtolower($params[0])) { 
85
                switch(@strtolower($params[0])) {
85
		case 'widget':
86
                case 'widget':
86
			$this->getWidget();
87
                        $this->getWidget();
87
			break;
88
                        break;
88
		case 'champsetendus';
89
                case 'champsetendus';
89
			$this->getChampsEtendus();
90
                        $this->getChampsEtendus();
90
			break;
91
                        break;
91
		default:
92
                default:
92
			$this->getWidget();
93
                        $this->getWidget();
93
		}
94
                }
94
	}
95
        }
95
	
96
       
96
	
97
       
97
	public function createElement($requeteDonnees) {
98
        public function createElement($requeteDonnees) {
98
		unset($requeteDonnees['signup_submit']);
99
                unset($requeteDonnees['signup_submit']);
99
		if (isset($requeteDonnees['champs-supp'])) {
100
                if (isset($requeteDonnees['champs-supp'])) {
100
			$gestionchamps = new GestionChampsEtendus2($this->config);
101
                        $gestionchamps = new GestionChampsEtendus2($this->config);
101
			$champs = $this->traiterCorrespondanceChampsEtendusInterfaceBD($requeteDonnees); //var_dump($champs);exit;
102
                        $champs = $this->traiterCorrespondanceChampsEtendusInterfaceBD($requeteDonnees); //var_dump($champs);exit;
102
			$liste = $gestionchamps->ajouterParProjet($champs); 
103
                        $liste = $gestionchamps->ajouterParProjet($champs);
103
			unset($requeteDonnees['champs-supp']);
104
                        unset($requeteDonnees['champs-supp']);
104
		}
105
                }
105
		$requeteDonnees['est_type'] = (isset($requeteDonnees['est_type']) && $requeteDonnees['est_type']== "on") ? 1 : 0;
106
                $requeteDonnees['est_type'] = (isset($requeteDonnees['est_type']) && $requeteDonnees['est_type']== "on") ? 1 : 0;
106
		$manager = new GestionWidget($this->config);
107
                $manager = new GestionWidget($this->config);
107
		$requeteDonnees = $this->traiterCorresponceConfigWidgetInterfaceBD($requeteDonnees);
108
                $requeteDonnees = $this->traiterCorresponceConfigWidgetInterfaceBD($requeteDonnees);
108
		$retour = $manager->ajouterWidget($requeteDonnees);
109
                $retour = $manager->ajouterWidget($requeteDonnees);
109
 
110
 
110
		$this->envoyerJson($retour);
111
                $this->envoyerJson($retour);
111
 
112
 
112
	}
113
        }
113
	
114
       
114
	public function updateElement($uid,$params) {
115
        public function updateElement($uid,$params) {
115
		$retour = "";
116
                $retour = "";
116
		if (isset($params['projet']) && isset($params['langue'])) {
117
                if (isset($params['projet']) && isset($params['langue'])) {
117
		    if (isset($params['champs-supp'])) {
118
                    if (isset($params['champs-supp'])) {
118
		        $gestionchamps = new GestionChampsEtendus2($this->config);
119
                        $gestionchamps = new GestionChampsEtendus2($this->config);
119
		        $champs = $this->traiterCorrespondanceChampsEtendusInterfaceBD($params); //var_dump($champs);exit;
120
                        $champs = $this->traiterCorrespondanceChampsEtendusInterfaceBD($params); //var_dump($champs);exit;
120
		        $liste = $gestionchamps->modifierParProjet($champs, $params['langue']);
121
                        $liste = $gestionchamps->modifierParProjet($champs, $params['langue']);
121
		        unset($params['champs-supp']);
122
                        unset($params['champs-supp']);
122
		    }
123
                    }
123
		    $manager = new GestionWidget($this->config);
124
                    $manager = new GestionWidget($this->config);
124
		    $params['est_type'] = (isset($params['est_type']) && $params['est_type']== "on") ? 1 : 0;
125
                    $params['est_type'] = (isset($params['est_type']) && $params['est_type']== "on") ? 1 : 0;
125
		    $requeteDonnees = $this->traiterCorresponceConfigWidgetInterfaceBD($params);
126
                    $requeteDonnees = $this->traiterCorresponceConfigWidgetInterfaceBD($params);
126
			$retour = $manager->modifierWidget($params['projet'], $params['langue'], $requeteDonnees);
127
                        $retour = $manager->modifierWidget($params['projet'], $params['langue'], $requeteDonnees);
127
			
128
                       
128
		}
129
                }
129
		$this->envoyerJson($retour);
130
                $this->envoyerJson($retour);
130
		return "ff";
131
                return "ff";
131
		
132
               
132
	}
133
        }
133
 
134
 
134
	private function getWidget() {
135
        private function getWidget() {
135
		$criteres = $this->traiterParametresAutorises($_GET); 
136
                $criteres = $this->traiterParametresAutorises($_GET);
136
		$manager = new GestionWidget($this->config);
137
                $manager = new GestionWidget($this->config);
137
		$liste = $manager->obtenirWidget($criteres);
138
                $liste = $manager->obtenirWidget($criteres);
138
		$liste = $this->traiterCorresponceConfigWidgetBDInterface($liste);
139
                $liste = $this->traiterCorresponceConfigWidgetBDInterface($liste);
139
 
140
 
140
		$this->envoyerJson($liste);
141
                $this->envoyerJson($liste);
141
	}
142
        }
142
	
143
       
143
	private function getChampsEtendus() {
144
        private function getChampsEtendus() {
144
		$champs = new GestionChampsEtendus2($this->config);
145
                $champs = new GestionChampsEtendus2($this->config);
145
		$projet = (isset($_GET['projet'])) ? $_GET['projet'] : "";
146
                $projet = (isset($_GET['projet'])) ? $_GET['projet'] : "";
146
		$langue = (isset($_GET['langue'])) ? $_GET['langue'] : "fr";
147
                $langue = (isset($_GET['langue'])) ? $_GET['langue'] : "fr";
147
		$liste = $champs->consulterProjetChampsEtendus($projet, $langue);
148
                $liste = $champs->consulterProjetChampsEtendus($projet, $langue);
148
		$liste = $this->traiterCorrespondanceChampsEtendusBDInterface($liste, $projet);
149
                $liste = $this->traiterCorrespondanceChampsEtendusBDInterface($liste, $projet);
149
		
150
               
150
		$this->envoyerJson($liste);
151
                $this->envoyerJson($liste);
151
	}
152
        }
152
 
153
 
153
 
154
 
154
	protected function traiterParametresAutorises(Array $parametres) {
155
        protected function traiterParametresAutorises(Array $parametres) {
155
		$parametres_traites = array();
156
                $parametres_traites = array();
156
		
157
               
157
		foreach($parametres as $cle => $valeur) {
158
                foreach($parametres as $cle => $valeur) {
158
			if(is_string($valeur) && !trim($valeur)) continue;
159
                        if(is_string($valeur) && !trim($valeur)) continue;
159
			if(isset($this->parametres_autorises[$cle])) {
160
                        if(isset($this->parametres_autorises[$cle])) {
160
				$parametres_traites[$this->parametres_autorises[$cle]] = $valeur;
161
                                $parametres_traites[$this->parametres_autorises[$cle]] = $valeur;
161
			}
162
                        }
162
		}
163
                }
163
		return $parametres_traites;
164
                return $parametres_traites;
164
	}
165
        }
165
	
166
       
166
	protected function traiterCorresponceConfigWidgetBDInterface(Array $widgets) {
167
        protected function traiterCorresponceConfigWidgetBDInterface(Array $widgets) {
167
		$parametres_traites = array();
168
                $parametres_traites = array();
168
		$corresp = array_flip($this->correspondance_config_widget);
169
                $corresp = array_flip($this->correspondance_config_widget);
169
		foreach($widgets as $id => $widget) {
170
                foreach($widgets as $id => $widget) {
170
			foreach($widget as $cle => $valeur) {
171
                        foreach($widget as $cle => $valeur) {
171
				if(is_string($valeur) && !trim($valeur)) continue;
172
                                if(is_string($valeur) && !trim($valeur)) continue;
172
				if(isset($corresp[$cle])) {
173
                                if(isset($corresp[$cle])) {
173
					$parametres_traites[$id][$corresp[$cle]] = $valeur;
174
                                        $parametres_traites[$id][$corresp[$cle]] = $valeur;
174
				}
175
                                }
175
			}
176
                        }
176
		}
177
                }
177
		return $parametres_traites;
178
                return $parametres_traites;
178
	}
179
        }
179
	
180
       
180
	protected function traiterCorresponceConfigWidgetInterfaceBD(Array $parametres) {
181
        protected function traiterCorresponceConfigWidgetInterfaceBD(Array $parametres) {
181
		$parametres_traites = array();
182
                $parametres_traites = array();
182
		$corresp = $this->correspondance_config_widget;
183
                $corresp = $this->correspondance_config_widget;
183
		foreach($parametres as $cle => $valeur) {
184
                foreach($parametres as $cle => $valeur) {
184
				if(is_string($valeur) && !trim($valeur)) $valeur=NULL;
185
                                if(is_string($valeur) && !trim($valeur) && $valeur !== '0') $valeur=NULL;
185
				if(isset($corresp[$cle])) {
186
                                if(isset($corresp[$cle])) {
186
					$parametres_traites[$corresp[$cle]] = $valeur;
187
                                        $parametres_traites[$corresp[$cle]] = $valeur;
187
				}
188
                                }
188
			}
189
                        }
189
		return $parametres_traites;
190
                return $parametres_traites;
190
	}
191
        }
191
	
192
       
192
	protected function traiterCorrespondanceChampsEtendusInterfaceBD(Array $champsinterface) {
193
        protected function traiterCorrespondanceChampsEtendusInterfaceBD(Array $champsinterface) {
193
		$champsrequete = array(); $i = 0;
194
                $champsrequete = array(); $i = 0;
194
		$champssupp = json_decode($champsinterface['champs-supp'], true); 
195
                $champssupp = json_decode($champsinterface['champs-supp'], true);
195
		// pour chaque champs-supp, mettre correspondance extended field et extended field trad
196
                // pour chaque champs-supp, mettre correspondance extended field et extended field trad
196
		foreach ($champssupp as $champ) {
197
                foreach ($champssupp as $champ) {
197
			$champsrequete['ce'][$i]['project'] = $champsrequete['cet'][$i]['project'] = $champsinterface['projet'];
198
                        $champsrequete['ce'][$i]['project'] = $champsrequete['cet'][$i]['project'] = $champsinterface['projet'];
198
			$champsrequete['cet'][$i]['language_iso_code'] = isset($champsinterface['langue']) && $champsinterface['langue'] != "" ? $champsinterface['langue'] : "fr"; 
199
                        $champsrequete['cet'][$i]['language_iso_code'] = isset($champsinterface['langue']) && $champsinterface['langue'] != "" ? $champsinterface['langue'] : "fr";
199
			// pour la table extended fiels champs interface => champs bd
200
                        // pour la table extended fiels champs interface => champs bd
200
			foreach ($this->correspondance_champs_etendus as $ci => $ce) {
201
                        foreach ($this->correspondance_champs_etendus as $ci => $ce) {
201
				if (isset($champ[$ci]) && $champ[$ci] != "") {
202
                                if (isset($champ[$ci]) && $champ[$ci] != "") {
202
					$champsrequete['ce'][$i][$ce] = $champ[$ci];
203
                                        $champsrequete['ce'][$i][$ce] = $champ[$ci];
203
				} else {
204
                                } else {
204
					if ($ci == "mandatory") {
205
                                        if ($ci == "mandatory" || $ci == "is_visible") {
205
						$champsrequete['ce'][$i][$ce] = "0";
206
                                                $champsrequete['ce'][$i][$ce] = "0";
206
					} else {
207
                                        } else {
207
						$champsrequete['ce'][$i][$ce] = "";
208
                                                $champsrequete['ce'][$i][$ce] = "";
208
					}
209
                                        }
209
				}
210
                                }
210
			}
211
                        }
211
			$champsrequete['ce'][$i]["is_visible"] = "1";
212
                        //$champsrequete['ce'][$i]["is_visible"] = "1";
212
			// pour la table extended fiels trad champs interface => champs bd
213
                        // pour la table extended fiels trad champs interface => champs bd
213
			foreach ($this->correspondance_champs_etendus_trad as $cit => $cr) {
214
                        foreach ($this->correspondance_champs_etendus_trad as $cit => $cr) {
214
				if (isset($champ[$cit]) && is_array($champ[$cit])) {
215
                                if (isset($champ[$cit]) && is_array($champ[$cit])) {
215
					$champsrequete['cet'][$i][$cr] = json_encode($champ[$cit]);
216
                                        $champsrequete['cet'][$i][$cr] = json_encode($champ[$cit]);
216
				} elseif (isset($champ[$cit]) && $champ[$cit] != "") {
217
                                } elseif (isset($champ[$cit]) && $champ[$cit] != "") {
217
					$champsrequete['cet'][$i][$cr] = $champ[$cit];
218
                                        $champsrequete['cet'][$i][$cr] = $champ[$cit];
218
				} else {
219
                                } else {
219
					$champsrequete['cet'][$i][$cr] = "";
220
                                        $champsrequete['cet'][$i][$cr] = "";
220
				}
221
                                }
221
			}
222
                        }
222
			$i++;
223
                        $i++;
223
		} 
224
                }
224
		return $champsrequete;
225
                return $champsrequete;
225
	}
226
        }
226
	protected function traiterCorrespondanceChampsEtendusBDInterface(Array $champsrequete, $projet = "null") {
227
        protected function traiterCorrespondanceChampsEtendusBDInterface(Array $champsrequete, $projet = "null") {
227
		$champssupp = array(); $i = 0;
228
                $champssupp = array(); $i = 0;
228
		foreach ($champsrequete as $champ) {
229
                foreach ($champsrequete as $champ) {
229
			$champssupp[$projet]['projet'] = $champ['project'];
230
                        $champssupp[$projet]['projet'] = $champ['project'];
230
			$champssupp[$projet]['langue'] = $champ['language_iso_code'];
231
                        $champssupp[$projet]['langue'] = $champ['language_iso_code'];
231
			// pour la table extended fiels champs interface => champs bd
232
                        // pour la table extended fiels champs interface => champs bd
232
			foreach ($this->correspondance_champs_etendus as $ci => $ce) {
233
                        foreach ($this->correspondance_champs_etendus as $ci => $ce) {
233
				if (isset($champ[$ce]) && $champ[$ce] != "") {
234
                                if (isset($champ[$ce]) && $champ[$ce] != "") {
234
				    $champssupp[$projet]['champs-supp'][$i][$ci] = $champ[$ce];
235
                                    $champssupp[$projet]['champs-supp'][$i][$ci] = $champ[$ce];
235
				} else {
236
                                } else {
236
				    $champssupp[$projet]['champs-supp'][$i][$ci]= "";
237
                                    $champssupp[$projet]['champs-supp'][$i][$ci]= "";
237
				}
238
                                }
238
			}
239
                        }
239
			// pour la table extended fiels trad champs interface => champs bd
240
                        // pour la table extended fiels trad champs interface => champs bd
240
			foreach ($this->correspondance_champs_etendus_trad as $cet => $cr) {
241
                        foreach ($this->correspondance_champs_etendus_trad as $cet => $cr) {
241
				if (isset($champ[$cr]) && $champ[$cr] != "") {
242
                                if (isset($champ[$cr]) && $champ[$cr] != "") {
242
				    $champssupp[$projet]['champs-supp'][$i][$cet]= $champ[$cr];
243
                                    $champssupp[$projet]['champs-supp'][$i][$cet]= $champ[$cr];
243
				} else {
244
                                } else {
244
				    $champssupp[$projet]['champs-supp'][$i][$cet]="";
245
                                    $champssupp[$projet]['champs-supp'][$i][$cet]="";
245
				}
246
                                }
246
			}$i++;
247
                        }$i++;
247
		}
248
                }
248
		return $champssupp;
249
                return $champssupp;
249
	}
250
        }
250
 
251
 
251
 
252
 
252
}
253
}
253
?>
254
?>