Example #1
0
 function handler_index($page, $action = null)
 {
     require_once 'emails.inc.php';
     require_once 'googleapps.inc.php';
     $page->changeTpl('googleapps/index.tpl');
     $page->setTitle('Compte Google Apps');
     $user = S::user();
     $account = new GoogleAppsAccount($user);
     // Fills up the 'is Google Apps redirection active' variable.
     $redirect_active = false;
     $redirect_unique = true;
     $gapps_email = '';
     if ($account->active()) {
         $redirect = new Redirect($user);
         foreach ($redirect->emails as $email) {
             if ($email->type == 'googleapps') {
                 $gapps_email = $email->email;
                 $redirect_active = $email->active;
                 $redirect_unique = !$redirect->other_active($email->email);
             }
         }
     }
     $page->assign('redirect_active', $redirect_active);
     $page->assign('redirect_unique', $redirect_unique);
     // Updates the Google Apps account as required.
     if ($action) {
         if ($action == 'password' && Post::has('pwsync')) {
             S::assert_xsrf_token();
             if (Post::v('pwsync') == 'sync') {
                 $account->set_password_sync(true);
                 $account->set_password($user->password());
             } else {
                 $account->set_password_sync(false);
             }
         } elseif ($action == 'password' && Post::has('pwhash') && Post::t('pwhash') && !$account->sync_password) {
             S::assert_xsrf_token();
             $account->set_password(Post::t('pwhash'));
         }
         if ($action == 'suspend' && Post::has('suspend') && $account->active()) {
             S::assert_xsrf_token();
             if ($account->pending_update_suspension) {
                 $page->trigWarning("Ton compte est déjà en cours de désactivation.");
             } else {
                 if (!$redirect_active || $redirect->modify_one_email($gapps_email, false) == SUCCESS) {
                     $account->suspend();
                     $page->trigSuccess("Ton compte Google Apps est dorénavant désactivé.");
                 } else {
                     $page->trigError("Ton compte Google Apps est ta seule adresse de redirection. Ton compte ne peux pas être désactivé.");
                 }
             }
         } elseif ($action == 'unsuspend' && Post::has('unsuspend') && $account->suspended()) {
             $account->unsuspend(Post::b('redirect_mails', true));
             $page->trigSuccess("Ta demande de réactivation a bien été prise en compte.");
         }
         if ($action == 'create') {
             $page->assign('has_password_sync', Get::has('password_sync'));
             $page->assign('password_sync', Get::b('password_sync', true));
         }
         if ($action == 'create' && Post::has('password_sync') && Post::has('redirect_mails')) {
             S::assert_xsrf_token();
             $password_sync = Post::b('password_sync');
             $redirect_mails = Post::b('redirect_mails');
             if ($password_sync) {
                 $password = $user->password();
             } else {
                 $password = Post::t('pwhash');
             }
             $account->create($password_sync, $password, $redirect_mails);
             $page->trigSuccess("La demande de création de ton compte Google Apps a bien été enregistrée.");
         }
     }
     $page->assign('account', $account);
 }
Example #2
0
 function handler_redirect($page, $action = null, $email = null, $rewrite = null)
 {
     global $globals;
     require_once 'emails.inc.php';
     $page->changeTpl('emails/redirect.tpl');
     $user = S::user();
     $page->assign_by_ref('user', $user);
     $page->assign('eleve', $user->promo() >= date("Y") - 5);
     $redirect = new Redirect($user);
     // FS#703 : $_GET is urldecoded twice, hence
     // + (the data) => %2B (in the url) => + (first decoding) => ' ' (second decoding)
     // Since there can be no spaces in emails, we can fix this with :
     $email = str_replace(' ', '+', $email);
     // Apply email redirection change requests.
     $result = SUCCESS;
     if ($action == 'remove' && $email) {
         $result = $redirect->delete_email($email);
     }
     if ($action == 'active' && $email) {
         $redirect->modify_one_email($email, true);
     }
     if ($action == 'inactive' && $email) {
         $redirect->modify_one_email($email, false);
     }
     if ($action == 'rewrite' && $email) {
         $redirect->modify_one_email_redirect($email, $rewrite);
     }
     if (Env::has('emailop')) {
         S::assert_xsrf_token();
         $actifs = Env::v('emails_actifs', array());
         if (Env::v('emailop') == "ajouter" && Env::has('email')) {
             $error_email = false;
             $new_email = Env::v('email');
             if ($new_email == "*****@*****.**") {
                 $new_email = Env::v('email_new');
             }
             $result = $redirect->add_email($new_email);
             if ($result == ERROR_INVALID_EMAIL) {
                 $error_email = true;
                 $page->assign('email', $new_email);
             }
             $page->assign('retour', $result);
             $page->assign('error_email', $error_email);
         } elseif (empty($actifs)) {
             $result = ERROR_INACTIVE_REDIRECTION;
         } elseif (is_array($actifs)) {
             $result = $redirect->modify_email($actifs, Env::v('emails_rewrite', array()));
         }
     }
     switch ($result) {
         case ERROR_INACTIVE_REDIRECTION:
             $page->trigError('Tu ne peux pas avoir aucune adresse de redirection active, sinon ton adresse ' . $user->forlifeEmail() . ' ne fonctionnerait plus.');
             break;
         case ERROR_INVALID_EMAIL:
             $page->trigError('Erreur : l\'email n\'est pas valide.');
             break;
         case ERROR_LOOP_EMAIL:
             $page->trigError('Erreur : ' . $user->forlifeEmail() . ' ne doit pas être renvoyé vers lui-même, ni vers son équivalent en ' . $globals->mail->domain2 . ' ni vers polytechnique.edu.');
             break;
     }
     // Fetch existing email aliases.
     $alias = XDB::query('SELECT  CONCAT(s.email, \'@\', d.name) AS email, s.expire
                            FROM  email_source_account  AS s
                      INNER JOIN  email_virtual_domains AS m ON (s.domain = m.id)
                      INNER JOIN  email_virtual_domains AS d ON (m.id = d.aliasing)
                           WHERE  s.uid = {?}
                        ORDER BY  NOT(s.type = \'alias_aux\'), s.email, d.name', $user->id());
     $page->assign('alias', $alias->fetchAllAssoc());
     $page->assign('best_email', $user->bestEmail());
     $page->assign('emails', $redirect->emails);
     // Display GoogleApps acount information.
     require_once 'googleapps.inc.php';
     $page->assign('googleapps', GoogleAppsAccount::account_status($user->id()));
     require_once 'emails.combobox.inc.php';
     fill_email_combobox($page, array('job', 'stripped_directory'));
 }