Exemple #1
0
 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;
     }
 }