function handler_alias($page, $action = null, $value = null) { global $globals; $page->changeTpl('emails/alias.tpl'); $page->setTitle('Alias melix.net'); $user = S::user(); $page->assign('request', AliasReq::get_request($user->id())); // Remove the email alias. if ($action == 'delete') { S::assert_xsrf_token(); XDB::execute('DELETE FROM email_source_account WHERE uid = {?} AND type = \'alias_aux\'', $user->id()); require_once 'emails.inc.php'; fix_bestalias($user); } // Fetch existing auxiliary aliases. list($alias, $old_alias) = XDB::fetchOneRow('SELECT CONCAT(s.email, \'@\', d.name), s.email FROM email_source_account AS s INNER JOIN email_virtual_domains AS d ON (s.domain = d.id) WHERE s.uid = {?} AND s.type = \'alias_aux\'', $user->id()); $visibility = $user->hasProfile() && $user->profile()->isVisible($user->profile()->alias_pub); $page->assign('current', $alias); $page->assign('user', $user); $page->assign('mail_public', $visibility); if ($action == 'ask' && Env::has('alias') && Env::has('reason')) { S::assert_xsrf_token(); // Retrieves user request. $new_alias = Env::v('alias'); $reason = Env::v('reason'); $public = Env::v('public', 'off') == 'on' ? 'private' : 'hidden'; $page->assign('r_alias', $new_alias); $page->assign('r_reason', $reason); if ($public == 'private') { $page->assign('r_public', true); } // Checks special charaters in alias. if (!preg_match("/^[a-zA-Z0-9\\-.]{2,19}[a-zA-Z0-9\\-]\$/", $new_alias)) { $page->trigError("L'adresse demandée n'est pas valide." . " Vérifie qu'elle comporte entre 3 et 20 caractères" . " et qu'elle ne contient que des lettres non accentuées," . " des chiffres ou les caractères '-' et '.'. De plus, elle ne" . " peut pas se terminer par un point."); return; } else { // Checks if the alias has already been given. $res = XDB::query('SELECT COUNT(email) FROM email_source_account WHERE email = {?} AND type = \'alias_aux\'', $new_alias); if ($res->fetchOneCell() > 0) { $page->trigError("L'alias {$new_alias} a déja été attribué. Tu ne peux donc pas l'obtenir."); return; } // Checks if the alias has already been asked for. $it = Validate::iterate('alias'); while ($req = $it->next()) { if ($req->alias == $new_alias) { $page->trigError("L'alias {$new_alias} a déja été demandé. Tu ne peux donc pas l'obtenir pour l'instant."); return; } } // Sends requests. This will erase any previous alias pending request. $myalias = new AliasReq($user, $new_alias, $reason, $public, $old_alias); $myalias->submit(); $page->assign('success', $new_alias); return; } } elseif ($action == 'set' && ($value == 'public' || $value == 'private')) { if (!S::has_xsrf_token()) { return PL_FORBIDDEN; } if ($user->hasProfile()) { XDB::execute('UPDATE profiles SET alias_pub = {?} WHERE pid = {?}', $value, $user->profile()->id()); } exit; } }