From 17c6e7bbf0eaf0dcef64a24a727da024ca2fb651 Mon Sep 17 00:00:00 2001 From: =?utf8?q?St=C3=A9phane=20Jacob?= Date: Wed, 13 Apr 2011 18:00:30 +0200 Subject: [PATCH] Improves email combobox (Closes #1110). MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Stéphane Jacob --- ChangeLog | 1 + include/emails.combobox.inc.php | 105 +++++++++++++++++++--------------- modules/email.php | 2 +- modules/profile.php | 2 +- modules/profile/general.inc.php | 2 +- modules/profile/jobs.inc.php | 2 +- templates/include/emails.combobox.tpl | 35 ++++-------- 7 files changed, 74 insertions(+), 75 deletions(-) diff --git a/ChangeLog b/ChangeLog index d90e2a6..f91f7c9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -4,6 +4,7 @@ VERSION 1.1.1 XX XX XXXX Bug/Wish: * Emails: + - #1110: Improves email combobox -JAC - #1459: Lists and administrates aliases on main domain -JAC * Profile: diff --git a/include/emails.combobox.inc.php b/include/emails.combobox.inc.php index 3409e7a..0e53f1b 100644 --- a/include/emails.combobox.inc.php +++ b/include/emails.combobox.inc.php @@ -19,68 +19,81 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * ***************************************************************************/ -function fill_email_combobox(PlPage $page, $user = null, $profile = null) +function fill_email_combobox(PlPage $page, array $retrieve, $user = null) { + require_once 'emails.inc.php'; if (is_null($user)) { $user = S::user(); } - if (is_null($profile)) { - /* Always refetch the profile. */ - $profile = $user->profile(true); - } - $email_type = 'directory'; + /* Always refetch the profile. */ + $profile = $user->profile(true); - if ($profile) { - $email_directory = $profile->email_directory; - $page->assign('email_directory', $email_directory); + $emails = array(); + if (in_array('source', $retrieve)) { + $emails['Emails polytechniciens'] = XDB::fetchColumn('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()); + } - $res = XDB::fetchAllAssoc('SELECT email - FROM profile_job - WHERE pid = {?}', $profile->id()); - $pro = array(); - foreach ($res as $res_it) { - if ($res_it['email'] != '') { - $pro[] = $res_it['email']; - if ($email_directory == $res_it['email']) { - $email_type = "pro"; - } + if (in_array('redirect', $retrieve)) { + $redirect = new Redirect($user); + $emails['Redirections'] = array(); + foreach ($redirect->emails as $redirect_it) { + if ($redirect_it->is_redirection()) { + $emails['Redirections'] = $redirect_it->email; } } - $page->assign('list_email_pro', $pro); } - if ($user) { - $res = XDB::fetchAllAssoc('SELECT CONCAT(s.email, \'@\', d.name) AS email - 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); - foreach ($res as $res_it) { - if ($email_directory == $res_it) { - $email_type = 'X'; - } + if ($profile) { + if (in_array('job', $retrieve)) { + $emails['Emails professionels'] = XDB::fetchColumn('SELECT email + FROM profile_job + WHERE pid = {?} AND email IS NOT NULL AND email != \'\'', + $profile->id()); } - require_once 'emails.inc.php'; - $redirect = new Redirect($user); - $redir = array(); - foreach ($redirect->emails as $redirect_it) { - if ($redirect_it->is_redirection()) { - $redir[] = $redirect_it->email; - if ($email_directory == $redirect_it->email) { - $email_type = 'redir'; + if ($profile->email_directory) { + if (in_array('directory', $retrieve)) { + foreach ($emails as &$email_list) { + foreach ($email_list as $key => $email) { + if ($profile->email_directory == $email) { + unset($email_list[$key]); + } + } + } + $emails['Email annuaire AX'] = array($profile->email_directory); + } elseif (in_array('stripped_directory', $retrieve)) { + if (User::isForeignEmailAddress($profile->email_directory)) { + $is_redirect = XDB::fecthOneCell('SELECT COUNT(*) + FROM email_redirect_account + WHERE uid = {?} AND redirect = {?}', + $user->id(), $profile->email_directory); + if ($is_redirect == 0) { + $emails['Email annuaire AX'] = array($profile->email_directory); + } } } } - $page->assign('list_email_redir', $redir); - $page->assign('email_type', $email_type); - } else { - $page->assign('list_email_X', array()); - $page->assign('list_email_redir', array()); - $page->assign('list_email_pro', array()); + + if (isset($emails['Emails professionels']) && isset($emails['Redirections'])) { + $intersect = array_intersect($emails['Emails professionels'], $emails['Redirections']); + foreach ($intersect as $key => $email) { + unset($emails['Emails professionels'][$key]); + } + } + } + + $emails_count = 0; + foreach ($emails as $email_list) { + $emails_count += count($email_list); } + $page->assign('emails_count', $emails_count); + $page->assign('email_lists', $emails); } // vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8: diff --git a/modules/email.php b/modules/email.php index 57dd50d..de8af94 100644 --- a/modules/email.php +++ b/modules/email.php @@ -307,7 +307,7 @@ class EmailModule extends PLModule $page->assign('googleapps', GoogleAppsAccount::account_status($user->id())); require_once 'emails.combobox.inc.php'; - fill_email_combobox($page); + fill_email_combobox($page, array('job', 'stripped_directory')); } function handler_antispam($page, $filter_status = null, $redirection = null) diff --git a/modules/profile.php b/modules/profile.php index 4209f19..9416557 100644 --- a/modules/profile.php +++ b/modules/profile.php @@ -443,7 +443,7 @@ class ProfileModule extends PLModule $page->assign('job', array()); $page->assign('new', true); require_once "emails.combobox.inc.php"; - fill_email_combobox($page); + fill_email_combobox($page, array('redirect', 'job', 'stripped_directory')); } /** diff --git a/modules/profile/general.inc.php b/modules/profile/general.inc.php index b984472..2051f16 100644 --- a/modules/profile/general.inc.php +++ b/modules/profile/general.inc.php @@ -717,7 +717,7 @@ class ProfilePageGeneral extends ProfilePage $page->assign('edu_fields', $res->fetchAllAssoc()); require_once "emails.combobox.inc.php"; - fill_email_combobox($page, $this->owner); + fill_email_combobox($page, array('source', 'redirect', 'job', 'directory'), $this->owner); $res = XDB::query("SELECT nw.nwid AS type, nw.name FROM profile_networking_enum AS nw diff --git a/modules/profile/jobs.inc.php b/modules/profile/jobs.inc.php index d8d27c8..37b8f3d 100644 --- a/modules/profile/jobs.inc.php +++ b/modules/profile/jobs.inc.php @@ -438,7 +438,7 @@ class ProfilePageJobs extends ProfilePage public function _prepare(PlPage $page, $id) { require_once 'emails.combobox.inc.php'; - fill_email_combobox($page, $this->owner); + fill_email_combobox($page, array('redirect', 'job', 'stripped_directory'), $this->owner); if (!S::user()->isMe($this->owner)) { $res = XDB::iterator('SELECT id, name diff --git a/templates/include/emails.combobox.tpl b/templates/include/emails.combobox.tpl index 021a47f..74e84b3 100644 --- a/templates/include/emails.combobox.tpl +++ b/templates/include/emails.combobox.tpl @@ -35,40 +35,25 @@ {if $name eq "email"}{/if} {if $name neq "email"}
{/if} + {if $emails_count neq 0} + {else} + + {/if} {if $name neq "email"}
-- 2.1.4