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