* @param array $apiParams
*/
protected function augmentSelectClause(&$apiParams): void {
+ $existing = array_map(function($item) {
+ return explode(' AS ', $item)[1] ?? $item;
+ }, $apiParams['select']);
$additions = [];
// Add primary key field if actions are enabled
if (!empty($this->display['settings']['actions'])) {
}
// Select value fields for in-place editing
- if (isset($column['editable']['value']) && !in_array($column['editable']['value'], $apiParams['select'])) {
- $apiParams['select'][] = $column['editable']['value'];
+ if (isset($column['editable']['value'])) {
+ $additions[] = $column['editable']['value'];
}
}
// Add fields referenced via token
$tokens = [];
preg_match_all('/\\[([^]]+)\\]/', $possibleTokens, $tokens);
- $apiParams['select'] = array_unique(array_merge($apiParams['select'], $additions, $tokens[1]));
+ // Only add fields not already in SELECT clause
+ $additions = array_diff(array_merge($additions, $tokens[1]), $existing);
+ $apiParams['select'] = array_unique(array_merge($apiParams['select'], $additions));
}
/**
'api_params',
'created_date',
'modified_date',
+ 'DATE(created_date) AS date_created',
+ 'DATE(modified_date) AS date_modified',
'GROUP_CONCAT(display.name ORDER BY display.id) AS display_name',
'GROUP_CONCAT(display.label ORDER BY display.id) AS display_label',
'GROUP_CONCAT(display.type:icon ORDER BY display.id) AS display_icon',
}),
searchMeta.fieldToColumn('created_date', {
label: ts('Created'),
- dataType: 'Date',
- rewrite: ts('%1 by %2', {1: '[created_date]', 2: '[created_id.display_name]'})
+ title: '[created_date]',
+ rewrite: ts('%1 by %2', {1: '[date_created]', 2: '[created_id.display_name]'})
}),
searchMeta.fieldToColumn('modified_date', {
label: ts('Last Modified'),
- dataType: 'Date',
- rewrite: ts('%1 by %2', {1: '[modified_date]', 2: '[modified_id.display_name]'})
+ title: '[modified_date]',
+ rewrite: ts('%1 by %2', {1: '[date_modified]', 2: '[modified_id.display_name]'})
}),
{
type: 'include',