3 class sml_data_sources_xml_format extends mw_data{
5 var $status; // classes de sources - table sml_classes
12 # ----------------------------------------------------------------------------------------
16 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["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 src=\"".$derivation["xml"]["url"]."\" />\n";
36 if($this->source["reference"]) $content .= " <reference src=\"".$this->source["reference"]["xml"]["url"]."\" />\n";
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"]){
43 " <image src=\""."http://".$_SERVER["SERVER_NAME"].$env->path("web").$this->source["image_uri"]."\" />\n";
45 if(isset($this->source["date_creation"]) && $this->source["date_creation"]){
47 " <date>".$this->source["date_creation"]."</date>\n";
49 if(isset($this->source["description"]) && $this->source["description"]){
51 " <description><![CDATA[".$this->source["description"]."]]></description>\n";
54 foreach($this->groupes as $id_groupe => $groupe){
55 if($groupe["nom"] && $groupe["id_groupe_status"]){
57 $groupe["id_groupe_status"] == $this->id_groupe_status_admin()
58 || $groupe["id_groupe_status"] == $this->id_groupe_status_editeur()
60 $content .= " <author><![CDATA[".$groupe["nom"]."]]></author>\n";
66 if(!$HAS_AUTHOR) return false;
67 foreach($this->source["documents"] as $id_document => $document){
69 " <document src=\"".$document["url"]."\">\n"
70 ." <![CDATA[".$document["nom"]."]]>\n"
75 " <licence href=\"".$this->licence["url"]."\"><![CDATA[".$this->licence["nom"]."]]></licence>\n";
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";
83 $content .= "</source>";
92 # ----------------------------------------------------------------------------------------
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]);
102 function empty_source($params = array()){
104 "groupes" => array(),
106 "date_creation" => "",
112 "documents" => array(),
113 "derivations" => array(),
114 "reference" => array(),
118 "use_edit_content" => false
121 foreach($params as $key => $value) $source[$key] = $value;
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(
132 "content" => $this->xml_content,
133 "use_edit_content" => false
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);
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);
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"){
160 if($key == "title" || $key == "author"){
166 // -------------------------------------- source XML v2
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){
174 $source["titre"] = $value[0]["data"];
176 elseif($key == "link"){
177 $source["from"] = $value[0]["attrs"]["href"];
179 elseif($key == "image"){
180 $source["image"] = $value[0]["attrs"]["src"];
182 elseif($key == "author"){
183 foreach($value as $author){
184 $source["groupes"][] = array(
185 "nom" => $author["data"],
186 "id_groupe_status" => 0
190 elseif($key == "date"){
191 $source["date_creation"] = $value[0]["data"];
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"]
201 elseif($key == "derivated_from"){
202 $source["derivations"][] = array(
204 "url" => $value[0]["attrs"]["src"],
206 "use_edit_content" => false
210 elseif($key == "reference"){
211 $source["reference"] = array(
213 "url" => $value[0]["attrs"]["src"],
215 "use_edit_content" => false
219 elseif($key == "licence"){
220 $source["licence"] = array(
222 "nom" => $value[0]["data"],
223 "url" => $value[0]["attrs"]["href"]
227 if(isset($value[0]["data"])) $source[$key] = $value[0]["data"];
230 $source["auteur"] = "";
231 foreach($source["groupes"] as $auteur) $source["auteur"] .= ($source["auteur"] ? ", " : "").$auteur["nom"];
235 // -------------------------------------- source XML v1
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"]
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"]
255 elseif($key == "derivation"){
256 $source["derivations"][] = array(
258 "url" => $value[0]["data"],
260 "use_edit_content" => false
264 elseif($key == "reference"){
265 $source["reference"] = array(
267 "url" => $value[0]["data"],
269 "use_edit_content" => false
273 elseif($key == "licence"){
274 $source["licence"] = array(
275 "nom" => $value[0]["data"],
276 "url" => $value[0]["attrs"]["url"]
280 if(isset($value[0]["data"])) $source[$key] = $value[0]["data"];
283 $source["auteur"] = "";
284 foreach($source["groupes"] as $auteur) $source["auteur"] .= ($source["auteur"] ? ", " : "").$auteur["nom"];