From e76d14449de09075368a1585e3b59bfebc9516ca Mon Sep 17 00:00:00 2001 From: Jared Hancock <jared@osticket.com> Date: Thu, 9 Apr 2015 12:17:50 -0500 Subject: [PATCH] filters: Filter user information for email tickets When the user is not identified by the web interface, such as processing email to tickets, attempt to locate and include the user filter information when matching the filter to the new ticket data. --- include/class.dynamic_forms.php | 2 +- include/class.ticket.php | 23 ++++++++++++++++------- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/include/class.dynamic_forms.php b/include/class.dynamic_forms.php index e84b4b6a6..1c43687e7 100644 --- a/include/class.dynamic_forms.php +++ b/include/class.dynamic_forms.php @@ -1220,7 +1220,7 @@ class SelectionField extends FormField { } function toString($items) { - return ($items && is_array($items)) + return is_array($items) ? implode(', ', $items) : (string) $items; } diff --git a/include/class.ticket.php b/include/class.ticket.php index 1740b10b0..67c1ce734 100644 --- a/include/class.ticket.php +++ b/include/class.ticket.php @@ -2426,24 +2426,33 @@ class Ticket { } } + if (!$user) { + $interesting = array('name', 'email'); + $user_form = UserForm::getUserForm()->getForm($vars); + // Add all the user-entered info for filtering + foreach ($interesting as $F) { + $field = $user_form->getField($F); + $vars[$F] = $field->toString($field->getClean()); + } + // Attempt to lookup the user and associated data + $user = User::lookupByEmail($vars['email']); + } + // Add in user and organization data for filtering if ($user) { $vars += $user->getFilterData(); $vars['email'] = $user->getEmail(); - $vars['name'] = $user->getName(); + $vars['name'] = $user->getName()->getOriginal(); if ($org = $user->getOrganization()) { $vars += $org->getFilterData(); } } - // Unpack the basic user information + // Don't include org information based solely on email domain + // for existing user instances else { - $interesting = array('name', 'email'); - $user_form = UserForm::getUserForm()->getForm($vars); - // Add all the user-entered info for filtering + // Unpack all known user info from the request foreach ($user_form->getFields() as $f) { $vars['field.'.$f->get('id')] = $f->toString($f->getClean()); - if (in_array($f->get('name'), $interesting)) - $vars[$f->get('name')] = $vars['field.'.$f->get('id')]; } // Add in organization data if one exists for this email domain list($mailbox, $domain) = explode('@', $vars['email'], 2); -- GitLab