3
0
Fork 0
mirror of https://github.com/farmOS/farmOS.git synced 2024-02-23 11:37:38 +01:00

Reformat farm_group_views_pre_view() to accommodate more logic.

This commit is contained in:
Michael Stenta 2021-05-27 13:22:35 -04:00
parent 58ced4cdb3
commit d7023002c4

View file

@ -49,49 +49,55 @@ function farm_group_views_data_alter(array &$data) {
*/
function farm_group_views_pre_view(ViewExecutable $view, $display_id, array &$args) {
// Only alter the farm_log page and CSV export views.
if ($view->id() != 'farm_log' || in_array($display_id, ['block_upcoming', 'block_late'])) {
return;
}
// Alter the farm_log View.
if ($view->id() == 'farm_log') {
// Make sure the is_group_assignment field exists.
/** @var \Drupal\Core\Field\BaseFieldDefinition[] $definitions */
$definitions = \Drupal::service('entity_field.manager')->getBaseFieldDefinitions('log');
if (isset($definitions['is_group_assignment'])) {
// Get field name and table name.
$definition = $definitions['is_group_assignment'];
$field_name = $definition->getName();
/** @var \Drupal\Core\Entity\Sql\DefaultTableMapping $table_mapping */
$table_mapping = \Drupal::entityTypeManager()->getStorage('log')->getTableMapping();
$table = $table_mapping->getFieldTableName($definition->getName());
// Define filter options.
$opts = [
'operator' => '=',
'value' => 'All',
'exposed' => TRUE,
'expose' => [
'label' => t('Is group assignment'),
'identifier' => 'is_group_assignment',
],
];
// Add the filter.
$filter_id = $view->addHandler($view->current_display, 'filter', $table, $field_name, $opts);
// Move the is_group_assignment filter to render before the status filter.
$filters = $view->getDisplay()->getOption('filters');
if ($index = array_search('status', array_keys($filters))) {
$filter = $filters[$filter_id];
unset($filters[$filter_id]);
// Use array_merge + array_splice instead of array_splice so we can
// preserve the array keys.
$filters = array_merge(array_slice($filters, 0, $index), [$filter_id => $filter], array_slice($filters, $index));
// Do not alter the upcoming/late block displays.
if (in_array($display_id, ['block_upcoming', 'block_late'])) {
return;
}
// Set the new sorted filters array.
$view->getDisplay()->setOption('filters', $filters);
}
// Make sure the is_group_assignment field exists.
/** @var \Drupal\Core\Field\BaseFieldDefinition[] $definitions */
$definitions = \Drupal::service('entity_field.manager')
->getBaseFieldDefinitions('log');
if (isset($definitions['is_group_assignment'])) {
// Get field name and table name.
$definition = $definitions['is_group_assignment'];
$field_name = $definition->getName();
/** @var \Drupal\Core\Entity\Sql\DefaultTableMapping $table_mapping */
$table_mapping = \Drupal::entityTypeManager()
->getStorage('log')
->getTableMapping();
$table = $table_mapping->getFieldTableName($definition->getName());
// Define filter options.
$opts = [
'operator' => '=',
'value' => 'All',
'exposed' => TRUE,
'expose' => [
'label' => t('Is group assignment'),
'identifier' => 'is_group_assignment',
],
];
// Add the filter.
$filter_id = $view->addHandler($view->current_display, 'filter', $table, $field_name, $opts);
// Move the is_group_assignment filter to render before the status filter.
$filters = $view->getDisplay()->getOption('filters');
if ($index = array_search('status', array_keys($filters))) {
$filter = $filters[$filter_id];
unset($filters[$filter_id]);
// Use array_merge + array_splice instead of array_splice so we can
// preserve the array keys.
$filters = array_merge(array_slice($filters, 0, $index), [$filter_id => $filter], array_slice($filters, $index));
}
// Set the new sorted filters array.
$view->getDisplay()->setOption('filters', $filters);
}
}
}
/**