-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathajax.php
More file actions
executable file
·193 lines (174 loc) · 5.19 KB
/
ajax.php
File metadata and controls
executable file
·193 lines (174 loc) · 5.19 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
<?php
// +-------------------------------------------------+
// © 2002-2004 PMB Services / www.sigb.net pmb@sigb.net et contributeurs (voir www.sigb.net)
// +-------------------------------------------------+
// $Id: ajax.php,v 1.22 2014-01-07 10:16:16 arenou Exp $
/*
Mode d'emploi des transactions client - serveur utilisant les requettes Ajax.
Cette technique permet d'interroger le serveur dynamiquement sans recharger toute la page.
Une transaction s'effectue en envoyant une commande via un script javascript dans le formulaire d'une page html.
Ce script est codé sous forme d'une classe javascript dans le fichier /javascript/http_request.js
Usage et exemple d'envoie d'une requette coté client.
Dans cet exemple, on teste la validitée de la date avant de commiter le formulaire.
....
// Inclusion du script Ajax
<script type='text/javascript' src='./javascript/http_request.js'></script>
<script language="JavaScript">
function CheckDataAjax() {
// Récupération de la valeur de l'objet 'DirectDate'
var DirectDate = document.Cal.DirectDate.value;
// Construction de la requette
var url= "./ajax.php?module=ajax&categ=misc&fname=verifdate&p1=" + DirectDate;
// On initialise la classe:
var test_date = new http_request();
// Exécution de la requette
if(test_date.request(url)){
// Il y a une erreur. Afficher le message retourné
alert ( test_date.get_text() );
}else {
// La date est valide, on commit
document.getElementById('date_directe').value = DirectDate;
return 1;
}
}
</script>
<form name="Cal" id="Cal" method='post' action='./test.php'>
<input type='text' name='DirectDate' size=10 value='10/08/2007'>
<input type='button' value="Send" onClick="if(CheckDataAjax()) submit();">
</form>
....
Explication du code:
Construction de la requette 'url':
url= "./ajax.php?module=ajax&categ=misc&fname=verifdate&p1=" + DirectDate;
Les parametres module,categ permettent de parser la commande au bon endroit dans
la structure de codage de PMB
Plusieurs paramètres optionnels de la fonction 'request' permettent de faire des POST
en mode synchrone ou pas.
Pour plus de précisions, voir l'entete de la procédure dans: ./javascript/http_request.js
Coté serveur, on se rend dans le bon module, grace aux paramètres passés dans 'url'.
Dans l'exemple, module=ajax , categ=misc .
Ainsi le fichier /ajax/ajax_main.inc.php parse la commande à /pmb/ajax/misc/misc.inc.php
Cette métodologie devra être respectée pour chaque requette Ajax, afin de localiser le traitement
facilement et de réutiliser au mieux le code existant du module
*/
$base_path = ".";
$base_noheader = 1;
$base_nobody = 1;
$base_nodojo = 1;
$clean_pret_tmp=1;
//avant l'inclusion faudrait peut-être s'occuper de la gestion des droits dans les différentes requetes...
switch($_GET['module']){
case "cms" :
$base_auth = "CMS_AUTH";
break;
case "autorites" :
$base_auth = "AUTORITES_AUTH";
break;
case 'catalog':
$base_auth = "CATALOGAGE_AUTH";
break;
case 'circ':
$base_auth = "CIRCULATION_AUTH";
break;
case 'admin':
$base_auth = "ADMINISTRATION_AUTH";
break;
case 'demandes':
$base_auth = "DEMANDES_AUTH";
break;
case 'acquisition':
$base_auth = "ACQUISITION_AUTH";
break;
case 'fichier':
$base_auth = "FICHES_AUTH";
break;
case "edit" :
$base_auth = "EDIT_AUTH";
break;
}
require_once ($base_path . "/includes/init.inc.php");
if(!SESSrights) exit;
// inclusion des fonctions utiles pour renvoyer la réponse à la requette recu
require_once ($base_path . "/includes/ajax.inc.php");
/*
* Parse la commande Ajax du client vers
* $module est passé dans l'url,envoyé par http_send_request, in http_request.js script file
* les valeurs envoyées dans les requêtes en ajax du client vers le serveur sont encodées
* exclusivement en utf-8 donc décodage de toutes les variables envoyées si nécessaire
*/
function utf8_decode_pmb(&$var) {
if(is_array($var)){
foreach($var as $key => $val) {
utf8_decode_pmb($var[$key]);
}
}
else $var=utf8_decode($var);
}
function array_uft8_decode($tab){
foreach($tab as $key => $val) {
if(is_array($val)){
$tab[$key] = array_uft8_decode($val);
}else{
$tab[$key] = utf8_decode($val);
}
}
return $tab;
}
if (strtoupper($charset)!="UTF-8") {
$t=array_keys($_POST);
foreach($t as $v) {
global $$v;
utf8_decode_pmb($$v);
}
$t=array_keys($_GET);
foreach($t as $v) {
global $$v;
utf8_decode_pmb($$v);
}
//On décode aussi les POST et les GET en plus de les mettre en global
$_POST = array_uft8_decode($_POST);
$_GET = array_uft8_decode($_GET);
}
$main_file="./$module/ajax_main.inc.php";
switch($module) {
case 'ajax':
include($main_file);
break;
case 'autorites':
include($main_file);
break;
case 'catalog':
include($main_file);
break;
case 'circ':
include($main_file);
break;
case 'admin':
include($main_file);
break;
case 'demandes':
include($main_file);
break;
case 'acquisition':
include($main_file);
break;
case 'fichier':
include($main_file);
break;
case 'cms':
include($main_file);
break;
case "edit" :
include($main_file);
break;
case "dsi" :
include($main_file);
break;
case "dashboard" :
include($main_file);
break;
default:
//tbd
break;
}
?>