source: pmb4.2/trunk/fuentes/pmb/ajax.php @ 815

Last change on this file since 815 was 815, checked in by jrpelegrina, 4 years ago

Initial release of pmb 4.2

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