source: pmb4.2/trunk/fuentes/pmb/admin/opac/stat/execute.inc.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.5 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: execute.inc.php,v 1.6 2015-04-03 11:16:29 jpermanne Exp $
6
7if (stristr($_SERVER['REQUEST_URI'], ".inc.php")) die("no access");
8
9global $class_path,$PMBuserid,$charset;//Comme ce script est appelé d'une fonction, il faut définir des globals
10require_once ($class_path."/stat_query.class.php");
11
12// include d'exécution d'une procédure
13
14$requete = "SELECT * FROM statopac_request WHERE idproc=$id ";
15$res = pmb_mysql_query($requete, $dbh);
16
17$nbr_lignes = pmb_mysql_num_rows($res);
18$urlbase = "./admin.php?categ=opac&sub=stat&section=view_list&act=final&id=$id";
19if ($force_exec) $urlbase .= "&force_exec=$force_exec";
20
21if($nbr_lignes) {
22
23        // récupération du résultat
24        $row = pmb_mysql_fetch_row($res);
25        $idp = $row[0];
26        $name = $row[1];
27        if (!$code)
28                $code = $row[2];
29        $commentaire = $row[3];
30       
31        //on remplace VUE par el nom de la table dynamique associée
32        $num_vue = stat_query::get_vue_associee($id);
33        $code = str_replace('VUE()','statopac_vue_'.$num_vue,$code);
34        print "<br>
35                <h3>".htmlentities($msg["procs_execute"]." ".$name, ENT_QUOTES, $charset)."</h3>
36                <br/>".htmlentities($commentaire, ENT_QUOTES, $charset)."<hr/>
37                        <input type='button' class='bouton' value='$msg[62]'  onClick='document.location=\"./admin.php?categ=opac&sub=stat&section=query&act=update_request&id_req=$id\"' />";
38                if (($pmb_procs_force_execution && $force_exec) || (($PMBuserid == 1) && $force_exec)) {
39                        print "<input type='button' id='procs_button_exec' class='bouton' value='".htmlentities($msg["procs_force_exec"], ENT_QUOTES, $charset)."' onClick='document.location=\"./admin.php?categ=opac&sub=stat&section=view_list&act=exec_req&id_req=$id&force_exec=1\"' />";
40                } else {
41                        print "<input type='button' id='procs_button_exec' class='bouton' value='$msg[708]' onClick='document.location=\"./admin.php?categ=opac&sub=stat&section=view_list&act=exec_req&id_req=$id\"' />";
42                }
43        print "<br />";
44        $linetemp = explode(";", $code);
45        for ($i=0;$i<count($linetemp);$i++) if (trim($linetemp[$i])) $line[]=trim($linetemp[$i]);
46        while(list($cle, $valeur)= each($line)) {
47                if($valeur) {
48                        // traitement des paramètres
49                        // traitement tri des colonnes
50                        if ($sortfield != "") {
51                                // on cherche à trier sur le champ $trifield
52                                // compose la chaîne de tri
53                                $tri = $sortfield;
54                                if ($desc == 1) $tri .= " DESC";
55                                        else $tri .= " ASC";
56                                // on enlève les doubles espaces dans la procédure
57                                $valeur = ereg_replace("/\s+/", " ", $valeur);
58                                // supprime un éventuel ; à la fin de la requête
59                                $valeur = ereg_replace("/;$/", "", $valeur);
60                                // on recherche la première occurence de ORDER BY
61                                $s = stristr($valeur, "order by");
62                                if ($s) {
63                                        // y'a déjà une clause order by... moins facile...
64                                        // il faut qu'on sache si on aura besoin de mettre une virgule ou pas
65                                        if ( preg_match("#,#", $s) ) {
66                                                $virgule = true;
67                                        } else if ( ! ereg("${sortfield}", $s)) {
68                                                $virgule = true;
69                                        } else {
70                                                $virgule = false;
71                                        }
72                                        if ($virgule) {
73                                                $tri .= ", ";
74                                        }
75                                        // regarde si le champ est déjà dans la liste des champs à trier et le remplace si besoin
76                                        $new_s = preg_replace("/$sortfield, /", "", $s);
77                                        $new_s = preg_replace("/$sortfield/", "", $new_s);
78                                        // ajoute la clause order by correcte
79                                        $new_s = preg_replace("/order\s+by\s+/i", "order by $tri", $new_s);
80                                        // replace l'ancienne chaîne par la nouvelle
81                                        $valeur = str_replace($s, $new_s, $valeur);
82                                } else {
83                                        $valeur .= " order by $tri";
84                                }
85                        }
86
87                        print "<strong>".$msg["procs_ligne"]." $cle </strong>:&nbsp;".$valeur."<br><br>";
88
89                        if (($pmb_procs_force_execution && $force_exec) || (($PMBuserid == 1) && $force_exec) || explain_requete($valeur)) {
90                                $res = @pmb_mysql_query($valeur, $dbh);
91                                echo pmb_mysql_error();
92                                $nbr_lignes = @pmb_mysql_num_rows($res);
93                                $nbr_champs = @pmb_mysql_num_fields($res);
94
95                                if($nbr_lignes) {
96                                        echo "<table >";
97                                        for($i=0; $i < $nbr_champs; $i++) {
98                                                // ajout de liens pour trier les pages
99                                                $fieldname = pmb_mysql_field_name($res, $i);
100                                                $sortasc = "<a href='${urlbase}&sortfield=".($i+1)."&desc=0'>asc</a>";
101                                                $sortdesc = "<a href='${urlbase}&sortfield=".($i+1)."&desc=1'>desc</a>";
102                                                print("<th>${fieldname}</th>");
103                                        }
104
105                                        for($i=0; $i < $nbr_lignes; $i++) {
106                                                $row = pmb_mysql_fetch_row($res);
107                                                echo "<tr>";
108                                                foreach($row as $dummykey=>$col) {
109                                                        if(trim($col)=='') $col = '&nbsp;';
110                                                        print '<td>'.$col.'</td>';
111                                                }
112                                                echo "</tr>";
113                                        }
114                                        echo "</table><hr>";
115                                } else {
116                                        print "<br><font color='#ff0000'>".$msg['admin_misc_lignes']." ".pmb_mysql_affected_rows($dbh);
117                                        $err = pmb_mysql_error($dbh);
118                                        if ($err) print "<br>$err";
119                                        echo "</font><hr>";
120                                }
121                        } else {
122                                // erreur explain_requete
123                                print "<br><br>".$msg["proc_param_explain_failed"]."<br><br>".$erreur_explain_rqt;
124
125                                if ($pmb_procs_force_execution || ($PMBuserid == 1)) {
126                                        print "
127                                                <script type='text/javascript'>
128                                                        if (document.getElementById('procs_button_exec')) {
129                                                                var button_procs_exec = document.getElementById('procs_button_exec');
130                                                                button_procs_exec.setAttribute('value','".addslashes($msg["procs_force_exec"])."');
131                                                                button_procs_exec.setAttribute('onClick','document.location=\"./admin.php?categ=opac&sub=stat&section=view_list&act=exec_req&id_req=$id&force_exec=1\"');
132                                                        }
133                                                </script>
134                                        ";
135                                }
136                        }
137                }
138        } // fin while
139
140} else {
141        print $msg["proc_param_query_failed"];
142}
Note: See TracBrowser for help on using the repository browser.