From a208363f3edb12278eb38ff3a4628ca8af54e1e5 Mon Sep 17 00:00:00 2001 From: =?utf8?q?St=C3=A9phane=20Jacob?= Date: Mon, 16 May 2011 14:55:29 +0200 Subject: [PATCH] Do not add to group users who do not want to be added. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Stéphane Jacob --- modules/xnetgrp.php | 41 +++++++++++++++++++++++++++++++++++---- templates/xnetgrp/membres-add.tpl | 1 + 2 files changed, 38 insertions(+), 4 deletions(-) diff --git a/modules/xnetgrp.php b/modules/xnetgrp.php index d3ecad4..4b5e9f6 100644 --- a/modules/xnetgrp.php +++ b/modules/xnetgrp.php @@ -392,8 +392,24 @@ class XnetGrpModule extends PLModule S::assert_xsrf_token(); $users = array_keys(Env::v('add_users')); + $former_users = XDB::fetchColumn('SELECT uid + FROM group_former_members + WHERE remember = TRUE AND uid IN {?}', + $users); + $new_users = array_diff($users, $former_users); + + foreach ($former_users as $uid) { + $user = User::getSilentWithUID($uid); + $page->trigWarning($user->fullName() . ' est un ancien membre du groupe qui ne souhaite pas y revenir.'); + } + if (count($former_users) > 1) { + $page->trigWarning('S\'ils souhaitent revenir dans le groupe, il faut qu\'ils en fassent la demande sur la page d\'accueil du groupe.'); + } elseif (count($former_users)) { + $page->trigWarning('S\'il souhaite revenir dans le groupe, il faut qu\'il en fasse la demande sur la page d\'accueil du groupe.'); + } + $data = array(); - foreach ($users as $uid) { + foreach ($new_users as $uid) { $data[] = XDB::format('({?}, {?})', $globals->asso('id'), $uid); } XDB::rawExecute('INSERT INTO group_members (asso_id, uid) @@ -641,6 +657,9 @@ class XnetGrpModule extends PLModule XDB::execute("INSERT INTO group_member_sub_requests (asso_id, uid, ts, reason) VALUES ({?}, {?}, NOW(), {?})", $globals->asso('id'), S::i('uid'), Post::v('message')); + XDB::execute('DELETE FROM group_former_members + WHERE uid = {?} AND asso_id = {?}', + S::i('uid'), $globals->asso('id')); $uf = New UserFilter(New UFC_Group($globals->asso('id'), true)); $admins = $uf->iterUsers(); $admin = $admins->next(); @@ -866,9 +885,23 @@ class XnetGrpModule extends PLModule } if ($user) { - XDB::execute('INSERT IGNORE INTO group_members (uid, asso_id) - VALUES ({?}, {?})', - $user->id(), $globals->asso('id')); + // First check if the user used to be in this group. + XDB::rawExecute('DELETE FROM group_former_members + WHERE remember AND DATE_SUB(NOW(), INTERVAL 1 YEAR) > unsubsciption_date'); + $former_member = XDB::fetchOneCell('SELECT remember + FROM group_former_members + WHERE uid = {?} AND asso_id = {?}', + $user->id(), $globals->asso('id')); + if ($former_member === 1) { + $page->trigError($user->fullName() . ' est un ancien membre du groupe qui ne souhaite pas y revenir. S\'il souhaite revenir dans le groupe, il faut qu\'il en fasse la demande sur la page d\'accueil du groupe.'); + return; + } elseif (!is_null($former_member) && Post::i('force_continue') == 0) { + $page->trigWarning($user->fullName() . ' est un ancien membre du groupe qui s\'est récemment désinscrit. Malgré cela, si tu penses qu\'il souhaite revenir, cliquer sur « Ajouter » l\'ajoutera bien au groupe cette fois.'); + $page->assign('force_continue', 1); + return; + } + + Group::subscribe($globals->asso('id'), $user->id()); $this->removeSubscriptionRequest($user->id()); if ($suggest_account_activation) { pl_redirect('member/suggest/' . $user->login() . '/' . $email . '/' . $globals->asso('nom')); diff --git a/templates/xnetgrp/membres-add.tpl b/templates/xnetgrp/membres-add.tpl index e1f7e36..43f52a7 100644 --- a/templates/xnetgrp/membres-add.tpl +++ b/templates/xnetgrp/membres-add.tpl @@ -72,6 +72,7 @@ function searchX() + -- 2.1.4