<?php
/***************************************************************************
- * Copyright (C) 2003-2011 Polytechnique.org *
+ * Copyright (C) 2003-2014 Polytechnique.org *
* http://opensource.polytechnique.org/ *
* *
* This program is free software; you can redistribute it and/or modify *
'%grp/site' => $this->make_hook('site', AUTH_PUBLIC),
'%grp/edit' => $this->make_hook('edit', AUTH_PASSWD, 'groupadmin'),
'%grp/mail' => $this->make_hook('mail', AUTH_PASSWD, 'groupadmin'),
- '%grp/forum' => $this->make_hook('forum', AUTH_PASSWD, 'groupmember'),
+ '%grp/forum' => $this->make_hook('forum', AUTH_PASSWD, 'groupannu'),
'%grp/former_users' => $this->make_hook('former_users', AUTH_PASSWD, 'admin'),
'%grp/annuaire' => $this->make_hook('annuaire', AUTH_PASSWD, 'groupannu'),
'%grp/annuaire/vcard' => $this->make_hook('vcard', AUTH_PASSWD, 'groupmember:groupannu'),
'%grp/annuaire/csv' => $this->make_hook('csv', AUTH_PASSWD, 'groupmember:groupannu'),
'%grp/directory/sync' => $this->make_hook('directory_sync', AUTH_PASSWD, 'groupadmin'),
'%grp/directory/unact' => $this->make_hook('non_active', AUTH_PASSWD, 'groupadmin'),
+ '%grp/directory/awact' => $this->make_hook('awaiting_active', AUTH_PASSWD, 'groupadmin'),
'%grp/trombi' => $this->make_hook('trombi', AUTH_PASSWD, 'groupannu'),
'%grp/geoloc' => $this->make_hook('geoloc', AUTH_PASSWD, 'groupannu'),
'%grp/subscribe' => $this->make_hook('subscribe', AUTH_PASSWD, 'groups'),
$page->assign('pub', Post::v('pub'));
$page->assign('notif_unsub', Post::i('notif_unsub'));
$page->assign('descr', Post::t('descr'));
+ $page->assign('disable_mails', Post::b('disable_mails'));
$page->assign('error', $error);
return;
}
descr={?}, site={?}, mail={?}, resp={?},
forum={?}, mail_domain={?}, ax={?}, axDate = {?}, pub={?},
sub_url={?}, inscriptible={?}, unsub_url={?},
- flags = {?}, welcome_msg = {?}
+ flags = {?}, welcome_msg = {?}, disable_mails = {?}
WHERE id={?}",
Post::v('nom'), Post::v('diminutif'),
Post::v('cat'), (Post::i('dom') == 0) ? null : Post::i('dom'),
Post::has('ax'), $axDate, Post::v('pub'),
Post::v('sub_url'), Post::v('inscriptible'),
Post::v('unsub_url'), $flags, Post::t('welcome_msg'),
+ Post::b('disable_mails'),
$globals->asso('id'));
if (Post::v('mail_domain')) {
XDB::execute('INSERT IGNORE INTO email_virtual_domains (name)
$page->assign('pub', $globals->asso('pub'));
$page->assign('notif_unsub', $globals->asso('notif_unsub'));
$page->assign('notify_all', $globals->asso('notify_all'));
+ $page->assign('disable_mails', $globals->asso('disable_mails'));
}
function handler_mail($page)
{
global $globals;
+ if ($globals->asso('disable_mails')) {
+ return PL_FORBIDDEN;
+ }
$page->changeTpl('xnetgrp/mail.tpl');
$mmlist = new MMList(S::user(), $globals->asso('mail_domain'));
$filename = $globals->asso('diminutif') . '.csv';
}
$users = $globals->asso()->getMembersFilter(null, new UFO_Name())->getUsers();
+ $admin = may_update();
pl_cached_content_headers('text/x-csv', 'iso-8859-1', 1);
- echo utf8_decode("Nom;Prénom;Sexe;Promotion;Commentaire\n");
+ echo utf8_decode("Nom;Prénom;Sexe;Promotion;Commentaire");
+ if ($admin) {
+ echo utf8_decode(";Société;Poste\n");
+ } else {
+ echo utf8_decode("\n");
+ }
foreach ($users as $user) {
$line = $user->lastName() . ';' . $user->firstName() . ';' . ($user->isFemale() ? 'F' : 'M')
- . ';' . $user->promo() . ';' . strtr($user->group_comm, ';', ',');
+ . ';' . $user->promo() . ';' . strtr($user->group_comm, ';', ',');
+ if ($admin) {
+ if ($user->hasProfile()) {
+ $line .= ';' . $user->profile()->getMainJob()->company->name . ';' . $user->profile()->getMainJob()->description;
+ } else {
+ $line .= ';;';
+ }
+ }
echo utf8_decode($line) . "\n";
}
exit();
$users = array_keys(Env::v('add_users'));
$former_users = XDB::fetchColumn('SELECT uid
FROM group_former_members
- WHERE remember = TRUE AND uid IN {?}',
- $users);
+ WHERE remember = TRUE AND asso_id = {?} AND uid IN {?}',
+ $globals->asso('id'), $users);
$new_users = array_diff($users, $former_users);
foreach ($former_users as $uid) {
$data = array();
foreach ($new_users as $uid) {
- $data[] = XDB::format('({?}, {?})', $globals->asso('id'), $uid);
+ Group::subscribe($globals->asso('id'), $uid);
}
- XDB::rawExecute('INSERT INTO group_members (asso_id, uid)
- VALUES ' . implode(',', $data));
}
if (Env::has('add_nonusers')) {
VALUES ({?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, \'xnet\', \'disabled\')',
$hruid, $display_name, $full_name, $directory_name, $sort_name, $firstname, $lastname, $email);
$uid = XDB::insertId();
- XDB::execute('INSERT INTO group_members (asso_id, uid)
- VALUES ({?}, {?})',
- $globals->asso('id'), $uid);
+ Group::subscribe($globals->asso('id'), $uid);
}
}
$page->assign('users', $users);
}
+ private function again($uid)
+ {
+ $data = XDB::fetchOneAssoc('SELECT hash, group_name, sender_name, email
+ FROM register_pending_xnet
+ WHERE uid = {?}',
+ $uid);
+ XDB::execute('UPDATE register_pending_xnet
+ SET last_date = NOW()
+ WHERE uid = {?}',
+ $uid);
+
+ $mailer = new PlMailer('xnet/account.mail.tpl');
+ $mailer->addCc('validation+xnet_account@polytechnique.org');
+ $mailer->setTo($data['email']);
+ $mailer->assign('hash', $data['hash']);
+ $mailer->assign('email', $data['email']);
+ $mailer->assign('group', $data['group_name']);
+ $mailer->assign('sender_name', $data['sender_name']);
+ $mailer->assign('again', true);
+ $mailer->assign('baseurl', Platal::globals()->xnet->xorg_baseurl);
+ $mailer->send();
+ }
+
+ function handler_awaiting_active($page)
+ {
+ global $globals;
+ $page->changeTpl('xnetgrp/awaiting_active.tpl');
+
+ XDB::execute('DELETE FROM register_pending_xnet
+ WHERE DATE_SUB(NOW(), INTERVAL 1 MONTH) > date');
+
+ $uids = XDB::fetchColumn('SELECT g.uid
+ FROM group_members AS g
+ INNER JOIN accounts AS a ON (a.uid = g.uid)
+ INNER JOIN register_pending_xnet AS p ON (p.uid = g.uid)
+ WHERE a.uid = g.uid AND g.asso_id = {?} AND a.type = \'xnet\' AND a.state = \'pending\'',
+ $globals->asso('id'));
+
+ if (Post::has('again')) {
+ S::assert_xsrf_token();
+
+ $uids_to_again = array_intersect(array_keys(Post::v('again')), $uids);
+ foreach ($uids_to_again as $uid) {
+ $this->again($uid);
+ }
+ $page->trigSuccess('Relances effectuées avec succès.');
+ }
+
+ if ($uids) {
+ $registration_date = XDB::fetchAllAssoc('uid', 'SELECT uid, date
+ FROM register_pending_xnet
+ WHERE uid IN {?}', $uids);
+ $last_date = XDB::fetchAllAssoc('uid', 'SELECT uid, last_date
+ FROM register_pending_xnet
+ WHERE uid IN {?}', $uids);
+
+ $users = User::getBulkUsersWithUIDs($uids);
+ $page->assign('users', $users);
+ $page->assign('registration_date', $registration_date);
+ $page->assign('last_date', $last_date);
+ }
+
+ }
+
private function removeSubscriptionRequest($uid)
{
global $globals;
$this->removeSubscriptionRequest($user->id());
Group::subscribe($globals->asso('id'), $user->id());
- if (XDB::affectedRows() == 1) {
+ if (XDB::affectedRows() == 1 && $user->forlifeEmail()) {
$mailer = new PlMailer();
$mailer->addTo($user->forlifeEmail());
$mailer->setFrom('"' . S::user()->fullName() . '" <' . S::user()->forlifeEmail() . '>');
S::assert_xsrf_token();
$this->removeSubscriptionRequest($user->id());
- $mailer = new PlMailer();
- $mailer->addTo($user->forlifeEmail());
- $mailer->setFrom('"' . S::user()->fullName() . '" <' . S::user()->forlifeEmail() . '>');
- $mailer->setSubject('['.$globals->asso('nom').'] Demande d\'inscription annulée');
- $mailer->setTxtBody(Env::v('motif'));
- $mailer->send();
+ if ($user->forlifeEmail()) {
+ $mailer = new PlMailer();
+ $mailer->addTo($user->forlifeEmail());
+ $mailer->setFrom('"' . S::user()->fullName() . '" <' . S::user()->forlifeEmail() . '>');
+ $mailer->setSubject('['.$globals->asso('nom').'] Demande d\'inscription annulée');
+ $mailer->setTxtBody(Env::v('motif'));
+ $mailer->send();
+ }
$page->killSuccess("La demande de {$user->fullName()} a bien été refusée.");
} else {
$page->assign('show_form', true);
S::i('uid'), $globals->asso('id'));
$admins = $globals->asso()->iterToNotify();
$admin = $admins->next();
- $to = $admin->bestEmail();
- while ($admin = $admins->next()) {
- $to .= ', ' . $admin->bestEmail();
+ if (!is_null($admin)) {
+ $to = $admin->bestEmail();
+ while ($admin = $admins->next()) {
+ $to .= ', ' . $admin->bestEmail();
+ }
+ } else {
+ $to = '';
}
$append = "\n"
break;
}
}
- http_redirect($_SERVER['HTTP_REFERER']);
+ if (!empty($_SERVER['HTTP_REFERER'])) {
+ http_redirect($_SERVER['HTTP_REFERER']);
+ } else {
+ pl_redirect('');
+ }
}
function handler_admin_annuaire($page)
Group::subscribe($globals->asso('id'), $user->id());
$this->removeSubscriptionRequest($user->id());
+ if ($user->isActive() && $user->bestEmail()) {
+ $mailer = new PlMailer('xnetgrp/forced-subscription.mail.tpl');
+ $mailer->addTo($user->bestEmail());
+ $mailer->assign('group', $globals->asso('nom'));
+ $mailer->assign('anim', S::user()->fullname());
+ $mailer->assign('diminutif', $globals->asso('diminutif'));
+ $mailer->send();
+ }
+
+ // Check if the group has more than 1000 members, if so, disable the "send mail" function.
+ $full_count = XDB::fetchOneCell('SELECT COUNT(*)
+ FROM group_members
+ WHERE asso_id = {?}',
+ $globals->asso('id'));
+ if ($full_count > 999) {
+ XDB::execute(
+ "UPDATE groups
+ SET disable_mails = 1
+ WHERE id = {?}",
+ $globals->asso('id'));
+ }
+
if ($suggest_account_activation) {
pl_redirect('member/suggest/' . $user->login() . '/' . $email . '/' . $globals->asso('nom'));
} else {
$mailer->send();
}
+ $nl = Newsletter::forGroup($globals->asso('shortname'));
+ if (!is_null($nl)) {
+ $nl->unsubscribe(null, S::i('uid'));
+ }
+
$domain = $globals->asso('mail_domain');
if (!$domain) {
return true;
$page->trigSuccess('Le compte va bientôt être activé.');
}
if (Post::b('again')) {
- $data = XDB::fetchOneAssoc('SELECT hash, group_name, sender_name, email
- FROM register_pending_xnet
- WHERE uid = {?}',
- $user->id());
-
- $mailer = new PlMailer('xnet/account.mail.tpl');
- $mailer->addCc('validation+xnet_account@polytechnique.org');
- $mailer->setTo($data['email']);
- $mailer->assign('hash', $data['hash']);
- $mailer->assign('email', $data['email']);
- $mailer->assign('group', $data['group_name']);
- $mailer->assign('sender_name', $data['sender_name']);
- $mailer->assign('again', true);
- $mailer->assign('baseurl', Platal::globals()->xnet->xorg_baseurl);
- $mailer->send();
+ $this->again($user->id());
$page->trigSuccess('Relance effectuée avec succès.');
}
}
}
}
-// vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8:
+// vim:set et sw=4 sts=4 sws=4 foldmethod=marker fenc=utf-8:
?>