1
0
mirror of https://github.com/e107inc/e107.git synced 2025-08-20 05:11:42 +02:00

New "Search in Field" filter option added for field-specific search of text fields and similar. (filter=>true required)

This commit is contained in:
Cameron
2019-06-04 12:59:39 -07:00
parent 65c0777357
commit 5cd9f52548
3 changed files with 71 additions and 8 deletions

View File

@@ -4087,8 +4087,10 @@ class e_admin_controller_ui extends e_admin_controller
$this->listQry = $listQry;
$filterOptions = $request->getQuery('filter_options', '');
$searchQuery = $this->fixSearchWildcards($tp->toDB($request->getQuery('searchquery', '')));
$searchFilter = $this->_parseFilterRequest($request->getQuery('filter_options', ''));
$searchFilter = $this->_parseFilterRequest($filterOptions);
$listQry = $this->listQry; // check for modification during parseFilterRequest();
@@ -4265,6 +4267,12 @@ class e_admin_controller_ui extends e_admin_controller
}
}
if(strpos($filterOptions,'searchfield__') === 0) // search in specific field, so remove the above filters.
{
$filter = array(); // reset filter.
}
if(E107_DEBUG_LEVEL == E107_DBG_SQLQUERIES)
{
// e107::getDebug()->log(print_a($filter,true));
@@ -5448,6 +5456,24 @@ class e_admin_ui extends e_admin_controller_ui
$this->getTreeModel()->setMessages();
}
/**
* Method to generate "Search in Field" query.
* @param $selected
* @return string
*/
protected function handleListSearchfieldFilter($selected)
{
$string = $this->getQuery('searchquery');
if(empty($string))
{
return null;
}
return $selected. " LIKE '%".e107::getParser()->toDB($string)."%' "; // array($selected, $this->getQuery('searchquery'));
}
/**
* Batch default (field) trigger
* @param array $selected
@@ -7310,9 +7336,15 @@ class e_admin_form_ui extends e_form
$textsingle = '';
foreach($this->getController()->getFields() as $key=>$val)
$searchFieldOpts = array();
$fieldList = $this->getController()->getFields();
foreach($fieldList as $key=>$val)
{
if(!varset($val[$type]))
if(empty($val[$type])) // ie. filter = false or batch = false.
{
continue;
}
@@ -7331,6 +7363,8 @@ class e_admin_form_ui extends e_form
$option['sefgen__'.$key.'__'.$parms['sef']] = LAN_GENERATE;
}
$searchFieldOpts["searchfield__".$key] = $val['title'];
break;
@@ -7340,6 +7374,13 @@ class e_admin_form_ui extends e_form
$option[$key.'___ISEMPTY_'] = LAN_UI_FILTER_IS_EMPTY;
}
$searchFieldOpts["searchfield__".$key] = $val['title'];
break;
case 'textarea':
case 'tags':
$searchFieldOpts["searchfield__".$key] = $val['title'];
break;
case 'bool':
@@ -7607,7 +7648,9 @@ class e_admin_form_ui extends e_form
break;
}
if(count($option) > 0)
if(!empty($option))
{
$text .= "\t".$this->optgroup_open($optdiz[$type].defset($val['title'], $val['title']), varset($disabled))."\n";
foreach($option as $okey=>$oval)
@@ -7618,6 +7661,22 @@ class e_admin_form_ui extends e_form
}
}
if(!empty($searchFieldOpts))
{
$text .= "\t".$this->optgroup_open(defset("LAN_UI_FILTER_SEARCH_IN_FIELD", "Search in Field"))."\n";
foreach($searchFieldOpts as $key=>$val)
{
$text .= $this->option($val, $key, $selected == $key)."\n";
}
$text .= "\t".$this->optgroup_close()."\n";
}
return $textsingle.$text;
}