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