676262abc502e55b2ee6ff36aaefc92e2f5092c7
[mw_sourceml] / app / data / modules / share / sml_data_sources_xml_format.php
1 <?php
2
3   class sml_data_sources_xml_format extends mw_data{
4
5     var $status; // classes de sources - table sml_classes
6     var $source;
7     var $groupes;
8     var $licence;
9     var $sources;
10     var $xml_content;
11
12     # ----------------------------------------------------------------------------------------
13     #                                                                            data vers XML
14     #
15
16     function source_xml_content($id, $params = array()){
17       $env = $this->env();
18       $content = false;
19       $this->status = isset($this->status) ? $this->status : $this->source_status();
20       if($this->status !== false){
21         $this->source = isset($params["source"]) ? $params["source"] : $this->source($id, true);
22         if($this->source !== false){
23           if($this->source["reference"]){
24             return $this->source["reference"]["xml"]["content"];
25           }
26           if($this->source["groupes"]) $this->groupes = $this->source["groupes"];
27           if(isset($params["groupes"])) $this->groupes = $params["groupes"];
28           if(!isset($this->groupes)) $this->groupes = $this->source_groupes($id);
29           if($this->groupes !== false){
30             $this->licence = isset($params["licence"]) ? $params["licence"] : $this->licence($this->source["licence"]["id"]);
31             if($this->licence !== false){
32               if(($this->sources = $this->source_compositions(array("id_composition" => $id))) !== false){
33                 $content = "<source>\n";
34                 if($this->source["derivations"]){
35                   foreach($this->source["derivations"] as $id_derivation => $derivation){
36                     $content .= "  <derivated_from src=\"".$derivation["xml"]["url"]."\" />\n";
37                   }
38                 }
39                 if($this->source["reference"]) $content .= "  <reference src=\"".$this->source["reference"]["xml"]["url"]."\" />\n";
40                 else{
41                   $content .=
42                    "  <title><![CDATA[".$this->source["titre"]."]]></title>\n"
43                   ."  <link href=\"http://".$_SERVER["SERVER_NAME"].$env->url("sources/".$this->status[$this->source["status"]]["nom"]."/view", array($this->status[$this->source["status"]]["nom"] => $id))."\" />\n";
44                   if(isset($this->source["image_uri"]) && $this->source["image_uri"]){
45                     $content .=
46                     "  <image src=\""."http://".$_SERVER["SERVER_NAME"].$env->path("web").$this->source["image_uri"]."\" />\n";
47                   }
48                   if(isset($this->source["date_creation"]) && $this->source["date_creation"]){
49                     $content .=
50                     "  <date>".$this->source["date_creation"]."</date>\n";
51                   }
52                   if(isset($this->source["description"]) && $this->source["description"]){
53                     $content .=
54                     "  <description><![CDATA[".$this->source["description"]."]]></description>\n";
55                   }
56                   $HAS_AUTHOR = false;
57                   foreach($this->groupes as $id_groupe => $groupe){
58                     if($groupe["nom"] && $groupe["id_groupe_status"]){
59                       if(
60                            $groupe["id_groupe_status"] == $this->id_groupe_status_admin()
61                         || $groupe["id_groupe_status"] == $this->id_groupe_status_editeur()
62                       ){
63                         $content .= "  <author><![CDATA[".$groupe["nom"]."]]></author>\n";
64                         $HAS_AUTHOR = true;
65                       }
66                     }
67                     else return false;
68                   }
69                   if(!$HAS_AUTHOR) return false;
70                   foreach($this->source["documents"] as $id_document => $document){
71                     $content .=
72                      "  <document src=\"".$document["url"]."\">\n"
73                     ."    <![CDATA[".$document["nom"]."]]>\n"
74                     ."  </document>\n";
75                   }
76                   if($this->licence){
77                     $content .=
78                      "  <licence href=\"".$this->licence["url"]."\"><![CDATA[".$this->licence["nom"]."]]></licence>\n";
79                   }
80                   if(isset($this->sources[$id])){
81                     foreach($this->sources[$id] as $id_source){
82                       $content .= "  <source src=\"".$this->source_xml_url($id_source)."\" />\n";
83                     }
84                   }
85                 }
86                 $content .= "</source>";
87               }
88             }
89           }
90         }
91       }
92       return $content;
93     }
94
95     # ----------------------------------------------------------------------------------------
96     #                                                                            XML vers data
97     #
98
99     function parse_source_xml($xml_content){
100       if(!isset($this->sxml)) $this->sxml = new sxml();
101       $this->sxml->parse($xml_content);
102       return isset($this->sxml->data["source"][0]);
103     }
104
105     function empty_source($params = array()){
106       $source = array(
107         "groupes" => array(),
108         "titre" => "",
109         "date_creation" => "",
110         "from" => "",
111         "licence" => array(
112           "nom" => "",
113           "url" => ""
114         ),
115         "documents" => array(),
116         "derivations" => array(),
117         "reference" => array(),
118         "xml" => array(
119           "url" => "",
120           "content" => "",
121           "use_edit_content" => false
122         )
123       );
124       foreach($params as $key => $value) $source[$key] = $value;
125       return $source;
126     }
127
128     function source_xml_read($url, $xml_content = null){
129       $source = $this->empty_source();
130       if($this->xml_content = (isset($xml_content) ? $xml_content : $this->get_source_xml_from_url($url))){
131         if($this->xml_content === -1) $this->xml_content = $this->get_source_xml_from_url($url, true);
132         if($this->parse_source_xml($this->xml_content)){
133           $source["xml"] = array(
134             "url" => $url,
135             "content" => $this->xml_content,
136             "use_edit_content" => false
137           );
138           $this->buffer = $this->sxml->data["source"][0];
139           if($source_xml_version = $this->get_source_buffer_xml_version()){
140             $source = $this->parse_source_buffer($source_xml_version, $source);
141           }
142           else return false;
143         }
144         else return false;
145       }
146       else return false;
147       return $source;
148     }
149
150     function parse_source_buffer($source_xml_version, $default_source = null){
151       if(method_exists($this, $method_name = "parse_source_buffer_".$source_xml_version)){
152         return $this->$method_name($default_source);
153       }
154       return false;
155     }
156
157     function get_source_buffer_xml_version(){
158       if(!isset($this->buffer["subs"])) return false;
159       foreach($this->buffer["subs"] as $key => $value){
160         if($key == "titre" || $key == "auteur"){
161           return "v1";
162         }
163         if($key == "title" || $key == "author"){
164           return "v2";
165         }
166       }
167     }
168
169     // -------------------------------------- source XML v2
170
171     function parse_source_buffer_v2($default_source = null){
172       if(isset($default_source)) $source = $default_source;
173       else $source = $this->empty_source();
174       if(!isset($this->buffer["subs"])) return $source;
175       foreach($this->buffer["subs"] as $key => $value){
176         if($key == "title"){
177           $source["titre"] = $value[0]["data"];
178         }
179         elseif($key == "link"){
180           $source["from"] = $value[0]["attrs"]["href"];
181         }
182         elseif($key == "image"){
183           $source["image"] = $value[0]["attrs"]["src"];
184         }
185         elseif($key == "author"){
186           foreach($value as $author){
187             $source["groupes"][] = array(
188               "nom" => $author["data"],
189               "id_groupe_status" => 0
190             );
191           }
192         }
193         elseif($key == "date"){
194           $source["date_creation"] = $value[0]["data"];
195         }
196         elseif($key == "document"){
197           foreach($value as $id_document => $document){
198             $source["documents"][$id_document] = array(
199               "nom" => $document["data"],
200               "url" => $document["attrs"]["src"]
201             );
202           }
203         }
204         elseif($key == "derivated_from"){
205           $source["derivations"][] = array(
206             "xml" => array(
207               "url" => $value[0]["attrs"]["src"],
208               "content" => "",
209               "use_edit_content" => false
210             )
211           );
212         }
213         elseif($key == "reference"){
214           $source["reference"] = array(
215             "xml" => array(
216               "url" => $value[0]["attrs"]["src"],
217               "content" => "",
218               "use_edit_content" => false
219             )
220           );
221         }
222         elseif($key == "licence"){
223           $source["licence"] = array(
224             "id" => 0,
225             "nom" => $value[0]["data"],
226             "url" => $value[0]["attrs"]["href"]
227           );
228         }
229         else{
230           if(isset($value[0]["data"])) $source[$key] = $value[0]["data"];
231         }
232       }
233       $source["auteur"] = "";
234       foreach($source["groupes"] as $auteur) $source["auteur"] .= ($source["auteur"] ? ", " : "").$auteur["nom"];
235       return $source;
236     }
237
238     // -------------------------------------- source XML v1
239
240     function parse_source_buffer_v1($default_source = null){
241       if(isset($default_source)) $source = $default_source;
242       else $source = $this->empty_source();
243       if(!isset($this->buffer["subs"])) return $source;
244       foreach($this->buffer["subs"] as $key => $value){
245         if($key == "auteur"){
246           $source["groupes"][] = array(
247             "nom" => $value[0]["data"]
248           );
249         }
250         elseif($key == "document"){
251           foreach($value as $id_document => $document){
252             $source["documents"][$id_document] = array(
253               "nom" => $document["subs"]["nom"][0]["data"],
254               "url" => $document["subs"]["url"][0]["data"]
255             );
256           }
257         }
258         elseif($key == "derivation"){
259           $source["derivations"][] = array(
260             "xml" => array(
261               "url" => $value[0]["data"],
262               "content" => "",
263               "use_edit_content" => false
264             )
265           );
266         }
267         elseif($key == "reference"){
268           $source["reference"] = array(
269             "xml" => array(
270               "url" => $value[0]["data"],
271               "content" => "",
272               "use_edit_content" => false
273             )
274           );
275         }
276         elseif($key == "licence"){
277           $source["licence"] = array(
278             "nom" => $value[0]["data"],
279             "url" => $value[0]["attrs"]["url"]
280           );
281         }
282         else{
283           if(isset($value[0]["data"])) $source[$key] = $value[0]["data"];
284         }
285       }
286       $source["auteur"] = "";
287       foreach($source["groupes"] as $auteur) $source["auteur"] .= ($source["auteur"] ? ", " : "").$auteur["nom"];
288       return $source;
289     }
290
291   }
292
293 ?>