X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=modules%2Fxnetgrp.php;h=41fe7378c673809d888b6e02c5872eca22cc4bb1;hb=3731beb2ec0ae6e363dd348011aa48ecc31106d6;hp=a6a811365dcc81b2f88fcd0816c15d0387d52aa7;hpb=027b16e31e0ca17ad00e567329bad1035b22650f;p=platal.git diff --git a/modules/xnetgrp.php b/modules/xnetgrp.php index a6a8113..41fe737 100644 --- a/modules/xnetgrp.php +++ b/modules/xnetgrp.php @@ -32,6 +32,7 @@ class XnetGrpModule extends PLModule '%grp/edit' => $this->make_hook('edit', AUTH_MDP, 'groupadmin'), '%grp/mail' => $this->make_hook('mail', AUTH_MDP, 'groupadmin'), '%grp/forum' => $this->make_hook('forum', AUTH_MDP, 'groupmember'), + '%grp/former_users' => $this->make_hook('former_users', AUTH_MDP, 'admin'), '%grp/annuaire' => $this->make_hook('annuaire', AUTH_MDP, 'groupannu'), '%grp/annuaire/vcard' => $this->make_hook('vcard', AUTH_MDP, 'groupmember:groupannu'), '%grp/annuaire/csv' => $this->make_hook('csv', AUTH_MDP, 'groupmember:groupannu'), @@ -338,6 +339,17 @@ class XnetGrpModule extends PLModule $page->changeTpl('xnetgrp/annuaire.tpl'); } + function handler_former_users($page) + { + global $globals; + require_once 'userset.inc.php'; + + $view = new UserSet(new UFC_GroupFormerMember($globals->asso('id'))); + $view->addMod('groupmember', 'Anciens membres', true, array('noadmin' => true)); + $view->apply('former_users', $page); + $page->changeTpl('xnetgrp/former_users.tpl'); + } + function handler_trombi($page) { pl_redirect('annuaire/trombi'); @@ -380,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) @@ -460,15 +488,19 @@ class XnetGrpModule extends PLModule } $nonusers = array_unique($nonusers); $uids = array_unique($uids); - $uids = XDB::fetchColumn('SELECT a.uid - FROM accounts AS a - WHERE a.uid IN {?} AND NOT EXISTS (SELECT * - FROM group_members AS g - WHERE a.uid = g.uid AND g.asso_id = {?})', - $uids, $globals->asso('id')); - - $users = User::getBulkUsersWithUIDs($uids); - usort($users, 'User::compareDirectoryName'); + if (count($uids)) { + $uids = XDB::fetchColumn('SELECT a.uid + FROM accounts AS a + WHERE a.uid IN {?} AND NOT EXISTS (SELECT * + FROM group_members AS g + WHERE a.uid = g.uid AND g.asso_id = {?})', + $uids, $globals->asso('id')); + + $users = User::getBulkUsersWithUIDs($uids); + usort($users, 'User::compareDirectoryName'); + } else { + $users = array(); + } sort($nonusers); $page->assign('users', $users); @@ -526,9 +558,8 @@ class XnetGrpModule extends PLModule { global $globals; $this->removeSubscriptionRequest($user->id()); - XDB::execute("INSERT IGNORE INTO group_members (asso_id, uid) - VALUES ({?}, {?})", - $globals->asso('id'), $user->id()); + Group::subscribe($globals->asso('id'), $user->id()); + if (XDB::affectedRows() == 1) { $mailer = new PlMailer(); $mailer->addTo($user->forlifeEmail()); @@ -626,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(); @@ -851,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')); @@ -922,10 +970,10 @@ class XnetGrpModule extends PLModule list($lastname, $firstname) = str_replace(array('-', ' ', "'"), '%', array(Env::t('nom'), Env::t('prenom'))); $cond = new PFC_And(new PFC_Not(new UFC_Registered())); if (!empty($lastname)) { - $cond->addChild(new UFC_Name(Profile::LASTNAME, $lastname, UFC_Name::CONTAINS)); + $cond->addChild(new UFC_NameTokens($lastname, array(), false, false, Profile::LASTNAME)); } if (!empty($firstname)) { - $cond->addChild(new UFC_Name(Profile::FIRSTNAME, $firstname, UFC_Name::CONTAINS)); + $cond->addChild(new UFC_NameTokens($firstname, array(), false, false, Profile::FIRSTNAME)); } if (Env::t('promo')) { $cond->addChild(new UFC_Promo('=', UserFilter::DISPLAY, Env::t('promo'))); @@ -940,12 +988,10 @@ class XnetGrpModule extends PLModule $page->assign('users', $users); } - function unsubscribe(PlUser $user) + function unsubscribe(PlUser $user, $remember = false) { global $globals; - XDB::execute("DELETE FROM group_members - WHERE uid = {?} AND asso_id = {?}", - $user->id(), $globals->asso('id')); + Group::unsubscribe($globals->asso('id'), $user->id(), $remember); if ($globals->asso('notif_unsub')) { $mailer = new PlMailer('xnetgrp/unsubscription-notif.mail.tpl'); @@ -1012,7 +1058,7 @@ class XnetGrpModule extends PLModule $hasSingleGroup = ($user->groupCount() == 1); - if ($this->unsubscribe($user)) { + if ($this->unsubscribe($user, Post::b('remember'))) { $page->trigSuccess('Tu as été désinscrit du groupe avec succès.'); } else { $page->trigWarning('Tu as été désinscrit du groupe, mais des erreurs se sont produites lors des désinscriptions des alias et des listes de diffusion.'); @@ -1230,16 +1276,39 @@ class XnetGrpModule extends PLModule $page->trigSuccess("{$user->fullName()} a été désabonné de $ml."); } } + + if ($globals->asso('has_nl')) { + // Updates group's newsletter subscription. + if (Post::i('newsletter') == 1) { + XDB::execute('INSERT IGNORE INTO newsletter_ins (uid, nlid) + SELECT {?}, id + FROM newsletters + WHERE group_id = {?}', + $user->id(), $globals->asso('id')); + } else { + XDB::execute('DELETE ni + FROM newsletter_ins AS ni + INNER JOIN newsletters AS n ON (n.id = ni.nlid) + WHERE ni.uid = {?} AND n.group_id = {?}', + $user->id(), $globals->asso('id')); + } + } } $res = XDB::rawFetchAllAssoc('SHOW COLUMNS FROM group_members LIKE \'position\''); $positions = str_replace(array('enum(', ')', '\''), '', $res[0]['Type']); + $nl_registered = XDB::fetchOneCell('SELECT COUNT(ni.uid) + FROM newsletter_ins AS ni + INNER JOIN newsletters AS n ON (n.id = ni.nlid) + WHERE ni.uid = {?} AND n.group_id = {?}', + $user->id(), $globals->asso('id')); $page->assign('user', $user); $page->assign('suggest', $this->suggest($user)); $page->assign('listes', $mmlist->get_lists($user->forlifeEmail())); $page->assign('alias', $user->emailGroupAliases($globals->asso('mail_domain'))); $page->assign('positions', explode(',', $positions)); + $page->assign('nl_registered', $nl_registered); } function handler_rss(PlPage $page, PlUser $user) @@ -1264,7 +1333,7 @@ class XnetGrpModule extends PLModule $page->trigError('Le fichier n\'est pas une image valide au format JPEG, GIF ou PNG.'); $upload->rm(); return false; - } elseif (!$upload->resizeImage(200, 300, 100, 100, 32284)) { + } elseif (!$upload->resizeImage(80, 100, 100, 100, 32284)) { $page->trigError('Impossible de retraiter l\'image'); return false; }