sourceml devient un plugin mtweb
[mw_sourceml] / app / controllers / content / sources.php
1 <?php
2
3   class mw_content_sources extends mw_controller
4   {
5     var $status;
6     var $album_status_id;
7     var $morceau_status_id;
8     var $piste_status_id;
9     var $url_params;
10     var $source_param;
11     var $licences;
12
13     var $groupe;
14     var $source;
15     var $source_controller;
16
17     var $validation_result;
18
19     function validate(){
20       $env = $this->env();
21       $this->validation_result = true;
22       $this->validate_status($env);
23       $this->validate_licences($env);
24       return true;
25     }
26
27     function validate_status(){
28       $env = $this->env();
29       if($this->validation_result === true)
30       { $data = $env->data();
31         if(($this->status = $data->source_status()) !== false)
32         { foreach($this->status as $id_source_status => $source_status)
33           { if($source_status["nom"] == "album") $this->album_status_id = $id_source_status;
34             if($source_status["nom"] == "morceau") $this->morceau_status_id = $id_source_status;
35             if($source_status["nom"] == "piste") $this->piste_status_id = $id_source_status;
36             if(isset($this->album_status_id) && isset($this->morceau_status_id) && isset($this->piste_status_id)) break;
37           }
38           if(!isset($this->album_status_id)) $this->validation_result = "Type de source inconnu: album";
39           elseif(!isset($this->morceau_status_id)) $this->validation_result = "Type de source inconnu: morceau";
40           elseif(!isset($this->piste_status_id)) $this->validation_result = "Type de source inconnu: piste";
41         }
42         else $this->validation_result = "Impossible de lire la liste des status de source";
43       }
44     }
45
46     function validate_licences(){
47       $env = $this->env();
48       if($this->validation_result === true)
49       { $data = $env->data();
50         if(($this->licences = $data->licences()) !== false)
51         { $env->set_out("licences", $this->licences);
52         }
53         else $this->validation_result = "Impossible de lire la liste des licences";
54       }
55     }
56
57     function validate_source(){
58       $env = $this->env();
59       if($this->validation_result === true)
60       { $data = $env->data();
61         if(isset($_GET[$env->param("id")]) && $_GET[$env->param("id")])
62         { if($this->source = $data->source($_GET[$env->param("id")]))
63           {
64           }
65           else $this->validation_result = "Impossible de lire les informations de la source";
66         }
67         else $this->validation_result = "parametre source manquant";
68       }
69     }
70
71     function validate_groupes(){
72       $env = $this->env();
73       if($this->validation_result === true)
74       { $data = $env->data();
75         if(($groupes = $data->groupes()) !== false)
76         { $env->set_out("groupes", $groupes);
77           if(isset($_GET[$env->param("groupe")]) && $_GET[$env->param("groupe")])
78           { if(($this->groupe = $data->groupe($_GET[$env->param("groupe")])) !== false)
79             { $env->set_out("groupe", $groupe);
80             }
81             else $this->validation_result = "Impossible de lire les informations du groupe";
82           }
83         }
84         else $this->validation_result = "Impossible de lire la liste des groupes";
85       }
86     }
87
88     function sources(){
89       $env = $this->env();
90       $this->validate_source($env);
91       if($this->validation_result === true)
92       { $data = $env->data();
93         $sources = array("list" => array(), "total" => 0);
94         if($this->source)
95         { if(($source_ariane = $data->source_ariane($this->source["id"])) !== false)
96           { $this->url_params = array();
97             foreach($source_ariane as $id_composition => $composition)
98             { if($composition["status"] == $this->morceau_status_id) $this->url_params["morceau"] = $id_composition;
99               elseif($composition["status"] == $this->album_status_id) $this->url_params["album"] = $id_composition;
100             }
101             if($this->source["status"] == $this->morceau_status_id)
102             { $this->source_param = $env->set_out("source_param", "piste");
103               $this->source_controller = $env->set_out("source_controller", "piste");
104               $this->url_params["morceau"] = $this->source["id"];
105             }
106             elseif($this->source["status"] == $this->album_status_id)
107             { $this->source_param = $env->set_out("source_param", "morceau");
108               $this->source_controller = $env->set_out("source_controller", "morceau");
109               $this->url_params["album"] = $this->source["id"];
110             }
111             $env->set_out("url_params", $this->url_params);
112             if(($_sources = $data->source_compositions(array("id_composition" => $this->source["id"]))) !== false)
113             { if(isset($_sources[$this->source["id"]]) && $_sources[$this->source["id"]])
114               { foreach($_sources[$this->source["id"]] as $id_source)
115                 { if(($sources["list"][$id_source] = $data->source($id_source, true)) !== false)
116                   { $sources["total"]++;
117                   }
118                   else
119                   { $this->erreur("Impossible de lire les informations de l'une des sources");
120                     break;
121                   }
122                 }
123               }
124               $sources["list"] = $data->ordonne($sources["list"], "ordre");
125               $env->set_out("sources", $sources);
126             }
127             else $this->erreur("Impossible de lire la liste des sources");
128           }
129           else $this->erreur("Impossible de lire le fil d'ariane");
130         }
131         else $this->erreur("Impossible de lire les informations de la source");
132       }
133       else $this->erreur($this->validation_result);
134     }
135
136     function derivations(){
137       $env = $this->env();
138       $this->validate_source($env);
139       if($this->validation_result === true)
140       { $data = $env->data();
141         $derivations = array("list" => array(), "total" => 0);
142         if($this->source)
143         { if(($source_ariane = $data->source_ariane($this->source["id"])) !== false)
144           { $this->url_params = array();
145             foreach($source_ariane as $id_composition => $composition)
146             { if($composition["status"] == $this->morceau_status_id) $this->url_params["morceau"] = $id_composition;
147               elseif($composition["status"] == $this->album_status_id) $this->url_params["album"] = $id_composition;
148             }
149             if($this->source["status"] == $this->piste_status_id)
150             { $this->source_param = $env->set_out("source_param", "piste");
151               $this->source_controller = $env->set_out("source_controller", "piste");
152               $this->url_params["piste"] = $this->source["id"];
153             }
154             elseif($this->source["status"] == $this->morceau_status_id)
155             { $this->source_param = $env->set_out("source_param", "morceau");
156               $this->source_controller = $env->set_out("source_controller", "morceau");
157               $this->url_params["morceau"] = $this->source["id"];
158             }
159             $env->set_out("url_params", $this->url_params);
160             if(($_derivations = $data->source_derivations(array("derivation" => $this->source["id"]))) !== false)
161             { foreach($_derivations as $id_derivation => $derivation)
162               { if(($derivations["list"][$id_derivation] = $data->source($id_derivation, true)) !== false)
163                 { $derivations["total"]++;
164                 }
165                 else
166                 { $this->erreur("Impossible de lire les informations de l'une des derivations");
167                   break;
168                 }
169               }
170               $derivations["list"] = $data->ordonne($derivations["list"], "ordre");
171               $env->set_out("sources", $derivations);
172             }
173             else $this->erreur("Impossible de lire la liste des derivations");
174           }
175           else $this->validation_result = "Impossible de lire le fil d'ariane";
176         }
177         else $this->erreur("Impossible de lire les informations de la source");
178       }
179       else $this->erreur($this->validation_result);
180     }
181
182     function xml_form(){
183       $env = $this->env();
184       if(isset($_GET[$env->param("form")]))
185       { $data = $env->data();
186         $form_params = array();
187         if(isset($_GET[$env->param("derivation")]))
188         { if($_GET[$env->param("form")] == "edit")
189           { if(($source_derivation = $data->source_derivation($_GET[$env->param("derivation")])) !== false)
190             { $source = array
191               ( "id" => $source_derivation["id"],
192                 "xml" => array
193                 ( "url" => $source_derivation["derivation"],
194                   "content" => "",
195                   "use_edit_content" => false
196                 )
197               );
198               $derivation_edit_file = $data->derivation_edit_xml_path($source_derivation["id_source"], $source_derivation["id"]);
199               if(file_exists($derivation_edit_file))
200               { if(($derivation_edit_content = $data->get_edit_derivation_content($source_derivation["id_source"], $source_derivation["id"])) !== false)
201                 { if(($source = $data->source_xml_read($source_derivation["derivation"], $derivation_edit_content)) !==false)
202                   { $source["xml"] = array
203                     ( "url" => $source_derivation["derivation"],
204                       "content" => $derivation_edit_content,
205                       "use_edit_content" => true
206                     );
207                   }
208                   else $this->erreur("Impossible de lire le XML de la source");
209                 }
210                 else $this->erreur("Impossible de lire le XML de la source");
211               }
212               else
213               { if(($source = $data->source_xml_read($source_derivation["derivation"])) === false)
214                 { $source = $data->empty_source();
215                 }
216               }
217               $source["id_source"] = $source_derivation["id_source"];
218               $source["id"] = $_GET[$env->param("derivation")];
219               $form_params["maj_url"] = $env->url("users/morceaux/maj_xml", array("id" => $_GET[$env->param("derivation")], "xml" => "derivation"));
220             }
221           }
222           elseif($_GET[$env->param("form")] == "add"){
223             $source = $data->empty_source();
224             $source["id"] = $_GET[$env->param("derivation")];
225             $source["xml"] = array(
226               "use_edit_content" => false,
227               "content" => ""
228             );
229           }
230           $form_params["name"] = "derivation";
231           $form_params["label"] = "d&eacute;rive de &raquo; ";
232           $form_params["can_delete"] = true;
233           $form_params["id"] = $_GET[$env->param("derivation")];
234         }
235         elseif(isset($_GET[$env->param("reference")]))
236         { 
237         }
238         $env->set_out("form_params", $form_params);
239         $env->set_out("xml_form_source", $source);
240       }
241       else $this->erreur("Parametres invalides pour le formulaire");
242     }
243
244     function xml(){
245       $env = $this->env();
246       $this->validate_source($env);
247       if($this->validation_result === true)
248       { $data = $env->data();
249         $xml = "";
250         if($this->source)
251         { if($this->source = $data->load_source($this->source))
252           { $xml =
253              "<pre>"
254             .htmlentities
255             ( $this->source["reference"] ? $this->source["reference"]["xml"]["content"] : $this->source["xml"]["content"],
256               ENT_COMPAT,
257               "UTF-8"
258             )
259             ."</pre>";
260           }
261           else $this->erreur("Impossible de lire les informations XML de la source");
262         }
263         else $this->erreur("Impossible de lire les informations de la source");
264       }
265       else $this->erreur($this->validation_result);
266       echo $xml;
267       exit;
268     }
269
270     function erreur($content)
271     { echo $content;
272       exit;
273     }
274
275   }
276
277 ?>