}
$tables = array('account_auth_openid', 'announce_read', 'contacts',
- 'email_send_save', 'email_virtual',
+ 'email_send_save',
'forum_innd', 'forum_profiles', 'forum_subs',
'group_announces_read', 'group_members',
'group_member_sub_requests', 'reminder', 'requests',
XDB::execute('DELETE FROM email_redirect_account
WHERE uid = {?} AND type != \'homonym\'',
$this->id());
+ XDB::execute('DELETE FROM email_virtual
+ WHERE redirect = {?}',
+ $this->forlifeEmail());
foreach (array('gapps_accounts', 'gapps_nicknames') as $t) {
XDB::execute('DELETE FROM ' . $t . '
define('ERROR_INVALID_EMAIL', 3);
define('ERROR_LOOP_EMAIL', 4);
-function add_to_list_alias(User $user, $local_part, $domain, $type = 'alias')
+function format_email_alias($email)
{
- Platal::assert($user !== null, 'User should not be null.');
+ if ($user = User::getSilent($email)) {
+ return $user->forlifeEmail();
+ }
+ if (isvalid_email($email)) {
+ return $email;
+ }
+ return null;
+}
+
+function add_to_list_alias($email, $local_part, $domain, $type = 'alias')
+{
+ $email = format_email_alias($email);
+ if (is_null($email)) {
+ return false;
+ }
XDB::execute('INSERT IGNORE INTO email_virtual (email, domain, redirect, type)
SELECT {?}, id, {?}, {?}
FROM email_virtual_domains
WHERE name = {?}',
- $local_part, $user->forlifeEmail(), $type, $domain);
+ $local_part, $email, $type, $domain);
+ return true;
}
-function delete_from_list_alias(User $user, $local_part, $domain, $type = 'alias')
+function delete_from_list_alias($email, $local_part, $domain, $type = 'alias')
{
- Platal::assert($user !== null, 'User should not be null.');
+ $email = format_email_alias($email);
+ if (is_null($email)) {
+ return false;
+ }
XDB::execute('DELETE v
FROM email_virtual AS v
INNER JOIN email_virtual_domains AS m ON (v.domain = m.id)
INNER JOIN email_virtual_domains AS d ON (d.aliasing = m.id)
WHERE v.email = {?} AND d.name = {?} AND v.redirect = {?} AND type = {?}',
- $local_part, $domain, $user->forlifeEmail(), $type);
+ $local_part, $domain, $email, $type);
+ return true;
}
-function update_list_alias(User $user, $former_email, $local_part, $domain, $type = 'alias')
+function update_list_alias($email, $former_email, $local_part, $domain, $type = 'alias')
{
- Platal::assert($user !== null, 'User should not be null.');
+ $email = format_email_alias($email);
+ if (is_null($email)) {
+ return false;
+ }
XDB::execute('UPDATE email_virtual AS v
INNER JOIN email_virtual_domains AS d ON (v.domain = d.id)
SET v.redirect = {?}
WHERE v.redirect = {?} AND d.name = {?} AND v.email = {?} AND v.type = {?}',
- $user->forlifeEmail(), $former_email, $domain, $local_part, $type);
+ $email, $former_email, $domain, $local_part, $type);
+ return true;
}
function list_alias_members($local_part, $domain)
WHERE v.email = {?} AND d.name = {?} AND type = \'alias\'',
$local_part, $domain);
- $members = array();
+ $users = array();
+ $nonusers = array();
foreach ($emails as $email) {
- $members[] = User::getSilent($email);
+ if ($user = User::getSilent($email)) {
+ $users[] = $user;
+ } else {
+ $nonusers[] = $email;
+ }
}
- return $members;
+ return array(
+ 'users' => $users,
+ 'nonusers' => $nonusers
+ );
}
function delete_list_alias($local_part, $domain)
if ($this->asso == 'alias') {
foreach ($this->members as $member) {
- $user = User::get($member);
- add_to_list_alias($user, $this->liste, $this->domain);
+ add_to_list_alias($member, $this->liste, $this->domain);
}
} else {
$list = new MMList(S::user(), $this->domain);
return;
}
- $user = User::getSilentWithUID($uid);
-
/** If $payment is not null, we do not retrieve the value of $participate,
* thus we do not alter participant and absent lists.
*/
if ($payment === true) {
if ($paid > 0) {
- delete_from_list_alias($user, $short_name . $globals->xnet->unpayed_list, $globals->xnet->evts_domain, 'event');
- add_to_list_alias($user, $short_name . $globals->xnet->payed_list, $globals->xnet->evts_domain, 'event');
+ delete_from_list_alias($uid, $short_name . $globals->xnet->unpayed_list, $globals->xnet->evts_domain, 'event');
+ add_to_list_alias($uid, $short_name . $globals->xnet->payed_list, $globals->xnet->evts_domain, 'event');
}
} else {
switch ($participate) {
case -1:
- delete_from_list_alias($user, $short_name . $globals->xnet->participant_list, $globals->xnet->evts_domain, 'event');
- delete_from_list_alias($user, $short_name . $globals->xnet->unpayed_list, $globals->xnet->evts_domain, 'event');
- delete_from_list_alias($user, $short_name . $globals->xnet->payed_list, $globals->xnet->evts_domain, 'event');
- add_to_list_alias($user, $short_name . $globals->xnet->absent_list, $globals->xnet->evts_domain, 'event');
+ delete_from_list_alias($uid, $short_name . $globals->xnet->participant_list, $globals->xnet->evts_domain, 'event');
+ delete_from_list_alias($uid, $short_name . $globals->xnet->unpayed_list, $globals->xnet->evts_domain, 'event');
+ delete_from_list_alias($uid, $short_name . $globals->xnet->payed_list, $globals->xnet->evts_domain, 'event');
+ add_to_list_alias($uid, $short_name . $globals->xnet->absent_list, $globals->xnet->evts_domain, 'event');
break;
case 0:
- delete_from_list_alias($user, $short_name . $globals->xnet->participant_list, $globals->xnet->evts_domain, 'event');
- delete_from_list_alias($user, $short_name . $globals->xnet->absent_list, $globals->xnet->evts_domain, 'event');
- delete_from_list_alias($user, $short_name . $globals->xnet->unpayed_list, $globals->xnet->evts_domain, 'event');
- delete_from_list_alias($user, $short_name . $globals->xnet->payed_list, $globals->xnet->evts_domain, 'event');
+ delete_from_list_alias($uid, $short_name . $globals->xnet->participant_list, $globals->xnet->evts_domain, 'event');
+ delete_from_list_alias($uid, $short_name . $globals->xnet->absent_list, $globals->xnet->evts_domain, 'event');
+ delete_from_list_alias($uid, $short_name . $globals->xnet->unpayed_list, $globals->xnet->evts_domain, 'event');
+ delete_from_list_alias($uid, $short_name . $globals->xnet->payed_list, $globals->xnet->evts_domain, 'event');
break;
case 1:
- add_to_list_alias($user, $short_name . $globals->xnet->participant_list, $globals->xnet->evts_domain, 'event');
- delete_from_list_alias($user, $short_name . $globals->xnet->absent_list, $globals->xnet->evts_domain, 'event');
+ add_to_list_alias($uid, $short_name . $globals->xnet->participant_list, $globals->xnet->evts_domain, 'event');
+ delete_from_list_alias($uid, $short_name . $globals->xnet->absent_list, $globals->xnet->evts_domain, 'event');
if ($paid > 0) {
- delete_from_list_alias($user, $short_name . $globals->xnet->unpayed_list, $globals->xnet->evts_domain, 'event');
- add_to_list_alias($user, $short_name . $globals->xnet->payed_list, $globals->xnet->evts_domain, 'event');
+ delete_from_list_alias($uid, $short_name . $globals->xnet->unpayed_list, $globals->xnet->evts_domain, 'event');
+ add_to_list_alias($uid, $short_name . $globals->xnet->payed_list, $globals->xnet->evts_domain, 'event');
} else {
- add_to_list_alias($user, $short_name . $globals->xnet->unpayed_list, $globals->xnet->evts_domain, 'event');
- delete_from_list_alias($user, $short_name . $globals->xnet->payed_list, $globals->xnet->evts_domain, 'event');
+ add_to_list_alias($uid, $short_name . $globals->xnet->unpayed_list, $globals->xnet->evts_domain, 'event');
+ delete_from_list_alias($uid, $short_name . $globals->xnet->payed_list, $globals->xnet->evts_domain, 'event');
}
break;
}
FROM group_event_participants
WHERE eid = {?} AND ' . $where[$suffix],
$eid);
- $users = User::getBulkUsersWithUIDs($uids, null, null, false);
- foreach ($users as $user) {
- add_to_list_alias($user, $new . $suffix, $globals->xnet->evts_domain, 'event');
+ foreach ($uids as $uid) {
+ add_to_list_alias($uid, $new . $suffix, $globals->xnet->evts_domain, 'event');
}
}
$uids = XDB::fetchColumn('SELECT m.uid
LEFT JOIN group_event_participants AS e ON (e.uid = m.uid AND e.eid = {?})
WHERE m.asso_id = {?} AND e.uid IS NULL',
$eid, $globals->asso('id'));
- $users = User::getBulkUsersWithUIDs($uids, null, null, false);
- foreach ($users as $user) {
- add_to_list_alias($user, $new . $globals->xnet->absent_list, $globals->xnet->evts_domain, 'event');
+ foreach ($uids as $uid) {
+ add_to_list_alias($uid, $new . $globals->xnet->absent_list, $globals->xnet->evts_domain, 'event');
}
return $new;
foreach (Env::v('ml3', array()) as $ml => $state) {
require_once 'emails.inc.php';
$ask = !empty($_REQUEST['ml4'][$ml]);
+ list($local_part, ) = explode('@', $ml);
if($state == $ask) {
if ($state && $email_changed) {
- update_list_alias($user, $from_email, $ml, $globals->asso('mail_domain'));
+ update_list_alias($user->id(), $from_email, $local_part, $globals->asso('mail_domain'));
$page->trigSuccess("L'abonnement de {$user->fullName()} à $ml a été mis à jour.");
}
} else if($ask) {
- add_to_list_alias($user, $ml, $globals->asso('mail_domain'));
+ add_to_list_alias($user->id(), $local_part, $globals->asso('mail_domain'));
$page->trigSuccess("{$user->fullName()} a été abonné à $ml.");
} else {
- delete_from_list_alias($user, $ml, $globals->asso('mail_domain'));
+ delete_from_list_alias($user->id(), $local_part, $globals->asso('mail_domain'));
$page->trigSuccess("{$user->fullName()} a été désabonné de $ml.");
}
}
require_once 'emails.inc.php';
list($local_part, $domain) = explode('@', $lfull);
+ if ($globals->asso('mail_domain') != $domain || !preg_match("/^[a-zA-Z0-9\-\.]*$/", $local_part)) {
+ $page->trigErrorRedirect('Le nom de l\'alias est erroné.', $globals->asso('diminutif') . '/lists');
+ }
+
+
if (Env::has('add_member')) {
S::assert_xsrf_token();
- $email = Env::t('add_member');
- $user = User::getSilent($email);
- if ($user) {
- add_to_list_alias($user, $local_part, $domain);
- $page->trigSuccess($email . ' ajouté.');
+ if (add_to_list_alias(Env::t('add_member'), $local_part, $domain)) {
+ $page->trigSuccess('Ajout réussit.');
} else {
- $page->trigError($email . " n'existe pas.");
+ $page->trigError('Ajout infructueux.');
}
}
if (Env::has('del_member')) {
S::assert_xsrf_token();
- $user = User::getSilent(Env::t('del_member'));
- delete_from_list_alias($user, $local_part, $domain);
- $page->trigSuccess($user->fullName() . ' supprimé.');
+ if (delete_from_list_alias(Env::t('del_member'), $local_part, $domain)) {
+ $page->trigSuccess('Suppression réussie.');
+ } else {
+ $page->trigError('Suppression infructueuse.');
+ }
}
$page->assign('members', list_alias_members($local_part, $domain));
return;
}
- add_to_list_alias(S::user(), $list, $globals->asso('mail_domain'));
+ add_to_list_alias(S::uid(), $list, $globals->asso('mail_domain'));
pl_redirect('alias/admin/' . $list . '@' . $globals->asso('mail_domain'));
}
<h1>Membres de {$platal->argv[1]}</h1>
<table class='tinybicol'>
- {if $members|@count}
- {foreach from=$members item=member}
+ {if $members.users|@count}
+ {foreach from=$members.users item=member}
<tr>
<td>
- <a href="https://www.polytechnique.org/profile/{$member->profile()->hrpid}" class="popup2">{$member->fullName()}</a>
+ {if $member->hasProfile()}
+ <a href="https://www.polytechnique.org/profile/{$member->hruid}" class="popup2">{$member->fullName()}</a>
+ {else}
+ {$member->fullName()}
+ {/if}
</td>
<td class="right">{$member->promo()}</td>
<td class="center">
</td>
</tr>
{/foreach}
- {else}
+ {/if}
+ {if $members.nonusers|@count}
+ {foreach from=$members.nonusers item=member}
+ <tr>
+ <td>{$member}</td>
+ <td></td>
+ <td class="center">
+ <a href='{$platal->ns}alias/admin/{$platal->argv[1]}?del_member={$member}&token={xsrf_token}'>
+ {icon name=delete title='retirer membre'}
+ </a>
+ </td>
+ </tr>
+ {/foreach}
+ {/if}
+ {if $members.users|@count eq 0 && $members.nonusers|@count eq 0}
<tr>
<td colspan="3">
<em>aucun membre…</em>