plusieurs auteurs pour les sources
[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
6     var $status; // classes de sources - table sml_classes
7     var $source;
8     var $groupes;
9     var $licence;
10     var $sources;
11     var $xml_content;
12
13     # ----------------------------------------------------------------------------------------
14     #                                                                            data vers XML
15     #
16
17     function source_xml_content($id, $params = array())
18     { $env = $this->env();
19       $content = false;
20       $this->status = isset($this->status) ? $this->status : $this->source_status();
21       if($this->status !== false)
22       { $this->source = isset($params["source"]) ? $params["source"] : $this->source($id, true);
23         if($this->source !== false)
24         { if($this->source["groupes"]) $this->groupes = $this->source["groupes"];
25           if(isset($params["groupes"])) $this->groupes = $params["groupes"];
26           if(!isset($this->groupes)) $this->groupes = $this->source_groupes($id);
27           if($this->groupes !== false)
28           { $this->licence = isset($params["licence"]) ? $params["licence"] : $this->licence($this->source["licence"]["id"]);
29             if($this->licence !== false)
30             { if(($this->sources = $this->source_compositions(array("id_composition" => $id))) !== false)
31               { $content = "<source>\n";
32                 if($this->source["derivations"])
33                 { foreach($this->source["derivations"] as $id_derivation => $derivation)
34                   { $content .= "  <derivation><![CDATA[".$derivation["xml"]["url"]."]]></derivation>\n";
35                   }
36                 }
37                 if($this->source["reference"]) $content .= "  <reference><![CDATA[".$this->source["reference"]["xml"]["url"]."]]></reference>\n";
38                 else
39                 { $content .=
40                    "  <titre><![CDATA[".$this->source["titre"]."]]></titre>\n"
41                   ."  <from><![CDATA[http://".$_SERVER["SERVER_NAME"].$env->url("sources/".$this->status[$this->source["status"]]["nom"]."/view", array($this->status[$this->source["status"]]["nom"] => $id))."]]></from>\n";
42                   $HAS_AUTHOR = false;
43                   foreach($this->groupes as $id_groupe => $groupe)
44                   { if($groupe["nom"] && $groupe["id_groupe_status"])
45                     { if
46                       (    $groupe["id_groupe_status"] == $this->id_groupe_status_admin()
47                         || $groupe["id_groupe_status"] == $this->id_groupe_status_editeur()
48                       )
49                       { $content .= "  <auteur><![CDATA[".$groupe["nom"]."]]></auteur>\n";
50                         $HAS_AUTHOR = true;
51                       }
52                     }
53                     else return false;
54                   }
55                   if(!$HAS_AUTHOR) return false;
56                   foreach($this->source["documents"] as $id_document => $document)
57                   { $content .=
58                      "  <document>\n"
59                     ."    <nom><![CDATA[".$document["nom"]."]]></nom>\n"
60                     ."    <url><![CDATA[".$document["url"]."]]></url>\n"
61                     ."  </document>\n";
62                   }
63                   if($this->licence)
64                   { $content .=
65                      "  <licence url=\"".$this->licence["url"]."\"><![CDATA[".$this->licence["nom"]."]]></licence>\n";
66                   }
67                   if(isset($this->sources[$id]))
68                   { foreach($this->sources[$id] as $id_source)
69                     { $content .= "  <source src=\"".$this->source_xml_url($id_source)."\" />\n";
70                     }
71                   }
72                 }
73                 $content .= "</source>";
74               }
75             }
76           }
77         }
78       }
79       return $content;
80     }
81
82     # ----------------------------------------------------------------------------------------
83     #                                                                            XML vers data
84     #
85
86     function parse_source_xml($xml_content)
87     { if(!isset($this->sxml)) $this->sxml = new sxml();
88       $this->sxml->parse($xml_content);
89       return isset($this->sxml->data["source"][0]);
90     }
91
92     function empty_source($params = array())
93     { $source = array
94       ( "groupes" => array(),
95         "titre" => "",
96         "from" => "",
97         "licence" => array
98         ( "nom" => "",
99           "url" => ""
100         ),
101         "documents" => array(),
102         "derivations" => array(),
103         "reference" => array(),
104         "xml" => array
105         ( "url" => "",
106           "content" => "",
107           "use_edit_content" => false
108         )
109       );
110       foreach($params as $key => $value) $source[$key] = $value;
111       return $source;
112     }
113
114     function source_xml_read($url, $xml_content = null)
115     { $source = $this->empty_source();
116       if($this->xml_content = (isset($xml_content) ? $xml_content : $this->get_source_xml_from_url($url)))
117       { if($this->xml_content === -1) $this->xml_content = $this->get_source_xml_from_url($url, true);
118         $source["xml"] = array
119         ( "url" => $url,
120           "content" => $this->xml_content,
121           "use_edit_content" => false
122         );
123         if($this->parse_source_xml($this->xml_content))
124         { $this->buffer = $this->sxml->data["source"][0];
125           foreach($this->buffer["subs"] as $key => $value)
126           { if($key == "auteur")
127             { $source["groupes"][] = array
128               ( "nom" => $value[0]["data"]
129               );
130             }
131             elseif($key == "document")
132             { foreach($value as $id_document => $document)
133               { $source["documents"][$id_document] = array
134                 ( "nom" => $document["subs"]["nom"][0]["data"],
135                   "url" => $document["subs"]["url"][0]["data"]
136                 );
137               }
138             }
139             elseif($key == "derivation")
140             { $source["derivations"][] = array
141               ( "xml" => array
142                 ( "url" => $value[0]["data"],
143                   "content" => "",
144                   "use_edit_content" => false
145                 )
146               );
147             }
148             elseif($key == "reference")
149             { $source["reference"] = array
150               ( "xml" => array
151                 ( "url" => $value[0]["data"],
152                   "content" => "",
153                   "use_edit_content" => false
154                 )
155               );
156             }
157             elseif($key == "licence")
158             { $source["licence"] = array
159               ( "nom" => $value[0]["data"],
160                 "url" => $value[0]["attrs"]["url"]
161               );
162             }
163             else
164             { $source[$key] = $value[0]["data"];
165             }
166           }
167           $source["auteur"] = "";
168           foreach($source["groupes"] as $auteur) $source["auteur"] .= ($source["auteur"] ? ", " : "").$auteur["nom"];
169         }
170         else return false;
171       }
172       else return false;
173       return $source;
174     }
175
176   }
177
178 ?>