source: spip-zone/_plugins_/snippets/inc/snippets.php @ 34591

Last change on this file since 34591 was 34591, checked in by booz@…, 10 years ago

on peut exporter des rubriques avec auteur mots cles et documents dans les articles

File size: 7.8 KB
Line 
1<?php
2/*
3 * snippets
4 * Gestion d'import/export XML de contenu
5 *
6 * Auteurs :
7 * Cedric Morin
8 * � 2006 - Distribue sous licence GNU/GPL
9 *
10 */
11
12function snippets_fonction_importer($table){
13        if (substr($table,0,5)=="spip_") $table = substr($table,5);
14        return ($f = charger_fonction("importer","snippets/$table",true));
15}
16function snippets_fond_exporter($table,$find = true){
17        if (substr($table,0,5)=="spip_") $table = substr($table,5);
18        $f = "snippets/$table/exporter";
19        if ($find)
20                $f = find_in_path("$f.html");
21        return $f;
22}
23
24function snippets_liste_imports($table){
25        $pattern = $table;
26        if (substr($table,0,5)=="spip_") $table = substr($table,5);
27       
28        $pattern = ".*[.]xml$";
29        $snippets = find_all_in_path("snippets/$table/",$pattern);
30        return $snippets;
31}
32function snippets_type_de_table($table){
33        $type = $table;
34        if (substr($type,-1)=="s") $type = substr($type,0,strlen($type)-1);
35        if (substr($type,0,5)=="spip_") $type = substr($type,5);
36        return $type;
37}
38
39function boite_snippets($titre,$icone,$table,$id,$contexte="",$retour = ""){
40        include_spip('inc/autoriser');
41        if (!strlen($retour))
42                $retour = self();
43        $out = "";
44       
45        // verifier les droits
46        $auth = false;
47        $type = snippets_type_de_table($table);
48        if (intval($id)==$id) {
49                $auth = autoriser('modifier',$type,$id);
50        }
51        else {
52                $auth = true;
53                if ( (count($t = explode('=',$contexte))==2) AND ($id_contexte=intval($t[1])) ) {
54                        $type_contexte = $t[0];
55                        if (substr($type_contexte,0,3)=="id_") $type_contexte = substr($type_contexte,3);
56                        $auth = autoriser('modifier',$type_contexte,$id_contexte);
57                }
58                $auth &= autoriser('creer',$type,$id);
59        }
60        if (!$auth) return "";
61       
62        // verifier le support de l'objet pour l'import/export
63        $export_possible = (intval($id) AND $f = snippets_fond_exporter($table));
64        $import_possible = ($f=snippets_fonction_importer($table));
65        $import_creation = ($id !== intval($id));
66        if (!$import_possible && !$export_possible) return "";
67
68        $idbox="snippet_$table_$id";
69        $out .= icone_horizontale($titre, "#", $icone, _DIR_PLUGIN_SNIPPETS."images/import".($export_possible?"_export":"").".gif", false, "onclick='$(\"#$idbox\").slideToggle(\"fast\");'");
70        $out .= "<div id='$idbox' style='display:none;' >\n";
71        $out .= debut_cadre_relief('',true);
72
73        // icone d'export
74        if (intval($id) AND $f = snippets_fond_exporter($table)){
75                $action = generer_action_auteur('snippet_exporte',"$table:$id",$retour);
76                $out .= icone_horizontale(_T('snippets:exporter'), $action, $icone, _DIR_PLUGIN_SNIPPETS."images/export.gif", false);
77                $out .= "<hr/>";
78        }
79
80        // liste des snippets disponibles pour import
81        $liste = snippets_liste_imports($table);
82        foreach($liste as $snippet){
83                if (!_DIR_RESTREINT) $snippet = substr($snippet,strlen(_DIR_RACINE));
84                $action = generer_action_auteur('snippet_importe',"$table:$id:$contexte:$snippet",$retour);
85                $out .= icone_horizontale(basename($snippet,".xml"), $action, $icone, $import_creation?"creer.gif":_DIR_PLUGIN_SNIPPETS."images/import.gif", false);
86        }
87       
88        // formulaire d'upload d'un snippet
89        $action = generer_action_auteur('snippet_importe',"$table:$id:$contexte",$retour);
90        $out .= "<form action='$action' method='POST' enctype='multipart/form-data'>";
91        $out .= form_hidden($action);
92        $out .= "<strong><label for='file_name'>"._T("snippets:importer_fichier")."</label></strong> ";
93        $out .= "<br />";
94        $out .= "<input type='file' name='snippet_xml' id='file_name' class='formo'>";
95        $out .= "<div style='text-align:$spip_lang_right'>";
96        $out .= "<input type='submit' name='Valider' value='"._T('bouton_valider')."' class='fondo'>";
97        $out .= "</div>";
98        $out .= "</form>\n";
99       
100
101        $out .= fin_cadre_relief(true)."</div>";
102        return $out;
103}
104
105function snippets_liste_raccourcis($table){
106        $type = snippets_type_de_table($table);
107        $l = array();
108        $rac_historiques = array(
109                'document' => '|doc|im|img|image|emb', 
110                'article' => '|art', 
111                'rubrique' => '|rub',
112                'auteur' => '|aut',
113                'breve' => '|br..?ve' # accents :(
114                );
115
116        // les modeles
117        $rac = $type;
118        if (isset($rac_historiques[$type]))
119                $rac .= $rac_historiques[$type];
120       
121        $l[",([^a-z])($type)%d([^0-9]),"] = "$1$2%d$3" ;
122       
123        return $l;
124}
125
126// $translations est un array de ($table, $id_objet_ancien, $id_objet_nouveau)
127function snippets_translate_raccourcis_modeles($translations){
128        $trans = array();
129        $liste = array();
130        if (!is_array($translations)) return;
131        foreach($translations as $translatation) {
132                $t = $translatation[0];
133                // recuperer la liste des raccourcis a changer pour ce type
134                // si necessaire
135                if (!isset($liste[$t])) $liste[$t] = snippets_liste_raccourcis($table);
136                // ajouter la liste des translations a faire pour ce type
137                foreach($liste as $f=>$r)
138                        $trans[str_replace('%d',$translatation[1],$f)] = str_replace('%d',$translatation[2],$r);
139        }
140        $a_type = array();
141        $revision = array();
142        foreach($translations as $translatation){
143                $table = $translatation[0];
144                if (!isset($a_type[$table])){
145                        $a_type[$table] = snippets_type_de_table($table);
146                        $rev = $table;
147                        if (substr($rev,0,5)=="spip_") $rev = substr($type,5);
148                        $rev = "revision_$rev";
149                        if (include_spip("action/editer_$type") && function_exists($rev))
150                                $revision[$table] = $rev;
151                }
152                $type = $a_type[$table];
153                $id = $translatation[1];
154                $prim = "id_$type";
155                $row = spip_fetch_array(spip_query("SELECT * FROM $table WHERE $prim="._q($id)));
156                if ($row) {
157                        foreach($row as $key => $val){
158                                $val = preg_replace(array_keys($trans),$trans,$val);
159                                if ($row[$key]!=$val)
160                                        $row[$key]=$val;
161                                else
162                                        unset($row[$key]);
163                        }
164                        if (count($row)){
165                                if (isset($revision[$table]))
166                                        $revision[$table]($id,$row);
167                                else {
168                                        $set = "";
169                                        foreach($row as $key=>$val){
170                                                $set .= "$key="._q($val).", ";
171                                        }
172                                        $set = substr($set,0,strlen($set)-2);
173                                        spip_query("UPDATE $table SET $set WHERE $prim="._q($id));
174                                }
175                        }
176                }
177        }
178}
179
180
181
182// d'apres spip2spip par erationnal
183// recupere id d'un auteur selon son nom ou le creer
184function get_id_auteur($name) {
185    if (trim($name)=="") return false;   
186    $sql = "SELECT id_auteur FROM spip_auteurs WHERE nom='".addslashes(filtrer_entites($name))."'";
187    $result = spip_query($sql);
188    while ($row = spip_fetch_array($result)) {
189       return $row['id_auteur'];
190    }
191    // auteur inconnu, on le cree ...
192    spip_log("creation auteur".$name,"snippets");
193    return sql_insertq('spip_auteurs',array('nom'=>$name,'statut'=>'1comite')) ;
194}
195
196// recupere un id_mot selon le type|titre ou le creer
197function get_id_mot($name) {
198 
199   if (trim($name)=="") return false; 
200    list($type,$titre) = explode('|',$name) ;
201    $sql = "SELECT id_mot FROM spip_mots WHERE titre='".addslashes(filtrer_entites($titre))."'";
202    $result = spip_query($sql);
203    while ($row = spip_fetch_array($result)) {
204       return $row['id_mot'];
205    }
206
207    // creer le groupe ?
208    $sql = "SELECT id_groupe FROM spip_groupes_mots WHERE titre='".addslashes(filtrer_entites($type))."'";
209    $result2 = spip_query($sql);
210    $nb = sql_count($result2);
211    if ($nb == 0) {
212       $id_groupe = sql_insertq('spip_groupes_mots',array('titre'=>$type)) ;
213    }
214    while ($row = spip_fetch_array($result2)) {
215       $id_groupe = $row['id_groupe'];
216    }
217   
218    // mot inconnu, on le cree ...
219     spip_log("creation mot : ".$titre."groupe ".$id_groupe,"snippets");
220    return  sql_insertq('spip_mots',array('type'=>$type, 'titre'=>$titre , 'id_groupe' => $id_groupe)) ;
221
222}
223
224// recupere id d'un document
225function get_id_doc($fichier) {
226    if (trim($fichier)=="") return false;   
227    spip_log("get_id_doc cherche : ".$fichier,"snippets"); 
228    $sql = "SELECT id_document FROM spip_documents WHERE fichier='".addslashes(filtrer_entites($fichier))."'";
229    $result = spip_query($sql);
230    while ($row = spip_fetch_array($result)) {
231       spip_log("get_id_doc trouve : ".$row['id_document'],"snippets");
232       return $row['id_document'];
233    }
234    // inconnu  ...
235    spip_log("get_id_doc trouve pas :( ","snippets");
236    return false ;
237}
238
239?>
Note: See TracBrowser for help on using the repository browser.