diff --git a/include/class.dynamic_forms.php b/include/class.dynamic_forms.php index 97348ff2c2e66dff5e50a4fce246925064eaf94d..a0177cd3338da149a2a055d34a8493616fa45cf7 100644 --- a/include/class.dynamic_forms.php +++ b/include/class.dynamic_forms.php @@ -235,6 +235,15 @@ class UserForm extends DynamicForm { return static::$instance; } } +Filter::addSupportedMatches('User Data', function() { + $matches = array(); + foreach (UserForm::getInstance()->getFields() as $f) { + if (!$f->hasData()) + continue; + $matches['field.'.$f->get('id')] = $f->getLabel(); + } + return $matches; +}); class TicketForm extends DynamicForm { static $instance; diff --git a/include/class.organization.php b/include/class.organization.php index 81937964e55c75302872cf1b20ac72c1915a3d4f..d024507238db5c37420b814f8ab53370003c8e90 100644 --- a/include/class.organization.php +++ b/include/class.organization.php @@ -193,6 +193,20 @@ class Organization extends OrganizationModel { $form->save(); } + function getFilterData() { + $vars = array(); + foreach ($this->getDynamicData() as $entry) { + if ($entry->getForm()->get('type') != 'O') + continue; + foreach ($entry->getFields() as $f) + $vars['field.'.$f->get('id')] = $f->toString($f->getClean()); + // Add special `name` field + $f = $entry->getForm()->getField('name'); + $vars['field.'.$f->get('id')] = $this->getName(); + } + return $vars; + } + function to_json() { $info = array( @@ -374,5 +388,14 @@ class OrganizationForm extends DynamicForm { } } +Filter::addSupportedMatches('Organization Data', function() { + $matches = array(); + foreach (OrganizationForm::getInstance()->getFields() as $f) { + if (!$f->hasData()) + continue; + $matches['field.'.$f->get('id')] = $f->getLabel(); + } + return $matches; +}); Organization::_inspect(); ?> diff --git a/include/class.ticket.php b/include/class.ticket.php index 6b0d597e10821cf53396f1ac925521520fdfcc20..8102d8de070943206c59328e391806b968074370 100644 --- a/include/class.ticket.php +++ b/include/class.ticket.php @@ -2208,13 +2208,26 @@ class Ticket { if ($vars['uid'] && ($user = User::lookup($vars['uid']))) { $vars['email'] = $user->getEmail(); $vars['name'] = $user->getName(); + // Add in user and organization data for filtering + $vars += $user->getFilterData(); + if ($org = $user->getOrganization()) { + $vars += $org->getFilterData(); + } } else { $interesting = array('name', 'email'); $user_form = UserForm::getUserForm()->getForm($vars); - foreach ($user_form->getFields() as $f) + // Add all the user-entered info for filtering + 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')] = $f->toString($f->getClean()); + $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); + if ($org = Organization::forDomain($domain)) { + $vars += $org->getFilterData(); + } } diff --git a/include/class.user.php b/include/class.user.php index b5247d66731718bfa8d56b3669d3b84c8700f093..4736a1707633611a18e7935e0422c0865b845faa 100644 --- a/include/class.user.php +++ b/include/class.user.php @@ -288,6 +288,22 @@ class User extends UserModel { return $this->_entries; } + function getFilterData() { + $vars = array(); + foreach ($this->getDynamicData() as $entry) { + if ($entry->getForm()->get('type') != 'U') + continue; + foreach ($entry->getFields() as $f) + $vars['field.'.$f->get('id')] = $f->toString($f->getClean()); + // Add in special `name` and `email` fields + foreach (array('name', 'email') as $name) { + if ($f = $entry->getForm()->getField($name)) + $vars['field.'.$f->get('id')] = $this->getName(); + } + } + return $vars; + } + function getForms($data=null) { if (!isset($this->_forms)) { diff --git a/include/staff/filter.inc.php b/include/staff/filter.inc.php index 29fcaf17cc3c66327754344fde8cfd70539a930c..a1b92945c6cc52279d8cd1219f59560b6b745b6f 100644 --- a/include/staff/filter.inc.php +++ b/include/staff/filter.inc.php @@ -122,7 +122,7 @@ $info=Format::htmlchars(($errors && $_POST)?$_POST:$info); <tr id="r<?php echo $i; ?>"> <td colspan="2"> <div> - <select name="rule_w<?php echo $i; ?>"> + <select style="max-width: 200px;" name="rule_w<?php echo $i; ?>"> <option value="">— Select One ‐</option> <?php foreach ($matches as $group=>$ms) { ?>