modifications sur le template default
[mw_sourceml] / app / controllers / users / pistes.php
1 <?php
2
3   class mw_users_pistes extends mw_controller{
4
5     var $user;
6
7     var $status;
8     var $album_status_id;
9     var $morceau_status_id;
10     var $piste_status_id;
11
12     function validate(){
13       $env = $this->env();
14       $data = $env->data();
15       if(($this->status = $data->source_status()) === false){
16         return "Impossible de lire la liste des status de source";
17       }
18       foreach($this->status as $id_source_status => $source_status){
19         if($source_status["nom"] == "album") $this->album_status_id = $id_source_status;
20         if($source_status["nom"] == "morceau") $this->morceau_status_id = $id_source_status;
21         if($source_status["nom"] == "piste") $this->piste_status_id = $id_source_status;
22         if(isset($this->album_status_id) && isset($this->morceau_status_id) && isset($this->piste_status_id)) break;
23       }
24       if(
25             !isset($this->album_status_id)
26         ||  !isset($this->morceau_status_id)
27         ||  !isset($this->piste_status_id)
28       ){
29         return "liste des status de source incomplète";
30       }
31       if(!($this->user = $env->user())){
32         return "Vous devez être identifié pour accéder à cette page";
33       }
34       return true;
35     }
36
37     function index(){
38       $env = $this->env();
39       $data = $env->data();
40       if(($groupes = $data->groupes($this->user["id"])) === false){
41         $env->erreur("Impossible de lire la liste des groupes");
42         return;
43       }
44       $morceaux_groupes = $groupes["list"];
45       $id_groupe = false;
46       if(isset($_GET[$env->param("groupe")])){
47         $id_groupe = $_GET[$env->param("groupe")];
48         if(!isset($groupes["list"][$id_groupe])){
49           $env->erreur("Impossible de lire les informations du groupe");
50           return;
51         }
52       }
53       if($id_groupe){
54         $morceaux_groupes = array($id_groupe => $groupes["list"][$id_groupe]);
55       }
56       if(
57         (
58           $morceaux = $data->groupes_sources(
59             array(
60               "groupes" => $morceaux_groupes,
61               "id_class" => $this->morceau_status_id,
62               // on veut les morceaux pour lesquels au moins un groupe (et pas tous) ...
63               "satisfy_all_groupes_access" => false,
64               // ... a le droit de contribution
65               "id_source_access" => $data->id_groupe_status_contributeur()
66             )
67           )
68         ) === false
69       ) return "impossible de lire la liste des morceaux";
70       if($id_morceau = isset($_GET[$env->param("morceau")]) ? $_GET[$env->param("morceau")] : false){
71         if(!($morceau = $data->source($id_morceau, true))){
72           $env->erreur("Impossible de lire les informations du morceau");
73           return;
74         }
75       }
76       $select = array(
77         "status" => $this->piste_status_id,
78         "id_user" => $this->user["id"],
79         "order_by" => "ordre",
80         "start" => isset($_GET[$env->param("start")]) && $_GET[$env->param("start")] ? $_GET[$env->param("start")] : 0
81       );
82       if($id_groupe) $select["id_groupe"] = $id_groupe;
83       if($id_morceau !== false) $select["id_composition"] = $id_morceau;
84       if(($pistes = $data->sources($select)) === false){
85         $env->erreur("impossible de lire la liste des pistes");
86         return;
87       }
88       foreach($pistes["list"] as $id_piste => $piste){
89         $pistes["list"][$id_piste]["permissions"] = $data->source_permissions($piste, $this->user["id"]);
90       }
91       if($_POST){
92         foreach($pistes["list"] as $id_piste => $piste){
93           if(isset($_POST["ordre_".$id_piste])){
94             if($data->set_source_info($piste["id"], "ordre", $_POST["ordre_".$id_piste]) === false){
95               $env->erreur("Impossible d'enregistrer l'ordre des pistes");
96               return;
97             }
98           }
99         }
100         $get_params = array();
101         if($id_groupe) $get_params["groupe"] = $id_groupe;
102         if($id_morceau) $get_params["morceau"] = $id_morceau;
103         $env->redirect(
104           $env->url("users/pistes", $get_params),
105           "l'ordre des pistes a été enregistré"
106         );
107       }
108       $env->set_out("groupes", $groupes);
109       $env->set_out("morceaux", $morceaux);
110       $env->set_out("pistes", $pistes);
111     }
112
113     function add(){
114       $env = $this->env();
115       $data = $env->data();
116       $piste = $data->empty_source();
117       $source_infos = array(
118         "date_inscription" => date("Y-m-d"),
119         "ordre" => 0
120       );
121       $groupe = false;
122       $morceau = false;
123       if(($groupes = $data->groupes($this->user["id"])) === false){
124         $env->erreur("Impossible de lire la liste des groupes");
125         return;
126       }
127       $morceaux = array();
128       if($groupes["total"] > 0){
129         $select = array(
130           "status" => $this->morceau_status_id,
131           "id_user" => $this->user["id"]
132         );
133         foreach($groupes["list"] as $id_groupe => $groupe){
134           $select["id_groupe"] = $id_groupe;
135           if(($groupes_morceaux = $data->sources($select)) === false){
136             $env->erreur("impossible de lire la liste des morceaux");
137             return;
138           }
139           $morceaux[$id_groupe] = $groupes_morceaux["list"];
140         }
141       }
142       if(($licences = $data->licences()) === false){
143         return "Impossible de lire la liste des licences";
144       }
145       if(!$data->check_user_uploads_dir()){
146         $env->erreur("Impossible de creer le repertoire utilisateur");
147         return;
148       }
149       $web_path = $env->path("web");
150       $upload_dir = $env->path("content")."uploads/".$this->user["id"];
151       $_SESSION["upload_dir"] = $web_path.($web_path ? "" : "/").$env->path("content")."uploads/".$this->user["id"];
152       $users_sources_mod = $env->get_controller("users/sources");
153       if($_POST){
154         if(!($groupe = $data->groupe($_POST["id_groupe"]))){
155           $env->erreur("Impossible de lire les informations du groupe");
156           return;
157         }
158         $groupe["id_groupe_status"] = $data->id_groupe_status_admin();
159         $piste["groupes"] = array($groupe["id"] => $groupe);
160         if($_POST["morceau"]){
161           if(!($morceau = $data->source($_POST["morceau"], true))){
162             $env->erreur("Impossible de lire les informations du morceau");
163             return;
164           }
165           $morceau["permissions"] = $data->source_permissions($morceau, $this->user["id"]);
166           if(!$morceau["permissions"]["contributeur"]){
167             $env->erreur("vous n'avez pas la permission d'ajouter une piste dans ce morceau");
168             return;
169           }
170           $piste["morceau"] = $morceau["id"];
171         }
172         if(isset($_POST["is_derivation"])){
173           foreach($_POST as $key => $value){
174             if(substr($key, 0, 14) == "derivation_id_"){
175               $id_source_derivation = substr($key, 14);
176               $xml_url = trim($_POST["derivation_".$id_source_derivation]);
177               $piste["derivations"][$id_source_derivation] = $users_sources_mod->get_source_from_xml(
178                 $env,
179                 $xml_url,
180                 (
181                   isset($_POST["use_edit_derivation_content_".$id_source_derivation]) ?
182                     $_POST["edit_derivation_content_".$id_source_derivation]
183                   : ($xml_url ? $data->get_source_xml_from_url($xml_url) : "")
184                 ),
185                 isset($_POST["use_edit_derivation_content_".$id_source_derivation]) ? true : false
186               );
187             }
188           }
189         }
190         if(isset($_POST["is_reference"])){
191           $xml_url = trim($_POST["reference"]);
192           $piste["reference"] = $users_sources_mod->get_source_from_xml(
193             $env,
194             $xml_url,
195             (
196               isset($_POST["use_edit_reference_content"]) ?
197                 $_POST["edit_reference_content"]
198               : ($xml_url ? $data->get_source_xml_from_url($xml_url) : "")
199             ),
200             isset($_POST["use_edit_reference_content"]) ? true : false
201           );
202         }
203         else{
204           if(!($piste["titre"] = trim($_POST["titre"]))){
205             $env->message("merci de pr&eacute;ciser un titre pour la piste");
206           }
207           $piste["licence"] = array(
208             "id" => $_POST["licence"]
209           );
210           $source_infos["date_creation"] = $_POST["annee_date_creation"]."-".$_POST["mois_date_creation"]."-".$_POST["jour_date_creation"];
211           $source_infos["description"] = $_POST["description"];
212           foreach($_POST as $post_key => $post_value){
213             if(substr($post_key, 0, 13) == "document_nom_"){
214               if($id_document = substr($post_key, 13)){
215                 $piste["documents"][$id_document] = array(
216                   "nom" => $_POST["document_nom_".$id_document],
217                   "url" => $_POST["document_url_".$id_document]
218                 );
219               }
220             }
221           }
222         }
223         if(!$env->messages()){
224           if(($image = $data->upload("image", $upload_dir)) === false){
225             $env->erreur("erreur lors de l'envoi de l'image. la piste n'a pas été ajoutée");
226             return;
227           }
228           if($image) $source_infos["image"] = $this->user["id"]."/".$image;
229           if(
230             (
231               $id_source = $data->add_source(
232                 $piste["groupes"],
233                 $piste["titre"],
234                 $this->piste_status_id,
235                 $piste["licence"]["id"],
236                 $piste["documents"],
237                 $piste["reference"],
238                 $piste["derivations"],
239                 $source_infos
240               )
241             ) === false
242           ){
243             $env->erreur("Impossible d'ajouter la piste");
244             return;
245           }
246           if($morceau){
247             if(!$data->set_source_composition($id_source, $morceau["id"])){
248               $env->erreur("La piste a été ajoutée mais impossible de l'associer au morceau");
249               return;
250             }
251           }
252           $env->redirect(
253             $env->url("users/pistes"),
254             "la piste a été ajoutée"
255           );
256         }
257       }
258       $env->set_out("groupes", $groupes);
259       $env->set_out("morceaux", $morceaux);
260       $env->set_out("licences", $licences);
261       $env->set_out("piste", $piste);
262       $env->set_out("source_infos", $source_infos);
263       $env->set_out("groupe", $groupe);
264       $env->set_out("morceau", $morceau);
265     }
266
267     function edit(){
268       $env = $this->env();
269       $data = $env->data();
270       if(($groupes = $data->groupes($this->user["id"])) === false){
271         $env->erreur("Impossible de lire la liste des groupes");
272         return;
273       }
274       if(($licences = $data->licences()) === false){
275         $env->erreur("Impossible de lire la liste des licences");
276         return;
277       }
278       if(($sources_access = $data->sources_access()) === false){
279         $env->erreur("Impossible de lire les types d'access");
280         return;
281       }
282       if(!($piste = $data->source($_GET[$env->param("id")], true))){
283         $env->erreur("Impossible de lire les informations de la piste");
284         return;
285       }
286       $piste["permissions"] = $data->source_permissions($piste, $this->user["id"]);
287       if(!$piste["permissions"]["editeur"]){
288         $env->erreur("vous n'avez pas la permission d'editer cette piste");
289         return;
290       }
291       if(
292         (
293           $morceaux = $data->groupes_sources(
294             array(
295               "groupes" => $piste["groupes"],
296               "id_class" => $this->morceau_status_id,
297               // on veut les morceaux pour lesquels chaque groupe du morceau ...
298               "satisfy_all_groupes_access" => true,
299               // ... a le droit de contribution
300               "id_source_access" => $data->id_groupe_status_contributeur()
301             )
302           )
303         ) === false
304       ) return "impossible de lire la liste des morceaux";
305       if(!$data->check_user_uploads_dir()){
306         $env->erreur("Impossible de creer le repertoire utilisateur");
307         return;
308       }
309       $web_path = $env->path("web");
310       $upload_dir = $env->path("content")."uploads/".$this->user["id"];
311       $_SESSION["upload_dir"] = $web_path.($web_path ? "" : "/").$env->path("content")."uploads/".$this->user["id"];
312       if(($compositions = $data->source_compositions(array("id_source" => $piste["id"]))) === false){
313         $env->erreur("Impossible de lire la liste des compositions");
314         return;
315       }
316       if($compositions) foreach($compositions[$piste["id"]] as $id_morceau) { $piste["morceau"] = $id_morceau; break; }
317       if($_POST){
318         $source_infos = array(
319           "date_inscription" => $_POST["date_inscription"],
320           "ordre" => isset($piste["ordre"]) ? $piste["ordre"] : 0
321         );
322         $piste = $data->empty_source(
323           array(
324             "id" => $piste["id"],
325             "groupes" => $piste["groupes"],
326             "image" => isset($piste["image"]) ? $piste["image"] : ""
327           )
328         );
329         $users_sources_mod = $env->get_controller("users/sources");
330         if($_POST["morceau"]){
331           if($morceau = $data->source($_POST["morceau"], true)){
332             $morceau["permissions"] = $data->source_permissions($morceau, $this->user["id"]);
333             if(!$morceau["permissions"]["contributeur"]){
334               $env->erreur("vous n'avez pas la permission d'ajouter une  piste dans ce morceau");
335               return;
336             }
337           }
338           else{
339             $env->erreur("Impossible de lire les informations du morceau");
340             return;
341           }
342           $piste["morceau"] = $morceau["id"];
343         }
344         if(isset($_POST["is_derivation"])){
345           foreach($_POST as $key => $value){
346             if(substr($key, 0, 14) == "derivation_id_"){
347               $id_source_derivation = substr($key, 14);
348               $xml_url = trim($_POST["derivation_".$id_source_derivation]);
349               $piste["derivations"][$id_source_derivation] = $users_sources_mod->get_source_from_xml(
350                 $env,
351                 $xml_url,
352                 (
353                   isset($_POST["use_edit_derivation_content_".$id_source_derivation]) ?
354                     $_POST["edit_derivation_content_".$id_source_derivation]
355                   : ($xml_url ? $data->get_source_xml_from_url($xml_url) : "")
356                 ),
357                 isset($_POST["use_edit_derivation_content_".$id_source_derivation]) ? true : false
358               );
359             }
360           }
361         }
362         if(isset($_POST["is_reference"])){
363           $xml_url = trim($_POST["reference"]);
364           $piste["reference"] = $users_sources_mod->get_source_from_xml(
365             $env,
366             $xml_url,
367             (
368               isset($_POST["use_edit_reference_content"]) ?
369                 $_POST["edit_reference_content"]
370               : ($xml_url ? $data->get_source_xml_from_url($xml_url) : "")
371             ),
372             isset($_POST["use_edit_reference_content"]) ? true : false
373           );
374         }
375         else{
376           if(!($piste["titre"] = trim($_POST["titre"]))){
377             $env->message("merci de pr&eacute;ciser un titre pour la piste");
378           }
379           $piste["licence"] = array(
380             "id" => $_POST["licence"]
381           );
382           $source_infos["date_creation"] = $_POST["annee_date_creation"]."-".$_POST["mois_date_creation"]."-".$_POST["jour_date_creation"];
383           $source_infos["description"] = $_POST["description"];
384           foreach($_POST as $post_key => $post_value){
385             if(substr($post_key, 0, 13) == "document_nom_"){
386               if($id_document = substr($post_key, 13)){
387                 $piste["documents"][$id_document] = array(
388                   "nom" => $_POST["document_nom_".$id_document],
389                   "url" => $_POST["document_url_".$id_document]
390                 );
391               }
392             }
393           }
394         }
395         if(!$env->messages()){
396           if(isset($_POST["del_image"])){
397             if($piste["image"]){
398               if(!@unlink($env->path("content")."uploads/".$piste["image"])){
399                 $env->erreur("Impossible d'effacer l'image de la piste");
400                 return;
401               }
402             }
403             $piste["image"] = "";
404           }
405           else{
406             if(($up_image = $data->upload("image", $upload_dir)) === false){
407               $env->erreur("Impossible d'uploader l'image");
408               return;
409             }
410             if($up_image) $piste["image"] = $this->user["id"]."/".$up_image;
411           }
412           if($piste["image"]) $source_infos["image"] = $piste["image"];
413           if(
414             (
415               $data->set_source(
416                 $piste["id"],
417                 $piste["groupes"],
418                 $piste["titre"],
419                 $this->piste_status_id,
420                 $piste["licence"]["id"],
421                 $piste["documents"],
422                 $piste["reference"],
423                 $piste["derivations"],
424                 $source_infos
425               )
426             ) === false
427           ){
428             $env->erreur("Impossible de modifier la piste");
429             return;
430           }
431           if(!$data->del_source_compositions(array("id_source" => $piste["id"]))){
432             $env->erreur("La piste a été modifiée mais impossible de l'associer à ce morceau");
433             return;
434           }
435           if($_POST["morceau"]){
436             if(!$data->set_source_composition($piste["id"], $_POST["morceau"])){
437               $env->erreur("La piste a été modifiée mais impossible de l'associer à ce morceau");
438               return;
439             }
440           }
441           $env->redirect(
442             $env->url("users/pistes/edit", array("id" => $piste["id"])),
443             "la piste a été modifiée"
444           );
445         }
446       }
447       $env->set_out("groupes", $groupes);
448       $env->set_out("sources_access", $sources_access);
449       $env->set_out("licences", $licences);
450       $env->set_out("morceaux", $morceaux);
451       $env->set_out("piste", $piste);
452     }
453
454     function maj_xml(){
455       $data = $env->data();
456       if(!($piste = $data->source($_GET[$env->param("id")], true))){
457         $env->erreur("Impossible de lire les informations de la piste");
458         return;
459       }
460       $piste["permissions"] = $data->source_permissions($piste, $this->user["id"]);
461       if(!$piste["permissions"]["editeur"]){
462         $env->erreur("vous n'avez pas la permission d'editer cette piste");
463         return;
464       }
465       if
466       (    isset($_GET[$env->param("id")])
467         && isset($_GET[$env->param("xml")])
468         && ($_GET[$env->param("xml")] == "derviation" ? isset($_GET[$env->param("derivation")]) : true)
469       ){
470         $env->erreur("parametre de fichier xml manquant");
471         return;
472       }
473       $xml_url = "";
474       if($_GET[$env->param("xml")] == "derivation"){
475         if(isset($piste["derivations"][$_GET[$env->param("derivation")]]["xml"]["url"]))
476         $xml_url = $piste["derivations"][$_GET[$env->param("derivation")]]["xml"]["url"];
477       }
478       elseif($_GET[$env->param("xml")] == "reference"){
479         if(isset($piste["reference"]["xml"]["url"]))
480         $xml_url = $piste["reference"]["xml"]["url"];
481       }
482       if(!$xml_url){
483         $env->message("Pas d'URL pour ce fichier XML. Impossible de recharger les informations");
484         return;
485       }
486       if(!$env->messages()){
487         if(($res = $data->maj_source_cache($xml_url)) === false){
488           $env->erreur("Impossible de mettre à jour le contenu du fichier XML dans le cache");
489           return;
490         }
491         if($res === true){
492           if($piste = $data->source($piste["id"])){
493             $env->redirect(
494               $env->url("users/pistes/edit", array("id" => $piste["id"])),
495               "Les informations du fichier XML ont été mises à jour",
496               2
497             );
498           }
499           else{
500             $env->erreur(
501              "le contenu du fichier XML a &eacute;t&eacute; mis &agrave; jour"
502             .", mais impossible de lire les informations de la piste"
503             );
504           }
505           return;
506         }
507         switch($res){
508           case -1: $env->message("Impossible de lire le contenu du fichier XML"); break;
509           case -2: $env->message("Le fichier XML indiqu&eacute; ne contient pas un fichier de source valide"); break;
510           default: $env->erreur("Erreur inconnue (?)"); return;
511         }
512       }
513       $env->run("users/pistes/edit", array("get" => array("id" => $piste["id"])));
514     }
515
516     function del(){
517       $env = $this->env();
518       $data = $env->data();
519       if(!($piste = $data->source($_GET[$env->param("id")], true))){
520         $env->erreur("Impossible de lire les informations de la piste");
521         return;
522       }
523       $piste["permissions"] = $data->source_permissions($piste, $this->user["id"]);
524       if(!$piste["permissions"]["admin"]){
525         $env->erreur("vous n'avez pas la permission d'effacer cette piste");
526         return;
527       }
528       if(!$data->del_source($piste["id"])){
529         $env->erreur("Impossible de supprimer la piste");
530         return;
531       }
532       $env->redirect(
533         $env->url("users/pistes"),
534         "la piste a été supprimée"
535       );
536     }
537
538   }
539
540 ?>