3 class mw_users_morceaux extends mw_controller{
7 public $album_status_id;
8 public $morceau_status_id;
10 public function validate(){
13 if(($this->status = $data->source_status()) === false){
14 return "Impossible de lire la liste des status de source";
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;
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";
25 if(!($this->user = $env->user())){
26 return "Vous devez être identifié pour accéder à cette page";
31 public function index(){
34 if(($groupes = $data->groupes($this->user["id"])) === false){
35 $env->erreur("Impossible de lire la liste des groupes");
38 $albums_groupes = $groupes["list"];
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");
48 $albums_groupes = array($id_groupe => $groupes["list"][$id_groupe]);
52 $albums = $data->groupes_sources(
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()
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");
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
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");
82 foreach($morceaux["list"] as $id_morceau => $morceau){
83 $morceaux["list"][$id_morceau]["permissions"] = $data->source_permissions($morceau, $this->user["id"]);
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");
94 $get_params = array();
95 if($id_groupe) $get_params["groupe"] = $id_groupe;
96 if($id_album) $get_params["album"] = $id_album;
98 $env->url("users/morceaux", $get_params),
99 "l'ordre des morceaux a été enregistré"
102 $env->set_out("groupes", $groupes);
103 $env->set_out("albums", $albums);
104 $env->set_out("morceaux", $morceaux);
107 public function add(){
109 $data = $env->data();
110 $morceau = $data->empty_source();
111 $source_infos = array(
112 "date_inscription" => date("Y-m-d"),
117 if(($groupes = $data->groupes($this->user["id"])) === false){
118 $env->erreur("Impossible de lire la liste des groupes");
122 if($groupes["total"] > 0){
124 "status" => $this->album_status_id,
125 "id_user" => $this->user["id"]
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");
133 $albums[$id_groupe] = $groupes_albums["list"];
136 if(($licences = $data->licences()) === false){
137 return "Impossible de lire la liste des licences";
139 if(!$data->check_user_uploads_dir()){
140 $env->erreur("Impossible de creer le repertoire utilisateur");
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"])){
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))
153 $morceau["derivations"][$origin_source_id] = $users_sources_mod->get_source_from_xml(
155 $origin_source_xml_url,
156 $origin_source_xml_content,
162 if(!($groupe = $data->groupe($_POST["id_groupe"]))){
163 $env->erreur("Impossible de lire les informations du groupe");
166 $groupe["id_groupe_status"] = $data->id_groupe_status_admin();
167 $morceau["groupes"] = array($groupe["id"] => $groupe);
169 if(!($album = $data->source($_POST["album"], true))){
170 $env->erreur("Impossible de lire les informations de l'album");
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");
178 $morceau["album"] = $album["id"];
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(
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) : "")
193 isset($_POST["use_edit_derivation_content_".$id_source_derivation]) ? true : false
198 if(isset($_POST["is_reference"])){
199 $xml_url = trim($_POST["reference"]);
200 $morceau["reference"] = $users_sources_mod->get_source_from_xml(
204 isset($_POST["use_edit_reference_content"]) ?
205 $_POST["edit_reference_content"]
206 : ($xml_url ? $data->get_source_xml_from_url($xml_url) : "")
208 isset($_POST["use_edit_reference_content"]) ? true : false
212 if(!($morceau["titre"] = trim($_POST["titre"]))){
213 $env->message("merci de préciser un titre pour le morceau");
215 $morceau["licence"] = array(
216 "id" => $_POST["licence"]
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]
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é");
238 if($image) $source_infos["image"] = $this->user["id"]."/".$image;
241 $id_source = $data->add_source(
244 $this->morceau_status_id,
245 isset($morceau["licence"]["id"]) ? $morceau["licence"]["id"] : null,
246 $morceau["documents"],
247 $morceau["reference"],
248 $morceau["derivations"],
253 $env->erreur("Impossible d'ajouter le morceau");
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");
263 $env->url("users/morceaux/edit", array("id" => $id_source)),
264 "le morceau a été ajouté"
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);
277 public function edit(){
279 $data = $env->data();
280 if(($groupes = $data->groupes($this->user["id"])) === false){
281 $env->erreur("Impossible de lire la liste des groupes");
284 if(($licences = $data->licences()) === false){
285 $env->erreur("Impossible de lire la liste des licences");
288 if(($sources_access = $data->sources_access()) === false){
289 $env->erreur("Impossible de lire les types d'access");
292 if(!($morceau = $data->source($_GET[$env->param("id")], true))){
293 $env->erreur("Impossible de lire les informations du morceau");
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");
303 $albums = $data->groupes_sources(
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()
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");
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");
326 if($compositions) foreach($compositions[$morceau["id"]] as $id_album){
327 $morceau["album"] = $id_album;
331 $source_infos = array(
332 "date_inscription" => $_POST["date_inscription"],
333 "ordre" => isset($morceau["ordre"]) ? $morceau["ordre"] : 0
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(
341 "id" => $morceau["id"],
342 "groupes" => $morceau["groupes"],
343 "image" => isset($morceau["image"]) ? $morceau["image"] : ""
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");
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");
360 $env->erreur("Impossible de lire les informations de l'album");
363 $morceau["album"] = $album["id"];
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(
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) : "")
378 isset($_POST["use_edit_derivation_content_".$id_source_derivation]) ? true : false
383 if(isset($_POST["is_reference"])){
384 $xml_url = trim($_POST["reference"]);
385 $morceau["reference"] = $users_sources_mod->get_source_from_xml(
389 isset($_POST["use_edit_reference_content"]) ?
390 $_POST["edit_reference_content"]
391 : ($xml_url ? $data->get_source_xml_from_url($xml_url) : "")
393 isset($_POST["use_edit_reference_content"]) ? true : false
395 $morceau["licence"]["id"] = 0;
398 if(!($morceau["titre"] = trim($_POST["titre"]))){
399 $env->message("merci de préciser un titre pour le morceau");
401 $morceau["licence"] = array(
402 "id" => $_POST["licence"]
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]
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");
426 $morceau["image"] = "";
429 if(($up_image = $data->upload("image", $upload_dir)) === false){
430 $env->erreur("Impossible d'uploader l'image");
433 if($up_image) $morceau["image"] = $this->user["id"]."/".$up_image;
435 if($morceau["image"]) $source_infos["image"] = $morceau["image"];
442 $this->morceau_status_id,
443 $morceau["licence"]["id"],
444 $morceau["documents"],
445 $morceau["reference"],
446 $morceau["derivations"],
451 $env->erreur("Impossible de modifier le morceau");
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");
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");
465 $env->url("users/morceaux/edit", array("id" => $morceau["id"])),
466 "le morceau a été modifié"
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);
477 public function maj_xml(){
479 $data = $env->data();
480 if(!($morceau = $data->source($_GET[$env->param("id")], true))){
481 $env->erreur("Impossible de lire les informations du morceau");
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");
490 ( !isset($_GET[$env->param("id")])
491 || !isset($_GET[$env->param("xml")])
492 || ($_GET[$env->param("xml")] == "derviation" && !isset($_GET[$env->param("derivation")]))
494 $env->erreur("parametre de fichier xml manquant");
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"];
502 elseif($_GET[$env->param("xml")] == "reference"){
503 if(isset($morceau["reference"]["xml"]["url"]))
504 $xml_url = $morceau["reference"]["xml"]["url"];
507 $env->message("Pas d'URL pour ce fichier XML. Impossible de recharger les informations");
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");
516 if($morceau = $data->source($morceau["id"])){
518 $env->url("users/morceaux/edit", array("id" => $morceau["id"])),
519 "Les informations du fichier XML ont été mises à jour",
525 "le contenu du fichier XML a été mis à jour"
526 .", mais impossible de lire les informations du morceau"
532 case -1: $env->message("Impossible de lire le contenu du fichier XML"); break;
533 case -2: $env->message("Le fichier XML indiqué ne contient pas un fichier de source valide"); break;
534 default: $env->erreur("Erreur inconnue (?)"); return;
537 $env->run("users/morceaux/edit", array("get" => array("id" => $morceau["id"])));
540 public function del(){
542 $data = $env->data();
543 if(!($morceau = $data->source($_GET[$env->param("id")], true))){
544 $env->erreur("Impossible de lire les informations du morceau");
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");
552 if(!$data->del_source($morceau["id"])){
553 $env->erreur("Impossible de supprimer le morceau");
557 $env->url("users/morceaux"),
558 "le morceau a été supprimé"
562 public function groupes(){
565 !($sources_invitations_controller = $env->get_controller("users/sources_invitations"))
566 || !$sources_invitations_controller->validate()
568 $env->erreur("impossible de valider le controleur users/sources_invitations");
571 $sources_invitations_controller->source_groupes();