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");
148 if(isset($_POST["button_derive"])){
150 ($origin_source_id = $_POST["button_derive"])
151 && ($origin_source_xml_url = $data->source_xml_url($origin_source_id))
152 && ($origin_source_xml_content = $data->get_source_xml($origin_source_id))
154 $morceau["derivations"][$origin_source_id] = $users_sources_mod->get_source_from_xml(
156 $origin_source_xml_url,
157 $origin_source_xml_content,
163 if(!($groupe = $data->groupe($_POST["id_groupe"]))){
164 $env->erreur("Impossible de lire les informations du groupe");
167 $groupe["id_groupe_status"] = $data->id_groupe_status_admin();
168 $morceau["groupes"] = array($groupe["id"] => $groupe);
170 if(!($album = $data->source($_POST["album"], true))){
171 $env->erreur("Impossible de lire les informations de l'album");
174 $album["permissions"] = $data->source_permissions($album, $this->user["id"]);
175 if(!$album["permissions"]["contributeur"]){
176 $env->erreur("vous n'avez pas la permission d'ajouter un morceau dans cet album");
179 $morceau["album"] = $album["id"];
181 if(isset($_POST["is_derivation"])){
182 foreach($_POST as $key => $value){
183 if(substr($key, 0, 14) == "derivation_id_"){
184 $id_source_derivation = substr($key, 14);
185 $xml_url = trim($_POST["derivation_".$id_source_derivation]);
186 $morceau["derivations"][$id_source_derivation] = $users_sources_mod->get_source_from_xml(
190 isset($_POST["use_edit_derivation_content_".$id_source_derivation]) ?
191 $_POST["edit_derivation_content_".$id_source_derivation]
192 : ($xml_url ? $data->get_source_xml_from_url($xml_url) : "")
194 isset($_POST["use_edit_derivation_content_".$id_source_derivation]) ? true : false
199 if(isset($_POST["is_reference"])){
200 $xml_url = trim($_POST["reference"]);
201 $morceau["reference"] = $users_sources_mod->get_source_from_xml(
205 isset($_POST["use_edit_reference_content"]) ?
206 $_POST["edit_reference_content"]
207 : ($xml_url ? $data->get_source_xml_from_url($xml_url) : "")
209 isset($_POST["use_edit_reference_content"]) ? true : false
213 if(!($morceau["titre"] = trim($_POST["titre"]))){
214 $env->message("merci de préciser un titre pour le morceau");
216 $morceau["licence"] = array(
217 "id" => $_POST["licence"]
219 $source_infos["date_creation"] = $_POST["annee_date_creation"]."-".$_POST["mois_date_creation"]."-".$_POST["jour_date_creation"];
220 $source_infos["description"] = $_POST["description"];
221 foreach($_POST as $post_key => $post_value){
222 if(substr($post_key, 0, 13) == "document_nom_"){
223 if($id_document = substr($post_key, 13)){
224 $morceau["documents"][$id_document] = array(
225 "nom" => $_POST["document_nom_".$id_document],
226 "url" => $_POST["document_url_".$id_document]
232 if(!$env->messages()){
233 if(($image = $data->upload("image", $upload_dir)) === false){
234 $env->erreur("erreur lors de l'envoi de l'image. le morceau n'a pas été ajouté");
237 if($image) $source_infos["image"] = $this->user["id"]."/".$image;
240 $id_source = $data->add_source(
243 $this->morceau_status_id,
244 $morceau["licence"]["id"],
245 $morceau["documents"],
246 $morceau["reference"],
247 $morceau["derivations"],
252 $env->erreur("Impossible d'ajouter le morceau");
256 if(!$data->set_source_composition($id_source, $album["id"])){
257 $env->erreur("Le morceau a été ajouté mais impossible de l'associer à l'album");
262 $env->url("users/morceaux"),
263 "le morceau a été ajouté"
267 $env->set_out("groupes", $groupes);
268 $env->set_out("albums", $albums);
269 $env->set_out("licences", $licences);
270 $env->set_out("morceau", $morceau);
271 $env->set_out("source_infos", $source_infos);
272 $env->set_out("groupe", $groupe);
273 $env->set_out("album", $album);
278 $data = $env->data();
279 if(($groupes = $data->groupes($this->user["id"])) === false){
280 $env->erreur("Impossible de lire la liste des groupes");
283 if(($licences = $data->licences()) === false){
284 $env->erreur("Impossible de lire la liste des licences");
287 if(($sources_access = $data->sources_access()) === false){
288 $env->erreur("Impossible de lire les types d'access");
291 if(!($morceau = $data->source($_GET[$env->param("id")], true))){
292 $env->erreur("Impossible de lire les informations du morceau");
295 $morceau["permissions"] = $data->source_permissions($morceau, $this->user["id"]);
296 if(!$morceau["permissions"]["editeur"]){
297 $env->erreur("vous n'avez pas la permission d'editer ce morceau");
302 $albums = $data->groupes_sources(
304 "groupes" => $morceau["groupes"],
305 "id_class" => $this->album_status_id,
306 // on veut les albums pour lesquels chaque groupe du morceau ...
307 "satisfy_all_groupes_access" => true,
308 // ... a le droit de contribution
309 "id_source_access" => $data->id_groupe_status_contributeur()
313 ) return "impossible de lire la liste des albums";
314 if(!$data->check_user_uploads_dir()){
315 $env->erreur("Impossible de creer le repertoire utilisateur");
318 $web_path = $env->path("web");
319 $upload_dir = $env->path("content")."uploads/".$this->user["id"];
320 $_SESSION["upload_dir"] = $web_path.($web_path ? "" : "/").$env->path("content")."uploads/".$this->user["id"];
321 if(($compositions = $data->source_compositions(array("id_source" => $morceau["id"]))) === false){
322 $env->erreur("Impossible de lire la liste des compositions");
325 if($compositions) foreach($compositions[$morceau["id"]] as $id_album) { $morceau["album"] = $id_album; break; }
327 $source_infos = array(
328 "date_inscription" => $_POST["date_inscription"],
329 "ordre" => isset($morceau["ordre"]) ? $morceau["ordre"] : 0
331 $morceau = $data->empty_source(
333 "id" => $morceau["id"],
334 "groupes" => $morceau["groupes"],
335 "image" => isset($morceau["image"]) ? $morceau["image"] : ""
338 $users_sources_mod = $env->get_controller("users/sources");
340 if($album = $data->source($_POST["album"], true)){
341 $album["permissions"] = $data->source_permissions($album, $this->user["id"]);
342 if(!$album["permissions"]["contributeur"]){
343 $env->erreur("vous n'avez pas la permission d'ajouter un morceau dans cet album");
348 $env->erreur("Impossible de lire les informations de l'album");
351 $morceau["album"] = $album["id"];
353 if(isset($_POST["is_derivation"])){
354 foreach($_POST as $key => $value){
355 if(substr($key, 0, 14) == "derivation_id_"){
356 $id_source_derivation = substr($key, 14);
357 $xml_url = trim($_POST["derivation_".$id_source_derivation]);
358 $morceau["derivations"][$id_source_derivation] = $users_sources_mod->get_source_from_xml(
362 isset($_POST["use_edit_derivation_content_".$id_source_derivation]) ?
363 $_POST["edit_derivation_content_".$id_source_derivation]
364 : ($xml_url ? $data->get_source_xml_from_url($xml_url) : "")
366 isset($_POST["use_edit_derivation_content_".$id_source_derivation]) ? true : false
371 if(isset($_POST["is_reference"])){
372 $xml_url = trim($_POST["reference"]);
373 $morceau["reference"] = $users_sources_mod->get_source_from_xml(
377 isset($_POST["use_edit_reference_content"]) ?
378 $_POST["edit_reference_content"]
379 : ($xml_url ? $data->get_source_xml_from_url($xml_url) : "")
381 isset($_POST["use_edit_reference_content"]) ? true : false
385 if(!($morceau["titre"] = trim($_POST["titre"]))){
386 $env->message("merci de préciser un titre pour le morceau");
388 $morceau["licence"] = array(
389 "id" => $_POST["licence"]
391 $source_infos["date_creation"] = $_POST["annee_date_creation"]."-".$_POST["mois_date_creation"]."-".$_POST["jour_date_creation"];
392 $source_infos["description"] = $_POST["description"];
393 foreach($_POST as $post_key => $post_value){
394 if(substr($post_key, 0, 13) == "document_nom_"){
395 if($id_document = substr($post_key, 13)){
396 $morceau["documents"][$id_document] = array(
397 "nom" => $_POST["document_nom_".$id_document],
398 "url" => $_POST["document_url_".$id_document]
404 if(!$env->messages()){
405 if(isset($_POST["del_image"])){
406 if($morceau["image"]){
407 if(!@unlink($env->path("content")."uploads/".$morceau["image"])){
408 $env->erreur("Impossible d'effacer l'image du morceau");
412 $morceau["image"] = "";
415 if(($up_image = $data->upload("image", $upload_dir)) === false){
416 $env->erreur("Impossible d'uploader l'image");
419 if($up_image) $morceau["image"] = $this->user["id"]."/".$up_image;
421 if($morceau["image"]) $source_infos["image"] = $morceau["image"];
428 $this->morceau_status_id,
429 $morceau["licence"]["id"],
430 $morceau["documents"],
431 $morceau["reference"],
432 $morceau["derivations"],
437 $env->erreur("Impossible de modifier le morceau");
440 if(!$data->del_source_compositions(array("id_source" => $morceau["id"]))){
441 $env->erreur("Le morceau a été modifié mais impossible de l'associer à cet album");
445 if(!$data->set_source_composition($morceau["id"], $_POST["album"])){
446 $env->erreur("Le morceau a été modifié mais impossible de l'associer à cet album");
451 $env->url("users/morceaux/edit", array("id" => $morceau["id"])),
452 "le morceau a été modifié"
456 $env->set_out("groupes", $groupes);
457 $env->set_out("sources_access", $sources_access);
458 $env->set_out("licences", $licences);
459 $env->set_out("albums", $albums);
460 $env->set_out("morceau", $morceau);
464 $data = $env->data();
465 if(!($morceau = $data->source($_GET[$env->param("id")], true))){
466 $env->erreur("Impossible de lire les informations du morceau");
469 $morceau["permissions"] = $data->source_permissions($morceau, $this->user["id"]);
470 if(!$morceau["permissions"]["editeur"]){
471 $env->erreur("vous n'avez pas la permission d'editer ce morceau");
475 ( isset($_GET[$env->param("id")])
476 && isset($_GET[$env->param("xml")])
477 && ($_GET[$env->param("xml")] == "derviation" ? isset($_GET[$env->param("derivation")]) : true)
479 $env->erreur("parametre de fichier xml manquant");
483 if($_GET[$env->param("xml")] == "derivation"){
484 if(isset($morceau["derivations"][$_GET[$env->param("derivation")]]["xml"]["url"]))
485 $xml_url = $morceau["derivations"][$_GET[$env->param("derivation")]]["xml"]["url"];
487 elseif($_GET[$env->param("xml")] == "reference"){
488 if(isset($morceau["reference"]["xml"]["url"]))
489 $xml_url = $morceau["reference"]["xml"]["url"];
492 $env->message("Pas d'URL pour ce fichier XML. Impossible de recharger les informations");
495 if(!$env->messages()){
496 if(($res = $data->maj_source_cache($xml_url)) === false){
497 $env->erreur("Impossible de mettre à jour le contenu du fichier XML dans le cache");
501 if($morceau = $data->source($morceau["id"])){
503 $env->url("users/morceaux/edit", array("id" => $morceau["id"])),
504 "Les informations du fichier XML ont été mises à jour",
510 "le contenu du fichier XML a été mis à jour"
511 .", mais impossible de lire les informations du morceau"
517 case -1: $env->message("Impossible de lire le contenu du fichier XML"); break;
518 case -2: $env->message("Le fichier XML indiqué ne contient pas un fichier de source valide"); break;
519 default: $env->erreur("Erreur inconnue (?)"); return;
522 $env->run("users/morceaux/edit", array("get" => array("id" => $morceau["id"])));
527 $data = $env->data();
528 if(!($morceau = $data->source($_GET[$env->param("id")], true))){
529 $env->erreur("Impossible de lire les informations du morceau");
532 $morceau["permissions"] = $data->source_permissions($morceau, $this->user["id"]);
533 if(!$morceau["permissions"]["admin"]){
534 $env->erreur("vous n'avez pas la permission d'effacer ce morceau");
537 if(!$data->del_source($morceau["id"])){
538 $env->erreur("Impossible de supprimer le morceau");
542 $env->url("users/morceaux"),
543 "le morceau a été supprimé"
550 !($sources_invitations_controller = $env->get_controller("users/sources_invitations"))
551 || !$sources_invitations_controller->validate()
553 $env->erreur("impossible de valider le controleur users/sources_invitations");
556 $sources_invitations_controller->source_groupes();