From: dj3c1t Date: Tue, 9 Jul 2013 21:59:53 +0000 (+0200) Subject: invitations pour acces aux sources (suite) X-Git-Tag: sourceml.0.15.5 X-Git-Url: http://git.dj3c1t.com/?p=mw_sourceml;a=commitdiff_plain;h=11ec67ff3d3f1a9e8da9c58ad0df3bc6e6fe6593 invitations pour acces aux sources (suite) --- diff --git a/app/controllers/users/sources_invitations.php b/app/controllers/users/sources_invitations.php new file mode 100644 index 0000000..40f2a2f --- /dev/null +++ b/app/controllers/users/sources_invitations.php @@ -0,0 +1,331 @@ +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; + } + + 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; + } + $groupes_in = ""; + foreach($groupes["list"] as $id_groupe => $groupe) $groupes_in .= ($groupes_in ? "," : "").$id_groupe; + $invitations = array("list" => array(), "total" => 0); + if($groupes_in){ + if( + ( + $invitations = $data->list_sml_sources_invitations( + array( + "index_name" => "id", + "where"=> "id_author IN(".$groupes_in.") OR id_user=".$this->user["id"], + "order_by" => "date_invitation", + "order" => "DESC" + ) + ) + ) === 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); + } + + 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", "where"=> "id_source=".$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); + } + + 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" + ); + } + + 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" + ); + } + + 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; + } + $source["permissions"] = $data->source_permissions($source, $this->user["id"]); + if($source["permissions"]["contributeur"]){ + $env->erreur("vous avez 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" + ); + } + + 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" + ); + } + + 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é" + ); + } + + } + +?> \ No newline at end of file diff --git a/app/out/default/css/actions/users_sources_invitations.css b/app/out/default/css/actions/users_sources_invitations.css new file mode 100644 index 0000000..24a7ae0 --- /dev/null +++ b/app/out/default/css/actions/users_sources_invitations.css @@ -0,0 +1 @@ +@import url("../sourceml_accounts.css"); \ No newline at end of file diff --git a/app/out/default/views/users/albums/groupes.php b/app/out/default/views/users/albums/groupes.php new file mode 100644 index 0000000..0d06ff5 --- /dev/null +++ b/app/out/default/views/users/albums/groupes.php @@ -0,0 +1,8 @@ +

Les groupes pour l'album out["source"]["titre"]; ?>

+ + + +out_file("views/users/source_groupes_form.php"); ?> diff --git a/app/out/default/views/users/pistes/groupes.php b/app/out/default/views/users/pistes/groupes.php new file mode 100644 index 0000000..4fa2936 --- /dev/null +++ b/app/out/default/views/users/pistes/groupes.php @@ -0,0 +1,8 @@ +

Les groupes pour la piste out["source"]["titre"]; ?>

+ + + +out_file("views/users/source_groupes_form.php"); ?> diff --git a/app/out/default/views/users/source_groupes_form.php b/app/out/default/views/users/source_groupes_form.php new file mode 100644 index 0000000..ac773c1 --- /dev/null +++ b/app/out/default/views/users/source_groupes_form.php @@ -0,0 +1,94 @@ + + + + + + + out["source"]["groupes"] as $id_groupe => $groupe) : ?> + + + + + + +
groupeaccèsenlever
+ + + out["sources_access"][$groupe["id_groupe_status"]]["intitule"]; ?> + + $this->out["source"]["id"], "groupe" => $id_groupe)) ?>" + class="admin_link" + title="enlever ce groupe">" + onclick="return confirm('enlever ce groupe ?')"/> +
+ +out["invitations"]["total"] > 0) : ?> +

Vous avez invité :

+ + + + + + + out["invitations"]["list"] as $id_invitation => $invitation) : ?> + + + + + + +
groupeaccèsaction
+ + + out["sources_access"][$invitation["id_sources_access"]]["intitule"]; ?> + + $id_invitation)) ?>" + class="admin_link" + title="annuler cette invitation" + onclick="return confirm('annuler cette invitation ?')"/>Annuler +
+ + +out["groupes"]["total"] > 0) : ?> + +

Inviter un groupe

+ +
$this->out["source"]["id"])) ?>" method="post"> +
+
    +
  • + +
    + +
    +
  • +
  • + +
    + out["source"]["titre"]; ?> +
    +
  • +
  • + +
    + +
    +
  • +
  • +
    + +
    +
  • +
+
+
+ + diff --git a/app/out/default/views/users/sources_invitations/list.php b/app/out/default/views/users/sources_invitations/list.php new file mode 100644 index 0000000..c4574c0 --- /dev/null +++ b/app/out/default/views/users/sources_invitations/list.php @@ -0,0 +1,78 @@ +

Invitations en cours

+ +out["invitations"]["total"] > 0) : ?> + + +

Aucune invitation

+