3 class mw_users_morceaux extends mw_controller{
9 var $morceau_status_id;
14 if(($this->status = $data->source_status()) === false){
15 return "Impossible de lire la liste des status de source";
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;
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";
26 if(!($this->user = $env->user())){
27 return "Vous devez être identifié pour accéder à cette page";
35 if(($groupes = $data->groupes($this->user["id"])) === false){
36 $env->erreur("Impossible de lire la liste des groupes");
39 $albums_groupes = $groupes["list"];
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");
49 $albums_groupes = array($id_groupe => $groupes["list"][$id_groupe]);
53 $albums = $data->groupes_sources(
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()
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");
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
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");
83 foreach($morceaux["list"] as $id_morceau => $morceau){
84 $morceaux["list"][$id_morceau]["permissions"] = $data->source_permissions($morceau, $this->user["id"]);
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");
95 $get_params = array();
96 if($id_groupe) $get_params["groupe"] = $id_groupe;
97 if($id_album) $get_params["album"] = $id_album;
99 $env->url("users/morceaux", $get_params),
100 "l'ordre des morceaux a été enregistré"
103 $env->set_out("groupes", $groupes);
104 $env->set_out("albums", $albums);
105 $env->set_out("morceaux", $morceaux);
110 $data = $env->data();
111 $morceau = $data->empty_source();
112 $source_infos = array(
113 "date_inscription" => date("Y-m-d"),
118 if(($groupes = $data->groupes($this->user["id"])) === false){
119 $env->erreur("Impossible de lire la liste des groupes");
123 if($groupes["total"] > 0){
125 "status" => $this->album_status_id,
126 "id_user" => $this->user["id"]
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");
134 $albums[$id_groupe] = $groupes_albums["list"];
137 if(($licences = $data->licences()) === false){
138 return "Impossible de lire la liste des licences";
140 if(!$data->check_user_uploads_dir()){
141 $env->erreur("Impossible de creer le repertoire utilisateur");
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");
149 if(!($groupe = $data->groupe($_POST["id_groupe"]))){
150 $env->erreur("Impossible de lire les informations du groupe");
153 $groupe["id_groupe_status"] = $data->id_groupe_status_admin();
154 $morceau["groupes"] = array($groupe["id"] => $groupe);
156 if(!($album = $data->source($_POST["album"], true))){
157 $env->erreur("Impossible de lire les informations de l'album");
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");
165 $morceau["album"] = $album["id"];
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(
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) : "")
180 isset($_POST["use_edit_derivation_content_".$id_source_derivation]) ? true : false
185 if(isset($_POST["is_reference"])){
186 $xml_url = trim($_POST["reference"]);
187 $morceau["reference"] = $users_sources_mod->get_source_from_xml(
191 isset($_POST["use_edit_reference_content"]) ?
192 $_POST["edit_reference_content"]
193 : ($xml_url ? $data->get_source_xml_from_url($xml_url) : "")
195 isset($_POST["use_edit_reference_content"]) ? true : false
199 if(!($morceau["titre"] = trim($_POST["titre"]))){
200 $env->message("merci de préciser un titre pour le morceau");
202 $morceau["licence"] = array(
203 "id" => $_POST["licence"]
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]
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é");
223 if($image) $source_infos["image"] = $this->user["id"]."/".$image;
226 $id_source = $data->add_source(
229 $this->morceau_status_id,
230 $morceau["licence"]["id"],
231 $morceau["documents"],
232 $morceau["reference"],
233 $morceau["derivations"],
238 $env->erreur("Impossible d'ajouter le morceau");
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");
248 $env->url("users/morceaux"),
249 "le morceau a été ajouté"
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);
264 $data = $env->data();
265 if(($groupes = $data->groupes($this->user["id"])) === false){
266 $env->erreur("Impossible de lire la liste des groupes");
269 if(($licences = $data->licences()) === false){
270 $env->erreur("Impossible de lire la liste des licences");
273 if(($sources_access = $data->sources_access()) === false){
274 $env->erreur("Impossible de lire les types d'access");
277 if(!($morceau = $data->source($_GET[$env->param("id")], true))){
278 $env->erreur("Impossible de lire les informations du morceau");
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");
288 $albums = $data->groupes_sources(
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()
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");
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");
311 if($compositions) foreach($compositions[$morceau["id"]] as $id_album) { $morceau["album"] = $id_album; break; }
313 $source_infos = array(
314 "date_inscription" => $_POST["date_inscription"],
315 "ordre" => isset($morceau["ordre"]) ? $morceau["ordre"] : 0
317 $morceau = $data->empty_source(
319 "id" => $morceau["id"],
320 "groupes" => $morceau["groupes"],
321 "image" => isset($morceau["image"]) ? $morceau["image"] : ""
324 $users_sources_mod = $env->get_controller("users/sources");
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");
334 $env->erreur("Impossible de lire les informations de l'album");
337 $morceau["album"] = $album["id"];
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(
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) : "")
352 isset($_POST["use_edit_derivation_content_".$id_source_derivation]) ? true : false
357 if(isset($_POST["is_reference"])){
358 $xml_url = trim($_POST["reference"]);
359 $morceau["reference"] = $users_sources_mod->get_source_from_xml(
363 isset($_POST["use_edit_reference_content"]) ?
364 $_POST["edit_reference_content"]
365 : ($xml_url ? $data->get_source_xml_from_url($xml_url) : "")
367 isset($_POST["use_edit_reference_content"]) ? true : false
371 if(!($morceau["titre"] = trim($_POST["titre"]))){
372 $env->message("merci de préciser un titre pour le morceau");
374 $morceau["licence"] = array(
375 "id" => $_POST["licence"]
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]
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");
398 $morceau["image"] = "";
401 if(($up_image = $data->upload("image", $upload_dir)) === false){
402 $env->erreur("Impossible d'uploader l'image");
405 if($up_image) $morceau["image"] = $this->user["id"]."/".$up_image;
407 if($morceau["image"]) $source_infos["image"] = $morceau["image"];
414 $this->morceau_status_id,
415 $morceau["licence"]["id"],
416 $morceau["documents"],
417 $morceau["reference"],
418 $morceau["derivations"],
423 $env->erreur("Impossible de modifier le morceau");
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");
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");
437 $env->url("users/morceaux/edit", array("id" => $morceau["id"])),
438 "le morceau a été modifié"
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);
450 $data = $env->data();
451 if(!($morceau = $data->source($_GET[$env->param("id")], true))){
452 $env->erreur("Impossible de lire les informations du morceau");
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");
461 ( isset($_GET[$env->param("id")])
462 && isset($_GET[$env->param("xml")])
463 && ($_GET[$env->param("xml")] == "derviation" ? isset($_GET[$env->param("derivation")]) : true)
465 $env->erreur("parametre de fichier xml manquant");
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"];
473 elseif($_GET[$env->param("xml")] == "reference"){
474 if(isset($morceau["reference"]["xml"]["url"]))
475 $xml_url = $morceau["reference"]["xml"]["url"];
478 $env->message("Pas d'URL pour ce fichier XML. Impossible de recharger les informations");
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");
487 if($morceau = $data->source($morceau["id"])){
489 $env->url("users/morceaux/edit", array("id" => $morceau["id"])),
490 "Les informations du fichier XML ont été mises à jour",
496 "le contenu du fichier XML a été mis à jour"
497 .", mais impossible de lire les informations du morceau"
503 case -1: $env->message("Impossible de lire le contenu du fichier XML"); break;
504 case -2: $env->message("Le fichier XML indiqué ne contient pas un fichier de source valide"); break;
505 default: $env->erreur("Erreur inconnue (?)"); return;
508 $env->run("users/morceaux/edit", array("get" => array("id" => $morceau["id"])));
513 $data = $env->data();
514 if(!($morceau = $data->source($_GET[$env->param("id")], true))){
515 $env->erreur("Impossible de lire les informations du morceau");
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");
523 if(!$data->del_source($morceau["id"])){
524 $env->erreur("Impossible de supprimer le morceau");
528 $env->url("users/morceaux"),
529 "le morceau a été supprimé"
536 !($sources_invitations_controller = $env->get_controller("users/sources_invitations"))
537 || !$sources_invitations_controller->validate()
539 $env->erreur("impossible de valider le controleur users/sources_invitations");
542 $sources_invitations_controller->source_groupes();