<?php
/***************************************************************************
- * Copyright (C) 2003-2009 Polytechnique.org *
+ * Copyright (C) 2003-2010 Polytechnique.org *
* http://opensource.polytechnique.org/ *
* *
* This program is free software; you can redistribute it and/or modify *
{
$res = XDB::query("SELECT COUNT(*)
FROM aliases
- WHERE id = {?} AND FIND_IN_SET('bestalias', flags) AND type != 'homonyme'",
+ WHERE uid = {?} AND FIND_IN_SET('bestalias', flags) AND type != 'homonyme'",
$user->id());
if ($res->fetchOneCell()) {
return;
XDB::execute("UPDATE aliases
SET flags=CONCAT(flags,',','bestalias')
- WHERE id={?} AND type!='homonyme'
+ WHERE uid={?} AND type!='homonyme'
ORDER BY !FIND_IN_SET('usage',flags),alias LIKE '%.%', LENGTH(alias)
LIMIT 1", $user->id());
}
$em = trim(rtrim($str));
$em = str_replace('<', '', $em);
$em = str_replace('>', '', $em);
+ if (strpos($em, '@') === false) {
+ return;
+ }
list($ident, $dom) = explode('@', $em);
- if ($dom == $globals->mail->domain or $dom == $globals->mail->domain2) {
+ if ($dom == $globals->mail->domain || $dom == $globals->mail->domain2) {
list($ident1) = explode('_', $ident);
list($ident) = explode('+', $ident1);
}
!preg_match("/@(polytechnique\.(org|edu)|melix\.(org|net)|m4x\.org)$/", $email);
}
-// function idsFromMails() {{{1
-/** Converts an array of emails to an array of email => uid
- * @param $emails : array of emails
- * @return array of ($email => $uid)
- */
-function idsFromMails($emails)
+// function ids_from_mails() {{{1
+// Converts an array of emails to an array of email => uid
+function ids_from_mails(array $emails)
{
global $globals;
$domain_mails = array();
$alias_mails = array();
$other_mails = array();
- /* Find type of email address */
+
+ // 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)
foreach ($emails as $email) {
if (strpos($email, '@') === false) {
$user = $email;
}
}
$uids = array();
- /* domain users */
+
+ // Look up user ids for addresses in domain
if (count($domain_mails)) {
- $domain_users = array();
- foreach (array_keys($domain_mails) as $user) {
- $domain_users[] = XDB::escape($user);
- }
+ $domain_users = array_map(array('XDB', 'escape'), array_keys($domain_mails));
$list = implode(',', $domain_users);
- $res = XDB::query("SELECT alias, id
- FROM aliases
- WHERE alias IN ($list)");
+ $res = XDB::query("SELECT alias, uid
+ FROM aliases
+ WHERE alias IN ($list)");
foreach ($res->fetchAllRow() as $row) {
list ($alias, $id) = $row;
$uids[$domain_mails[$alias]] = $id;
}
}
- /* Alias users */
+ // Look up user ids for addresses in our alias domain
if (count($alias_mails)) {
$alias_users = array();
foreach (array_keys($alias_mails) as $user) {
$alias_users[] = XDB::escape($user."@".$globals->mail->alias_dom);
}
$list = implode(',', $alias_users);
- $res = XDB::query("SELECT v.alias, a.id
- 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 ($list)");
+ $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 ($list)");
foreach ($res->fetchAllRow() as $row) {
list ($alias, $id) = $row;
$uids[$alias_mails[$alias]] = $id;
}
}
- /* Other mails */
+ // Look up user ids for other addresses in the email redirection list
if (count($other_mails)) {
- $other_users = array();
- foreach (array_keys($other_mails) as $user) {
- $other_users[] = XDB::escape($user);
- }
+ $other_users = array_map(array('XDB', 'escape'), $other_mails);
$list = implode(',', $other_users);
$res = XDB::query("SELECT email, uid
- FROM emails
- WHERE email IN ($list)");
+ FROM emails
+ WHERE email IN ($list)");
foreach ($res->fetchAllRow() as $row) {
list ($email, $uid) = $row;
$uids[$other_mails[$email]] = $uid;
// Retrieves the current list of actives storages.
private function get_storages()
{
- $res = XDB::query("SELECT mail_storage
- FROM auth_user_md5
- WHERE user_id = {?}", $this->user->id());
- return new PlFlagSet($res->fetchOneCell());
+ 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)
{
- XDB::execute("UPDATE auth_user_md5
- SET mail_storage = {?}
- WHERE user_id = {?}", $storages, $this->user->id());
+ XDB::execute("UPDATE email_options
+ SET storage = {?}
+ WHERE uid = {?}", $storages, $this->user->id());
}
// Returns the list of allowed storages for the @p user.