From 300325787a5d47336b64110034e582ae611341e0 Mon Sep 17 00:00:00 2001 From: x2003bruneau Date: Thu, 7 Dec 2006 20:16:58 +0000 Subject: [PATCH] #592: User can unsubscribe from a group git-svn-id: svn+ssh://murphy/home/svn/platal/trunk@1256 839d8a87-29fc-0310-9880-83ba4fa771e5 --- ChangeLog | 1 + modules/xnetgrp.php | 113 ++++++++++++++++++++++------------ templates/xnet/groupe/asso.tpl | 9 +++ templates/xnet/groupe/edit.tpl | 10 +++ templates/xnet/groupe/membres-add.tpl | 4 +- templates/xnet/groupe/membres-del.tpl | 15 ++++- upgrade/0.9.13/02_xnet.sql | 1 + 7 files changed, 109 insertions(+), 44 deletions(-) diff --git a/ChangeLog b/ChangeLog index f7d6ab4..56912f0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -43,6 +43,7 @@ Bug/Wish: * Xnet: - #570: Fix geoloc skin. -FRU - #589: Can attach a file when sending an email -FRU + - #592: Can unsubscribe -FRU From 0.9.12 branch: diff --git a/modules/xnetgrp.php b/modules/xnetgrp.php index 00bc231..5dbe9bb 100644 --- a/modules/xnetgrp.php +++ b/modules/xnetgrp.php @@ -82,6 +82,7 @@ class XnetGrpModule extends PLModule '%grp/annuaire/vcard' => $this->make_hook('vcard', AUTH_MDP), '%grp/trombi' => $this->make_hook('trombi', AUTH_MDP), '%grp/subscribe' => $this->make_hook('subscribe', AUTH_MDP), + '%grp/unsubscribe' => $this->make_hook('unsubscribe', AUTH_MDP), '%grp/admin/annuaire' => $this->make_hook('admin_annuaire', AUTH_MDP), @@ -218,7 +219,7 @@ class XnetGrpModule extends PLModule SET nom={?}, diminutif={?}, cat={?}, dom={?}, descr={?}, site={?}, mail={?}, resp={?}, forum={?}, mail_domain={?}, ax={?}, pub={?}, - sub_url={?}, inscriptible={?} + sub_url={?}, inscriptible={?}, unsub_url={?} WHERE id={?}", Post::v('nom'), Post::v('diminutif'), Post::v('cat'), Post::i('dom'), @@ -227,7 +228,7 @@ class XnetGrpModule extends PLModule Post::v('forum'), Post::v('mail_domain'), Post::has('ax'), Post::has('pub')?'private':'public', Post::v('sub_url'), Post::v('inscriptible'), - $globals->asso('id')); + Post::v('unsub_url'),$globals->asso('id')); if (Post::v('mail_domain')) { XDB::execute('INSERT INTO virtual_domains (domain) VALUES({?})', Post::v('mail_domain')); @@ -236,13 +237,15 @@ class XnetGrpModule extends PLModule XDB::execute( "UPDATE groupex.asso SET descr={?}, site={?}, mail={?}, resp={?}, - forum={?}, ax={?}, pub= {?}, sub_url={?} + forum={?}, ax={?}, pub= {?}, sub_url={?}, + unsub_url={?} WHERE id={?}", Post::v('descr'), Post::v('site'), Post::v('mail'), Post::v('resp'), Post::v('forum'), Post::has('ax'), Post::has('pub')?'private':'public', - Post::v('sub_url'), $globals->asso('id')); + Post::v('sub_url'), Post::v('unsub_url'), + $globals->asso('id')); } if ($_FILES['logo']['name']) { @@ -706,56 +709,88 @@ class XnetGrpModule extends PLModule } } - function handler_admin_member_del(&$page, $user = null) + function unsubscribe(&$user) { - global $globals; - - new_groupadmin_page('xnet/groupe/membres-del.tpl'); - $user = get_infos($user); - if (empty($user)) { - return PL_NOT_FOUND; - } - $page->assign('user', $user); - - if (!Post::has('confirm')) { - return; - } - + global $globals, $page; XDB::execute( "DELETE FROM groupex.membres WHERE uid={?} AND asso_id={?}", $user['uid'], $globals->asso('id')); - // don't unsubscribe email from list if other user use same email $user_same_email = get_infos($user['email']); + $domain = $globals->asso('mail_domain'); - if (($domain = $globals->asso('mail_domain')) && empty($user_same_email)) { + if (!$domain || !empty($user_same_email)) { + return true; + } - $mmlist = new MMList(S::v('uid'), S::v('password'), $domain); - $listes = $mmlist->get_lists($user['email2']); + $mmlist = new MMList(S::v('uid'), S::v('password'), $domain); + $listes = $mmlist->get_lists($user['email2']); - foreach ($listes as $liste) { - if ($liste['sub'] == 2) { + $may_update = may_update(); + $warning = false; + foreach ($listes as $liste) { + if ($liste['sub'] == 2) { + if ($may_update) { $mmlist->mass_unsubscribe($liste['list'], Array($user['email2'])); - $page->trig("{$user['prenom']} {$user['nom']} a été" - ." désinscrit de {$liste['list']}"); - } elseif ($liste['sub']) { - $page->trig("{$user['prenom']} {$user['nom']} a une" - ." demande d'inscription en cours sur la" - ." liste {$liste['list']}@ !"); + } else { + $mmlist->unsubscribe($liste['list']); } + } elseif ($liste['sub']) { + $page->trig("{$user['prenom']} {$user['nom']} a une" + ." demande d'inscription en cours sur la" + ." liste {$liste['list']}@ !"); + $warning = true; } + } - XDB::execute( - "DELETE FROM virtual_redirect - USING virtual_redirect - INNER JOIN virtual USING(vid) - WHERE redirect={?} AND alias LIKE {?}", $user['email'], '%@'.$domain); - if (mysql_affected_rows()) { - $page->trig("{$user['prenom']} {$user['nom']} a été désabonné des alias du groupe !"); - } + XDB::execute( + "DELETE FROM virtual_redirect + USING virtual_redirect + INNER JOIN virtual USING(vid) + WHERE redirect={?} AND alias LIKE {?}", $user['email'], '%@'.$domain); + return !$warning; + } + + function handler_unsubscribe(&$page) + { + new_group_page('xnet/groupe/membres-del.tpl'); + $user = get_infos(S::v('forlife')); + if (empty($user)) { + return PL_NOT_FOUND; } + $page->assign('self', true); + $page->assign('user', $user); - $page->trig("{$user['prenom']} {$user['nom']} a été retiré du groupe !"); + if (!Post::has('confirm')) { + return; + } + + if ($this->unsubscribe($user)) { + $page->trig('Vous avez été désinscrit du groupe avec succès'); + } else { + $page->trig('Vous avez été désinscrit du groupe, mais des erreurs se sont produites lors des désinscriptions des alias et des mailing-lists.'); + } + $page->assign('is_member', false); + } + + function handler_admin_member_del(&$page, $user = null) + { + new_groupadmin_page('xnet/groupe/membres-del.tpl'); + $user = get_infos($user); + if (empty($user)) { + return PL_NOT_FOUND; + } + $page->assign('user', $user); + + if (!Post::has('confirm')) { + return; + } + + if ($this->unsubscribe($user)) { + $page->trig("{$user['prenom']} {$user['nom']} a été désabonné du groupe !"); + } else { + $page->trig("{$user['prenom']} {$user['nom']} a été désabonné du groupe, mais des erreurs subsistent !"); + } } function handler_admin_member(&$page, $user) diff --git a/templates/xnet/groupe/asso.tpl b/templates/xnet/groupe/asso.tpl index 187000d..1aee2f9 100644 --- a/templates/xnet/groupe/asso.tpl +++ b/templates/xnet/groupe/asso.tpl @@ -68,6 +68,15 @@ m'inscrire + {elseif $is_member} + + + Me désinscrire : + + + me désinscrire + + {/if} {if $asso.ax} diff --git a/templates/xnet/groupe/edit.tpl b/templates/xnet/groupe/edit.tpl index 239d7b2..0a1455d 100644 --- a/templates/xnet/groupe/edit.tpl +++ b/templates/xnet/groupe/edit.tpl @@ -151,6 +151,16 @@ + + Lien pour la désinscription:
+ laisser vide par défaut + + + + + + + groupe agréé par l'AX diff --git a/templates/xnet/groupe/membres-add.tpl b/templates/xnet/groupe/membres-add.tpl index f17a5de..e52c7f8 100644 --- a/templates/xnet/groupe/membres-add.tpl +++ b/templates/xnet/groupe/membres-add.tpl @@ -20,7 +20,7 @@ {* *} {**************************************************************************} - +//]]>

