Page MenuHomeIn-Portal Phabricator

D53.id670.diff
No OneTemporary

File Metadata

Created
Wed, Feb 26, 9:02 AM

D53.id670.diff

Index: core/admin_templates/incs/grid_blocks.tpl
===================================================================
--- core/admin_templates/incs/grid_blocks.tpl
+++ core/admin_templates/incs/grid_blocks.tpl
@@ -339,25 +339,30 @@
</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">
- $('#' + jq('<inp2:SearchInputName field="$filter_field" filter_type="like" grid="$grid"/>')).autocomplete({
- source: '<inp2:m_t pass="m,{$PrefixSpecial}" field="$filter_field" {$PrefixSpecial}_event="OnSuggestValuesJSON" no_amp="1" js_escape="1"/>',
- select: function (event, ui) {
- if ( event.which === 13 ) {
- search('<inp2:m_Param name="PrefixSpecial"/>', '<inp2:m_Param name="grid"/>', parseInt('<inp2:m_Param name="ajax"/>'));
- }
+<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">
+ $('#' + jq('<inp2:SearchInputName field="$filter_field" filter_type="$filter_type" grid="$grid"/>')).autocomplete({
+ source: '<inp2:m_t pass="m,{$PrefixSpecial}" field="$filter_field" {$PrefixSpecial}_event="OnSuggestValuesJSON" no_amp="1" js_escape="1"/>',
+ select: function (event, ui) {
+ if ( event.which === 13 ) {
+ search('<inp2:m_Param name="PrefixSpecial"/>', '<inp2:m_Param name="grid"/>', parseInt('<inp2:m_Param name="ajax"/>'));
}
- });
- </script>
+ }
+ });
+ </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%">
Index: core/kernel/db/db_event_handler.php
===================================================================
--- core/kernel/db/db_event_handler.php
+++ core/kernel/db/db_event_handler.php
@@ -3359,8 +3359,10 @@
*/
protected function getAutoCompleteSuggestions(kEvent $event, $term)
{
+ $event->setPseudoClass('_List');
+
+ /** @var kDBList $object */
$object = $event->getObject();
- /* @var $object kDBItem */
$field = $this->Application->GetVar('field');
@@ -3374,11 +3376,20 @@
$limit = 20;
}
- $sql = 'SELECT DISTINCT ' . $field . '
- FROM ' . $this->Application->getUnitOption($event->Prefix, 'TableName') . '
- WHERE ' . $field . ' LIKE ' . $this->Conn->qstr($term . '%') . '
- ORDER BY ' . $field . '
- LIMIT 0,' . $limit;
+ $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('%' . $term . '%'),
+ $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);
return $this->Conn->GetCol($sql);
}

Event Timeline