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