{$asso.nom} : Ajout d'un membre

diff --git a/templates/xnet/groupe/membres-del.tpl b/templates/xnet/groupe/membres-del.tpl index b11ff3b..a325106 100644 --- a/templates/xnet/groupe/membres-del.tpl +++ b/templates/xnet/groupe/membres-del.tpl @@ -23,26 +23,35 @@ {if $smarty.post.confirm}

+{if !$self} retour à l'annuaire +{else} +retour à l'accueil +{/if}

{else} -

{$asso.nom} : gestion des memebres

+

{$asso.nom} : gestion des membres

Suppression du membre : {$user.prenom} {$user.nom}

-
+

+ {if $self} + Etes-vous sûr de vouloir vous désinscrire du groupe {$asso.nom} et de toutes + les listes de diffusion associées ? + {else} Etes-vous sûr de vouloir supprimer {$user.prenom} {$user.nom} du groupe, lui retirer tous les droits associés à son statut de membre, et le désabonner de toutes les listes de diffusion du groupe ? + {/if}

- +
diff --git a/upgrade/0.9.13/02_xnet.sql b/upgrade/0.9.13/02_xnet.sql index afff7ed..8c224b2 100644 --- a/upgrade/0.9.13/02_xnet.sql +++ b/upgrade/0.9.13/02_xnet.sql @@ -1,4 +1,5 @@ use groupex; alter table membres change origine origine enum('X', 'ext', 'groupe') not null default 'X'; +alter table asso add column unsub_url varchar(255) not null; use x4dat; # vim:set syntax=mysql: -- 2.1.4