mirror of
https://github.com/e107inc/e107.git
synced 2025-07-31 03:40:37 +02:00
Fixes #4009 . Enhanced admin-ui to support custom filter handlers on string searches (not just drop-drop filters as was already the case)
This commit is contained in:
@@ -141,6 +141,17 @@ class banlist_ui extends e_admin_ui
|
||||
$this->fields['banlist_ip']['title']= BANLAN_5;
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
/**
|
||||
* Custom filter for banlist_ip filter search.
|
||||
* @param string $srch
|
||||
*/
|
||||
function handleListBanlistIpFilter($srch)
|
||||
{
|
||||
return "banlist_ip = '".e107::getIPHandler()->ipEncode($srch)."' OR banlist_ip = '".$srch."'";
|
||||
}
|
||||
|
||||
|
||||
// optional
|
||||
public function init()
|
||||
|
@@ -4193,11 +4193,12 @@ class e_admin_controller_ui extends e_admin_controller
|
||||
$searchQry[] = $searchFilter;
|
||||
}
|
||||
|
||||
if(E107_DEBUG_LEVEL == E107_DBG_SQLQUERIES)
|
||||
if(E107_DEBUG_LEVEL == E107_DBG_SQLQUERIES)
|
||||
{
|
||||
e107::getMessage()->addDebug(print_a($searchQry,true));
|
||||
}
|
||||
|
||||
|
||||
$className = get_class($this);
|
||||
|
||||
// main table should select everything
|
||||
$tableSFieldsArr[] = $tablePath.'*';
|
||||
@@ -4225,6 +4226,20 @@ class e_admin_controller_ui extends e_admin_controller
|
||||
|
||||
if(trim($searchQuery) !== '' && in_array($var['type'], $searchable_types) && $var['__tableField'])
|
||||
{
|
||||
// Search for customer filter handler.
|
||||
$cutomerFilterMethod = 'handle'.$this->getRequest()->getActionName().$this->getRequest()->camelize($key).'Filter';
|
||||
$args = array($searchQuery);
|
||||
e107::getMessage()->addDebug("Searching for custom filter method: ".$className.'::'.$cutomerFilterMethod."(".implode(', ', $args).")");
|
||||
|
||||
if(method_exists($this, $cutomerFilterMethod)) // callback handling
|
||||
{
|
||||
e107::getMessage()->addDebug('Executing filter callback <strong>'.$className.'::'.$cutomerFilterMethod.'('.implode(', ', $args).')</strong>');
|
||||
|
||||
$filter[] = call_user_func_array(array($this, $cutomerFilterMethod), $args);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
if($var['data'] === 'int' || $var['data'] === 'integer' || $var['type'] === 'int' || $var['type'] === 'integer')
|
||||
{
|
||||
if(is_numeric($searchQuery))
|
||||
@@ -4279,6 +4294,7 @@ 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.
|
||||
@@ -5478,6 +5494,8 @@ class e_admin_ui extends e_admin_controller_ui
|
||||
{
|
||||
$string = $this->getQuery('searchquery');
|
||||
|
||||
|
||||
|
||||
if(empty($string))
|
||||
{
|
||||
return null;
|
||||
|
Reference in New Issue
Block a user