--- /dev/null
+<?php
+
+ class mw_users_sources_invitations extends mw_controller{
+
+ var $user;
+
+ var $status;
+ var $album_status_id;
+ var $morceau_status_id;
+ var $piste_status_id;
+
+ function validate(){
+ $env = $this->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
--- /dev/null
+<table class="admin">
+ <tr>
+ <th>groupe</th>
+ <th>accès</th>
+ <th align="center">enlever</th>
+ </tr>
+ <?php foreach($this->out["source"]["groupes"] as $id_groupe => $groupe) : ?>
+ <tr class="hl">
+ <td>
+ <?php echo $groupe["nom"]; ?>
+ </td>
+ <td>
+ <?php echo $this->out["sources_access"][$groupe["id_groupe_status"]]["intitule"]; ?>
+ </td>
+ <td class="action">
+ <a href="<?php echo $this->url("users/sources_invitations/del_groupe", array("id" => $this->out["source"]["id"], "groupe" => $id_groupe)) ?>"
+ class="admin_link"
+ title="enlever ce groupe"><img src="<?php echo $this->out_url("icons/del.gif") ?>"
+ onclick="return confirm('enlever ce groupe ?')"/></a>
+ </td>
+ </tr>
+ <?php endforeach; ?>
+</table>
+
+<?php if($this->out["invitations"]["total"] > 0) : ?>
+<h3>Vous avez invité :</h3>
+<table class="admin">
+ <tr>
+ <th>groupe</th>
+ <th>accès</th>
+ <th align="center">action</th>
+ </tr>
+ <?php foreach($this->out["invitations"]["list"] as $id_invitation => $invitation) : ?>
+ <tr class="hl">
+ <td>
+ <?php echo $invitation["author"]["nom"]; ?>
+ </td>
+ <td>
+ <?php echo $this->out["sources_access"][$invitation["id_sources_access"]]["intitule"]; ?>
+ </td>
+ <td class="action">
+ <a href="<?php echo $this->url("users/sources_invitations/annule_invitation_groupe", array("id" => $id_invitation)) ?>"
+ class="admin_link"
+ title="annuler cette invitation"
+ onclick="return confirm('annuler cette invitation ?')"/>Annuler</a>
+ </td>
+ </tr>
+ <?php endforeach; ?>
+</table>
+<?php endif; ?>
+
+<?php if($this->out["groupes"]["total"] > 0) : ?>
+
+<h3>Inviter un groupe</h3>
+
+<form action="<?php echo $this->url("users/sources_invitations/invite_groupe", array("id" => $this->out["source"]["id"])) ?>" method="post">
+ <fieldset>
+ <ul class="form">
+ <li>
+ <label for="id_groupe">Inviter</label>
+ <div class="form_input">
+ <select name="id_groupe" id="id_groupe">
+ <?php foreach($this->out["groupes"]["list"] as $id_groupe => $groupe) : ?>
+ <option value="<?php echo $id_groupe ?>"><?php echo $groupe["nom"] ?></option>
+ <?php endforeach; ?>
+ </select>
+ </div>
+ </li>
+ <li>
+ <label for="source_access_<?php echo $id_groupe; ?>">A particper à</label>
+ <div class="form_input">
+ <strong><?php echo $this->out["source"]["titre"]; ?></strong>
+ </div>
+ </li>
+ <li>
+ <label for="source_access_<?php echo $id_groupe; ?>">En tant que</label>
+ <div class="form_input">
+ <select name="id_sources_access" id="id_sources_access">
+ <?php foreach($this->out["sources_access"] as $id_sources_access => $sources_access) : ?>
+ <option value="<?php echo $id_sources_access ?>"><?php echo $sources_access["intitule"] ?></option>
+ <?php endforeach; ?>
+ </select>
+ </div>
+ </li>
+ <li class="buttons">
+ <div class="form_buttons">
+ <input type="submit" value="Inviter" />
+ </div>
+ </li>
+ </ul>
+ </fieldset>
+</form>
+
+<?php endif; ?>
--- /dev/null
+<h2>Invitations en cours</h2>
+
+<?php if($this->out["invitations"]["total"] > 0) : ?>
+<ul>
+ <?php
+
+ foreach($this->out["invitations"]["list"] as $id_invitation => $invitation) :
+ $source_type = $this->out["status"][$invitation["source"]["id_class"]]["nom"];
+ $source_url = "";
+ if($source_type == "album"){
+ $source_type = "à l'album";
+ $source_url = $this->url("sources/album/view", array("album" => $invitation["id_source"]));
+ }
+ elseif($source_type == "morceau"){
+ $source_type = "au morceau";
+ $source_url = $this->url("sources/morceau/view", array("morceau" => $invitation["id_source"]));
+ }
+ elseif($source_type == "piste"){
+ $source_type = "à la piste";
+ $source_url = $this->url("sources/piste/view", array("piste" => $invitation["id_source"]));
+ }
+ else continue;
+
+
+ ?>
+ <li class="invitation">
+ <div class="invitation_title">
+ <strong><?php echo $invitation["user"]["login"]; ?></strong>
+ invite <strong><?php echo $this->out["groupes"]["list"][$invitation["id_author"]]["nom"]; ?></strong>
+ </div>
+ <div class="invitation_date"><?php echo $invitation["date_invitation"]; ?></div>
+ <div class="invitation_content">
+ à participer <?php echo $source_type; ?>
+ <a href="<?php echo $source_url; ?>"><strong><?php echo $invitation["source"]["titre"]; ?></strong></a><br />
+ en tant que
+ <strong><?php echo $this->out["sources_access"][$invitation["id_sources_access"]]["intitule"]; ?></strong>
+ </div>
+ <ul class="buttons">
+ <?php if($this->out["user"]["id"] == $invitation["id_user"]) : ?>
+ <li>
+ <a href="<?php echo $this->url("users/sources_invitations/annule_invitation_groupe", array("id" => $id_invitation)) ?>"
+ class="admin_link"
+ title="annuler cette invitation"
+ onclick="return confirm('annuler cette invitation ?')"/>Annuler l'invitation</a>
+ </li>
+ <?php else : ?>
+ <li>
+ <a href="<?php echo $this->url("users/sources_invitations/accepter_invitation_groupe", array("id" => $id_invitation)) ?>"
+ class="admin_link"
+ title="accepter cette invitation"
+ onclick="return confirm('accepter cette invitation ?')"/>Accepter</a>
+ </li>
+ <li>
+ <a href="<?php echo $this->url("users/sources_invitations/refuser_invitation_groupe", array("id" => $id_invitation)) ?>"
+ class="admin_link"
+ title="refuser cette invitation"
+ onclick="return confirm('refuser cette invitation ?')"/>Refuser</a>
+ </li>
+ <?php endif; ?>
+ </ul>
+
+
+ </td>
+ <td>
+
+ </td>
+ <td class="action">
+
+ </td>
+ <td class="action">
+
+ </td>
+ </li>
+ <?php endforeach; ?>
+</ul>
+<?php else : ?>
+<p>Aucune invitation</p>
+<?php endif; ?>