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

Last change on this file since 53451 was 53451, checked in by yffic@…, 8 years ago

if (!defined("_ECRIRE_INC_VERSION")) return; sur tout fichier PHP pour sécurité future principalement

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