Page MenuHomeIn-Portal Phabricator

D53.id146.diff
No OneTemporary

File Metadata

Created
Wed, Feb 26, 9:02 AM

D53.id146.diff

Index: core/admin_templates/incs/grid_blocks.tpl
===================================================================
--- core/admin_templates/incs/grid_blocks.tpl
+++ core/admin_templates/incs/grid_blocks.tpl
@@ -339,22 +339,27 @@
</select>
</inp2:m_DefineElement>
-<inp2:m_DefineElement name="grid_like_combo_filter" filter_width="95%">
- <input type="text"
- autocomplete="off"
- class="filter <inp2:m_ifnot check='SearchField' field='$filter_field' filter_type='like' grid='$grid' equals_to=''>filter-active</inp2:m_ifnot>"
- style="width: <inp2:m_Param name="filter_width"/>"
- name="<inp2:SearchInputName field="$filter_field" filter_type="like" grid="$grid"/>"
- id="<inp2:SearchInputName field="$filter_field" filter_type="like" grid="$grid"/>"
- value="<inp2:SearchField field="$filter_field" filter_type="like" grid="$grid"/>"
- onkeypress="search_keydown(event, '<inp2:m_Param name="PrefixSpecial"/>', '<inp2:m_Param name="grid"/>', '<inp2:m_Param name="ajax"/>')"/>
- <script type="text/javascript">
- new AJAXDropDown('<inp2:SearchInputName field="$filter_field" filter_type="like" grid="$grid"/>',
- function(cur_value) {
- return '<inp2:m_t no_amp="1" pass="m,{$PrefixSpecial}" field="$filter_field" {$PrefixSpecial}_event="OnSuggestValues" cur_value="#VALUE#"/>'.replace('#VALUE#', cur_value);
- }
- );
- </script>
+<inp2:m_DefineElement name="grid_like_combo_filter" filter_type="like" filter_width="95%">
+ <input type="text"
+ autocomplete="off"
+ class="filter <inp2:m_ifnot check='SearchField' field='$filter_field' filter_type='$filter_type' grid='$grid' equals_to=''>filter-active</inp2:m_ifnot>"
+ style="width: <inp2:m_Param name='filter_width'/>"
+ name="<inp2:SearchInputName field='$filter_field' filter_type='$filter_type' grid='$grid'/>"
+ id="<inp2:SearchInputName field='$filter_field' filter_type='$filter_type' grid='$grid'/>"
+ value="<inp2:SearchField field='$filter_field' filter_type='$filter_type' grid='$grid'/>"
+ onkeypress="search_keydown(event, '<inp2:m_Param name="PrefixSpecial"/>', '<inp2:m_Param name="grid"/>', '<inp2:m_Param name="ajax"/>')"
+ />
+ <script type="text/javascript">
+ new AJAXDropDown('<inp2:SearchInputName field="$filter_field" filter_type="$filter_type" grid="$grid"/>',
+ function(cur_value) {
+ return '<inp2:m_t no_amp="1" pass="m,{$PrefixSpecial}" field="$filter_field" {$PrefixSpecial}_event="OnSuggestValues" cur_value="#VALUE#"/>'.replace('#VALUE#', cur_value);
+ }
+ );
+ </script>
+</inp2:m_DefineElement>
+
+<inp2:m_DefineElement name="grid_combo_equals_filter" filter_width="95%">
+ <inp2:m_RenderElement name="grid_like_combo_filter" filter_type="equals" pass_params="1"/>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="grid_equals_filter" filter_width="95%">
@@ -869,4 +874,4 @@
<inp2:m_RenderElement name="grid_pagination_elem" PrefixSpecial="$pagination_prefix" pass_params="1"/>
</inp2:m_if>
</inp2:m_if>
-</inp2:m_DefineElement>
\ No newline at end of file
+</inp2:m_DefineElement>
Index: core/kernel/db/db_event_handler.php
===================================================================
--- core/kernel/db/db_event_handler.php
+++ core/kernel/db/db_event_handler.php
@@ -3466,11 +3466,12 @@
}
$event->status = kEvent::erSTOP;
+ $event->setPseudoClass('_List');
$field = $this->Application->GetVar('field');
$cur_value = $this->Application->GetVar('cur_value');
- $fields = $this->Application->getUnitOption($event->Prefix, 'Fields');
+ /** @var kDBList $object */
$object = $event->getObject();
if ( !$field || !$cur_value || !$object->isField($field) ) {
@@ -3482,12 +3483,21 @@
$limit = 20;
}
- $sql = 'SELECT DISTINCT ' . $field . '
- FROM ' . $this->Application->getUnitOption($event->Prefix, 'TableName') . '
- WHERE ' . $field . ' LIKE ' . $this->Conn->qstr($cur_value . '%') . '
- ORDER BY ' . $field . '
- LIMIT 0,' . $limit;
- $data = $this->Conn->GetCol($sql);
+ $calculated_fields = $object->getCalculatedFields();
+ $calculated_field = array_key_exists($field, $calculated_fields);
+ $filter_type = $calculated_field ? kDBList::HAVING_FILTER : kDBList::WHERE_FILTER;
+
+ $object->addFilter(
+ 'search_filter',
+ $field . ' LIKE ' . $this->Conn->qstr('%' . $cur_value . '%'),
+ $filter_type
+ );
+ $object->ClearOrderFields();
+ $object->AddOrderField($field, 'asc', $calculated_field);
+
+ $sql = $object->GetSelectSQL(true) . ' LIMIT 0,' . $limit;
+ $sql = str_replace($object->TableName . '.*', $calculated_fields[$field] . ' AS ' . $field, $sql);
+ $data = array_keys($this->Conn->GetCol($sql, $field));
$this->Application->XMLHeader();

Event Timeline