function fill_email_combobox(PlPage $page, $user = null, $profile = null)
{
- global $globals;
-
if (is_null($user)) {
$user = S::user();
}
/* Always refetch the profile. */
$profile = $user->profile(true);
}
- $email_type = "directory";
+ $email_type = 'directory';
if ($profile) {
$email_directory = $profile->email_directory;
- if ($email_directory) {
- $page->assign('email_directory', $email_directory);
- list($alias, $domain) = explode('@', $email_directory);
- } else {
- $page->assign('email_directory', '');
- $email_type = NULL;
- $alias = $domain = '';
- }
+ $page->assign('email_directory', $email_directory);
- $res = XDB::query(
- "SELECT email
- FROM profile_job
- WHERE pid = {?}", $profile->id());
- $res = $res->fetchAllAssoc();
+ $res = XDB::fetchAllAssoc('SELECT email
+ FROM profile_job
+ WHERE pid = {?}', $profile->id());
$pro = array();
foreach ($res as $res_it) {
if ($res_it['email'] != '') {
}
if ($user) {
- $melix = $user->emailAlias();
- if ($melix) {
- list($melix) = explode('@', $melix);
- $page->assign('melix', $melix);
- if (($domain == $globals->mail->alias_dom) || ($domain == $globals->mail->alias_dom2)) {
- $email_type = "melix";
- }
- }
-
- $res = XDB::query(
- "SELECT alias
- FROM aliases
- WHERE uid={?} AND (type='a_vie' OR type='alias')", $user->id());
- $res = $res->fetchAllAssoc();
+ $res = XDB::fetchAllAssoc('SELECT CONCAT(s.email, \'@\', d.name)
+ 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 (d.aliasing = m.id)
+ WHERE s.uid = {?}
+ ORDER BY s.email, d.name', $user->id());
$page->assign('list_email_X', $res);
- if (($domain == $globals->mail->domain) || ($domain == $globals->mail->domain2)) {
- foreach ($res as $res_it) {
- if ($alias == $res_it['alias']) {
- $email_type = "X";
- }
+ foreach ($res as $res_it) {
+ if ($email_directory == $res_it) {
+ $email_type = 'X';
}
}
$redirect = new Redirect($user);
$redir = array();
foreach ($redirect->emails as $redirect_it) {
- if ($redirect_it instanceof EmailRedirection) {
+ if ($redirect_it->is_redirection()) {
$redir[] = $redirect_it->email;
if ($email_directory == $redirect_it->email) {
- $email_type = "redir";
+ $email_type = 'redir';
}
}
}
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *
***************************************************************************/
-define("SUCCESS", 1);
-define("ERROR_INACTIVE_REDIRECTION", 2);
-define("ERROR_INVALID_EMAIL", 3);
-define("ERROR_LOOP_EMAIL", 4);
+define('SUCCESS', 1);
+define('ERROR_INACTIVE_REDIRECTION', 2);
+define('ERROR_INVALID_EMAIL', 3);
+define('ERROR_LOOP_EMAIL', 4);
// function fix_bestalias() {{{1
// Checks for an existing 'bestalias' among the the current user's aliases, and
// eventually selects a new bestalias when required.
function fix_bestalias(User $user)
{
- $res = XDB::query("SELECT COUNT(*)
- FROM aliases
- WHERE uid = {?} AND FIND_IN_SET('bestalias', flags) AND type != 'homonyme'",
- $user->id());
- if ($res->fetchOneCell()) {
- return;
- }
+ $count = XDB::fetchOneCell('SELECT COUNT(*)
+ FROM email_source_account
+ WHERE uid = {?} AND FIND_IN_SET(\'bestalias\', flags)',
+ $user->id());
- XDB::execute("UPDATE aliases
- SET flags=CONCAT(flags,',','bestalias')
- WHERE uid={?} AND type!='homonyme'
- ORDER BY !FIND_IN_SET('usage',flags),alias LIKE '%.%', LENGTH(alias)
- LIMIT 1", $user->id());
+ if ($count == 1) {
+ return;
+ } elseif ($count > 1) {
+ // If too many bestaliases, delete the bestalias flag from all this
+ // user's emails (this should never happen).
+ XDB::execute("UPDATE email_source_account
+ SET flags = TRIM(BOTH ',' FROM REPLACE(CONCAT(',', flags, ','), ',bestalias,', ','))
+ WHERE uid = {?}",
+ $user->id());
+ }
+
+ // If no bestalias is selected, we choose the shortest email which is not
+ // related to a usage name and contains a '.'.
+ XDB::execute("UPDATE email_source_account
+ SET flags = CONCAT_WS(',', IF(flags = '', NULL, flags), 'bestalias')
+ WHERE uid = {?}
+ ORDER BY NOT FIND_IN_SET('usage', flags), email LIKE '%.%', LENGTH(email)
+ LIMIT 1",
+ $user->id());
}
// function valide_email() {{{1
}
// function isvalid_email_redirection() {{{1
-/** vérifie si une adresse email convient comme adresse de redirection
- * @param $email l'adresse email a verifier
+/** Checks if an email is a suitable redirection.
+ * @param $email the email to check
* @return BOOL
*/
function isvalid_email_redirection($email)
}
// function ids_from_mails() {{{1
-// Converts an array of emails to an array of email => uid
+// Converts an array of emails to an array of email => uid, where email is the
+// given email when we found a matching user.
function ids_from_mails(array $emails)
{
global $globals;
- $domain_mails = array();
- $alias_mails = array();
- $other_mails = array();
- // Determine the type of the email adresses. It can eiher be a domain
- // email (@polytechnique.org), an alias email (@melix.net) or any other
- // email (potentially used as a redirection by one user)
+ // Removes duplicates, if any.
+ $emails = array_unique($emails);
+
+ // Formats and splits by domain type (locally managed or external) emails.
+ $domain_emails = array();
+ $other_emails = array();
foreach ($emails as $email) {
if (strpos($email, '@') === false) {
$user = $email;
} else {
list($user, $domain) = explode('@', $email);
}
- if ($domain == $globals->mail->alias_dom || $domain == $globals->mail->alias_dom2) {
+ if ($domain == $globals->mail->alias_dom || $domain == $globals->mail->alias_dom2
+ || $domain == $globals->mail->domain || $domain == $globals->mail->domain2) {
list($user) = explode('+', $user);
list($user) = explode('_', $user);
- $alias_mails[$email] = $user . "@" . $globals->mail->alias_dom;
- } elseif ($domain == $globals->mail->domain || $domain == $globals->mail->domain2) {
- list($user) = explode('+', $user);
- list($user) = explode('_', $user);
- $domain_mails[$email] = $user;
+ $domain_emails[$email] = strtolower($user . '@' . $domain);
} else {
- $other_mails[] = $email;
+ $other_emails[$email] = strtolower($user . '@' . $domain);
}
}
- $uids = array();
- // Look up user ids for addresses in domain
- $alias_uids = array();
- if (count($domain_mails)) {
- $res = XDB::query("SELECT alias, uid
- FROM aliases
- WHERE alias IN {?}", array_unique($domain_mails));
- foreach ($res->fetchAllRow() as $row) {
- list ($alias, $id) = $row;
- $domain_uids[$alias] = $id;
- }
- }
- // Connect emails with uids
- foreach ($domain_mails as $email => $user) {
- // Some 'domain' emails might be invalid.
- if (array_key_exists($user, $domain_uids)) {
- $uids[$email] = $domain_uids[$user];
- }
- }
+ // Retrieves emails from our domains.
+ $domain_uids = XDB::fetchAllAssoc('email',
+ 'SELECT email, uid
+ FROM email_source_account
+ WHERE email IN {?}',
+ array_unique($domain_emails));
- // Look up user ids for addresses in our alias domain
- $alias_uids = array();
- if (count($alias_mails)) {
- $res = XDB::query("SELECT v.alias, a.uid
- FROM virtual AS v
- INNER JOIN virtual_redirect AS r USING(vid)
- INNER JOIN aliases AS a ON (a.type = 'a_vie'
- AND r.redirect = CONCAT(a.alias, '@{$globals->mail->domain2}'))
- WHERE v.alias IN {?}", array_unique($alias_mails));
- foreach ($res->fetchAllRow() as $row) {
- list ($alias, $id) = $row;
- $alias_uids[$alias] = $id;
- }
- }
- // Connect emails with uids
- foreach ($alias_mails as $email => $user) {
- if (array_key_exists($user, $alias_uids)) {
- $uids[$email] = $alias_uids[$user];
- }
- }
+ // Retrieves emails from redirections.
+ $other_uids = XDB::fetchAllAssoc('redirect',
+ 'SELECT redirect, uid
+ FROM email_redirect_account
+ WHERE redirect IN {?}',
+ array_unique($other_emails));
- // Look up user ids for other addresses in the email redirection list
- if (count($other_mails)) {
- $lowerupper = array();
- foreach ($other_mails as $mail) {
- $lowerupper[strtolower($mail)] = $mail;
- }
- $res = XDB::query("SELECT email, uid
- FROM emails
- WHERE email IN {?}", $other_mails);
- foreach ($res->fetchAllRow() as $row) {
- list ($email, $uid) = $row;
- $uids[$lowerupper[strtolower($email)]] = $uid;
+ // Associates given emails with the corresponding uid.
+ $uids = array();
+ foreach (array_merge($domain_emails, $other_emails) as $email => $canonical_email) {
+ if (array_key_exists($canonical_email, $domain_uids)) {
+ $uids[$email] = $domain_uids[$canonical_email];
+ } elseif (array_key_exists($canonical_email, $other_uids)) {
+ $uids[$email] = $other_uids[$canonical_email];
}
}
// The Bogo class represents a spam filtering level in plat/al architecture.
class Bogo
{
- // properties {{{2
+ private static $states = array('let_spams', 'tag_spams', 'tag_and_drop_spams', 'drop_spams');
private $user;
private $state;
- private $_states = Array('let_spams', 'tag_spams', 'tag_and_drop_spams', 'drop_spams');
-
- // constructor {{{2
public function __construct(User $user)
{
}
$this->user = &$user;
- $res = XDB::query('SELECT email FROM emails WHERE uid = {?} AND flags = "filter"', $user->id());
- if ($res->numRows()) {
- $this->state = $res->fetchOneCell();
- } else {
- $this->state = 'tag_and_drop_spams';
- $res = XDB::query(
- "INSERT INTO emails (uid, email, rewrite, panne, flags)
- VALUES ({?}, 'tag_and_drop_spams', '', '0000-00-00', 'filter')",
- $user->id());
+ $res = XDB::query('SELECT action
+ FROM email_redirect_account
+ WHERE uid = {?} AND (type = \'smtp\' OR type = \'googleapps\')',
+ $user->id());
+ if ($res->numRows() == 0) {
+ return;
}
+ $this->state = $res->fetchOneCell();
}
- // public function change() {{{2
-
public function change($state)
{
- $this->state = is_int($state) ? $this->_states[$state] : $state;
- XDB::execute('UPDATE emails SET email = {?} WHERE uid = {?} AND flags = "filter"',
+ $this->state = is_int($state) ? self::$states[$state] : $state;
+ XDB::execute('UPDATE email_redirect_account
+ SET action = {?}
+ WHERE uid = {?} AND (type = \'smtp\' OR type = \'googleapps\')',
$this->state, $this->user->id());
}
- // pubic function level() {{{2
-
public function level()
{
- return array_search($this->state, $this->_states);
+ return array_search($this->state, self::$states);
}
}
// class Email {{{1
// Represents an "email address" used as final recipient for plat/al-managed
-// addresses; it can be subclasses a Redirection emails (third-party) or as
-// Storage emails (Polytechnique.org).
-abstract class Email
+// addresses.
+class Email
{
- protected $user;
+ // Lists fields to load automatically.
+ static private $field_names = array('rewrite', 'type', 'action', 'broken_date', 'broken_level', 'last', 'hash', 'allow_rewrite');
+
+ // Shortname to realname mapping for known mail storage backends.
+ static private $display_names = array(
+ 'imap' => 'Accès de secours aux emails (IMAP)',
+ 'googleapps' => 'Compte Google Apps',
+ );
+ static private $storage_domains = array(
+ 'imap' => 'imap',
+ 'googleapps' => 'g'
+ );
+
+ private $user;
// Basic email properties; $sufficient indicates if the email can be used as
- // an unique redirection; $email contains the delivery email address.
+ // an unique redirection; $redirect contains the delivery email address.
public $type;
public $sufficient;
public $email;
public $display_email;
+ public $domain;
+ public $action;
// Redirection status properties.
public $active;
+ public $inactive;
public $broken;
public $disabled;
public $rewrite;
public $hash;
// Redirection bounces stats.
- public $panne;
public $last;
- public $panne_level;
+ public $broken_level;
+ public $broken_date;
- // Activates the email address as a redirection.
- public abstract function activate();
-
- // Deactivates the email address as a redirection.
- public abstract function deactivate();
-
- // Sets the rewrite rule for the given address.
- public abstract function set_rewrite($rewrite);
-
- // Resets the error counts associated with the redirection.
- public abstract function clean_errors();
-
- // Email backend capabilities ('rewrite' refers to From: rewrite for mails
- // forwarded by Polytechnique.org's MXs; 'removable' indicates if the email
- // can be definitively removed; 'disable' indicates if the email has a third
- // status 'disabled' in addition to 'active' and 'inactive').
- public abstract function has_rewrite();
- public abstract function is_removable();
- public abstract function has_disable();
-}
-
-// class EmailRedirection {{{1
-// Implementation of Email for third-party redirection (redirection of emails to
-// external user-supplied addresses).
-class EmailRedirection extends Email
-{
- // constructor {{{2
-
- public function __construct(User $user, $row)
+ public function __construct(User $user, array $row)
{
- $this->user = &$user;
- $this->sufficient = true;
+ foreach (self::$field_names as $field) {
+ if (array_key_exists($field, $row)) {
+ $this->$field = $row[$field];
+ }
+ }
+ $this->email = $row['redirect'];
- list($this->email, $flags, $this->rewrite, $this->allow_rewrite, $this->hash, $this->panne, $this->last, $this->panne_level) = $row;
- $this->display_email = $this->email;
- $this->active = ($flags == 'active');
- $this->broken = ($flags == 'panne');
- $this->disabled = ($flags == 'disable');
+ if (array_key_exists($this->type, Email::$display_names)) {
+ $this->display_email = self::$display_names[$this->type];
+ } else {
+ $this->display_email = $this->email;
+ }
+ foreach (array('active', 'inactive', 'broken', 'disabled') as $status) {
+ $this->$status = ($status == $row['flags']);
+ }
+ $this->sufficient = ($this->type == 'smtp' || $this->type == 'googleapps');
+ $this->user = &$user;
}
- // public function activate() {{{2
-
+ // Activates the email address as a redirection.
public function activate()
{
- if (!$this->active) {
- XDB::execute("UPDATE emails
- SET panne_level = IF(flags = 'panne', panne_level - 1, panne_level),
- flags = 'active'
- WHERE uid = {?} AND email = {?}", $this->user->id(), $this->email);
- S::logger()->log("email_on", $this->email . ($this->user->id() != S::v('uid') ? "(admin on {$this->user->login()})" : ""));
- $this->active = true;
- $this->broken = false;
+ if ($this->inactive) {
+ XDB::execute('UPDATE email_redirect_account
+ SET broken_level = IF(flags = \'broken\', broken_level - 1, broken_level), flags = \'active\'
+ WHERE uid = {?} AND redirect = {?}',
+ $this->user->id(), $this->email);
+ S::logger()->log('email_on', $this->email . ($this->user->id() != S::v('uid') ? "(admin on {$this->user->login()})" : ''));
+ $this->inactive = false;
+ $this->active = true;
}
}
- // public function deactivate() {{{2
-
+ // Deactivates the email address as a redirection.
public function deactivate()
{
if ($this->active) {
- XDB::execute("UPDATE emails SET flags =''
- WHERE uid = {?} AND email = {?}", $this->user->id(), $this->email);
- S::logger()->log("email_off", $this->email . ($this->user->id() != S::v('uid') ? "(admin on {$this->user->login()})" : "") );
- $this->active = false;
+ XDB::execute('UPDATE email_redirect_account
+ SET flags = \'inactive\'
+ WHERE uid = {?} AND redirect = {?}',
+ $this->user->id(), $this->email);
+ S::logger()->log('email_off', $this->email . ($this->user->id() != S::v('uid') ? "(admin on {$this->user->login()})" : "") );
+ $this->inactive = true;
+ $this->active = false;
}
}
- // public function set_rewrite() {{{2
+ // Sets the rewrite rule for the given address.
public function set_rewrite($rewrite)
{
- if ($this->rewrite == $rewrite) {
+ if ($this->type != 'smtp' || $this->rewrite == $rewrite) {
return;
}
if (!$rewrite || !isvalid_email($rewrite)) {
$rewrite = '';
}
- XDB::execute('UPDATE emails SET rewrite = {?} WHERE uid = {?} AND email = {?}', $rewrite, $this->user->id(), $this->email);
+ XDB::execute('UPDATE email_redirect_account
+ SET rewrite = {?}
+ WHERE uid = {?} AND redirect = {?} AND type = \'smtp\'',
+ $rewrite, $this->user->id(), $this->email);
$this->rewrite = $rewrite;
if (!$this->allow_rewrite) {
global $globals;
if (empty($this->hash)) {
$this->hash = rand_url_id();
- XDB::execute("UPDATE emails
- SET hash = {?}
- WHERE uid = {?} AND email = {?}", $this->hash, $this->user->id(), $this->email);
+ XDB::execute('UPDATE email_redirect_account
+ SET hash = {?}
+ WHERE uid = {?} AND redirect = {?} AND type = \'smtp\'',
+ $this->hash, $this->user->id(), $this->email);
}
$mail = new PlMailer('emails/rewrite-in.mail.tpl');
$mail->assign('mail', $this);
$mail->assign('to', $this->email);
$mail->send($this->user->isEmailFormatHtml());
}
- return;
}
- // public function clean_errors() {{{2
+ // Resets the error counts associated with the redirection.
public function clean_errors()
{
+ if ($this->type != 'smtp') {
+ return;
+ }
if (!S::admin()) {
return false;
}
- $this->panne = 0;
- $this->panne_level = 0;
- $this->last = 0;
- return XDB::execute("UPDATE emails
- SET panne_level = 0, panne = 0, last = 0
- WHERE uid = {?} AND email = {?}",
+ $this->broken = 0;
+ $this->broken_level = 0;
+ $this->last = 0;
+ return XDB::execute('UPDATE email_redirect_account
+ SET broken_level = 0, broken_date = 0, last = 0
+ WHERE uid = {?} AND redirect = {?} AND type = \'smtp\'',
$this->user->id(), $this->email);
}
- // public function has_rewrite() {{{2
+ // Email backend capabilities ('rewrite' refers to From: rewrite for mails
+ // forwarded by Polytechnique.org's MXs; 'removable' indicates if the email
+ // can be definitively removed; 'disable' indicates if the email has a third
+ // status 'disabled' in addition to 'active' and 'inactive').
public function has_rewrite()
{
- return true;
+ return ($this->type == 'smtp');
}
- // public function is_removable() {{{2
-
public function is_removable()
{
- return true;
+ return ($this->type == 'smtp');
}
- // public function has_disable() {{{2
-
public function has_disable()
{
return true;
}
-}
-
-// class EmailStorage {{{1
-// Implementation of Email for email storage backends from Polytechnique.org.
-class EmailStorage extends Email
-{
- // Shortname to realname mapping for known mail storage backends.
- private $display_names = array(
- 'imap' => 'Accès de secours aux emails (IMAP)',
- 'googleapps' => 'Compte Google Apps',
- );
-
- // Retrieves the current list of actives storages.
- private function get_storages()
- {
- return new PlFlagSet(XDB::fetchOneCell('SELECT storage
- FROM email_options
- WHERE uid = {?}',
- $this->user->id()));
- }
- // Updates the list of active storages.
- private function set_storages($storages)
+ public function is_redirection()
{
- XDB::execute("UPDATE email_options
- SET storage = {?}
- WHERE uid = {?}", $storages, $this->user->id());
+ return ($this->type == 'smtp');
}
// Returns the list of allowed storages for the @p user.
- static public function get_allowed_storages(User $user)
+ static private function get_allowed_storages(User $user)
{
global $globals;
$storages = array();
return $storages;
}
-
- public function __construct(User $user, $name)
+ static public function activate_storage(User $user, $storage)
{
- $this->user = &$user;
- $this->email = $name;
- $this->display_email = (isset($this->display_names[$name]) ? $this->display_names[$name] : $name);
+ Platal::assert(in_array($storage, self::get_allowed_storages($user)));
- $storages = $this->get_storages();
- $this->sufficient = ($name == 'googleapps');
- $this->active = $storages->hasFlag($name);
- $this->broken = false;
- $this->disabled = false;
- $this->rewrite = '';
- $this->panne = $this->last = $this->panne_level = 0;
+ if (!self::is_active_storage($user, $storage)) {
+ global $globals;
+
+ XDB::execute('INSERT INTO email_redirect_account (uid, type, redirect, flags)
+ VALUES ({?}, {?}, {?}, \'active\')',
+ $user->id(), $storage,
+ $user->hruid . '@' . self::$storage_domains[$storage] . '.' . $globals->mail->domain);
+ }
}
- public function activate()
+ static public function deactivate_storage(User $user, $storage)
{
- if (!$this->active) {
- $storages = $this->get_storages();
- $storages->addFlag($this->email);
- $this->set_storages($storages);
- $this->active = true;
- }
+ if (in_array($storage, self::$storage_domains)) {
+ XDB::execute('DELETE FROM email_redirect_account
+ WHERE uid = {?} AND type = {?}',
+ $user->id(), $storage);
+ }
}
- public function deactivate()
+ static public function is_active_storage(User $user, $storage)
{
- if ($this->active) {
- $storages = $this->get_storages();
- $storages->rmFlag($this->email);
- $this->set_storages($storages);
- $this->active = false;
+ if (!in_array($storage, self::$storage_domains)) {
+ return false;
}
-
+ $res = XDB::fetchOneCell('SELECT COUNT(*)
+ FROM email_redirect_account
+ WHERE uid = {?} AND type = {?} AND flags = \'active\')',
+ $user->id(), $storage);
+ return !is_null($res) && $res > 0;
}
-
- // Source rewrite can't be enabled for email storage addresses.
- public function set_rewrite($rewrite) {}
-
- // Email storage are not supposed to be broken, hence not supposed to be
- // cleaned-up.
- public function clean_errors() {}
-
- // Capabilities.
- public function has_rewrite() { return false; }
- public function is_removable() { return false; }
- public function has_disable() { return false; }
}
-
// class Redirect {{{1
// Redirect is a placeholder class for an user's active redirections (third-party
// redirection email, or Polytechnique.org mail storages).
class Redirect
{
- // properties {{{2
-
- private $flag_active = 'active';
+ private $flags = 'active';
private $user;
public $emails;
public $bogo;
- // constructor {{{2
-
public function __construct(User $user)
{
$this->user = &$user;
$this->bogo = new Bogo($user);
// Adds third-party email redirections.
- $res = XDB::iterRow("SELECT email, flags, rewrite, allow_rewrite, hash, panne, last, panne_level
- FROM emails
- WHERE uid = {?} AND flags != 'filter'", $user->id());
- $this->emails = Array();
+ $res = XDB::iterator('SELECT redirect, rewrite, type, action, broken_date, broken_level, last, flags, hash, allow_rewrite
+ FROM email_redirect_account
+ WHERE uid = {?} AND type != \'homonym\'',
+ $user->id());
+ $this->emails = array();
while ($row = $res->next()) {
- $this->emails[] = new EmailRedirection($user, $row);
- }
-
- // Adds local email storage backends.
- foreach (EmailStorage::get_allowed_storages($user) as $storage) {
- $this->emails[] = new EmailStorage($user, $storage);
+ $this->emails[] = new Email($user, $row);
}
}
- // public function other_active() {{{2
-
public function other_active($email)
{
foreach ($this->emails as $mail) {
return false;
}
- // public function delete_email() {{{2
-
public function delete_email($email)
{
if (!$this->other_active($email)) {
return ERROR_INACTIVE_REDIRECTION;
}
- XDB::execute('DELETE FROM emails WHERE uid = {?} AND email = {?}', $this->user->id(), $email);
+ XDB::execute('DELETE FROM email_redirect_account
+ WHERE uid = {?} AND redirect = {?} AND type != \'homonym\'',
+ $this->user->id(), $email);
S::logger()->log('email_del', $email . ($this->user->id() != S::v('uid') ? " (admin on {$this->user->login()})" : ""));
foreach ($this->emails as $i => $mail) {
if ($email == $mail->email) {
return SUCCESS;
}
- // public function add_email() {{{2
-
public function add_email($email)
{
$email_stripped = strtolower(trim($email));
return ERROR_LOOP_EMAIL;
}
// If the email was already present for this user, we reset it to the default values, we thus use REPLACE INTO.
- XDB::execute('REPLACE INTO emails (uid, email, flags)
+ XDB::execute('REPLACE INTO email_redirect_account (uid, redirect, flags)
VALUES ({?}, {?}, \'active\')',
$this->user->id(), $email);
if ($logger = S::v('log', null)) { // may be absent --> step4.php
return SUCCESS;
}
}
- $this->emails[] = new EmailRedirection($this->user, array($email, 'active', '', 0, null, '0000-00-00', '0000-00-00', 0));
+ $this->emails[] = new Email($this->user, array(
+ 'redirect' => $email,
+ 'rewrite' => '',
+ 'type' => 'smtp',
+ 'action' => 'default',
+ 'broken_date' => '0000-00-00',
+ 'broken_level' => 0,
+ 'last' => '0000-00-00',
+ 'flags' => 'active',
+ 'hash' => null,
+ 'allow_rewrite' => 0
+ ));
// security stuff
check_email($email, "Ajout d'une adresse surveillée aux redirections de " . $this->user->login());
return SUCCESS;
}
- // public function modify_email() {{{2
-
public function modify_email($emails_actifs, $emails_rewrite)
{
- foreach ($this->emails as &$mail) {
- if (in_array($mail->email, $emails_actifs)) {
- $mail->activate();
+ foreach ($this->emails as &$email) {
+ if (in_array($email->email, $emails_actifs)) {
+ $email->activate();
} else {
- $mail->deactivate();
+ $email->deactivate();
}
- $mail->set_rewrite($emails_rewrite[$mail->email]);
+ $email->set_rewrite($emails_rewrite[$email->email]);
}
check_redirect($this);
+ return SUCCESS;
}
- // public function modify_one_email() {{{2
-
public function modify_one_email($email, $activate)
{
$allinactive = true;
check_redirect($this);
if ($allinactive && !$activate) {
return ERROR_INACTIVE_REDIRECTION;
- } else {
- return SUCCESS;
}
+ return SUCCESS;
}
- // public function modify_one_email_redirect() {{{2
-
public function modify_one_email_redirect($email, $redirect)
{
foreach ($this->emails as &$mail) {
}
}
- // function clean_errors() {{{2
-
public function clean_errors($email)
{
foreach ($this->emails as &$mail) {
return false;
}
- // function disable() {{{2
-
public function disable()
{
- XDB::execute("UPDATE emails
+ XDB::execute("UPDATE email_redirect_account
SET flags = 'disable'
WHERE flags = 'active' AND uid = {?}", $this->user->id());
foreach ($this->emails as &$mail) {
check_redirect($this);
}
- // function enable() {{{2
-
public function enable()
{
- XDB::execute("UPDATE emails
+ XDB::execute("UPDATE email_redirect_account
SET flags = 'active'
WHERE flags = 'disable' AND uid = {?}", $this->user->id());
foreach ($this->emails as &$mail) {
if ($mail->disabled) {
- $mail->active = true;
$mail->disabled = false;
+ $mail->active = true;
}
check_redirect($this);
}
}
- // function get_broken_mx() {{{2
-
public function get_broken_mx()
{
$res = XDB::query("SELECT host, text
return $mails;
}
- // function active_emails() {{{2
-
public function active_emails()
{
$emails = array();
return $emails;
}
- // function get_uid() {{{2
-
public function get_uid()
{
return $this->user->id();
// the user at creation time.
$account = new GoogleAppsAccount($user);
if ($account->activate_mail_redirection) {
- require_once('emails.inc.php');
- $storage = new EmailStorage($user, 'googleapps');
- $storage->activate();
+ require_once 'emails.inc.php';
+ Email::activate_storage($user, 'googleapps');
}
// Sends the 'account created' email to the user, with basic documentation.
}
if (isset($parameters['suspended']) && $parameters['suspended'] == false) {
- require_once('emails.inc.php');
+ require_once 'emails.inc.php';
$account = new GoogleAppsAccount($user);
if ($account->active()) {
// Re-adds the email redirection (if the user did request it).
if ($account->activate_mail_redirection) {
- $storage = new EmailStorage($user, 'googleapps');
- $storage->activate();
+ Email::activate_storage($user, 'googleapps');
}
// Sends an email to the account owner.
{
if ($action == 'yes') {
require_once 'emails.inc.php';
- $storage = new EmailStorage($this->user, 'imap');
- $storage->activate();
-
+ Email::activate_storage($this->user, 'imap');
$this->UpdateOnYes();
}
}
require_once 'emails.inc.php';
- $storage = new EmailStorage($user, 'imap');
- if ($storage->active) {
+ $active = Email::is_active_storage($user, 'imap')
+ if ($active) {
Reminder::MarkCandidateAsAccepted($user->id(), $candidate);
}
- return !$storage->active;
+ return !$active;
}
}
function check_email($email, $message)
{
- $res = XDB::query("SELECT state, description
- FROM email_watch
- WHERE state != 'safe' AND email = {?}", $email);
- if ($res->numRows()) {
+ $res = XDB::fetchOneCell('SELECT COUNT(*)
+ FROM email_watch
+ WHERE state != \'safe\' AND email = {?}',
+ $email);
+ if ($res) {
send_warning_mail($message);
return true;
}
{
// properties {{{2
public $alias;
- public $raison;
+ public $reason;
public $unique = true;
- public $old = '';
+ public $old;
public $public = 'private';
public $rules = "Interdire ce qui peut nous servir (virus@, postmaster@…),
Pas de contrainte pour les tirets ou les points, en revanche le souligné (_) est interdit.";
// constructor {{{2
- public function __construct(User $_user, $_alias, $_raison, $_public, $_stamp=0)
+ public function __construct(User $_user, $_alias, $_reason, $_public, $_old, $_stamp = 0)
{
global $globals;
parent::__construct($_user, true, 'alias', $_stamp);
- $this->alias = $_alias.'@'.$globals->mail->alias_dom;
- $this->raison = $_raison;
+ $this->alias = $_alias;
+ $this->reason = $_reason;
$this->public = $_public;
- $this->old = $_user->emailAlias();
- if (empty($this->old)) {
- unset($this->old);
- }
+ $this->old = $_old;
}
// function get_request() {{{2
// function _mail_subj {{{2
protected function _mail_subj()
{
- return "[Polytechnique.org/MELIX] Demande de l'alias {$this->alias}";
+ global $globals;
+ return "[Polytechnique.org/MELIX] Demande de l'alias {$this->alias}@{$globals->mail->alias_dom}";
}
// function _mail_body {{{2
protected function _mail_body($isok)
{
+ global $globals;
if ($isok) {
- return " L'adresse email {$this->alias} que tu avais demandée vient d'être créée, tu peux désormais l'utiliser à ta convenance."
+ return " L'adresse email {$this->alias}@{$globals->mail->alias_dom} que tu avais demandée vient d'être créée, tu peux désormais l'utiliser à ta convenance."
. ($this->public == 'public' ? ' À ta demande, cette adresse apparaît maintenant sur ta fiche.' : '');
} else {
- return " La demande que tu avais faite pour l'alias {$this->alias} a été refusée.";
+ return " La demande que tu avais faite pour l'alias {$this->alias}@{$globals->mail->alias_dom} a été refusée.";
}
}
// function commit() {{{2
public function commit()
{
+ global $globals;
+
if ($this->user->hasProfile()) {
XDB::execute('UPDATE profiles
SET alias_pub = {?}
}
if ($this->old) {
- return XDB::execute('UPDATE virtual
- SET alias = {?}
- WHERE alias = {?}',
- $this->alias, $this->old);
+ $success = XDB::execute('UPDATE email_source_account AS s
+ INNER JOIN email_virtual_domains AS d ON (s.domain = d.id)
+ SET s.email = {?}
+ WHERE s.uid = {?} AND d.name = {?}',
+ $this->alias, $this->user->id(), $globals->mail->alias_dom);
} else {
- XDB::execute('INSERT INTO virtual
- SET alias = {?}, type=\'user\'',
- $this->alias);
- $vid = XDB::insertId();
- return XDB::execute('INSERT INTO virtual_redirect (vid, redirect)
- VALUES ({?}, {?})',
- $vid, $this->user->forlifeEmail());
+ $success = XDB::execute('INSERT INTO email_source_account (email, uid, domain, type, flags)
+ SELECT {?}, {?}, id, \'alias\', \'\'
+ FROM email_virtual_domains
+ WHERE name = {?}',
+ $this->alias, $this->user->id(), $globals->mail->alias_dom);
}
+
+ return $success;
}
}
return PL_FORBIDDEN;
}
- XDB::execute("UPDATE aliases
+ // First delete the bestalias flag from all this user's emails.
+ XDB::execute("UPDATE email_source_account
SET flags = TRIM(BOTH ',' FROM REPLACE(CONCAT(',', flags, ','), ',bestalias,', ','))
WHERE uid = {?}", $user->id());
- XDB::execute("UPDATE aliases
- SET flags = CONCAT_WS(',', IF(flags = '', NULL, flags), 'bestalias')
- WHERE uid = {?} AND alias = {?}", $user->id(), $email);
+ // Then gives the bestalias flag to the given email.
+ list($email, $domain) = explode('@', $email);
+ XDB::execute("UPDATE email_source_account AS s
+ INNER JOIN email_virtual_domains AS d ON (s.domain = d.id)
+ SET s.flags = CONCAT_WS(',', IF(s.flags = '', NULL, s.flags), 'bestalias')
+ WHERE s.uid = {?} AND s.email = {?} AND d.name = {?}", $user->id(), $email, $domain);
// As having a non-null bestalias value is critical in
// plat/al's code, we do an a posteriori check on the
}
// Fetch and display aliases.
- $sql = "SELECT alias, (type='a_vie') AS a_vie,
- (alias REGEXP '\\\\.[0-9]{2}$') AS cent_ans,
- FIND_IN_SET('bestalias',flags) AS best, expire
- FROM aliases
- WHERE uid = {?} AND type!='homonyme'
- ORDER BY LENGTH(alias)";
- $page->assign('aliases', XDB::iterator($sql, $user->id()));
+ $aliases = XDB::iterator("SELECT CONCAT(s.email, '@', d.name) AS email, (s.type = 'forlife') AS forlife,
+ (s.email REGEXP '\\\\.[0-9]{2}$') AS hundred_year,
+ FIND_IN_SET('bestalias', s.flags) AS bestalias, s.expire,
+ (d.name = {?}) AS alias
+ FROM email_source_account AS s
+ INNER JOIN email_virtual_domains AS d ON (s.domain = d.id)
+ WHERE s.uid = {?}
+ ORDER BY !alias, s.email",
+ $globals->mail->alias_dom, $user->id());
+ $page->assign('aliases', $aliases);
+
+ $alias = XDB::fetchOneCell('SELECT COUNT(s.email)
+ FROM email_source_account AS s
+ INNER JOIN email_virtual_domains AS d ON (s.domain = d.id)
+ WHERE s.uid = {?} AND d.name = {?}',
+ $user->id(), $globals->mail->alias_dom);
+ $page->assign('alias', $alias);
+
// Check for homonyms.
$page->assign('homonyme', $user->homonyme);
// Display active redirections.
$redirect = new Redirect($user);
$page->assign('mails', $redirect->active_emails());
-
- // Display, when available, the @alias_dom email alias.
- $res = XDB::query(
- "SELECT alias
- FROM virtual AS v
- INNER JOIN virtual_redirect AS vr USING(vid)
- WHERE (redirect={?} OR redirect={?})
- AND alias LIKE '%@{$globals->mail->alias_dom}'",
- $user->forlifeEmail(),
- // TODO: remove this über-ugly hack. The issue is that you need
- // to remove all @m4x.org addresses in virtual_redirect first.
- $user->login() . '@' . $globals->mail->domain2);
- $page->assign('melix', $res->fetchOneCell());
}
function handler_alias($page, $action = null, $value = null)
$page->setTitle('Alias melix.net');
$user = S::user();
- $page->assign('demande', AliasReq::get_request($user->id()));
+ $page->assign('request', AliasReq::get_request($user->id()));
// Remove the email alias.
- if ($action == 'delete' && $value) {
+ if ($action == 'delete') {
S::assert_xsrf_token();
- XDB::execute(
- "DELETE virtual, virtual_redirect
- FROM virtual
- INNER JOIN virtual_redirect USING (vid)
- WHERE alias = {?} AND (redirect = {?} OR redirect = {?})",
- $value, $user->forlifeEmail(), $user->m4xForlifeEmail());
+ XDB::execute('DELETE s
+ FROM email_source_account AS s
+ INNER JOIN email_virtual_domains AS d ON (s.domain = d.id)
+ WHERE s.uid = {?} AND d.name = {?}',
+ $user->id(), $globals->mail->alias_dom);
+
+ require_once 'emails.inc.php';
+ fix_bestalias($user);
}
// Fetch existing @alias_dom aliases.
- $alias = $user->emailAlias();
- $visibility = $user->hasProfile() && $user->profile()->alias_pub;
- $page->assign('actuel', $alias);
+ 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 d.name = {?}',
+ $user->id(), $globals->mail->alias_dom);
+ $visibility = $user->hasProfile() && ($user->profile(true)->alias_pub == 'public');
+ $page->assign('current', $alias);
$page->assign('user', $user);
$page->assign('mail_public', $visibility);
- if ($action == 'ask' && Env::has('alias') && Env::has('raison')) {
+ if ($action == 'ask' && Env::has('alias') && Env::has('reason')) {
S::assert_xsrf_token();
- //Si l'utilisateur vient de faire une damande
- $alias = Env::v('alias');
- $raison = Env::v('raison');
+ // Retrieves user request.
+ $new_alias = Env::v('alias');
+ $reason = Env::v('reason');
$public = (Env::v('public', 'off') == 'on') ? 'public' : 'private';
- $page->assign('r_alias', $alias);
- $page->assign('r_raison', $raison);
+ $page->assign('r_alias', $new_alias);
+ $page->assign('r_reason', $reason);
if ($public == 'public') {
$page->assign('r_public', true);
}
- //Quelques vérifications sur l'alias (caractères spéciaux)
- if (!preg_match("/^[a-zA-Z0-9\-.]{3,20}$/", $alias)) {
+ // Checks special charaters in alias.
+ if (!preg_match("/^[a-zA-Z0-9\-.]{3,20}$/", $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 .");
return;
} else {
- $alias_mail = $alias.'@'.$globals->mail->alias_dom;
-
- //vérifier que l'alias n'est pas déja pris
- $res = XDB::query('SELECT COUNT(*)
- FROM virtual
- WHERE alias={?}',
- $alias_mail);
+ // Checks if the alias has already been given.
+ $res = XDB::query('SELECT COUNT(s.email)
+ FROM email_source_account AS s
+ INNER JOIN email_virtual_domains AS d ON (s.domain = d.id)
+ WHERE s.email = {?} AND d.name = {?}',
+ $new_alias, $globals->mail->alias_dom);
if ($res->fetchOneCell() > 0) {
- $page->trigError("L'alias $alias_mail a déja été attribué.
- Tu ne peux donc pas l'obtenir.");
+ $page->trigError("L'alias $new_alias a déja été attribué. Tu ne peux donc pas l'obtenir.");
return;
}
- //vérifier que l'alias n'est pas déja en demande
+ // Checks if the alias has already been asked for.
$it = Validate::iterate('alias');
while($req = $it->next()) {
- if ($req->alias == $alias_mail) {
- $page->trigError("L'alias $alias_mail a déja été demandé.
- Tu ne peux donc pas l'obtenir pour l'instant.");
- return ;
+ 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;
}
}
- //Insertion de la demande dans la base, écrase les requêtes précédente
- $myalias = new AliasReq($user, $alias, $raison, $public);
+ // 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',$alias);
+ $page->assign('success', $new_alias);
return;
}
} elseif ($action == 'set' && ($value == 'public' || $value == 'private')) {
}
if ($user->hasProfile()) {
- XDB::execute("UPDATE profiles
+ XDB::execute('UPDATE profiles
SET alias_pub = {?}
- WHERE pid = {?}",
+ WHERE pid = {?}',
$value, $user->profile()->id());
}
- $visibility = ($value == 'public');
exit;
}
-
- $page->assign('actuel', $alias);
- $page->assign('user', $user);
- $page->assign('mail_public', $visibility);
}
- function handler_redirect($page, $action = null, $email = null)
+ function handler_redirect($page, $action = null, $email = null, $rewrite = null)
{
global $globals;
-
require_once 'emails.inc.php';
$page->changeTpl('emails/redirect.tpl');
}
if ($action == 'rewrite' && $email) {
- $rewrite = @func_get_arg(3);
$redirect->modify_one_email_redirect($email, $rewrite);
}
if (Env::has('emailop')) {
S::assert_xsrf_token();
- $actifs = Env::v('emails_actifs', Array());
- print_r(Env::v('emails_rewrite'));
+ $actifs = Env::v('emails_actifs', array());
if (Env::v('emailop') == "ajouter" && Env::has('email')) {
$error_email = false;
$new_email = Env::v('email');
} elseif (empty($actifs)) {
$result = ERROR_INACTIVE_REDIRECTION;
} elseif (is_array($actifs)) {
- $result = $redirect->modify_email($actifs, Env::v('emails_rewrite', Array()));
+ $result = $redirect->modify_email($actifs, Env::v('emails_rewrite', array()));
}
}
. $globals->mail->domain2 . ' ni vers polytechnique.edu.');
break;
}
-
- // Fetch the @alias_dom email alias, if any.
- $res = XDB::query(
- "SELECT alias
- FROM virtual
- INNER JOIN virtual_redirect USING(vid)
- WHERE (redirect={?} OR redirect={?})
- AND alias LIKE '%@{$globals->mail->alias_dom}'",
- $user->forlifeEmail(),
- // TODO: remove this über-ugly hack. The issue is that you need
- // to remove all @m4x.org addresses in virtual_redirect first.
- $user->login() . '@' . $globals->mail->domain2);
- $melix = $res->fetchOneCell();
- if ($melix) {
- list($melix) = explode('@', $melix);
- $page->assign('melix',$melix);
- }
-
// Fetch existing email aliases.
- $res = XDB::query(
- "SELECT alias,expire
- FROM aliases
- WHERE uid={?} AND (type='a_vie' OR type='alias')
- ORDER BY !FIND_IN_SET('usage',flags), LENGTH(alias)", $user->id());
- $page->assign('alias', $res->fetchAllAssoc());
+ $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 (m.name = {?}), s.email, d.name',
+ $user->id(), $globals->mail->alias_dom);
+ $page->assign('alias', $alias->fetchAllAssoc());
+
$page->assign('emails', $redirect->emails);
// Display GoogleApps acount information.
fill_email_combobox($page);
}
- function handler_antispam($page, $statut_filtre = null)
+ function handler_antispam($page, $filter_status = null)
{
require_once 'emails.inc.php';
$wp = new PlWikiPage('Xorg.Antispam');
$user = S::user();
$bogo = new Bogo($user);
- if (isset($statut_filtre)) {
- $bogo->change($statut_filtre + 0);
+ if (isset($filter_status)) {
+ $bogo->change($filter_status + 0);
}
- $page->assign('filtre', $bogo->level());
+ $page->assign('filter', $bogo->level());
}
function handler_submit($page)
return PL_NOT_FOUND;
}
$mail{$pos} = '@';
- $res = XDB::query("SELECT COUNT(*)
- FROM emails
- WHERE email = {?} AND hash = {?}",
+ $res = XDB::query('SELECT COUNT(*)
+ FROM email_redirect_account
+ WHERE redirect = {?} AND hash = {?} AND type = \'smtp\'',
$mail, $hash);
$count = intval($res->fetchOneCell());
if ($count > 0) {
- XDB::query("UPDATE emails
+ XDB::query('UPDATE email_redirect_account
SET allow_rewrite = true, hash = NULL
- WHERE email = {?} AND hash = {?}",
- $mail, $hash);
+ WHERE redirect = {?} AND hash = {?} AND type = \'smtp\'',
+ $mail, $hash);
$page->trigSuccess("Réécriture activée pour l'adresse " . $mail);
return;
}
return PL_NOT_FOUND;
}
$mail{$pos} = '@';
- $res = XDB::query("SELECT COUNT(*)
- FROM emails
- WHERE email = {?} AND hash = {?}",
+ $res = XDB::query('SELECT COUNT(*)
+ FROM email_redirect_account
+ WHERE redirect = {?} AND hash = {?} AND type = \'smtp\'',
$mail, $hash);
$count = intval($res->fetchOneCell());
if ($count > 0) {
global $globals;
- $res = XDB::query("SELECT e.email, e.rewrite, a.alias
- FROM emails AS e
- INNER JOIN aliases AS a ON (a.uid = e.uid AND a.type = 'a_vie')
- WHERE e.email = {?} AND e.hash = {?}",
+ $res = XDB::query('SELECT e.redirect, e.rewrite, a.hruid
+ FROM email_redirect_account AS e
+ INNER JOIN accounts AS a ON (e.uid = a.uid)
+ WHERE e.redirect = {?} AND e.hash = {?}',
$mail, $hash);
- XDB::query("UPDATE emails
+ XDB::query('UPDATE email_redirect_account
SET allow_rewrite = false, hash = NULL
- WHERE email = {?} AND hash = {?}",
- $mail, $hash);
- list($mail, $rewrite, $forlife) = $res->fetchOneRow();
+ WHERE redirect = {?} AND hash = {?}',
+ $mail, $hash);
+ list($mail, $rewrite, $hruid) = $res->fetchOneRow();
$mail = new PlMailer();
$mail->setFrom("webmaster@" . $globals->mail->domain);
$mail->addTo("support@" . $globals->mail->domain);
$mail->setSubject("Tentative de détournement de correspondance via le rewrite");
- $mail->setTxtBody("$forlife a tenté un rewrite de $mail vers $rewrite. Cette demande a été rejetée via le web");
+ $mail->setTxtBody("$hruid a tenté un rewrite de $mail vers $rewrite. Cette demande a été rejetée via le web");
$mail->send();
$page->trigWarning("Un mail d'alerte a été envoyé à l'équipe de " . $globals->core->sitename);
return;
}
}
- require_once('emails.inc.php');
+ require_once 'emails.inc.php';
$page->assign('ok', false);
if (S::logged() && (is_null($user) || $user->id() == S::i('uid'))) {
- $storage = new EmailStorage(S::user(), 'imap');
- $storage->activate();
+ Email::activate_storage(S::user(), 'imap');
$page->assign('ok', true);
$page->assign('yourself', S::user()->displayName());
$page->assign('sexe', S::user()->isFemale());
} else if (!S::logged() && $user) {
- $storage = new EmailStorage($user, 'imap');
- $storage->activate();
+ Email::activate_storage($user, 'imap');
$page->assign('ok', true);
$page->assign('yourself', $user->displayName());
$page->assign('sexe', $user->isFemale());
function handler_index($page, $action = null)
{
- require_once("emails.inc.php");
- require_once("googleapps.inc.php");
+ require_once 'emails.inc.php';
+ require_once 'googleapps.inc.php';
$page->changeTpl('googleapps/index.tpl');
$page->setTitle('Compte Google Apps');
$account = new GoogleAppsAccount($user);
// Fills up the 'is Google Apps redirection active' variable.
- $page->assign('redirect_active', false);
- $page->assign('redirect_unique', true);
+ $redirect_active = false;
+ $redirect_unique = true;
if ($account->active()) {
$redirect = new Redirect($user);
- $page->assign('redirect_unique', !$redirect->other_active('googleapps'));
-
- $storage = new EmailStorage($user, 'googleapps');
- $page->assign('redirect_active', $storage->active);
+ foreach ($redirect->emails as $email) {
+ if ($email->type == 'googleapps') {
+ $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) {
}
function handler_admin($page, $action = null) {
- require_once("googleapps.inc.php");
+ require_once 'googleapps.inc.php';
$page->changeTpl('googleapps/admin.tpl');
$page->setTitle('Administration Google Apps');
$page->assign('googleapps_admin', GoogleAppsAccount::is_administrator(S::v('uid')));
// Retrieves latest pending administrative requests from the gappsd queue.
$res = XDB::iterator(
- "SELECT q_id, q_recipient_id, a.alias, j_type, j_parameters,
+ "SELECT q_id, q_recipient_id, s.email AS alias, j_type, j_parameters,
UNIX_TIMESTAMP(q.p_entry_date) AS p_entry_date
FROM gapps_queue AS q
- LEFT JOIN aliases AS a ON (a.uid = q_recipient_id AND a.type = 'a_vie')
+ LEFT JOIN email_source_account AS s ON (s.uid = q.q_recipient_id AND s.type = 'forlife')
WHERE p_status IN ('idle', 'active', 'softfail') AND
p_admin_request IS TRUE
ORDER BY p_entry_date");
// Retrieves latest failed requests from the gappsd queue.
$res = XDB::iterator(
- "SELECT q.q_id, q.q_recipient_id, a.alias, q.j_type, q.r_result,
+ "SELECT q.q_id, q.q_recipient_id, s.email AS alias, q.j_type, q.r_result,
UNIX_TIMESTAMP(q.p_entry_date) AS p_entry_date
FROM gapps_queue AS q
- LEFT JOIN aliases AS a ON (a.uid = q.q_recipient_id AND a.type = 'a_vie')
+ LEFT JOIN email_source_account AS s ON (s.uid = q.q_recipient_id AND s.type = 'forlife')
WHERE q.p_status = 'hardfail'
ORDER BY p_entry_date DESC
LIMIT 20");
}
function handler_admin_job($page, $job = null) {
- require_once("googleapps.inc.php");
+ require_once 'googleapps.inc.php';
$page->changeTpl('googleapps/admin.job.tpl');
$page->setTitle('Administration Google Apps');
$page->assign('googleapps_admin', GoogleAppsAccount::is_administrator(S::v('uid')));
if ($job) {
$res = XDB::query(
- "SELECT q.*, ao.alias AS q_owner, ar.alias AS q_recipient
+ "SELECT q.*, so.email AS q_owner, sr.email AS q_recipient
FROM gapps_queue AS q
- LEFT JOIN aliases AS ao ON (ao.uid = q.q_owner_id AND ao.type = 'a_vie')
- LEFT JOIN aliases AS ar ON (ar.uid = q.q_recipient_id AND ar.type = 'a_vie')
+ LEFT JOIN email_source_account AS so ON (so.uid = q.q_owner_id AND so.type = 'forlife')
+ LEFT JOIN email_source_account AS sr ON (sr.uid = q.q_recipient_id AND sr.type = 'forlife')
WHERE q_id = {?}", $job);
$sql_job = $res->fetchOneAssoc();
$sql_job['decoded_parameters'] = var_export(json_decode($sql_job['j_parameters'], true), true);
}
function handler_admin_user($page, $user = null) {
- require_once("emails.inc.php");
- require_once("googleapps.inc.php");
+ require_once 'emails.inc.php';
+ require_once 'googleapps.inc.php';
$page->changeTpl('googleapps/admin.user.tpl');
$page->setTitle('Administration Google Apps');
$page->assign('googleapps_admin', GoogleAppsAccount::is_administrator(S::v('uid')));
if ($user) {
$account = new GoogleAppsAccount($user);
- $storage = new EmailStorage($user, 'googleapps');
// Apply requested actions.
if (Post::has('suspend') && $account->active() && !$account->pending_update_suspension) {
// Displays basic account information.
$page->assign('account', $account);
$page->assign('admin_account', GoogleAppsAccount::is_administrator($user->id()));
- $page->assign('googleapps_storage', $storage->active);
+ $page->assign('googleapps_storage', Email::is_active_storage($user, 'googleapps'));
$page->assign('user', $user->id());
// Retrieves user's pending requests.
NewsLetter::forGroup(NewsLetter::GROUP_XORG)->subscribe($user);
break;
case 'imap':
- $storage = new EmailStorage($user, 'imap');
- $storage->activate();
+ Email::activate_storage($user, 'imap');
break;
case 'ml_promo':
$r = XDB::query('SELECT id FROM groups WHERE diminutif = {?}', $yearpromo);
Adresses email personnalisées
</h1>
-{if $actuel}
+{if $current}
{if $user->hasProfile()}
<table class="flags">
<tr>
" />
</td>
<td>
- Ton alias est actuellement : <strong>{$actuel}</strong>. Il est pour l'instant
+ Ton alias est actuellement : <strong>{$current}</strong>. Il est pour l'instant
<span id="mail_public">{if $mail_public}public et apparaît donc sur ta fiche.{else}privé et n'apparaît nulle part sur le site.{/if}</span>
</td>
</tr>
sans doute à toutes tes questions.
</p>
- {if $actuel}
+ {if $current}
<p>
- <strong>Note : tu as déjà l'alias {$actuel}, or tu ne peux avoir qu'un seul alias à la fois.
+ <strong>Note : tu as déjà l'alias {$current}, or tu ne peux avoir qu'un seul alias à la fois.
Si tu effectues une nouvelle demande l'ancien alias sera effacé.</strong>
</p>
{/if}
- {if $demande}
+ {if $request}
<p>
- <strong>Note : tu as déjà effectué une demande pour {$demande->alias}, dont le traitement est
+ <strong>Note : tu as déjà effectué une demande pour {$request->alias}, dont le traitement est
en cours. Si tu souhaites modifier ceci refais une demande, sinon ce n'est pas la peine.</strong>
</p>
{/if}
<td>Brève explication :</td>
</tr>
<tr>
- <td><textarea rows="5" cols="50" name="raison">{$r_raison}</textarea></td>
+ <td><textarea rows="5" cols="50" name="reason">{$r_reason}</textarea></td>
</tr>
<tr>
<td><input type="submit" name="submit" value="Envoyer" /></td>
</tr>
</table>
</form>
- {if $actuel}
- <form action="emails/alias/delete/{$actuel}" method="post"
- onsubmit="return confirm('Es-tu sûr de vouloir supprimer {$actuel} ?')">
+ {if $current}
+ <form action="emails/alias/delete" method="post"
+ onsubmit="return confirm('Es-tu sûr de vouloir supprimer {$current} ?')">
{xsrf_token_field}
<table class="bicol" cellpadding="4" summary="Suppression d'alias">
<tr>
</tr>
<tr>
<td class="center">
- <input type="submit" value="Supprimer l'alias {$actuel}" />
+ <input type="submit" value="Supprimer l'alias {$current}" />
</td>
</tr>
</table>
$(function() {
var url = '{/literal}{$globals->baseurl}/emails/antispam/{literal}';
var msg = "Le changement de réglage de l'antispam a bien été effectué.";
- $(':radio[name=statut_filtre]').change(function() {
+ $(':radio[name=filter_status]').change(function() {
$("#bogo-msg").successMessage(url + $(this).val(), msg);
});
});
//]]></script>
<fieldset>
<legend><strong>Choisis ton propre réglage :</strong></legend>
- <input id='s0' type='radio' name='statut_filtre' value='0' {if $filtre eq 0}checked="checked"{/if} />
+ <input id='s0' type='radio' name='filter_status' value='0' {if $filter eq 0}checked="checked"{/if} />
<label for='s0'>(1) le filtre anti-spam n'agit pas sur tes emails</label>
<br />
- <input id='s1' type='radio' name='statut_filtre' value='1' {if $filtre eq 1}checked="checked"{/if} />
+ <input id='s1' type='radio' name='filter_status' value='1' {if $filter eq 1}checked="checked"{/if} />
<label for='s1'>(2) le filtre anti-spam marque les emails</label>
<br />
- <input id='s2' type='radio' name='statut_filtre' value='2' {if $filtre eq 2}checked="checked"{/if} />
+ <input id='s2' type='radio' name='filter_status' value='2' {if $filter eq 2}checked="checked"{/if} />
<label for='s2'>(3) le filtre anti-spam marque les emails, et élimine les spams avec des notes les plus hautes</label>
<br />
- <input id='s3' type='radio' name='statut_filtre' value='3' {if $filtre eq 3}checked="checked"{/if} />
+ <input id='s3' type='radio' name='filter_status' value='3' {if $filter eq 3}checked="checked"{/if} />
<label for='s3'>(4) le filtre anti-spam élimine les emails détectés comme spams</label>
</fieldset>
Tes adresses polytechniciennes sont :<br />
<div>
{iterate from=$aliases item=a}
- <label><input type='radio' {if $a.best}checked="checked"{/if} name='best' value='{$a.alias}' />
- {if $a.a_vie}(**){/if}{if $a.cent_ans}(*){/if} <strong>{$a.alias}</strong>@{#globals.mail.domain#} et
- @{#globals.mail.domain2#}</label>
+ <label><input type='radio' {if $a.bestalias}checked="checked"{/if} name='best' value='{$a.email}' />
+ <strong>{$a.email}</strong> et <strong>{if $a.alias}@{#globals.mail.alias_dom2#}{else}@{#globals.mail.domain2#}{/if}</strong></label> {if $a.forlife}(**){/if}{if $a.hundred_year}(*){/if}
{if $a.expire}<span class='erreur'>(expire le {$a.expire|date_format})</span>{/if}
+ {if $a.alias}<a href="emails/alias">(changer ou supprimer mon alias melix)</a>{/if}
<br />
{/iterate}
</div>
<br />Coche une autre case pour en changer !
</p>
- <div id="bestalias-msg" style="position:absolute;"></div>
- <br />
- {if $melix}
- <div>
- Tu dispose également de l'alias : <strong>{$melix}</strong>
- (<a href="emails/alias">changer ou supprimer mon alias melix</a>)
- </div>
- {/if}
+ <p id="bestalias-msg" class="center"></p>
</div>
<hr />
<div>
(M4X signifie <em>mail for X</em>, son intérêt est de te doter d'une adresse à vie
moins "voyante" que l'adresse @{#globals.mail.domain#}).
- {if !$melix}
+ {if !$alias}
Tu peux ouvrir en supplément une adresse synonyme de ton adresse @{#globals.mail.domain#},
sur les domaines @{#globals.mail.alias_dom#} et @{#globals.mail.alias_dom2#} (melix = Mél X).<br />
<div class="center"><a href="emails/alias">Créer un alias melix</a></div>
<p class="smaller">
{assign var="profile" value=$smarty.session.user->profile()}
-(*) cette adresse email t'est réservée pour une période 100 ans après ton entrée à l'X (dans ton cas, jusqu'en {$profile->yearpromo()+100}).
+(*) ces adresses email t'est réservée pour une période 100 ans après ton entrée à l'X (dans ton cas, jusqu'en {$profile->yearpromo()+100}).
</p>
<p class="smaller">
-(**) cette adresse email t'est réservée à vie.
+(**) ces adresses email te sont réservées à vie.
</p>
<p class="smaller">
{if $homonyme}
Tu configures ici les adresses emails vers lesquelles tes adresses (listées ci-dessous) sont redirigées :
</p>
<ul>
- {if $melix}
- <li>
- <strong>{$melix}@{#globals.mail.alias_dom#}</strong>,
- <strong>{$melix}@{#globals.mail.alias_dom2#}</strong>
- </li>
- {/if}
{foreach from=$alias item=a}
<li>
- <strong>{$a.alias}@{#globals.mail.domain#}</strong>
- {if $a.expire}<span class='erreur'>(expire le {$a.expire|date_format})</span>{/if}
+ <strong>{$a.email}</strong>
+ {if $a.expire}<span class='erreur'>(expire le {$a.expire|date_format})</span>{/if}
</li>
{/foreach}
</ul>
{
if (confirm("Supprimer l'adresse " + email + " ?")) {
$.get(link.href, {},function() {
- $('#line_' + email.replace('@', '_at_').replace('.','\\.')).remove();
+ $('#line_' + email.replace('@', '_at_').replace('.', '\\.')).remove();
showRemove();
activeEnable();
});
<tr class="{cycle values="pair,impair"}" id="line_{$e->email|replace:'@':'_at_'}">
<td>
<strong>
- {if $e->broken}<span class="erreur">{assign var="erreur" value="1"}{/if}
- {if $e->panne neq '0000-00-00'}{assign var="panne" value="1"}{icon name=error title="En panne"}{/if}
+ {if $e->broken}<span class="erreur">{assign var="error" value="1"}{/if}
+ {if $e->broken_date neq '0000-00-00'}{assign var="broken" value="1"}{icon name=error title="En panne"}{/if}
{$e->display_email}
{if $e->broken}</span>{/if}
</strong>
{if $e->has_rewrite()}
<select onchange="$.get('emails/redirect/rewrite/{$e->email}/'+this.value, 'text', rewriteUpdate('{$e->email}', {$e->allow_rewrite|default:"0"}, this)); return false">
<option value=''>--- aucune ---</option>
- {assign var=dom1 value=#globals.mail.domain#}
- {assign var=dom2 value=#globals.mail.domain2#}
{foreach from=$alias item=a}
- <option {if $e->rewrite eq "`$a.alias`@`$dom1`"}selected='selected'{/if}
- value='{$a.alias}@{#globals.mail.domain#}'>{$a.alias}@{#globals.mail.domain#}</option>
- <option {if $e->rewrite eq "`$a.alias`@`$dom2`"}selected='selected'{/if}
- value='{$a.alias}@{#globals.mail.domain2#}'>{$a.alias}@{#globals.mail.domain2#}</option>
+ <option value="{$a.email}" {if $e->rewrite eq $a.email}selected='selected'{/if}>{$a.email}</option>
{/foreach}
</select>
{if $e->rewrite neq '' && !$e->allow_rewrite}{icon name="error" title="en attente de validation"}{/if}
</td>
<td>
{if $e->is_removable()}
- <a href="emails/redirect/remove/{$e->email}"
- class="remove_email"
- onclick="return removeRedirect(this, "{$e->email}");" >
+ <a href="emails/redirect/remove/{$e->email}" class="remove_email"
+ onclick="return removeRedirect(this, '{$e->email}');" >
{icon name=cross title="Supprimer"}
</a>
{else}
</td>
</tr>
{/foreach}
- {cycle values="pair,impair" assign=class_combobox}
- {$error_email}
- {include file="include/emails.combobox.tpl" name="email" val=$email class=$class_combobox error=$error_email i="0"}
- <tr class="{$class_combobox}"><td colspan="4"><div>
- <input type="submit" value="ajouter" name="emailop" />
- {xsrf_token_field}
- </div></td></tr>
+ {cycle values="pair,impair" assign=class_combobox}
+ {include file="include/emails.combobox.tpl" name="email" val=$email class=$class_combobox error=$error_email i="0"}
+ <tr class="{$class_combobox}">
+ <td colspan="4">
+ <div>
+ <input type="submit" value="ajouter" name="emailop" />
+ {xsrf_token_field}
+ </div>
+ </td>
+ </tr>
</table>
</form>
<script type="text/javascript">showRemove(); activeEnable();</script>
Légende : {icon name=cross title="Supprimer"} Supprimer la redirection
- {icon name=information title="Plus d'informations"} Plus d'informations
</p>
-{if $panne}
+{if t($broken)}
<p class="smaller">
<strong>
{icon name=error title="En panne"}
a été détectée. Si le problème persiste, la redirection vers ces adresses sera désactivée.
</p>
{/if}
-{if $erreur}
+{if t($error)}
<p class="smaller">
<strong>
{icon name=error title="En panne"}
{/if}
{if $name eq "email_directory"}
<optgroup label="Emails polytechniciens">
- {if $melix}
- <option value="{$melix}@{#globals.mail.alias_dom#}" {if
- $val eq $melix|cat:'@'|cat:#globals.mail.alias_dom#}selected="selected"{/if}>
- {$melix}@{#globals.mail.alias_dom#}</option>
- <option value="{$melix}@{#globals.mail.alias_dom2#}" {if
- $val eq $melix|cat:'@'|cat:#globals.mail.alias_dom2#}selected="selected"{/if}>
- {$melix}@{#globals.mail.alias_dom2#}</option>
- {/if}
{foreach from=$list_email_X item=email}
- <option value="{$email.alias}@{#globals.mail.domain#}" {if
- $val eq $email.alias|cat:'@'|cat:#globals.mail.domain#}selected="selected"{/if}>
- {$email.alias}@{#globals.mail.domain#}</option>
- <option value="{$email.alias}@{#globals.mail.domain2#}" {if
- $val eq $email.alias|cat:'@'|cat:#globals.mail.domain2#}selected="selected"{/if}>
- {$email.alias}@{#globals.mail.domain2#}</option>
+ <option value="{$email.email}" {if $val eq $email.email}selected="selected"{/if}>{$email.email}</option>
{/foreach}
</optgroup>
{/if}
<tr class="pair">
<td class="titre">Ancien alias</td>
- <td>{$valid->old|default:"-none-"}</td>
+ <td>{$valid->old|default:"-aucun-"}</td>
</tr>
<tr class="pair">
<td class="titre">Nouvel alias :</td>
</tr>
<tr class="pair">
<td class="titre">Motif :</td>
- <td>{$valid->raison|nl2br}</td>
+ <td>{$valid->reason|nl2br}</td>
</tr>
{* vim:set et sw=2 sts=2 sws=2 enc=utf-8: *}