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

Last change on this file since 23492 was 23492, checked in by arno@…, 11 years ago

Compat 2.0 (crade)

File size: 3.9 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                include_spip('base/create');
15                include_spip('base/abstract_sql');
16                include_spip('base/db_mysql');
17                include_spip('base/spiplistes_tables');
18                include_spip('inc/vieilles_defs');
19
20// Boucle XML
21$xml_field = array(
22                #"`hash`"       => "BIGINT UNSIGNED NOT NULL", // hash du nom xml
23                "id_xml" => "bigint(21) NOT NULL",
24                "xml"   => "varchar(255) default '' NOT NULL",
25                "xpath" => "varchar(255) default '' NOT NULL",
26                "noeud" => "varchar(100)",
27                "texte" => "text NOT NULL",
28                "attributs" => "text NOT NULL",
29                "id_parent" => "bigint(21) NOT NULL",
30                "statut" => "ENUM('', 'noeud', 'feuille') DEFAULT '' NOT NULL"
31);
32$xml_key = array(
33        "PRIMARY KEY"   => "id_xml",
34        "KEY" =>"xml",
35        "KEY" => "xpath",
36        "KEY" => "noeud"
37);
38
39$GLOBALS['tables_principales']['spip_xml'] =
40        array('field' => &$xml_field, 'key' => &$xml_key);
41$GLOBALS['table_des_tables']['xml'] = 'xml';
42
43function xml_creer_tables_temporaires(){
44        static $ok=NULL;
45        if ($ok==NULL){
46                $ok=true;
47
48       
49                $nom = 'spip_xml';
50                $champs = $GLOBALS['tables_principales'][$nom]['field'];
51                $cles = $GLOBALS['tables_principales'][$nom]['key'];
52                spip_mysql_create($nom, $champs, $cles, true, true);
53        }
54}
55
56function xml_fill_table($xml_file, $is_code=false) {
57        static $file_done=array(''=>true);
58
59        if($is_code) {
60                $key= md5($xml_file);
61        } else {
62                $key= $xml_file;
63        }
64        if (isset($file_done[$key])) return;
65
66        if(!$is_code && lire_fichier($f=find_in_path($xml_file),$contenu)!==false){
67                include_spip('inc/charset');
68                $contenu = transcoder_page($contenu);
69        } else {
70                $contenu= $xml_file;
71        }
72        $contenu = str_replace("<![CDATA[", "", $contenu);
73        $contenu = str_replace("]]>", "", $contenu);
74
75        include_spip("inc/xml");
76        $tree = spip_xml_parse($contenu);
77        @spip_query("DELETE FROM spip_xml WHERE xml=".spip_abstract_quote($key));
78       
79        xml_recurse_parse_to_table($key,'/',0,$tree);
80        $file_done[$key]=true;
81}
82
83function xml_recurse_parse_to_table(&$file,$xpath,$id_parent,&$subtree){
84        if (!is_array($subtree)){
85                return;
86//              die('erreur inatendue');
87        }
88        foreach($subtree as $tag=>$tagoccur){
89                $attrs = explode(' ',$tag);
90                $noeud = array_shift($attrs);
91                $attrs = trim(implode(' ',$attrs));
92                $texte = "";
93                if ((count($tagoccur)==1) AND !is_array($tagoccur[0])){
94                        // c'est une feuille
95                        $texte = $tagoccur[0];
96                        #spip_query("REPLACE INTO spip_xml "
97                        #       ."(xml,xpath,noeud,texte,attributs,statut) "
98                        #       ."VALUES (".spip_abstract_quote($file).",".spip_abstract_quote($xpath).",".spip_abstract_quote($noeud).",".spip_abstract_quote($texte).",".spip_abstract_quote($attrs).",'feuille')");
99                        $id = spip_abstract_insert('spip_xml',
100                                "(xml,xpath,noeud,texte,attributs,id_parent,statut)",
101                                "(".spip_abstract_quote($file).",".spip_abstract_quote("$xpath$noeud").",".spip_abstract_quote($noeud).",".spip_abstract_quote($texte).",".spip_abstract_quote($attrs).",$id_parent,'noeud')"
102                                );
103                }
104                else{
105                        // c'est un tableau de noeud ou feuille
106                        foreach ($tagoccur as $key=>$subsubtree) {
107                                if (is_array($subsubtree)){
108                                        // c'est un noeud
109                                        $id = spip_abstract_insert('spip_xml',
110                                        "(xml,xpath,noeud,texte,attributs,id_parent,statut)",
111                                        "(".spip_abstract_quote($file).",".spip_abstract_quote("$xpath$noeud").",".spip_abstract_quote($noeud).",".spip_abstract_quote($texte).",".spip_abstract_quote($attrs).",$id_parent,'noeud')"
112                                        );
113                                        xml_recurse_parse_to_table($file,"$xpath$noeud/",$id,$subsubtree);
114                                }
115                                else{
116                                        // c'est une feuille
117                                        $texte = $subsubtree;
118                                        $id = spip_abstract_insert('spip_xml',
119                                                "(xml,xpath,noeud,texte,attributs,id_parent,statut)",
120                                                "(".spip_abstract_quote($file).",".spip_abstract_quote("$xpath$noeud").",".spip_abstract_quote($noeud).",".spip_abstract_quote($texte).",".spip_abstract_quote($attrs).",$id_parent,'noeud')"
121                                                );
122                                }
123                        }
124                }
125        }
126}
127?>
Note: See TracBrowser for help on using the repository browser.