7 |
jpm |
1 |
<?php
|
|
|
2 |
/*vim: set expandtab tabstop=4 shiftwidth=4: */
|
|
|
3 |
// +------------------------------------------------------------------------------------------------------+
|
|
|
4 |
// | PHP version 4.1 |
|
|
|
5 |
// +------------------------------------------------------------------------------------------------------+
|
|
|
6 |
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
|
|
|
7 |
// +------------------------------------------------------------------------------------------------------+
|
|
|
8 |
// | This library is free software; you can redistribute it and/or |
|
|
|
9 |
// | modify it under the terms of the GNU Lesser General Public |
|
|
|
10 |
// | License as published by the Free Software Foundation; either |
|
|
|
11 |
// | version 2.1 of the License, or (at your option) any later version. |
|
|
|
12 |
// | |
|
|
|
13 |
// | This library is distributed in the hope that it will be useful, |
|
|
|
14 |
// | but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
|
|
15 |
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
|
|
|
16 |
// | Lesser General Public License for more details. |
|
|
|
17 |
// | |
|
|
|
18 |
// | You should have received a copy of the GNU Lesser General Public |
|
|
|
19 |
// | License along with this library; if not, write to the Free Software |
|
|
|
20 |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
|
|
|
21 |
// +------------------------------------------------------------------------------------------------------+
|
148 |
jpm |
22 |
// CVS : $Id: admin_menu.php,v 1.10 2004-11-10 11:58:58 jpm Exp $
|
7 |
jpm |
23 |
/**
|
|
|
24 |
* Application gérant les menus de Papyrus
|
|
|
25 |
*
|
|
|
26 |
* Cette application permet de gérer les menus classiques, les menus communs
|
|
|
27 |
* et les liaison d'une application à un menu.
|
|
|
28 |
*
|
25 |
jpm |
29 |
*@package Admin_menu
|
7 |
jpm |
30 |
//Auteur original :
|
|
|
31 |
*@author Laurent COUDOUNEAU <lc@gsite.org>
|
|
|
32 |
//Autres auteurs :
|
|
|
33 |
*@author Alexandre GRANIER <alexandre@tela-botanica.org>
|
|
|
34 |
*@author Jean-Pascal MILCENT <jpm@tela-botanica.org>
|
|
|
35 |
*@copyright Tela-Botanica 2000-2004
|
148 |
jpm |
36 |
*@version $Revision: 1.10 $ $Date: 2004-11-10 11:58:58 $
|
7 |
jpm |
37 |
// +------------------------------------------------------------------------------------------------------+
|
|
|
38 |
*/
|
|
|
39 |
|
|
|
40 |
// +------------------------------------------------------------------------------------------------------+
|
|
|
41 |
// | ENTÊTE du PROGRAMME |
|
|
|
42 |
// +------------------------------------------------------------------------------------------------------+
|
|
|
43 |
/*Mettre ici les inclusions de fichiers*/
|
|
|
44 |
/** Inclusion du fichier de configuration de cette application.*/
|
|
|
45 |
require_once GEN_CHEMIN_PAP.'applications/admin_menu/configuration/adme_configuration.inc.php';
|
|
|
46 |
|
|
|
47 |
/** Inclusion de la bibliothèque PEAR de conception de formulaire.*/
|
|
|
48 |
require_once ADME_CHEMIN_BIBLIOTHEQUE_PEAR.'HTML/QuickForm.php';
|
56 |
jpm |
49 |
require_once ADME_CHEMIN_BIBLIOTHEQUE_PEAR.'HTML/QuickForm/select.php';
|
7 |
jpm |
50 |
|
|
|
51 |
/** Inclusion de l'API de fonctions gérant les erreurs sql.*/
|
|
|
52 |
require_once ADME_CHEMIN_BIBLIOTHEQUE_API.'debogage_1.0/BOG_sql.fonct.php';
|
|
|
53 |
|
|
|
54 |
/** Inclusion des fonctions de manipulation du sql.
|
|
|
55 |
* Permet la récupération d'un nouvel identifiant d'une table.*/
|
|
|
56 |
require_once ADME_CHEMIN_BIBLIOTHEQUE_API.'sql_1.0/SQL_manipulation.fonct.php';
|
|
|
57 |
|
|
|
58 |
/** <BR> Inclusion de la bibliothèque de fonctions concernant les tables "gen_site..." de Papyrus.*/
|
|
|
59 |
require_once ADME_CHEMIN_BIBLIOTHEQUE_GEN.'pap_site.fonct.php';
|
|
|
60 |
|
|
|
61 |
/** <BR> Inclusion de la bibliothèque de fonctions concernant les tables "gen_menu..." de Papyrus.*/
|
|
|
62 |
require_once ADME_CHEMIN_BIBLIOTHEQUE_GEN.'pap_menu.fonct.php';
|
|
|
63 |
|
142 |
jpm |
64 |
/** <BR> Inclusion de la bibliothèque de fonctions concernant les tables "gen_applications..." de Papyrus.*/
|
|
|
65 |
require_once ADME_CHEMIN_BIBLIOTHEQUE_GEN.'pap_application.fonct.php';
|
|
|
66 |
|
|
|
67 |
/** <BR> Inclusion de la bibliothèque de fonctions concernant l'affichage commun.*/
|
|
|
68 |
require_once ADME_CHEMIN_BIBLIOTHEQUE_ADME.'adme_general.fonct.php';//ok
|
|
|
69 |
|
7 |
jpm |
70 |
/** <BR> Inclusion de la bibliothèque de fonctions concernant la gestion des menus classiques.*/
|
|
|
71 |
require_once ADME_CHEMIN_BIBLIOTHEQUE_ADME.'adme_menu_classique.fonct.php';//ok
|
|
|
72 |
|
|
|
73 |
/** <BR> Inclusion de la bibliothèque de fonctions concernant la gestion des menus communs.*/
|
|
|
74 |
require_once ADME_CHEMIN_BIBLIOTHEQUE_ADME.'adme_menu_commun.fonct.php';//ok
|
|
|
75 |
|
|
|
76 |
/** <BR> Inclusion de la bibliothèque de fonctions concernant la gestion de la rédaction de contenu.*/
|
142 |
jpm |
77 |
//require_once ADME_CHEMIN_BIBLIOTHEQUE_ADME.'adme_contenu.fonct.php';//ok
|
7 |
jpm |
78 |
|
142 |
jpm |
79 |
// Inclusion des fichiers de traduction de l'appli ADME dePapyrus
|
|
|
80 |
if (file_exists(ADME_CHEMIN_LANGUE.'adme_langue_'.$GLOBALS['_GEN_commun']['i18n'].'.inc.php')) {
|
|
|
81 |
/** Inclusion du fichier de traduction suite à la transaction avec le navigateur.*/
|
|
|
82 |
require_once ADME_CHEMIN_LANGUE.'adme_langue_'.$GLOBALS['_GEN_commun']['i18n'].'.inc.php';
|
|
|
83 |
} else {
|
|
|
84 |
/** Inclusion du fichier de traduction par défaut.*/
|
|
|
85 |
require_once ADME_CHEMIN_LANGUE.'adme_langue_'.ADME_I18N_DEFAUT.'.inc.php';
|
|
|
86 |
}
|
|
|
87 |
|
|
|
88 |
// Stockage des styles de l'application
|
|
|
89 |
GEN_stockerStyleExterne('adme_standard', ADME_CHEMIN_STYLE.'adme_standard.css');
|
|
|
90 |
|
7 |
jpm |
91 |
// +------------------------------------------------------------------------------------------------------+
|
|
|
92 |
// | CORPS du PROGRAMME |
|
|
|
93 |
// +------------------------------------------------------------------------------------------------------+
|
|
|
94 |
|
|
|
95 |
function afficherContenuCorps()
|
|
|
96 |
{
|
142 |
jpm |
97 |
//-------------------------------------------------------------------------------------------------------------------
|
|
|
98 |
// Initialisation des variables
|
|
|
99 |
$sortie_xhtml = '';
|
|
|
100 |
$objet_pear_auth = $GLOBALS['_GEN_commun']['pear_auth'];
|
|
|
101 |
$objet_pear_db = $GLOBALS['_GEN_commun']['pear_db'];
|
|
|
102 |
$objet_pear_url = $GLOBALS['_GEN_commun']['url'];
|
|
|
103 |
$url_site = $GLOBALS['_GEN_commun']['url_site'];
|
|
|
104 |
$url_menu = $GLOBALS['_GEN_commun']['url_menu'];
|
|
|
105 |
$url_i18n = $GLOBALS['_GEN_commun']['url_i18n'];
|
|
|
106 |
if (isset($_POST['adme_site_id'])) {
|
|
|
107 |
$_GET['adme_site_id'] = $_POST['adme_site_id'];
|
7 |
jpm |
108 |
} else {
|
142 |
jpm |
109 |
$_GET['adme_site_id'] = (!isset($_GET['adme_site_id'])) ? 0 : $_GET['adme_site_id'];
|
7 |
jpm |
110 |
}
|
142 |
jpm |
111 |
$_GET['adme_menu_id'] = (!isset($_GET['adme_menu_id'])) ? 0 : $_GET['adme_menu_id'];
|
|
|
112 |
$_GET['adme_action'] = (!isset($_GET['adme_action'])) ? '' : $_GET['adme_action'];
|
7 |
jpm |
113 |
|
142 |
jpm |
114 |
//-------------------------------------------------------------------------------------------------------------------
|
7 |
jpm |
115 |
// Authentification
|
142 |
jpm |
116 |
if ($objet_pear_auth->getAuth()) {
|
|
|
117 |
//---------------------------------------------------------------------------------------------------------------
|
|
|
118 |
// GESTION DES MENUS CLASSIQUES
|
7 |
jpm |
119 |
|
142 |
jpm |
120 |
// Ajouter un menu classique
|
143 |
jpm |
121 |
if (isset($_GET['adme_action']) && $_GET['adme_action'] == 'menu_classique_ajouter') {
|
142 |
jpm |
122 |
$message = ADME_ajouterMenuClassique($objet_pear_db, $objet_pear_auth, $_GET['adme_site_id'], $_GET['adme_menu_id']);
|
7 |
jpm |
123 |
}
|
|
|
124 |
|
|
|
125 |
// Formulaire de mise à jour du menu
|
143 |
jpm |
126 |
if (isset($_GET['adme_action']) && $_GET['adme_action'] == 'menu_classique_modifier') {
|
142 |
jpm |
127 |
$sortie_xhtml .= ADME_afficherFormMenuClassique($objet_pear_db, $objet_pear_url, $_GET['adme_site_id'], $_GET['adme_menu_id'], $_POST);
|
|
|
128 |
return $sortie_xhtml;
|
7 |
jpm |
129 |
}
|
142 |
jpm |
130 |
if (isset($_POST['menu_classique_verifier'])) {
|
|
|
131 |
// Nous cherchons à enregistrer une modification de menu
|
|
|
132 |
$message = ADME_validerFormAjouterMenuClassique($objet_pear_db, $_POST);
|
|
|
133 |
if (!empty($message)) {
|
|
|
134 |
// Les données ne sont pas valide. Nous retournons le formulaires avec les messages d'erreurs.
|
|
|
135 |
$sortie_xhtml .= ADME_afficherFormMenuClassique($objet_pear_db, $objet_pear_url, $_GET['adme_menu_id'], $_POST);
|
|
|
136 |
} else {
|
|
|
137 |
// Les données sont valide. Nous les enregistrons et retournons au formulaire de départ.
|
|
|
138 |
$message = ADME_modifierMenuClassique($objet_pear_db, $objet_pear_auth, $_GET['adme_menu_id'], $_POST);
|
|
|
139 |
}
|
7 |
jpm |
140 |
}
|
|
|
141 |
|
|
|
142 |
// Déplacer le menu vers le haut
|
143 |
jpm |
143 |
if (isset($_GET['adme_action']) && $_GET['adme_action'] == 'menu_classique_monter') {
|
142 |
jpm |
144 |
ADME_deplacerMenuClassique($objet_pear_db, $_GET['adme_site_id'], $_GET['adme_menu_id'], true);
|
7 |
jpm |
145 |
}
|
|
|
146 |
|
|
|
147 |
// Déplacer le menu vers le bas
|
143 |
jpm |
148 |
if (isset($_GET['adme_action']) && $_GET['adme_action'] == 'menu_classique_descendre') {
|
142 |
jpm |
149 |
ADME_deplacerMenuClassique($objet_pear_db, $_GET['adme_site_id'], $_GET['adme_menu_id'], false);
|
7 |
jpm |
150 |
}
|
|
|
151 |
|
142 |
jpm |
152 |
// Supprimer le menu
|
143 |
jpm |
153 |
if (isset($_GET['adme_action']) && $_GET['adme_action'] == 'menu_classique_supprimer') {
|
142 |
jpm |
154 |
// Récupération du menu de remplacement pour éviter de fermer l'arborescence
|
|
|
155 |
if (GEN_donnerDernierFreres($_GET['adme_menu_id']) == false) {
|
|
|
156 |
$adme_menu_id_remplacement = GEN_lireIdentifiantMenuPere($_GET['adme_menu_id']);;
|
|
|
157 |
} else {
|
|
|
158 |
$adme_menu_id_remplacement = GEN_donnerDernierFreres($_GET['adme_menu_id']);
|
|
|
159 |
}
|
|
|
160 |
// Suppression du menu classique
|
|
|
161 |
$message = ADME_supprimerMenuClassique($objet_pear_db, $_GET['adme_menu_id']);
|
|
|
162 |
// Remplacement de l'id du menu courant par le remplaçant.
|
|
|
163 |
$_GET['adme_menu_id'] = $adme_menu_id_remplacement;
|
7 |
jpm |
164 |
}
|
|
|
165 |
|
142 |
jpm |
166 |
//---------------------------------------------------------------------------------------------------------------
|
|
|
167 |
// GESTION DES MENUS COMMUNS
|
7 |
jpm |
168 |
|
|
|
169 |
// Ajout un menu commun
|
148 |
jpm |
170 |
if (isset($_GET['adme_action']) && $_GET['adme_action'] == ADME_LG_ACTION_AJOUTER) {
|
142 |
jpm |
171 |
$message = ADME_ajouterMenuCommun($objet_pear_db, $objet_pear_auth, $_GET['adme_site_id'], $_GET['adme_menu_id']);
|
7 |
jpm |
172 |
}
|
|
|
173 |
|
142 |
jpm |
174 |
// Formulaire de mise à jour du menu commun.
|
148 |
jpm |
175 |
if (isset($_GET['adme_action']) && $_GET['adme_action'] == ADME_LG_ACTION_MODIFIER) {
|
142 |
jpm |
176 |
$sortie_xhtml .= ADME_afficherFormMenuCommun($objet_pear_db, $objet_pear_url, $_GET['adme_site_id'], $_GET['adme_menu_id'], $_POST);
|
|
|
177 |
return $sortie_xhtml;
|
7 |
jpm |
178 |
}
|
142 |
jpm |
179 |
if (isset($_POST['menu_commun_verifier'])) {
|
|
|
180 |
// Nous cherchons à enregistrer une modification de menu
|
|
|
181 |
$message = ADME_validerFormAjouterMenuCommun($objet_pear_db, $_POST);
|
|
|
182 |
if (!empty($message)) {
|
|
|
183 |
// Les données ne sont pas valide. Nous retournons le formulaires avec les messages d'erreurs.
|
|
|
184 |
$sortie_xhtml .= ADME_afficherFormMenuCommun($objet_pear_db, $objet_pear_url, $_GET['adme_site_id'], $_GET['adme_menu_id'], $_POST);
|
|
|
185 |
} else {
|
|
|
186 |
// Les données sont valide. Nous les enregistrons et retournons au formulaire de départ.
|
|
|
187 |
$message = ADME_modifierMenuCommun($objet_pear_db, $objet_pear_auth, $_GET['adme_menu_id'], $_POST);
|
|
|
188 |
}
|
7 |
jpm |
189 |
}
|
|
|
190 |
|
|
|
191 |
// Déplace vers le haut de la hiérarchie un menu commun
|
148 |
jpm |
192 |
if (isset($_GET['adme_action']) && $_GET['adme_action'] == ADME_LG_ACTION_MONTER) {
|
142 |
jpm |
193 |
ADME_deplacerMenuCommun($objet_pear_db, $_GET['adme_site_id'], $_GET['adme_menu_id'], true);
|
7 |
jpm |
194 |
}
|
|
|
195 |
|
|
|
196 |
// Déplace vers le bas de la hiérarchie un menu commun
|
148 |
jpm |
197 |
if (isset($_GET['adme_action']) && $_GET['adme_action'] == ADME_LG_ACTION_DESCENDRE) {
|
142 |
jpm |
198 |
ADME_deplacerMenuCommun($objet_pear_db, $_GET['adme_site_id'], $_GET['adme_menu_id'], false);
|
7 |
jpm |
199 |
}
|
|
|
200 |
|
|
|
201 |
// Supprime définitivement un menu commun
|
148 |
jpm |
202 |
if (isset($_GET['adme_action']) && $_GET['adme_action'] == ADME_LG_ACTION_SUPPRIMER) {
|
142 |
jpm |
203 |
// Récupération du menu de remplacement pour éviter de fermer l'arborescence
|
|
|
204 |
if (GEN_donnerDernierFreres($_GET['adme_menu_id']) == false) {
|
|
|
205 |
$adme_menu_id_remplacement = GEN_lireIdentifiantMenuPere($_GET['adme_menu_id']);;
|
|
|
206 |
} else {
|
|
|
207 |
$adme_menu_id_remplacement = GEN_donnerDernierFreres($_GET['adme_menu_id']);
|
|
|
208 |
}
|
|
|
209 |
// Suppression du menu commun
|
|
|
210 |
ADME_supprimerMenuCommun($objet_pear_db, $_GET['adme_menu_id']);
|
|
|
211 |
// Remplacement de l'id du menu courant par le remplaçant.
|
|
|
212 |
$_GET['adme_menu_id'] = $adme_menu_id_remplacement;
|
7 |
jpm |
213 |
}
|
|
|
214 |
|
142 |
jpm |
215 |
//---------------------------------------------------------------------------------------------------------------
|
|
|
216 |
// GESTION DES INTERFACES D'ADMINISTRATION
|
7 |
jpm |
217 |
|
142 |
jpm |
218 |
// Appel de l'application d'administration
|
148 |
jpm |
219 |
if (isset($_GET['adme_action']) && $_GET['adme_action'] == ADME_LG_ACTION_ADMINISTRER) {
|
142 |
jpm |
220 |
$id_appli = GEN_retournerIdAppliMenu($objet_pear_db, $_GET['adme_menu_id']);
|
|
|
221 |
$chemin_admin = GEN_retournerCheminInterfaceAdmin($objet_pear_db, $id_appli);
|
|
|
222 |
$nom_admin = GEN_retournerNomInterfaceAdmin($objet_pear_db, $id_appli);
|
|
|
223 |
if ($chemin_admin !== false) {
|
|
|
224 |
include_once $chemin_admin;
|
|
|
225 |
$objet_admin = new $nom_admin;
|
|
|
226 |
if (method_exists($objet_admin, 'afficherContenuCorps')) {
|
|
|
227 |
$retour_admin = $objet_admin->afficherContenuCorps();
|
|
|
228 |
}
|
|
|
229 |
if ($retour_admin !== false) {
|
|
|
230 |
return $retour_admin;
|
|
|
231 |
}
|
7 |
jpm |
232 |
}
|
|
|
233 |
}
|
|
|
234 |
|
142 |
jpm |
235 |
//---------------------------------------------------------------------------------------------------------------
|
|
|
236 |
// Affichage des messages si nécessaire
|
|
|
237 |
if (! empty($message)) {
|
|
|
238 |
$sortie_xhtml .= "\n".'<p class="pap_erreur">'.$message.'</p>';
|
7 |
jpm |
239 |
}
|
|
|
240 |
|
142 |
jpm |
241 |
//---------------------------------------------------------------------------------------------------------------
|
|
|
242 |
// Affichage formulaire principal et retour du XHTML!
|
|
|
243 |
$sortie_xhtml .= ADME_afficherFormPrincipal($objet_pear_db, $objet_pear_url, $_GET['adme_site_id'], $_GET['adme_menu_id'], $_GET['adme_action']);
|
|
|
244 |
return $sortie_xhtml;
|
7 |
jpm |
245 |
// Fin de l'authentification
|
|
|
246 |
} else {
|
142 |
jpm |
247 |
// Pas d'authentification nous affichons un message!
|
|
|
248 |
return GEN_afficherInfoIdentification($objet_pear_url);
|
7 |
jpm |
249 |
}
|
|
|
250 |
}// Fin de la fonction afficherContenuCorps()
|
|
|
251 |
|
|
|
252 |
// +------------------------------------------------------------------------------------------------------+
|
142 |
jpm |
253 |
// | PIED du PROGRAMME |
|
7 |
jpm |
254 |
// +------------------------------------------------------------------------------------------------------+
|
|
|
255 |
|
|
|
256 |
|
|
|
257 |
|
|
|
258 |
/* +--Fin du code ----------------------------------------------------------------------------------------+
|
|
|
259 |
*
|
|
|
260 |
* $Log: not supported by cvs2svn $
|
148 |
jpm |
261 |
* Revision 1.9 2004/11/09 17:53:03 jpm
|
|
|
262 |
* Changement des noms des actions sur les menus classiques.
|
|
|
263 |
*
|
143 |
jpm |
264 |
* Revision 1.8 2004/11/09 17:49:11 jpm
|
|
|
265 |
* Mise en conformité et gestion de différentes interfaces d'administration.
|
|
|
266 |
*
|
142 |
jpm |
267 |
* Revision 1.7 2004/10/25 16:28:02 jpm
|
|
|
268 |
* Correction convention de codage.
|
|
|
269 |
*
|
111 |
jpm |
270 |
* Revision 1.6 2004/09/23 17:45:19 jpm
|
|
|
271 |
* Amélioration de la gestion des liens annuler et du selecteur de sites.
|
|
|
272 |
*
|
56 |
jpm |
273 |
* Revision 1.5 2004/09/23 16:49:24 jpm
|
|
|
274 |
* Correction d'une erreur dans l'url de l'ajout de menu commun.
|
|
|
275 |
*
|
54 |
jpm |
276 |
* Revision 1.4 2004/07/06 17:24:54 jpm
|
|
|
277 |
* Suppression d'inclusions de fichiers inutiles.
|
|
|
278 |
*
|
30 |
jpm |
279 |
* Revision 1.3 2004/07/06 17:07:28 jpm
|
|
|
280 |
* Modification de la documentation pour une mailleur analyse par PhpDocumentor.
|
|
|
281 |
*
|
25 |
jpm |
282 |
* Revision 1.2 2004/06/16 15:06:30 jpm
|
|
|
283 |
* Suppression fichier inutile.
|
|
|
284 |
*
|
8 |
jpm |
285 |
* Revision 1.1 2004/06/16 15:04:39 jpm
|
|
|
286 |
* Changement de nom de Génésia en Papyrus.
|
|
|
287 |
* Changement de l'arborescence.
|
|
|
288 |
*
|
7 |
jpm |
289 |
* Revision 1.26 2004/05/10 14:32:21 jpm
|
|
|
290 |
* Changement du titre.
|
|
|
291 |
*
|
|
|
292 |
* Revision 1.25 2004/05/10 12:13:23 jpm
|
|
|
293 |
* Ajout de la sélection des sites.
|
|
|
294 |
*
|
|
|
295 |
* Revision 1.24 2004/05/07 16:33:05 jpm
|
|
|
296 |
* Intégration de constantes.
|
|
|
297 |
*
|
|
|
298 |
* Revision 1.23 2004/05/07 07:23:53 jpm
|
|
|
299 |
* Amélioration du code, des commentaires et correction de bogues.
|
|
|
300 |
*
|
|
|
301 |
* Revision 1.22 2004/05/05 06:45:44 jpm
|
|
|
302 |
* Suppression de l'appel de la fonction générant le "vous êtes ici" dans la fonction affichant l'entête de l'application.
|
|
|
303 |
*
|
|
|
304 |
* Revision 1.21 2004/05/04 16:27:33 jpm
|
|
|
305 |
* Réduction de code pour la fonction afficherContenuTete().
|
|
|
306 |
*
|
|
|
307 |
* Revision 1.20 2004/05/03 11:23:26 jpm
|
|
|
308 |
* Début mise en conformité des commentaires.
|
|
|
309 |
*
|
|
|
310 |
*
|
|
|
311 |
* +-- Fin du code ----------------------------------------------------------------------------------------+
|
|
|
312 |
*/
|
|
|
313 |
?>
|