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->album_status_id)){ $inconnus = ""; if(!isset($this->album_status_id)) $inconnus .= ($inconnus ? ", " : "")."album"; if(!isset($this->morceau_status_id)) $inconnus .= ($inconnus ? ", " : "")."morceau"; if(!isset($this->piste_status_id)) $inconnus .= ($inconnus ? ", " : "")."piste"; return "Types de source inconnu: ".$inconnus; } 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(($sources_access = $data->sources_access()) === false){ $env->erreur("Impossible de lire les types d'access"); return; } if(($groupes = $data->groupes($this->user["id"])) === false){ $env->erreur("Impossible de lire la liste des groupes"); return; } if(($invitations = $data->sources_invitations($groupes["list"], $this->user["id"])) === false){ $env->erreur("Impossible de lire la liste des invitations"); return; } foreach($invitations["list"] as $id_invitation => $invitation){ if(!($user = $data->user_by_id($invitation["id_user"]))){ $env->erreur("impossible de lire les informations de l'utilisateur pour une invitation"); return; } $invitations["list"][$id_invitation]["user"] = $user; if(!($source = $data->source($invitation["id_source"]))){ $env->erreur("impossible de lire les informations de la source pour une invitation"); return; } $invitations["list"][$id_invitation]["source"] = $source; } if(($groupes = $data->groupes()) === false){ $env->erreur("Impossible de lire la liste des groupes"); return; } $env->set_out("user", $this->user); $env->set_out("groupes", $groupes); $env->set_out("sources_access", $sources_access); $env->set_out("invitations", $invitations); $env->set_out("status", $this->status); } public function source_groupes(){ $env = $this->env(); $data = $env->data(); if(!($source = $data->source($_GET[$env->param("id")], true))){ $env->erreur("Impossible de lire les informations de la source"); return; } $source["permissions"] = $data->source_permissions($source, $this->user["id"]); if(!$source["permissions"]["admin"]){ $env->erreur("vous n'avez pas la permission d'editer les groupes de la source"); return; } if(($sources_access = $data->sources_access()) === false){ $env->erreur("Impossible de lire les types d'access"); return; } if(($groupes = $data->groupes()) === false){ $env->erreur("Impossible de lire la liste des groupes"); return; } if( ( $invitations = $data->list_sml_sources_invitations( array( "index_name" => "id", "filters" => array( array("id_source", "eq", $source["id"]) ) ) ) ) === false ){ $env->erreur("Impossible de lire la liste des invitations pour cette source"); return; } foreach($invitations["list"] as $id_invitation => $invitation){ if(isset($groupes["list"][$invitation["id_author"]])){ $invitations["list"][$id_invitation]["author"] = $groupes["list"][$invitation["id_author"]]; unset($groupes["list"][$invitation["id_author"]]); $groupes["total"]--; } } foreach($source["groupes"] as $id_groupe => $groupe){ if(isset($groupes["list"][$id_groupe])){ unset($groupes["list"][$id_groupe]); $groupes["total"]--; } } $env->set_out("groupes", $groupes); $env->set_out("sources_access", $sources_access); $env->set_out("source", $source); $env->set_out("invitations", $invitations); } public function invite_groupe(){ $env = $this->env(); $data = $env->data(); if(!($source = $data->source($_GET[$env->param("id")], true))){ $env->erreur("Impossible de lire les informations de la source"); return; } $source["permissions"] = $data->source_permissions($source, $this->user["id"]); if(!$source["permissions"]["admin"]){ $env->erreur("vous n'avez pas la permission d'editer les groupes de la source"); return; } if(($sources_access = $data->sources_access()) === false){ $env->erreur("Impossible de lire les types d'access"); return; } if(!($groupe = $data->groupe($_POST["id_groupe"]))){ $env->erreur("impossible de lire les informations du groupe"); } if(!$_POST["id_sources_access"] || !isset($sources_access[$_POST["id_sources_access"]])){ $env->erreur("identifiant d'access de source incorrect"); } if( !$data->add_sml_sources_invitations( array( "id_user" => $this->user["id"], "id_source" => $source["id"], "id_author" => $groupe["id"], "id_sources_access" => $_POST["id_sources_access"], "date_invitation" => date("Y-m-d H:i:s") ) ) ){ $env->erreur("Impossible d'ajouter l'invitation"); return; } $env->redirect( $env->url("users/sources_invitations"), "l'invitation a été ajoutée" ); } public function annule_invitation_groupe(){ $env = $this->env(); $data = $env->data(); if(!($invitation = $data->get_sml_sources_invitations("id", $_GET[$env->param("id")]))){ $env->erreur("Impossible de lire les informations de l'invitation"); return; } if(!($morceau = $data->source($invitation["id_source"], true))){ $env->erreur("Impossible de lire les informations du morceau"); return; } $morceau["permissions"] = $data->source_permissions($morceau, $this->user["id"]); if(!$morceau["permissions"]["admin"]){ $env->erreur("vous n'avez pas la permission d'editer les groupes du morceau"); return; } if(!$data->del_sml_sources_invitations("id", $invitation["id"])){ $env->erreur("Impossible d'annuler l'invitation"); return; } $env->redirect( $env->url("users/sources_invitations"), "l'invitation a été annulée" ); } public function accepter_invitation_groupe(){ $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(!($invitation = $data->get_sml_sources_invitations("id", $_GET[$env->param("id")]))){ $env->erreur("Impossible de lire les informations de l'invitation"); return; } if(!($source = $data->source($invitation["id_source"], true))){ $env->erreur("Impossible de lire les informations de la source pour cette invitation"); return; } if(!isset($groupes["list"][$invitation["id_author"]])){ $env->erreur("l'invitation s'adresse a un groupe qui n'appartient pas à votre utilisateur"); return; } if(($HAS_THIS_GROUP = $data->source_has_groupe($source["id"], $invitation["id_author"])) === false){ $env->erreur("Impossible de savoir si ce groupe a déjà accès à cette source"); return; } if($HAS_THIS_GROUP){ $env->erreur("le groupe a déjà accès à cette source"); return; } if(!$data->del_sml_sources_invitations("id", $invitation["id"])){ $env->erreur("Impossible d'effacer l'invitation"); return; } if(!$data->add_source_groupe($source["id"], $invitation["id_author"], $invitation["id_sources_access"])){ $env->erreur("Impossible de vous ajouter des droits sur la source"); return; } $env->redirect( $env->url("users/sources_invitations"), "l'invitation a été acceptée" ); } public function refuser_invitation_groupe(){ $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(!($invitation = $data->get_sml_sources_invitations("id", $_GET[$env->param("id")]))){ $env->erreur("Impossible de lire les informations de l'invitation"); return; } if(!($source = $data->source($invitation["id_source"], true))){ $env->erreur("Impossible de lire les informations de la source pour cette invitation"); return; } if(!isset($groupes["list"][$invitation["id_author"]])){ $env->erreur("l'invitation s'adresse a un groupe qui n'appartient pas à votre utilisateur"); return; } if(!$data->del_sml_sources_invitations("id", $invitation["id"])){ $env->erreur("Impossible d'effacer l'invitation"); return; } $env->redirect( $env->url("users/sources_invitations"), "l'invitation a été refusée" ); } public function del_groupe(){ $env = $this->env(); $data = $env->data(); if(!($source = $data->source($_GET[$env->param("id")], true))){ $env->erreur("Impossible de lire les informations de la source"); return; } $source["permissions"] = $data->source_permissions($source, $this->user["id"]); if(!$source["permissions"]["admin"]){ $env->erreur("vous n'avez pas la permission d'editer les groupes de la source"); return; } $source_class = $this->status[$source["status"]]["nom"]; if($source_class == "album"){ $redirect = $env->url("users/albums/groupes", array("id" => $source["id"])); } elseif($source_class == "morceau"){ $redirect = $env->url("users/morceaux/groupes", array("id" => $source["id"])); } elseif($source_class == "piste"){ $redirect = $env->url("users/pistes/groupes", array("id" => $source["id"])); } else{ $env->erreur("type de source inconnu"); return; } if(!($groupe = $data->groupe($_GET[$env->param("groupe")]))){ $env->erreur("impossible de lire les informations du groupe"); return; } $ID_UNIQUE_ADMIN = false; foreach($source["groupes"] as $id_groupe => $source_groupe){ if($source_groupe["id_groupe_status"] == $data->id_groupe_status_admin()){ if(!$ID_UNIQUE_ADMIN) $ID_UNIQUE_ADMIN = $id_groupe; else{ $ID_UNIQUE_ADMIN = true; break; } } } if(!$ID_UNIQUE_ADMIN){ $env->erreur("aucun administrateur sur cette source"); return; } if($ID_UNIQUE_ADMIN !== true){ if($groupe["id"] == $ID_UNIQUE_ADMIN){ $env->erreur("vous ne pouvez pas enlever l'unique administrateur"); return; } } if(!$data->del_source_groupe($source["id"], $groupe["id"])){ $env->erreur("Impossible d'enlever le groupe"); return; } $env->redirect( $redirect, "le groupe a été enlevé" ); } }