env(); $data = $env->data(); if(($this->status = $data->source_status()) === false){ return "Impossible de lire la liste des status de source"; } foreach($this->status as $id_source_status => $source_status){ if($source_status["nom"] == "album") $this->album_status_id = $id_source_status; if($source_status["nom"] == "morceau") $this->morceau_status_id = $id_source_status; if($source_status["nom"] == "piste") $this->piste_status_id = $id_source_status; if(isset($this->album_status_id) && isset($this->morceau_status_id) && isset($this->piste_status_id)) break; } if( !isset($this->album_status_id) || !isset($this->morceau_status_id) || !isset($this->piste_status_id) ){ return "liste des status de source incomplète"; } if(!($this->user = $env->user())){ return "Vous devez être identifié pour accéder à cette page"; } return true; } public function index(){ $env = $this->env(); $data = $env->data(); if(($groupes = $data->groupes($this->user["id"])) === false){ $env->erreur("Impossible de lire la liste des groupes"); return; } $morceaux_groupes = $groupes["list"]; $id_groupe = false; if(isset($_GET[$env->param("groupe")])){ $id_groupe = $_GET[$env->param("groupe")]; if(!isset($groupes["list"][$id_groupe])){ $env->erreur("Impossible de lire les informations du groupe"); return; } } if($id_groupe){ $morceaux_groupes = array($id_groupe => $groupes["list"][$id_groupe]); } if( ( $morceaux = $data->groupes_sources( array( "groupes" => $morceaux_groupes, "id_class" => $this->morceau_status_id, // on veut les morceaux pour lesquels au moins un groupe (et pas tous) ... "satisfy_all_groupes_access" => false, // ... a le droit de contribution "id_source_access" => $data->id_groupe_status_contributeur() ) ) ) === false ) return "impossible de lire la liste des morceaux"; if($id_morceau = isset($_GET[$env->param("morceau")]) ? $_GET[$env->param("morceau")] : false){ if(!($morceau = $data->source($id_morceau, true))){ $env->erreur("Impossible de lire les informations du morceau"); return; } } $select = array( "status" => $this->piste_status_id, "id_user" => $this->user["id"], "order_by" => "ordre", "start" => isset($_GET[$env->param("start")]) && $_GET[$env->param("start")] ? $_GET[$env->param("start")] : 0 ); if($id_groupe) $select["id_groupe"] = $id_groupe; if($id_morceau !== false) $select["id_composition"] = $id_morceau; if(($pistes = $data->sources($select)) === false){ $env->erreur("impossible de lire la liste des pistes"); return; } foreach($pistes["list"] as $id_piste => $piste){ $pistes["list"][$id_piste]["permissions"] = $data->source_permissions($piste, $this->user["id"]); } if($_POST){ foreach($pistes["list"] as $id_piste => $piste){ if(isset($_POST["ordre_".$id_piste])){ if($data->set_source_info($piste["id"], "ordre", $_POST["ordre_".$id_piste]) === false){ $env->erreur("Impossible d'enregistrer l'ordre des pistes"); return; } } } $get_params = array(); if($id_groupe) $get_params["groupe"] = $id_groupe; if($id_morceau) $get_params["morceau"] = $id_morceau; $env->redirect( $env->url("users/pistes", $get_params), "l'ordre des pistes a été enregistré" ); } $env->set_out("groupes", $groupes); $env->set_out("morceaux", $morceaux); $env->set_out("pistes", $pistes); } public function add(){ $env = $this->env(); $data = $env->data(); $piste = $data->empty_source(); $source_infos = array( "date_inscription" => date("Y-m-d"), "ordre" => 0 ); $groupe = false; $morceau = false; if(($groupes = $data->groupes($this->user["id"])) === false){ $env->erreur("Impossible de lire la liste des groupes"); return; } $morceaux = array(); if($groupes["total"] > 0){ $select = array( "status" => $this->morceau_status_id, "id_user" => $this->user["id"], "is_reference" => false ); foreach($groupes["list"] as $id_groupe => $groupe){ $select["id_groupe"] = $id_groupe; if(($groupes_morceaux = $data->sources($select)) === false){ $env->erreur("impossible de lire la liste des morceaux"); return; } $morceaux[$id_groupe] = $groupes_morceaux["list"]; } } if(($licences = $data->licences()) === false){ return "Impossible de lire la liste des licences"; } if(!$data->check_user_uploads_dir()){ $env->erreur("Impossible de creer le repertoire utilisateur"); return; } $web_path = $env->path("web"); $upload_dir = $env->path("content")."uploads/".$this->user["id"]; $_SESSION["upload_dir"] = $web_path.($web_path ? "" : "/").$env->path("content")."uploads/".$this->user["id"]; $users_sources_mod = $env->get_controller("users/sources"); if(isset($_POST["button_derive"])){ if( ($origin_source_id = $_POST["button_derive"]) && ($origin_source_xml_url = $data->source_xml_url($origin_source_id)) && ($origin_source_xml_content = $data->get_source_xml($origin_source_id)) ){ $piste["derivations"][$origin_source_id] = $users_sources_mod->get_source_from_xml( $env, $origin_source_xml_url, $origin_source_xml_content, false ); } } elseif($_POST){ if(!($groupe = $data->groupe($_POST["id_groupe"]))){ $env->erreur("Impossible de lire les informations du groupe"); return; } $groupe["id_groupe_status"] = $data->id_groupe_status_admin(); $piste["groupes"] = array($groupe["id"] => $groupe); if($_POST["morceau"]){ if(!($morceau = $data->source($_POST["morceau"], true))){ $env->erreur("Impossible de lire les informations du morceau"); return; } $morceau["permissions"] = $data->source_permissions($morceau, $this->user["id"]); if(!$morceau["permissions"]["contributeur"]){ $env->erreur("vous n'avez pas la permission d'ajouter une piste dans ce morceau"); return; } $piste["morceau"] = $morceau["id"]; } if(isset($_POST["is_derivation"])){ foreach($_POST as $key => $value){ if(substr($key, 0, 14) == "derivation_id_"){ $id_source_derivation = substr($key, 14); $xml_url = trim($_POST["derivation_".$id_source_derivation]); $piste["derivations"][$id_source_derivation] = $users_sources_mod->get_source_from_xml( $env, $xml_url, ( isset($_POST["use_edit_derivation_content_".$id_source_derivation]) ? $_POST["edit_derivation_content_".$id_source_derivation] : ($xml_url ? $data->get_source_xml_from_url($xml_url) : "") ), isset($_POST["use_edit_derivation_content_".$id_source_derivation]) ? true : false ); } } } if(isset($_POST["is_reference"])){ $xml_url = trim($_POST["reference"]); $piste["reference"] = $users_sources_mod->get_source_from_xml( $env, $xml_url, ( isset($_POST["use_edit_reference_content"]) ? $_POST["edit_reference_content"] : ($xml_url ? $data->get_source_xml_from_url($xml_url) : "") ), isset($_POST["use_edit_reference_content"]) ? true : false ); } else{ if(!($piste["titre"] = trim($_POST["titre"]))){ $env->message("merci de préciser un titre pour la piste"); } $piste["licence"] = array( "id" => $_POST["licence"] ); $source_infos["date_creation"] = $_POST["annee_date_creation"]."-".$_POST["mois_date_creation"]."-".$_POST["jour_date_creation"]; $source_infos["description"] = $_POST["description"]; $piste["description"] = $source_infos["description"]; $piste["date_creation"] = $source_infos["date_creation"]; foreach($_POST as $post_key => $post_value){ if(substr($post_key, 0, 13) == "document_nom_"){ if($id_document = substr($post_key, 13)){ $piste["documents"][$id_document] = array( "nom" => $_POST["document_nom_".$id_document], "url" => $_POST["document_url_".$id_document] ); } } } } if(!$env->messages()){ if(($image = $data->upload("image", $upload_dir)) === false){ $env->erreur("erreur lors de l'envoi de l'image. la piste n'a pas été ajoutée"); return; } if($image) $source_infos["image"] = $this->user["id"]."/".$image; if( ( $id_source = $data->add_source( $piste["groupes"], $piste["titre"], $this->piste_status_id, isset($piste["licence"]["id"]) ? $piste["licence"]["id"] : null, $piste["documents"], $piste["reference"], $piste["derivations"], $source_infos ) ) === false ){ $env->erreur("Impossible d'ajouter la piste"); return; } if($morceau){ if(!$data->set_source_composition($id_source, $morceau["id"])){ $env->erreur("La piste a été ajoutée mais impossible de l'associer au morceau"); return; } } $env->redirect( $env->url("users/pistes/edit", array("id" => $id_source)), "la piste a été ajoutée" ); } } $env->set_out("groupes", $groupes); $env->set_out("morceaux", $morceaux); $env->set_out("licences", $licences); $env->set_out("piste", $piste); $env->set_out("source_infos", $source_infos); $env->set_out("groupe", $groupe); $env->set_out("morceau", $morceau); } public function edit(){ $env = $this->env(); $data = $env->data(); if(($groupes = $data->groupes($this->user["id"])) === false){ $env->erreur("Impossible de lire la liste des groupes"); return; } if(($licences = $data->licences()) === false){ $env->erreur("Impossible de lire la liste des licences"); return; } if(($sources_access = $data->sources_access()) === false){ $env->erreur("Impossible de lire les types d'access"); return; } if(!($piste = $data->source($_GET[$env->param("id")], true))){ $env->erreur("Impossible de lire les informations de la piste"); return; } $piste["permissions"] = $data->source_permissions($piste, $this->user["id"]); if(!$piste["permissions"]["editeur"]){ $env->erreur("vous n'avez pas la permission d'editer cette piste"); return; } if( ( $morceaux = $data->groupes_sources( array( "groupes" => $piste["groupes"], "id_class" => $this->morceau_status_id, // on veut les morceaux pour lesquels chaque groupe du morceau ... "satisfy_all_groupes_access" => true, // ... a le droit de contribution "id_source_access" => $data->id_groupe_status_contributeur() ) ) ) === false ) return "impossible de lire la liste des morceaux"; if(!$data->check_user_uploads_dir()){ $env->erreur("Impossible de creer le repertoire utilisateur"); return; } $web_path = $env->path("web"); $upload_dir = $env->path("content")."uploads/".$this->user["id"]; $_SESSION["upload_dir"] = $web_path.($web_path ? "" : "/").$env->path("content")."uploads/".$this->user["id"]; if(($compositions = $data->source_compositions(array("id_source" => $piste["id"]))) === false){ $env->erreur("Impossible de lire la liste des compositions"); return; } if($compositions) foreach($compositions[$piste["id"]] as $id_morceau){ $piste["morceau"] = $id_morceau; break; } if($_POST){ $permissions = $piste["permissions"]; $image = isset($piste["image"]) ? $piste["image"] : null; $image_uri = isset($piste["image_uri"]) ? $piste["image_uri"] : null; $source_infos = array( "date_inscription" => $_POST["date_inscription"], "ordre" => isset($piste["ordre"]) ? $piste["ordre"] : 0 ); $piste = $data->empty_source( array( "id" => $piste["id"], "groupes" => $piste["groupes"], "image" => isset($piste["image"]) ? $piste["image"] : "" ) ); $piste["permissions"] = $permissions; $piste["date_creation"] = $_POST["annee_date_creation"]."-".$_POST["mois_date_creation"]."-".$_POST["jour_date_creation"]; $piste["image"] = $image; $piste["image_uri"] = $image_uri; $users_sources_mod = $env->get_controller("users/sources"); if($_POST["morceau"]){ if($morceau = $data->source($_POST["morceau"], true)){ $morceau["permissions"] = $data->source_permissions($morceau, $this->user["id"]); if(!$morceau["permissions"]["contributeur"]){ $env->erreur("vous n'avez pas la permission d'ajouter une piste dans ce morceau"); return; } } else{ $env->erreur("Impossible de lire les informations du morceau"); return; } $piste["morceau"] = $morceau["id"]; } if(isset($_POST["is_derivation"])){ foreach($_POST as $key => $value){ if(substr($key, 0, 14) == "derivation_id_"){ $id_source_derivation = substr($key, 14); $xml_url = trim($_POST["derivation_".$id_source_derivation]); $piste["derivations"][$id_source_derivation] = $users_sources_mod->get_source_from_xml( $env, $xml_url, ( isset($_POST["use_edit_derivation_content_".$id_source_derivation]) ? $_POST["edit_derivation_content_".$id_source_derivation] : ($xml_url ? $data->get_source_xml_from_url($xml_url) : "") ), isset($_POST["use_edit_derivation_content_".$id_source_derivation]) ? true : false ); } } } if(isset($_POST["is_reference"])){ $xml_url = trim($_POST["reference"]); $piste["reference"] = $users_sources_mod->get_source_from_xml( $env, $xml_url, ( isset($_POST["use_edit_reference_content"]) ? $_POST["edit_reference_content"] : ($xml_url ? $data->get_source_xml_from_url($xml_url) : "") ), isset($_POST["use_edit_reference_content"]) ? true : false ); } else{ if(!($piste["titre"] = trim($_POST["titre"]))){ $env->message("merci de préciser un titre pour la piste"); } $piste["licence"] = array( "id" => $_POST["licence"] ); $source_infos["date_creation"] = $_POST["annee_date_creation"]."-".$_POST["mois_date_creation"]."-".$_POST["jour_date_creation"]; $source_infos["description"] = $_POST["description"]; $piste["description"] = $source_infos["description"]; foreach($_POST as $post_key => $post_value){ if(substr($post_key, 0, 13) == "document_nom_"){ if($id_document = substr($post_key, 13)){ $piste["documents"][$id_document] = array( "nom" => $_POST["document_nom_".$id_document], "url" => $_POST["document_url_".$id_document] ); } } } } if(!$env->messages()){ if(isset($_POST["del_image"])){ if($piste["image"]){ if(!@unlink($env->path("content")."uploads/".$piste["image"])){ $env->erreur("Impossible d'effacer l'image de la piste"); return; } } $piste["image"] = ""; } else{ if(($up_image = $data->upload("image", $upload_dir)) === false){ $env->erreur("Impossible d'uploader l'image"); return; } if($up_image) $piste["image"] = $this->user["id"]."/".$up_image; } if($piste["image"]) $source_infos["image"] = $piste["image"]; if( ( $data->set_source( $piste["id"], $piste["groupes"], $piste["titre"], $this->piste_status_id, $piste["licence"]["id"], $piste["documents"], $piste["reference"], $piste["derivations"], $source_infos ) ) === false ){ $env->erreur("Impossible de modifier la piste"); return; } if(!$data->del_source_compositions(array("id_source" => $piste["id"]))){ $env->erreur("La piste a été modifiée mais impossible de l'associer à ce morceau"); return; } if($_POST["morceau"]){ if(!$data->set_source_composition($piste["id"], $_POST["morceau"])){ $env->erreur("La piste a été modifiée mais impossible de l'associer à ce morceau"); return; } } $env->redirect( $env->url("users/pistes/edit", array("id" => $piste["id"])), "la piste a été modifiée" ); } } $env->set_out("groupes", $groupes); $env->set_out("sources_access", $sources_access); $env->set_out("licences", $licences); $env->set_out("morceaux", $morceaux); $env->set_out("piste", $piste); } public function maj_xml(){ $env = $this->env(); $data = $env->data(); if(!($piste = $data->source($_GET[$env->param("id")], true))){ $env->erreur("Impossible de lire les informations de la piste"); return; } $piste["permissions"] = $data->source_permissions($piste, $this->user["id"]); if(!$piste["permissions"]["editeur"]){ $env->erreur("vous n'avez pas la permission d'editer cette piste"); return; } if ( !isset($_GET[$env->param("id")]) || !isset($_GET[$env->param("xml")]) || ($_GET[$env->param("xml")] == "derviation" && !isset($_GET[$env->param("derivation")])) ){ $env->erreur("parametre de fichier xml manquant"); return; } $xml_url = ""; if($_GET[$env->param("xml")] == "derivation"){ if(isset($piste["derivations"][$_GET[$env->param("derivation")]]["xml"]["url"])) $xml_url = $piste["derivations"][$_GET[$env->param("derivation")]]["xml"]["url"]; } elseif($_GET[$env->param("xml")] == "reference"){ if(isset($piste["reference"]["xml"]["url"])) $xml_url = $piste["reference"]["xml"]["url"]; } if(!$xml_url){ $env->message("Pas d'URL pour ce fichier XML. Impossible de recharger les informations"); return; } if(!$env->messages()){ if(($res = $data->maj_source_cache($xml_url)) === false){ $env->erreur("Impossible de mettre à jour le contenu du fichier XML dans le cache"); return; } if($res === true){ if($piste = $data->source($piste["id"])){ $env->redirect( $env->url("users/pistes/edit", array("id" => $piste["id"])), "Les informations du fichier XML ont été mises à jour", 2 ); } else{ $env->erreur( "le contenu du fichier XML a été mis à jour" .", mais impossible de lire les informations de la piste" ); } return; } switch($res){ case -1: $env->message("Impossible de lire le contenu du fichier XML"); break; case -2: $env->message("Le fichier XML indiqué ne contient pas un fichier de source valide"); break; default: $env->erreur("Erreur inconnue (?)"); return; } } $env->run("users/pistes/edit", array("get" => array("id" => $piste["id"]))); } public function del(){ $env = $this->env(); $data = $env->data(); if(!($piste = $data->source($_GET[$env->param("id")], true))){ $env->erreur("Impossible de lire les informations de la piste"); return; } $piste["permissions"] = $data->source_permissions($piste, $this->user["id"]); if(!$piste["permissions"]["admin"]){ $env->erreur("vous n'avez pas la permission d'effacer cette piste"); return; } if(!$data->del_source($piste["id"])){ $env->erreur("Impossible de supprimer la piste"); return; } $env->redirect( $env->url("users/pistes"), "la piste a été supprimée" ); } public function groupes(){ $env = $this->env(); if( !($sources_invitations_controller = $env->get_controller("users/sources_invitations")) || !$sources_invitations_controller->validate() ){ $env->erreur("impossible de valider le controleur users/sources_invitations"); return; } $sources_invitations_controller->source_groupes(); } }