'%grp/directory/unact' => $this->make_hook('non_active', AUTH_MDP, 'groupadmin'),
'%grp/trombi' => $this->make_hook('trombi', AUTH_MDP, 'groupannu'),
'%grp/geoloc' => $this->make_hook('geoloc', AUTH_MDP, 'groupannu'),
- '%grp/subscribe' => $this->make_hook('subscribe', AUTH_MDP),
+ '%grp/subscribe' => $this->make_hook('subscribe', AUTH_MDP, 'groups'),
'%grp/subscribe/valid' => $this->make_hook('subscribe_valid', AUTH_MDP, 'groupadmin'),
'%grp/unsubscribe' => $this->make_hook('unsubscribe', AUTH_MDP, 'groupmember'),
- '%grp/change_rights' => $this->make_hook('change_rights', AUTH_MDP),
+ '%grp/change_rights' => $this->make_hook('change_rights', AUTH_MDP, 'groups'),
'%grp/admin/annuaire' => $this->make_hook('admin_annuaire', AUTH_MDP, 'groupadmin'),
'%grp/member' => $this->make_hook('admin_member', AUTH_MDP, 'groupadmin'),
'%grp/member/new' => $this->make_hook('admin_member_new', AUTH_MDP, 'groupadmin'),
- '%grp/member/new/ajax' => $this->make_hook('admin_member_new_ajax', AUTH_MDP, 'user', NO_AUTH),
+ '%grp/member/new/ajax' => $this->make_hook('admin_member_new_ajax', AUTH_MDP, 'groups', NO_AUTH),
'%grp/member/del' => $this->make_hook('admin_member_del', AUTH_MDP, 'groupadmin'),
'%grp/member/suggest' => $this->make_hook('admin_member_suggest', AUTH_MDP, 'groupadmin'),
if (is_null($filename)) {
$filename = $globals->asso('diminutif') . '.csv';
}
- $users = $globals->asso()->getMembersFilter(null, new UFO_Name('directory_name'))->getUsers();
+ $users = $globals->asso()->getMembersFilter(null, new UFO_Name())->getUsers();
pl_cached_content_headers('text/x-csv', 1);
$page->changeTpl('xnetgrp/annuaire-csv.tpl', NO_SKIN);
$page->assign('users', $users);
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)
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();
$append = "\n"
. "-- \n"
. "Ce message a été envoyé suite à la demande d'inscription de\n"
- . S::user()->fullName() . ' (X' . S::v('promo') . ")\n"
+ . S::user()->fullName(true) . "\n"
. "Via le site www.polytechnique.net. Tu peux choisir de valider ou\n"
. "de refuser sa demande d'inscription depuis la page :\n"
. "http://www.polytechnique.net/" . $globals->asso("diminutif") . "/subscribe/" . S::user()->login() . "\n"
}
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'));
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')));
}
if ($globals->asso('has_nl')) {
+ $nl = NewsLetter::forGroup($globals->asso('shortname'));
// 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'));
+ $nl->subscribe($user);
} 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'));
+ $nl->unsubscribe(null, $user->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'));
+ if ($globals->asso('has_nl')) {
+ $nl = NewsLetter::forGroup($globals->asso('shortname'));
+ $nl_registered = $nl->subscriptionState($user);
+ } else {
+ $nl_registered = false;
+ }
$page->assign('user', $user);
$page->assign('suggest', $this->suggest($user));