projects
/
platal.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix ids_from_emails (errors when invalid @x.org emails were given).
[platal.git]
/
include
/
emails.inc.php
diff --git
a/include/emails.inc.php
b/include/emails.inc.php
index
de05ed2
..
9b1f5a4
100644
(file)
--- a/
include/emails.inc.php
+++ b/
include/emails.inc.php
@@
-1,6
+1,6
@@
<?php
/***************************************************************************
<?php
/***************************************************************************
- * Copyright (C) 2003-20
09
Polytechnique.org *
+ * Copyright (C) 2003-20
10
Polytechnique.org *
* http://opensource.polytechnique.org/ *
* *
* This program is free software; you can redistribute it and/or modify *
* http://opensource.polytechnique.org/ *
* *
* This program is free software; you can redistribute it and/or modify *
@@
-31,7
+31,7
@@
function fix_bestalias(User &$user)
{
$res = XDB::query("SELECT COUNT(*)
FROM aliases
{
$res = XDB::query("SELECT COUNT(*)
FROM aliases
- WHERE id = {?} AND FIND_IN_SET('bestalias', flags) AND type != 'homonyme'",
+ WHERE
u
id = {?} AND FIND_IN_SET('bestalias', flags) AND type != 'homonyme'",
$user->id());
if ($res->fetchOneCell()) {
return;
$user->id());
if ($res->fetchOneCell()) {
return;
@@
-39,7
+39,7
@@
function fix_bestalias(User &$user)
XDB::execute("UPDATE aliases
SET flags=CONCAT(flags,',','bestalias')
XDB::execute("UPDATE aliases
SET flags=CONCAT(flags,',','bestalias')
- WHERE id={?} AND type!='homonyme'
+ WHERE
u
id={?} AND type!='homonyme'
ORDER BY !FIND_IN_SET('usage',flags),alias LIKE '%.%', LENGTH(alias)
LIMIT 1", $user->id());
}
ORDER BY !FIND_IN_SET('usage',flags),alias LIKE '%.%', LENGTH(alias)
LIMIT 1", $user->id());
}
@@
-99,11
+99,11
@@
function ids_from_mails(array $emails)
if ($domain == $globals->mail->alias_dom || $domain == $globals->mail->alias_dom2) {
list($user) = explode('+', $user);
list($user) = explode('_', $user);
if ($domain == $globals->mail->alias_dom || $domain == $globals->mail->alias_dom2) {
list($user) = explode('+', $user);
list($user) = explode('_', $user);
- $alias_mails[$
user] = $email
;
+ $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);
} elseif ($domain == $globals->mail->domain || $domain == $globals->mail->domain2) {
list($user) = explode('+', $user);
list($user) = explode('_', $user);
- $domain_mails[$
user] = $email
;
+ $domain_mails[$
email] = $user
;
} else {
$other_mails[] = $email;
}
} else {
$other_mails[] = $email;
}
@@
-111,47
+111,57
@@
function ids_from_mails(array $emails)
$uids = array();
// Look up user ids for addresses in domain
$uids = array();
// Look up user ids for addresses in domain
+ $alias_uids = array();
if (count($domain_mails)) {
if (count($domain_mails)) {
- $domain_users = array_map(array('XDB', 'escape'), array_keys($domain_mails));
- $list = implode(',', $domain_users);
- $res = XDB::query("SELECT alias, id
+ $res = XDB::query("SELECT alias, uid
FROM aliases
FROM aliases
- WHERE alias IN
($list)"
);
+ WHERE alias IN
{?}", array_unique($domain_mails)
);
foreach ($res->fetchAllRow() as $row) {
list ($alias, $id) = $row;
foreach ($res->fetchAllRow() as $row) {
list ($alias, $id) = $row;
- $uids[$domain_mails[$alias]] = $id;
+ $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];
}
}
// Look up user ids for addresses in our alias domain
}
}
// Look up user ids for addresses in our alias domain
+ $alias_uids = array();
if (count($alias_mails)) {
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
+ $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}'))
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)"
);
+ WHERE v.alias IN
{?}", array_unique($alias_mails)
);
foreach ($res->fetchAllRow() as $row) {
list ($alias, $id) = $row;
foreach ($res->fetchAllRow() as $row) {
list ($alias, $id) = $row;
- $uids[$alias_mails[$alias]] = $id;
+ $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];
}
}
// Look up user ids for other addresses in the email redirection list
if (count($other_mails)) {
}
}
// Look up user ids for other addresses in the email redirection list
if (count($other_mails)) {
- $other_users = array_map(array('XDB', 'escape'), $other_mails);
- $list = implode(',', $other_users);
+ $lowerupper = array();
+ foreach ($other_mails as $mail) {
+ $lowerupper[strtolower($mail)] = $mail;
+ }
$res = XDB::query("SELECT email, uid
FROM emails
$res = XDB::query("SELECT email, uid
FROM emails
- WHERE email IN
($list)"
);
+ WHERE email IN
{?}", $other_mails
);
foreach ($res->fetchAllRow() as $row) {
list ($email, $uid) = $row;
foreach ($res->fetchAllRow() as $row) {
list ($email, $uid) = $row;
- $uids[$
other_mails[$email
]] = $uid;
+ $uids[$
lowerupper[strtolower($email)
]] = $uid;
}
}
}
}