source: spip-zone/_plugins_/forms/forms_et_tables_2_5/inc/forms_lier_donnees.php @ 86005

Last change on this file since 86005 was 86005, checked in by sblanc@…, 7 years ago

suppression des appels de la fonction calcul_mysql_in() qui est dépréciée et remplacement par la fonction sql_in()

File size: 7.4 KB
Line 
1<?php
2/*
3 * forms
4 * Gestion de formulaires editables dynamiques
5 *
6 * Auteurs :
7 * Sylvain BLANC
8 * Loic LE MAO
9 * Antoine Pitrou
10 * Cedric Morin
11 * Renato
12 * © 2005,2006 - Distribue sous licence GNU/GPL
13 *
14 */
15
16include_spip("inc/presentation");
17include_spip("inc/layer");
18include_spip("base/forms");
19include_spip("inc/forms");
20
21function inc_forms_lier_donnees($type, $id, $script, $deplie=false, $type_table = NULL){
22  global $spip_lang_left, $spip_lang_right, $options;
23        global $connect_statut, $options,$connect_id_auteur, $couleur_claire ;
24
25        if ($type_table===NULL)
26                $type_table = forms_type_table_lier($type, $id);
27        $prefixi18n = forms_prefixi18n($type_table);
28        $lesdonnees = array();
29        //
30        // Afficher les donnees liees, rangees par tables
31        //
32        list($s,$les_donnees, $nombre_donnees) = Forms_formulaire_objet_afficher_donnees($type,$id,$script,$type_table);
33        $form .= Forms_formulaire_objet_chercher_donnee($type,$id,$les_donnees, $script, $type_table);
34       
35        $out = "";
36        $out .= "<a name='tables'></a>";
37        if (_request('cherche_donnee') || _request('ajouter') || $deplie){
38                //adaptation SPIP 2
39                //$bouton = bouton_block_visible("tables_$type_$id");
40                $bouton = bouton_block_depliable(true,"tables_$type_$id");
41                //$debut_block = 'debut_block_visible';
42                $debut_block = 'debut_block_depliable';
43        }
44        else{
45                //adpatation SPIP2
46                //$bouton = bouton_block_invisible("tables_$type_$id");
47                $bouton = bouton_block_depliable(false,"tables_$type_$id");
48                //$debut_block = 'debut_block_invisible';
49                $debut_block = 'bouton_block_depliable';
50        }
51
52        $icone = find_in_path("img_pack/$type_table-24.gif");
53        if (!$icone)
54                $icone = find_in_path("img_pack/$type_table-24.png");
55        if (!$icone)
56                $icone = find_in_path("img_pack/table-24.gif");
57        $out .= debut_cadre_enfonce($icone, true, "", $bouton._T("$prefixi18n:type_des_tables")."($nombre_donnees)");
58
59        $out .= $s;
60       
61        $out .= $debut_block(false,"tables_$type_$id");
62       
63        //
64        // Afficher le formulaire de recherche des donnees des tables
65        //
66
67        $out .= $form;
68        $out .= fin_block(true);
69       
70        $out .= fin_cadre_enfonce(true);
71        return _request('var_ajaxcharset')?$out:("<div id='forms_lier_donnees-$id'>".$out."</div>");
72}
73
74function Forms_formulaire_objet_chercher_donnee($type,$id,$les_donnees, $script, $type_table){
75  global $spip_lang_right,$spip_lang_left,$couleur_claire,$couleur_foncee;
76        $out = "";
77        $recherche = _request('cherche_donnee');
78        $iid = intval($id);
79       
80        if (!include_spip("inc/securiser_action"))
81                include_spip("inc/actions");
82        $redirect = ancre_url(generer_url_ecrire($script,"type=$type&id_$type=$iid"),'tables');
83        if ($type == 'donnee'){
84                $redirect = parametre_url($redirect,'id_form',_request('id_form'));
85                $redirect = parametre_url($redirect,'retour',urlencode(_request('retour')));
86        }
87        $action = generer_action_auteur("forms_lier_donnees","$id,$type,ajouter");
88       
89        $out .= "<form action='$action' method='post' class='ajaxAction' >";
90        $out .= form_hidden($action);
91        $out .= "<input type='hidden' name='redirect' value='$redirect' />";
92        $out .= "<input type='hidden' name='idtarget' value='forms_lier_donnees-$id' />";
93        $out .= "<input type='hidden' name='redirectajax' value='".generer_url_ecrire('forms_lier_donnees',"type=$type&id_$type=$id")."' />";
94        $out .= "<div style='text-align:$spip_lang_left;width:100%;'>";
95        $out .= "<input id ='autocompleteMe' type='text' name='cherche_donnee' value='$recherche' class='forml' style='width:90%;' />";
96
97        if ($type == 'donnee')
98                $les_donnees .= (strlen($les_donnees)?",":"").$iid;
99        $out .= Forms_boite_selection_donnees($recherche?$recherche:((_request('ajouter')!==NULL)?"":$recherche),$les_donnees, $type, $type_table);
100       
101        $script_rech = generer_url_ecrire("recherche_donnees","type=$type&id_$type=$id",true);
102        $out .= "<input type='hidden' name='autocompleteUrl' value='$script_rech' />";
103
104        $out .= "<style type='text/css' media='all'>
105.autocompleter
106{
107        border: 1px solid $couleur_foncee;
108        width: 350px;
109        background-color: $couleur_claire;
110}
111.autocompleter ul li
112{
113        padding: 2px 10px;
114        white-space: nowrap;
115        font-size: 11px;
116}
117.selectAutocompleter
118{
119        background-color: $couleur_foncee;
120}</style>";
121       
122        $out .= "</div>";
123        $out .= "<div class='spip_bouton' style='text-align:$spip_lang_right'>";
124        $out .= "<input type='submit' name='ajouter' value='"._T('bouton_ajouter')."' />";
125        $out .= "</div>";
126        $out .= "</form>";
127        return $out;
128}
129
130function Forms_formulaire_objet_afficher_donnees($type,$id, $script, $type_table='table'){
131        return Forms_afficher_liste_donnees_liees(
132                $type, 
133                $id, 
134                strncmp($type,"donnee",6)==0?"donnee_liee":"donnee",
135                $type_table,
136                'forms_lier_donnees', 
137                "forms_lier_donnees-$id", 
138                "type=$type&id_$type=$id",
139                self());
140}
141
142function Forms_boite_selection_donnees($recherche, $les_donnees, $type, $type_table){
143        $out = "";
144        $liste_res = Forms_liste_recherche_donnees($recherche,$les_donnees,$type,$type_table);
145        if (count($liste_res)){
146                $nb_ligne = 0;
147                foreach($liste_res as $titre=>$donnees){
148                        $out .= "<option value=''>$titre</option>";
149                        foreach($donnees as $id_donnee=>$champs){
150                                $nb_ligne++;
151                                $out .= "<option value='$id_donnee'>&nbsp;&nbsp;&nbsp;";
152                                $out .= implode (", ",$champs);
153                                $out .= "</option>";
154                        }
155                }
156                $nb_ligne = min(50,max(10,round($nb_ligne/4)));
157                $out = "<select name='id_donnee_liee[]' multiple='multiple' class='fondl' style='width:100%' size='$nb_ligne'>"
158                  .$out .= "</select>";
159        }
160        $out .= "<input id='_id_donnee_liee' type='hidden' name='_id_donnee_liee' value='' />";
161        return $out;
162}
163
164function Forms_liste_recherche_donnees($recherche,$les_donnees,$type,$type_table,$max_items=-1){
165        if (strncmp($type,'donnees',6)==0)
166                $linkable = false;
167        else   
168                $linkable = true;
169        $table = array();
170        if ($recherche===NULL && $max_items==-1)
171                $max_items = 200;
172        //if ($recherche!==NULL){
173                include_spip('base/abstract_sql');
174                $in = sql_in('d.id_donnee',$les_donnees,'NOT');
175                $limit = "";
176                if ($max_items>0)
177                        $limit = "LIMIT 0,".intval($max_items);
178                if (!strlen($recherche)){
179                        $res = spip_query($r="SELECT d.id_donnee FROM spip_forms_donnees AS d
180                          JOIN spip_forms AS f ON f.id_form=d.id_form
181                          WHERE d.statut!='poubelle' AND f.type_form="._q($type_table)
182                          . ($linkable?" AND f.linkable='oui'":"")
183                          . " AND $in GROUP BY d.id_donnee ORDER BY f.id_form,d.id_donnee $limit");
184                }
185                else {
186                        $res = spip_query($s = "SELECT c.id_donnee FROM spip_forms_donnees_champs AS c
187                        JOIN spip_forms_donnees AS d ON d.id_donnee = c.id_donnee
188                        JOIN spip_forms AS f ON d.id_form = f.id_form
189                        WHERE d.statut!='poubelle' AND f.type_form="._q($type_table)
190                        . ($linkable?" AND f.linkable='oui'":"")
191                        ." AND $in AND valeur LIKE "._q("$recherche%")." GROUP BY c.id_donnee ORDER BY f.id_form,d.id_donnee $limit");
192                        //adapation SPIP2
193                        //if (spip_num_rows($res)<10){
194                        if (sql_count($res)<10){
195                                $res = spip_query($s = "SELECT c.id_donnee FROM spip_forms_donnees_champs AS c
196                                JOIN spip_forms_donnees AS d ON d.id_donnee = c.id_donnee
197                                JOIN spip_forms AS f ON d.id_form = f.id_form
198                                WHERE d.statut!='poubelle' AND f.type_form="
199                                ._q($type_table)
200                                . ($linkable?" AND f.linkable='oui'":"")
201                                ." AND $in AND valeur LIKE "._q("%$recherche%")." GROUP BY c.id_donnee ORDER BY f.id_form,d.id_donnee $limit");
202                        }
203                }
204                while ($row = spip_fetch_array($res)){
205                        list($id_form,$titreform,$type_form,$t) = Forms_liste_decrit_donnee($row['id_donnee'],true, $linkable);
206                        if (!count($t))
207                                list($id_form,$titreform,$type_form,$t) = Forms_liste_decrit_donnee($row['id_donnee'],false, $linkable);
208                        if (count($t))
209                                $table[$titreform][$row['id_donnee']]=$t;
210                }
211        //}
212        return $table;
213}
214
215?>
Note: See TracBrowser for help on using the repository browser.