3 class sml_data_sources_xml_format extends mw_data{
5 public $status; // classes de sources - table sml_classes
12 # ----------------------------------------------------------------------------------------
16 public function source_xml_content($id, $params = array()){
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"];
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";
39 if($this->source["reference"]) $content .= " <reference src=\"".$this->source["reference"]["xml"]["url"]."\" />\n";
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"]){
46 " <image src=\""."http://".$_SERVER["SERVER_NAME"].$env->path("web").$this->source["image_uri"]."\" />\n";
48 if(isset($this->source["date_creation"]) && $this->source["date_creation"]){
50 " <date>".$this->source["date_creation"]."</date>\n";
52 if(isset($this->source["description"]) && $this->source["description"]){
54 " <description><![CDATA[".$this->source["description"]."]]></description>\n";
57 foreach($this->groupes as $id_groupe => $groupe){
58 if($groupe["nom"] && $groupe["id_groupe_status"]){
60 $groupe["id_groupe_status"] == $this->id_groupe_status_admin()
61 || $groupe["id_groupe_status"] == $this->id_groupe_status_editeur()
63 $content .= " <author><![CDATA[".$groupe["nom"]."]]></author>\n";
69 if(!$HAS_AUTHOR) return false;
70 foreach($this->source["documents"] as $id_document => $document){
72 " <document src=\"".$document["url"]."\">\n"
73 ." <![CDATA[".$document["nom"]."]]>\n"
78 " <licence href=\"".$this->licence["url"]."\"><![CDATA[".$this->licence["nom"]."]]></licence>\n";
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";
86 $content .= "</source>";
95 # ----------------------------------------------------------------------------------------
99 public 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]);
105 public function empty_source($params = array()){
107 "groupes" => array(),
109 "date_creation" => "",
115 "documents" => array(),
116 "derivations" => array(),
117 "reference" => array(),
121 "use_edit_content" => false
124 foreach($params as $key => $value) $source[$key] = $value;
128 public 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(
135 "content" => $this->xml_content,
136 "use_edit_content" => false
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);
150 public 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);
157 public 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"){
163 if($key == "title" || $key == "author"){
169 // -------------------------------------- source XML v2
171 public 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){
177 $source["titre"] = $value[0]["data"];
179 elseif($key == "link"){
180 $source["from"] = $value[0]["attrs"]["href"];
182 elseif($key == "image"){
183 $source["image"] = $value[0]["attrs"]["src"];
185 elseif($key == "author"){
186 foreach($value as $author){
187 $source["groupes"][] = array(
188 "nom" => $author["data"],
189 "id_groupe_status" => 0
193 elseif($key == "date"){
194 $source["date_creation"] = $value[0]["data"];
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"]
204 elseif($key == "derivated_from"){
205 $source["derivations"][] = array(
207 "url" => $value[0]["attrs"]["src"],
209 "use_edit_content" => false
213 elseif($key == "reference"){
214 $source["reference"] = array(
216 "url" => $value[0]["attrs"]["src"],
218 "use_edit_content" => false
222 elseif($key == "licence"){
223 $source["licence"] = array(
225 "nom" => $value[0]["data"],
226 "url" => $value[0]["attrs"]["href"]
230 if(isset($value[0]["data"])) $source[$key] = $value[0]["data"];
233 $source["auteur"] = "";
234 foreach($source["groupes"] as $auteur) $source["auteur"] .= ($source["auteur"] ? ", " : "").$auteur["nom"];
238 // -------------------------------------- source XML v1
240 public 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"]
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"]
258 elseif($key == "derivation"){
259 $source["derivations"][] = array(
261 "url" => $value[0]["data"],
263 "use_edit_content" => false
267 elseif($key == "reference"){
268 $source["reference"] = array(
270 "url" => $value[0]["data"],
272 "use_edit_content" => false
276 elseif($key == "licence"){
277 $source["licence"] = array(
278 "nom" => $value[0]["data"],
279 "url" => $value[0]["attrs"]["url"]
283 if(isset($value[0]["data"])) $source[$key] = $value[0]["data"];
286 $source["auteur"] = "";
287 foreach($source["groupes"] as $auteur) $source["auteur"] .= ($source["auteur"] ? ", " : "").$auteur["nom"];