protected function sortMenu()
{
if ($GLOBALS['TL_DCA'][$this->strTable]['list']['sorting']['mode'] != 2 && $GLOBALS['TL_DCA'][$this->strTable]['list']['sorting']['mode'] != 4) {
return '';
}
$sortingFields = array();
// Get sorting fields
foreach ($GLOBALS['TL_DCA'][$this->strTable]['fields'] as $k => $v) {
if ($v['sorting']) {
$sortingFields[] = $k;
}
}
// Return if there are no sorting fields
if (empty($sortingFields)) {
return '';
}
/** @var AttributeBagInterface $objSessionBag */
$objSessionBag = \System::getContainer()->get('session')->getBag('contao_backend');
$this->bid = 'tl_buttons_a';
$session = $objSessionBag->all();
$orderBy = $GLOBALS['TL_DCA'][$this->strTable]['list']['sorting']['fields'];
$firstOrderBy = preg_replace('/\\s+.*$/', '', $orderBy[0]);
// Add PID to order fields
if ($GLOBALS['TL_DCA'][$this->strTable]['list']['sorting']['mode'] == 3 && $this->Database->fieldExists('pid', $this->strTable)) {
array_unshift($orderBy, 'pid');
}
// Set sorting from user input
if (\Input::post('FORM_SUBMIT') == 'tl_filters') {
$strSort = \Input::post('tl_sort');
// Validate the user input (thanks to aulmn) (see #4971)
if (in_array($strSort, $sortingFields)) {
$session['sorting'][$this->strTable] = in_array($GLOBALS['TL_DCA'][$this->strTable]['fields'][$strSort]['flag'], array(2, 4, 6, 8, 10, 12)) ? "{$strSort} DESC" : $strSort;
$objSessionBag->replace($session);
}
} elseif (strlen($session['sorting'][$this->strTable])) {
$overwrite = preg_quote(preg_replace('/\\s+.*$/', '', $session['sorting'][$this->strTable]), '/');
$orderBy = array_diff($orderBy, preg_grep('/^' . $overwrite . '/i', $orderBy));
array_unshift($orderBy, $session['sorting'][$this->strTable]);
$this->firstOrderBy = $overwrite;
$this->orderBy = $orderBy;
}
$options_sorter = array();
// Sorting fields
foreach ($sortingFields as $field) {
$options_label = strlen($lbl = 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']) ? $lbl : $GLOBALS['TL_LANG']['MSC'][$field];
if (is_array($options_label)) {
$options_label = $options_label[0];
}
$options_sorter[$options_label] = ' <option value="' . \StringUtil::specialchars($field) . '"' . (!strlen($session['sorting'][$this->strTable]) && $field == $firstOrderBy || $field == str_replace(' DESC', '', $session['sorting'][$this->strTable]) ? ' selected="selected"' : '') . '>' . $options_label . '</option>';
}
// Sort by option values
uksort($options_sorter, 'strcasecmp');
return '
<div class="tl_sorting tl_subpanel">
<strong>' . $GLOBALS['TL_LANG']['MSC']['sortBy'] . ':</strong>
<select name="tl_sort" id="tl_sort" class="tl_select">
' . implode("\n", $options_sorter) . '
</select>
</div>';
}