core-bundle/src/Resources/contao/drivers/DC_Table.php
protected function searchMenu()
	{
		$searchFields = array();

		/** @var AttributeBagInterface $objSessionBag */
		$objSessionBag = System::getContainer()->get('session')->getBag('contao_backend');

		$session = $objSessionBag->all();

		// Get search fields
		foreach ($GLOBALS['TL_DCA'][$this->strTable]['fields'] as $k=>$v)
		{
			if ($v['search'])
			{
				$searchFields[] = $k;
			}
		}

		// Return if there are no search fields
		if (empty($searchFields))
		{
			return '';
		}

		// 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'), '*');

			if ($strField && !\in_array($strField, $searchFields, true))
			{
				$strField = '';
				$strKeyword = '';
			}

			// Make sure the regular expression is valid
			if ($strField && $strKeyword)
			{
				try
				{
					$this->Database->prepare("SELECT * FROM " . $this->strTable . " WHERE " . Database::quoteIdentifier($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);
		}

		// Set the search value from the session
		elseif ($session['search'][$this->strTable]['value'] != '')
		{
			$strPattern = "CAST(%s AS CHAR) REGEXP ?";

			if (substr(Config::get('dbCollation'), -3) == '_ci')
			{
				$strPattern = "LOWER(CAST(%s AS CHAR)) REGEXP LOWER(?)";
			}

			$fld = $session['search'][$this->strTable]['field'];

			if (isset($GLOBALS['TL_DCA'][$this->strTable]['fields'][$fld]['foreignKey']))
			{
				list($t, $f) = explode('.', $GLOBALS['TL_DCA'][$this->strTable]['fields'][$fld]['foreignKey'], 2);
				$this->procedure[] = "(" . sprintf($strPattern, Database::quoteIdentifier($fld)) . " OR " . sprintf($strPattern, "(SELECT " . Database::quoteIdentifier($f) . " FROM $t WHERE $t.id=" . $this->strTable . "." . Database::quoteIdentifier($fld) . ")") . ")";
				$this->values[] = $session['search'][$this->strTable]['value'];
			}
			else
			{
				$this->procedure[] = sprintf($strPattern, Database::quoteIdentifier($fld));
			}

			$this->values[] = $session['search'][$this->strTable]['value'];
		}

		$options_sorter = array();

		foreach ($searchFields as $field)
		{
			$option_label = $field;

			if (isset($GLOBALS['TL_DCA'][$this->strTable]['fields'][$field]['label']))
			{
				$option_label = \is_array($GLOBALS['TL_DCA'][$this->strTable]['fields'][$field]['label']) ? $GLOBALS['TL_DCA'][$this->strTable]['fields'][$field]['label'][0] : $GLOBALS['TL_DCA'][$this->strTable]['fields'][$field]['label'];
			}
			elseif (isset($GLOBALS['TL_LANG']['MSC'][$field]))
			{
				$option_label = \is_array($GLOBALS['TL_LANG']['MSC'][$field]) ? $GLOBALS['TL_LANG']['MSC'][$field][0] : $GLOBALS['TL_LANG']['MSC'][$field];
			}

			$options_sorter[Utf8::toAscii($option_label).'_'.$field] = '  <option value="'.StringUtil::specialchars($field).'"'.(($field == $session['search'][$this->strTable]['field']) ? ' selected="selected"' : '').'>'.$option_label.'</option>';
		}

		// Sort by option values
		$options_sorter = natcaseksort($options_sorter);
		$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' : '') . '">
'.implode("\n", $options_sorter).'
</select>
<span>=</span>
<input type="search" name="tl_value" class="tl_text' . ($active ? ' active' : '') . '" value="'.StringUtil::specialchars($session['search'][$this->strTable]['value']).'">
</div>';
	}
protected function searchMenu()
	{
		$searchFields = array();

		/** @var AttributeBagInterface $objSessionBag */
		$objSessionBag = System::getContainer()->get('session')->getBag('contao_backend');

		$session = $objSessionBag->all();

		// Get search fields
		foreach ($GLOBALS['TL_DCA'][$this->strTable]['fields'] as $k=>$v)
		{
			if ($v['search'])
			{
				$searchFields[] = $k;
			}
		}

		// Return if there are no search fields
		if (empty($searchFields))
		{
			return '';
		}

		// 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'), '*');

			if ($strField && !\in_array($strField, $searchFields, true))
			{
				$strField = '';
				$strKeyword = '';
			}

			// Make sure the regular expression is valid
			if ($strField && $strKeyword)
			{
				try
				{
					$this->Database->prepare("SELECT * FROM " . $this->strTable . " WHERE " . Database::quoteIdentifier($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);
		}

		// Set the search value from the session
		elseif ($session['search'][$this->strTable]['value'] != '')
		{
			$strPattern = "CAST(%s AS CHAR) REGEXP ?";

			if (substr(Config::get('dbCollation'), -3) == '_ci')
			{
				$strPattern = "LOWER(CAST(%s AS CHAR)) REGEXP LOWER(?)";
			}

			$fld = $session['search'][$this->strTable]['field'];

			if (isset($GLOBALS['TL_DCA'][$this->strTable]['fields'][$fld]['foreignKey']))
			{
				list($t, $f) = explode('.', $GLOBALS['TL_DCA'][$this->strTable]['fields'][$fld]['foreignKey'], 2);
				$this->procedure[] = "(" . sprintf($strPattern, Database::quoteIdentifier($fld)) . " OR " . sprintf($strPattern, "(SELECT " . Database::quoteIdentifier($f) . " FROM $t WHERE $t.id=" . $this->strTable . "." . Database::quoteIdentifier($fld) . ")") . ")";
				$this->values[] = $session['search'][$this->strTable]['value'];
			}
			else
			{
				$this->procedure[] = sprintf($strPattern, Database::quoteIdentifier($fld));
			}

			$this->values[] = $session['search'][$this->strTable]['value'];
		}

		$options_sorter = array();

		foreach ($searchFields as $field)
		{
			$option_label = $field;

			if (isset($GLOBALS['TL_DCA'][$this->strTable]['fields'][$field]['label']))
			{
				$option_label = \is_array($GLOBALS['TL_DCA'][$this->strTable]['fields'][$field]['label']) ? $GLOBALS['TL_DCA'][$this->strTable]['fields'][$field]['label'][0] : $GLOBALS['TL_DCA'][$this->strTable]['fields'][$field]['label'];
			}
			elseif (isset($GLOBALS['TL_LANG']['MSC'][$field]))
			{
				$option_label = \is_array($GLOBALS['TL_LANG']['MSC'][$field]) ? $GLOBALS['TL_LANG']['MSC'][$field][0] : $GLOBALS['TL_LANG']['MSC'][$field];
			}

			$options_sorter[Utf8::toAscii($option_label).'_'.$field] = '  <option value="'.StringUtil::specialchars($field).'"'.(($field == $session['search'][$this->strTable]['field']) ? ' selected="selected"' : '').'>'.$option_label.'</option>';
		}

		// Sort by option values
		$options_sorter = natcaseksort($options_sorter);
		$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' : '') . '">
'.implode("\n", $options_sorter).'
</select>
<span>=</span>
<input type="search" name="tl_value" class="tl_text' . ($active ? ' active' : '') . '" value="'.StringUtil::specialchars($session['search'][$this->strTable]['value']).'">
</div>';
	}
protected function searchMenu ( ) { $ searchFields = array ( ) ; /** @var AttributeBagInterface $objSessionBag */ $ objSessionBag = System :: getContainer ( ) -> get ( 'session' ) -> getBag ( 'contao_backend' ) ; $ session = $ objSessionBag -> all ( ) ; // Get search fields foreach ( $ GLOBALS [ 'TL_DCA' ] [ $ this -> strTable ] [ 'fields' ] as $ k => $ v ) { if ( $ v [ 'search' ] ) { $ searchFields [ ] = $ k ; } } // Return if there are no search fields if ( empty ( $ searchFields ) ) { return '' ; } // 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' ) , '*' ) ; if ( $ strField && ! \ in_array ( $ strField , $ searchFields , true ) ) { $ strField = '' ; $ strKeyword = '' ; } // Make sure the regular expression is valid if ( $ strField && $ strKeyword ) { try { $ this -> Database -> prepare ( "SELECT * FROM " . $ this -> strTable . " WHERE " . Database :: quoteIdentifier ( $ 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 ) ; } // Set the search value from the session elseif ( $ session [ 'search' ] [ $ this -> strTable ] [ 'value' ] != '' ) { $ strPattern = "CAST(%s AS CHAR) REGEXP ?" ; if ( substr ( Config :: get ( 'dbCollation' ) , - 3 ) == '_ci' ) { $ strPattern = "LOWER(CAST(%s AS CHAR)) REGEXP LOWER(?)" ; } $ fld = $ session [ 'search' ] [ $ this -> strTable ] [ 'field' ] ; if ( isset ( $ GLOBALS [ 'TL_DCA' ] [ $ this -> strTable ] [ 'fields' ] [ $ fld ] [ 'foreignKey' ] ) ) { list ( $ t , $ f ) = explode ( '.' , $ GLOBALS [ 'TL_DCA' ] [ $ this -> strTable ] [ 'fields' ] [ $ fld ] [ 'foreignKey' ] , 2 ) ; $ this -> procedure [ ] = "(" . sprintf ( $ strPattern , Database :: quoteIdentifier ( $ fld ) ) . " OR " . sprintf ( $ strPattern , "(SELECT " . Database :: quoteIdentifier ( $ f ) . " FROM $t WHERE $t.id=" . $ this -> strTable . "." . Database :: quoteIdentifier ( $ fld ) . ")" ) . ")" ; $ this -> values [ ] = $ session [ 'search' ] [ $ this -> strTable ] [ 'value' ] ; } else { $ this -> procedure [ ] = sprintf ( $ strPattern , Database :: quoteIdentifier ( $ fld ) ) ; } $ this -> values [ ] = $ session [ 'search' ] [ $ this -> strTable ] [ 'value' ] ; } $ options_sorter = array ( ) ; foreach ( $ searchFields as $ field ) { $ option_label = $ field ; if ( isset ( $ GLOBALS [ 'TL_DCA' ] [ $ this -> strTable ] [ 'fields' ] [ $ field ] [ 'label' ] ) ) { $ option_label = \ is_array ( $ GLOBALS [ 'TL_DCA' ] [ $ this -> strTable ] [ 'fields' ] [ $ field ] [ 'label' ] ) ? $ GLOBALS [ 'TL_DCA' ] [ $ this -> strTable ] [ 'fields' ] [ $ field ] [ 'label' ] [ 0 ] : $ GLOBALS [ 'TL_DCA' ] [ $ this -> strTable ] [ 'fields' ] [ $ field ] [ 'label' ] ; } elseif ( isset ( $ GLOBALS [ 'TL_LANG' ] [ 'MSC' ] [ $ field ] ) ) { $ option_label = \ is_array ( $ GLOBALS [ 'TL_LANG' ] [ 'MSC' ] [ $ field ] ) ? $ GLOBALS [ 'TL_LANG' ] [ 'MSC' ] [ $ field ] [ 0 ] : $ GLOBALS [ 'TL_LANG' ] [ 'MSC' ] [ $ field ] ; } $ options_sorter [ Utf8 :: toAscii ( $ option_label ) . '_' . $ field ] = '  <option value="' . StringUtil :: specialchars ( $ field ) . '"' . ( ( $ field == $ session [ 'search' ] [ $ this -> strTable ] [ 'field' ] ) ? ' selected="selected"' : '' ) . '>' . $ option_label . '</option>' ; } // Sort by option values $ options_sorter = natcaseksort ( $ options_sorter ) ; $ 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' : '' ) . '">
' . implode ( "\n" , $ options_sorter ) . '
</select>
<span>=</span>
<input type="search" name="tl_value" class="tl_text' . ( $ active ? ' active' : '' ) . '" value="' . StringUtil :: specialchars ( $ session [ 'search' ] [ $ this -> strTable ] [ 'value' ] ) . '">
</div>' ; }
Return a search form that allows to search results using regular expressions

@return string
Return a search form that allows to search results using regular expressions