xnet and admin page.
Signed-off-by: Stéphane Jacob <sj@m4x.org>
define('ERROR_INVALID_EMAIL', 3);
define('ERROR_LOOP_EMAIL', 4);
+// Checks if an email update is required in MLs and aliases.
+// This occurs when the user don't have email permissions and her email has changed.
+function require_email_update(User $user, $new_email)
+{
+ Platal::assert(!is_null($user), 'User cannot be null.');
+
+ return !$user->checkPerms(User::PERM_MAIL) && $new_email != $user->forlifeEmail();
+}
+
function format_email_alias($email)
{
if ($user = User::getSilent($email)) {
return true;
}
+// Updates an email in all aliases (groups and events).
+function update_alias_user($former_email, $new_email)
+{
+ XDB::execute('UPDATE email_virtual
+ SET redirect = {?}
+ WHERE redirect = {?} AND (type = \'alias\' OR type = \'event\')',
+ $new_email, $former_email);
+}
+
function list_alias_members($local_part, $domain)
{
$emails = XDB::fetchColumn('SELECT DISTINCT(redirect)
}
// Account Form {{{
+ require_once 'emails.inc.php';
$to_update = array();
if (Post::has('disable_weak_access')) {
$to_update['weak_password'] = null;
if (Post::t('comment') != $user->comment) {
$to_update['comment'] = Post::blank('comment') ? null : Post::t('comment');
}
- if (!$user->checkPerms(User::PERM_MAIL) && Post::t('email') != $user->forlifeEmail()) {
+ if (require_email_update($user, Post::t('email'))) {
$to_update['email'] = Post::t('email');
$listClient->change_user_email($user->forlifeEmail(), Post::t('email'));
+ update_alias_user($user->forlifeEmail(), Post::t('email'));
}
}
if (!empty($to_update)) {
// }}}
// Email forwards form {{{
- require_once("emails.inc.php");
$redirect = ($registered ? new Redirect($user) : null);
if (Post::has('add_fwd')) {
$email = Post::t('email');
Post::t('full_name'), Post::t('directory_name'), Post::t('display_name'),
(Post::t('sex') == 'male') ? 'male' : 'female', Post::t('email'), $user->id());
if (XDB::affectedRows()) {
+ require_once 'emails.inc.php';
+ if (require_email_update($user, Post::t('email'))) {
+ $listClient = new MMList(S::user());
+ $listClient->change_user_email($user->forlifeEmail(), Post::t('email'));
+ update_alias_user($user->forlifeEmail(), Post::t('email'));
+ }
$user = User::getWithUID($user->id());
S::set('user', $user);
$page->trigSuccess('Données mises à jour.');
$mmlist = new MMList(S::user(), $globals->asso('mail_domain'));
if (Post::has('change')) {
+ require_once 'emails.inc.php';
S::assert_xsrf_token();
// Convert user status to X
WHERE uid = {?}',
Post::t('email'), $user->id());
}
+ if (require_email_update($user, Post::t('email'))) {
+ $listClient = new MMList(S::user());
+ $listClient->change_user_email($user->forlifeEmail(), Post::t('email'));
+ update_alias_user($user->forlifeEmail(), Post::t('email'));
+ }
if (XDB::affectedRows()) {
$page->trigSuccess('Données de l\'utilisateur mises à jour.');
}