82d9b6d0556de118b6e6e70ec234a60a1455b17c
[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                   { if(!isset($sources["list"][$id_source]["ordre"])){
117                       $sources["list"][$id_source]["ordre"] = 0;
118                     }
119                     $sources["total"]++;
120                   }
121                   else
122                   { $this->erreur("Impossible de lire les informations de l'une des sources");
123                     break;
124                   }
125                 }
126               }
127               $sources["list"] = $data->ordonne($sources["list"], "ordre");
128               $env->set_out("sources", $sources);
129             }
130             else $this->erreur("Impossible de lire la liste des sources");
131           }
132           else $this->erreur("Impossible de lire le fil d'ariane");
133         }
134         else $this->erreur("Impossible de lire les informations de la source");
135       }
136       else $this->erreur($this->validation_result);
137     }
138
139     function derivations(){
140       $env = $this->env();
141       $this->validate_source($env);
142       if($this->validation_result === true)
143       { $data = $env->data();
144         $derivations = array("list" => array(), "total" => 0);
145         if($this->source)
146         { if(($source_ariane = $data->source_ariane($this->source["id"])) !== false)
147           { $this->url_params = array();
148             foreach($source_ariane as $id_composition => $composition)
149             { if($composition["status"] == $this->morceau_status_id) $this->url_params["morceau"] = $id_composition;
150               elseif($composition["status"] == $this->album_status_id) $this->url_params["album"] = $id_composition;
151             }
152             if($this->source["status"] == $this->piste_status_id)
153             { $this->source_param = $env->set_out("source_param", "piste");
154               $this->source_controller = $env->set_out("source_controller", "piste");
155               $this->url_params["piste"] = $this->source["id"];
156             }
157             elseif($this->source["status"] == $this->morceau_status_id)
158             { $this->source_param = $env->set_out("source_param", "morceau");
159               $this->source_controller = $env->set_out("source_controller", "morceau");
160               $this->url_params["morceau"] = $this->source["id"];
161             }
162             $env->set_out("url_params", $this->url_params);
163             if(($_derivations = $data->source_derivations(array("derivation" => $this->source["id"]))) !== false)
164             { foreach($_derivations as $id_derivation => $derivation)
165               { if(($derivations["list"][$id_derivation] = $data->source($id_derivation, true)) !== false)
166                 { $derivations["total"]++;
167                 }
168                 else
169                 { $this->erreur("Impossible de lire les informations de l'une des derivations");
170                   break;
171                 }
172               }
173               $derivations["list"] = $data->ordonne($derivations["list"], "ordre");
174               $env->set_out("sources", $derivations);
175             }
176             else $this->erreur("Impossible de lire la liste des derivations");
177           }
178           else $this->validation_result = "Impossible de lire le fil d'ariane";
179         }
180         else $this->erreur("Impossible de lire les informations de la source");
181       }
182       else $this->erreur($this->validation_result);
183     }
184
185     function xml_form(){
186       $env = $this->env();
187       if(isset($_GET[$env->param("form")]))
188       { $data = $env->data();
189         $form_params = array();
190         if(isset($_GET[$env->param("derivation")]))
191         { if($_GET[$env->param("form")] == "edit")
192           { if(($source_derivation = $data->source_derivation($_GET[$env->param("derivation")])) !== false)
193             { $source = array
194               ( "id" => $source_derivation["id"],
195                 "xml" => array
196                 ( "url" => $source_derivation["derivation"],
197                   "content" => "",
198                   "use_edit_content" => false
199                 )
200               );
201               $derivation_edit_file = $data->derivation_edit_xml_path($source_derivation["id_source"], $source_derivation["id"]);
202               if(file_exists($derivation_edit_file))
203               { if(($derivation_edit_content = $data->get_edit_derivation_content($source_derivation["id_source"], $source_derivation["id"])) !== false)
204                 { if(($source = $data->source_xml_read($source_derivation["derivation"], $derivation_edit_content)) !==false)
205                   { $source["xml"] = array
206                     ( "url" => $source_derivation["derivation"],
207                       "content" => $derivation_edit_content,
208                       "use_edit_content" => true
209                     );
210                   }
211                   else $this->erreur("Impossible de lire le XML de la source");
212                 }
213                 else $this->erreur("Impossible de lire le XML de la source");
214               }
215               else
216               { if(($source = $data->source_xml_read($source_derivation["derivation"])) === false)
217                 { $source = $data->empty_source();
218                 }
219               }
220               $source["id_source"] = $source_derivation["id_source"];
221               $source["id"] = $_GET[$env->param("derivation")];
222               $form_params["maj_url"] = $env->url("users/morceaux/maj_xml", array("id" => $_GET[$env->param("derivation")], "xml" => "derivation"));
223             }
224           }
225           elseif($_GET[$env->param("form")] == "add"){
226             $source = $data->empty_source();
227             $source["id"] = $_GET[$env->param("derivation")];
228             $source["xml"] = array(
229               "use_edit_content" => false,
230               "content" => ""
231             );
232           }
233           $form_params["name"] = "derivation";
234           $form_params["label"] = "d&eacute;rive de &raquo; ";
235           $form_params["can_delete"] = true;
236           $form_params["id"] = $_GET[$env->param("derivation")];
237         }
238         elseif(isset($_GET[$env->param("reference")]))
239         { 
240         }
241         $env->set_out("form_params", $form_params);
242         $env->set_out("xml_form_source", $source);
243       }
244       else $this->erreur("Parametres invalides pour le formulaire");
245     }
246
247     function xml(){
248       $env = $this->env();
249       $this->validate_source($env);
250       if($this->validation_result === true)
251       { $data = $env->data();
252         $xml = "";
253         if($this->source)
254         { if($this->source = $data->load_source($this->source))
255           { $xml =
256              "<pre>"
257             .htmlentities
258             ( $this->source["reference"] ? $this->source["reference"]["xml"]["content"] : $this->source["xml"]["content"],
259               ENT_COMPAT,
260               "UTF-8"
261             )
262             ."</pre>";
263           }
264           else $this->erreur("Impossible de lire les informations XML de la source");
265         }
266         else $this->erreur("Impossible de lire les informations de la source");
267       }
268       else $this->erreur($this->validation_result);
269       echo $xml;
270       exit;
271     }
272
273     function erreur($content)
274     { echo $content;
275       exit;
276     }
277
278   }
279
280 ?>