protected function searchMenu()
{
/** @var AttributeBagInterface $objSessionBag */
$objSessionBag = \System::getContainer()->get('session')->getBag('contao_backend');
$session = $objSessionBag->all();
// Store search value in the current session
if (\Input::post('FORM_SUBMIT') == 'tl_filters') {
$strField = \Input::post('tl_field', true);
$strKeyword = ltrim(\Input::postRaw('tl_value'), '*');
// Make sure the regular expression is valid
if ($strKeyword != '') {
try {
$this->Database->prepare("SELECT * FROM " . $this->strTable . " WHERE " . $strField . " REGEXP ?")->limit(1)->execute($strKeyword);
} catch (\Exception $e) {
$strKeyword = '';
}
}
$session['search'][$this->strTable]['field'] = $strField;
$session['search'][$this->strTable]['value'] = $strKeyword;
$objSessionBag->replace($session);
} elseif ($session['search'][$this->strTable]['value'] != '') {
$strPattern = "CAST(name AS CHAR) REGEXP ?";
if (substr(\Config::get('dbCollation'), -3) == '_ci') {
$strPattern = "LOWER(CAST(name AS CHAR)) REGEXP LOWER(?)";
}
if (isset($GLOBALS['TL_DCA'][$this->strTable]['fields']['name']['foreignKey'])) {
list($t, $f) = explode('.', $GLOBALS['TL_DCA'][$this->strTable]['fields']['name']['foreignKey']);
$this->procedure[] = "(" . $strPattern . " OR " . sprintf($strPattern, "(SELECT {$f} FROM {$t} WHERE {$t}.id={$this->strTable}.name)") . ")";
$this->values[] = $session['search'][$this->strTable]['value'];
} else {
$this->procedure[] = $strPattern;
}
$this->values[] = $session['search'][$this->strTable]['value'];
}
$active = $session['search'][$this->strTable]['value'] != '' ? true : false;
return '
<div class="tl_search tl_subpanel">
<strong>' . $GLOBALS['TL_LANG']['MSC']['search'] . ':</strong>
<select name="tl_field" class="tl_select' . ($active ? ' active' : '') . '">
<option value="name">' . ($GLOBALS['TL_DCA'][$this->strTable]['fields']['name']['label'][0] ?: (is_array($GLOBALS['TL_LANG']['MSC']['name']) ? $GLOBALS['TL_LANG']['MSC']['name'][0] : $GLOBALS['TL_LANG']['MSC']['name'])) . '</option>
</select>
<span>=</span>
<input type="search" name="tl_value" class="tl_text' . ($active ? ' active' : '') . '" value="' . \StringUtil::specialchars($session['search'][$this->strTable]['value']) . '">
</div>';
}