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