1
0
mirror of https://github.com/e107inc/e107.git synced 2025-03-14 01:19:44 +01:00

More admin UI filter optimizations - swtich to LIKE instead REGEXP (works with non-latin languages now); minor bugfixes

This commit is contained in:
secretr 2012-01-17 16:57:46 +00:00
parent e67fa5e10b
commit c9085efa0e
2 changed files with 42 additions and 24 deletions

View File

@ -2937,7 +2937,7 @@ class e_admin_controller_ui extends e_admin_controller
$searchQuery = $tp->toDB($request->getQuery('searchquery', ''));
$searchFilter = $this->_parseFilterRequest($request->getQuery('filter_options', ''));
if($searchFilter && is_array($searchFilter))
{
list($filterField, $filterValue) = $searchFilter;
@ -2973,7 +2973,7 @@ class e_admin_controller_ui extends e_admin_controller
$searchable_types = array('text', 'textarea', 'bbarea', 'user', 'email'); //method?
if(trim($searchQuery) !== '' && in_array($var['type'], $searchable_types))
{
$filter[] = $var['__tableField']." REGEXP ('".$searchQuery."')";
$filter[] = $var['__tableField']." LIKE '%".$searchQuery."%'";
if($isfilter)
{
$filterFrom[] = $var['__tableField'];
@ -2982,8 +2982,6 @@ class e_admin_controller_ui extends e_admin_controller
}
}
if($isfilter)
{
if(!$filterFrom) return false;
@ -3104,8 +3102,8 @@ class e_admin_controller_ui extends e_admin_controller
// where query
if(count($searchQry) > 0)
{
if(strpos($qry, ' WHERE ') !== false) $qry .= " WHERE ".implode(" AND ", $searchQry);
else $qry .= " AND ".implode(" AND ", $searchQry);
// add more where details on the fly via $this->listQrySql['db_where'];
$qry .= " WHERE ".implode(" AND ", $searchQry);
}
// GROUP BY if needed
@ -4149,6 +4147,23 @@ class e_admin_form_ui extends e_form
$controller = $this->getController();
$filter_pre = vartrue($controller->preFiliterMarkup);
$filter_post = vartrue($controller->postFiliterMarkup);
$filter_preserve_var = array();
// method requires controller - stanalone advanced usage not possible
if($this->getController())
{
$get = $this->getController()->getQuery();
foreach ($get as $key => $value)
{
if($key == 'searchquery' || $key == 'filter_options' || $key == 'etrigger_filter') continue;
$key = preg_replace('/[^\w]/', '', $key);
$filter_preserve_var[] = $this->hidden($key, rawurlencode($value));
}
}
else
{
$filter_preserve_var[] = $this->hidden('mode', $l[0]);
$filter_preserve_var[] = $this->hidden('action', $l[1]);
}
$text = "
<form method='get' action='".e_SELF."'>
<fieldset class='e-filter'>
@ -4162,8 +4177,7 @@ class e_admin_form_ui extends e_form
".$this->renderBatchFilter('filter', $current_query[1])."
".$this->select_close()."
<div class='e-autocomplete'></div>
".$this->hidden('mode', $l[0])."
".$this->hidden('action', $l[1])."
".implode("\n", $filter_preserve_var)."
".$this->admin_button('etrigger_filter', 'etrigger_filter', 'filter e-hide-if-js', LAN_FILTER, array('id' => false))."
<span class='indicator' style='display: none;'>
<img src='".e_IMAGE_ABS."generic/loading_16.gif' class='icon action S16' alt='".LAN_LOADING."' />

View File

@ -1102,7 +1102,7 @@ class e_form
$text .= (vartrue($val['url'])) ? "<a href='".str_replace(array('&amp;', '&'), array('&', '&amp;'),$val['url'])."'>" : ""; // Really this column-sorting link should be auto-generated, or be autocreated via unobtrusive js.
$text .= defset($val['title'], $val['title']);
$text .= ($val['url']) ? "</a>" : "";
$text .= ($key == "options") ? $this->columnSelector($fieldarray, $columnPref) : "";
$text .= ($key == "options" && !vartrue($val['noselector'])) ? $this->columnSelector($fieldarray, $columnPref) : "";
$text .= ($key == "checkboxes") ? $this->checkbox_toggle('e-column-toggle', vartrue($val['toggle'], 'multiselect')) : "";
@ -1242,10 +1242,17 @@ class e_form
if($attributes['type']=='method') // Allow override with 'options' function.
{
$attributes['mode'] = "read";
return $this->options($field, $value, $attributes, $id);
if(isset($attributes['method']) && $attributes['method'] && method_exists($this, $attributes['method']))
{
$method = $attributes['method'];
return $this->$method($parms, $value, $id);
}
elseif(method_exists($this, 'options'))
{
return $this->options($parms, $value, $id);
}
}
if(!$value)
@ -1275,9 +1282,6 @@ class e_form
{
$value .= $this->submit_image('etrigger_delete['.$id.']', $id, 'delete', LAN_DELETE.' [ ID: '.$id.' ]', array('class' => 'action delete'.$delcls));
}
}
//$attributes['type'] = 'text';
return $value;
@ -1888,7 +1892,7 @@ class e_form
public function renderListForm($form_options, $tree_models, $nocontainer = false)
{
$tp = e107::getParser();
$text = '';
foreach ($form_options as $fid => $options)
{
$tree_model = $tree_models[$fid];
@ -1905,13 +1909,14 @@ class e_form
$formurl = $url.($query ? '?'.$query : '');
$fields = $options['fields'];
$current_fields = varset($options['fieldpref']) ? $options['fieldpref'] : array_keys($options['fields']);
$legend_class = vartrue($options['legend_class'], 'e-hideme');
$text = "
$text .= "
<form method='post' action='{$formurl}' id='{$elid}-list-form'>
<div>".$this->token()."
".vartrue($options['fieldset_pre'])."
<fieldset id='{$elid}-list'>
<legend class='e-hideme'>".$options['legend']."</legend>
<legend class='{$legend_class}'>".$options['legend']."</legend>
".vartrue($options['table_pre'])."
<table cellpadding='0' cellspacing='0' class='adminlist' id='{$elid}-list-table'>
".$this->colGroup($fields, $current_fields)."
@ -1970,11 +1975,10 @@ class e_form
</div>
</form>
";
if(!$nocontainer)
{
$text = '<div class="e-container">'.$text.'</div>';
}
}
if(!$nocontainer)
{
$text = '<div class="e-container">'.$text.'</div>';
}
return (vartrue($options['form_pre']).$text.vartrue($options['form_post']));
}
@ -2114,7 +2118,7 @@ class e_form
$required = $this->getRequiredString();
$required_class = ' class="required-label"'; // TODO - add 'required-label' to the core CSS definitions
$required_help = true;
if($att['validate'])
if(vartrue($att['validate']))
{
// override
$model_required[$key] = array();