source: spip-zone/_plugins_/_dev_/boucles_xml/base/xml_temporaire.php @ 10322

Last change on this file since 10322 was 10322, checked in by christian_lefebvre@…, 13 years ago

gestion du critere {texte} pour pouvoir traiter du xml textuel et pas
seulement depuis un fichier

File size: 3.6 KB
Line 
1<?php
2/*
3 * Boucle xml
4 *
5 *
6 * Auteur :
7 * Cedric Morin
8 * © 2006 - Distribue sous licence GNU/GPL
9 *
10 */
11
12// Definition des tables temporaires pour permettre la squeletisation des formulaires
13//
14
15// Boucle XML
16$xml_field = array(
17                #"`hash`"       => "BIGINT UNSIGNED NOT NULL", // hash du nom xml
18                "id_xml" => "bigint(21) NOT NULL",
19                "xml"   => "varchar(255) default '' NOT NULL",
20                "xpath" => "varchar(255) default '' NOT NULL",
21                "noeud" => "varchar(100)",
22                "texte" => "text NOT NULL",
23                "attributs" => "text NOT NULL",
24                "id_parent" => "bigint(21) NOT NULL",
25                "statut" => "ENUM('', 'noeud', 'feuille') DEFAULT '' NOT NULL"
26);
27$xml_key = array(
28        "PRIMARY KEY"   => "id_xml",
29        "KEY" =>"xml",
30        "KEY" => "xpath",
31        "KEY" => "noeud"
32);
33
34$GLOBALS['tables_principales']['spip_xml'] =
35        array('field' => &$xml_field, 'key' => &$xml_key);
36$GLOBALS['table_des_tables']['xml'] = 'xml';
37
38function xml_creer_tables_temporaires(){
39        static $ok=NULL;
40        if ($ok==NULL){
41                $ok=true;
42                $nom = 'spip_xml';
43                $champs = $GLOBALS['tables_principales'][$nom]['field'];
44                $cles = $GLOBALS['tables_principales'][$nom]['key'];
45                spip_mysql_create($nom, $champs, $cles, true, true);
46               
47        }
48}
49
50function xml_fill_table($xml_file, $is_code=false) {
51        static $file_done=array(''=>true);
52
53        if($is_code) {
54                $key= md5($xml_file);
55        } else {
56                $key= $xml_file;
57        }
58        if (isset($file_done[$key])) return;
59
60        if(!$is_code && lire_fichier($f=find_in_path($xml_file),$contenu)!==false){
61                include_spip('inc/charset');
62                $contenu = transcoder_page($contenu);
63        } else {
64                $contenu= $xml_file;
65        }
66        include_spip('inc/plugin');
67        $tree = parse_plugin_xml($contenu);
68        spip_query("DELETE FROM spip_xml WHERE xml=".spip_abstract_quote($key));
69        xml_recurse_parse_to_table($key,'/',0,$tree);
70        $file_done[$key]=true;
71}
72
73function xml_recurse_parse_to_table(&$file,$xpath,$id_parent,&$subtree){
74        if (!is_array($subtree)){
75                die('erreur inatendue');
76        }
77        foreach($subtree as $tag=>$tagoccur){
78                $attrs = explode(' ',$tag);
79                $noeud = array_shift($attrs);
80                $attrs = trim(implode(' ',$attrs));
81                $texte = "";
82                if ((count($tagoccur)==1) AND !is_array($tagoccur[0])){
83                        // c'est une feuille
84                        $texte = $tagoccur[0];
85                        #spip_query("REPLACE INTO spip_xml "
86                        #       ."(xml,xpath,noeud,texte,attributs,statut) "
87                        #       ."VALUES (".spip_abstract_quote($file).",".spip_abstract_quote($xpath).",".spip_abstract_quote($noeud).",".spip_abstract_quote($texte).",".spip_abstract_quote($attrs).",'feuille')");
88                        $id = spip_abstract_insert('spip_xml',
89                                "(xml,xpath,noeud,texte,attributs,id_parent,statut)",
90                                "(".spip_abstract_quote($file).",".spip_abstract_quote("$xpath$noeud").",".spip_abstract_quote($noeud).",".spip_abstract_quote($texte).",".spip_abstract_quote($attrs).",$id_parent,'noeud')"
91                                );
92                }
93                else{
94                        // c'est un tableau de noeud ou feuille
95                        foreach ($tagoccur as $key=>$subsubtree) {
96                                if (is_array($subsubtree)){
97                                        // c'est un noeud
98                                        $id = spip_abstract_insert('spip_xml',
99                                        "(xml,xpath,noeud,texte,attributs,id_parent,statut)",
100                                        "(".spip_abstract_quote($file).",".spip_abstract_quote("$xpath$noeud").",".spip_abstract_quote($noeud).",".spip_abstract_quote($texte).",".spip_abstract_quote($attrs).",$id_parent,'noeud')"
101                                        );
102                                        xml_recurse_parse_to_table($file,"$xpath$noeud/",$id,$subsubtree);
103                                }
104                                else{
105                                        // c'est une feuille
106                                        $texte = $subsubtree;
107                                        $id = spip_abstract_insert('spip_xml',
108                                                "(xml,xpath,noeud,texte,attributs,id_parent,statut)",
109                                                "(".spip_abstract_quote($file).",".spip_abstract_quote("$xpath$noeud").",".spip_abstract_quote($noeud).",".spip_abstract_quote($texte).",".spip_abstract_quote($attrs).",$id_parent,'noeud')"
110                                                );
111                                }
112                        }
113                }
114        }
115}
116?>
Note: See TracBrowser for help on using the repository browser.