flexible_views-2.0.1/flexible_views.module
flexible_views.module
<?php
/**
* @file
* Contains flexible_views.module.
*/
use Drupal\Core\Routing\RouteMatchInterface;
use Drupal\views\Views;
use Drupal\Core\Url;
/**
* Implements hook_help().
*/
function flexible_views_help($route_name, RouteMatchInterface $route_match) {
switch ($route_name) {
// Main module help for the flexible_views module.
case 'help.page.flexible_views':
$output = '';
$output .= '<h3>' . t('About') . '</h3>';
$output .= '<p>' . t('Adds better usability and some improvements to Core Views module.') . '</p>';
return $output;
default:
}
}
/**
* Implements hook_theme().
*/
function flexible_views_theme() {
return [
'flexible_views_style_plugin_flexible_table' => [
'render element' => 'form',
'file' => 'flexible_views.theme.inc',
],
'views_view_flexible_table' => [
'render element' => 'form',
'file' => 'flexible_views.theme.inc',
],
];
}
/**
* Implements template_preprocess_pager().
*
* @todo This was updated in core.
*/
function flexible_views_preprocess_pager(&$variables) {
$element = $variables['pager']['#element'];
$parameters = $variables['pager']['#parameters'];
$quantity = empty($variables['pager']['#quantity']) ? 0 : $variables['pager']['#quantity'];
$route_name = $variables['pager']['#route_name'];
$route_parameters = $variables['pager']['#route_parameters'] ?? [];
/** @var \Drupal\Core\Pager\PagerManagerInterface $pager_manager */
$pager_manager = \Drupal::service('pager.manager');
$pager = $pager_manager->getPager($element);
// Get the current view.
$route = \Drupal::routeMatch()->getRouteObject();
flexible_views_alter_pager_parameters($route, $parameters);
if (isset($variables['items']['first'])) {
$options = [
'query' => $pager_manager->getUpdatedParameters($parameters, $element, 0),
];
$variables['items']['first']['href'] = Url::fromRoute($route_name, $route_parameters, $options)->toString();
}
if (isset($variables['items']['previous'])) {
$current_page = $pager->getCurrentPage();
$options = [
'query' => $pager_manager->getUpdatedParameters($parameters, $element, $current_page - 1),
];
$variables['items']['previous']['href'] = Url::fromRoute($route_name, $route_parameters, $options)->toString();
}
if (isset($variables["items"]["pages"])) {
foreach ($variables["items"]["pages"] as $key => &$page) {
$options = [
'query' => $pager_manager->getUpdatedParameters($parameters, $element, $key - 1),
];
$page['href'] = Url::fromRoute($route_name, $route_parameters, $options)->toString();
}
}
if (isset($variables['items']['next'])) {
$current_page = $pager->getCurrentPage();
$options = [
'query' => $pager_manager->getUpdatedParameters($parameters, $element, $current_page + 1),
];
$variables['items']['next']['href'] = Url::fromRoute($route_name, $route_parameters, $options)->toString();
}
if (isset($variables['items']['last'])) {
$pager_max = $pager->getTotalPages();
$options = [
'query' => $pager_manager->getUpdatedParameters($parameters, $element, $pager_max - 1),
];
$variables['items']['last']['href'] = Url::fromRoute($route_name, $route_parameters, $options)->toString();
}
}
/**
* Implements template_preprocess_views_mini_pager().
*/
function flexible_views_preprocess_views_mini_pager(&$variables) {
/** @var \Drupal\Core\Pager\PagerManagerInterface $pager_manager */
$pager_manager = \Drupal::service('pager.manager');
$element = $variables['element'];
$parameters = $variables['parameters'];
$pager = $pager_manager->getPager($element);
// Get the current view.
$route = \Drupal::routeMatch()->getRouteObject();
flexible_views_alter_pager_parameters($route, $parameters);
if (isset($variables['items']['previous'])) {
$current = $pager->getCurrentPage();
$options = [
'query' => $pager_manager->getUpdatedParameters($parameters, $element, $current - 1),
];
$variables['items']['previous']['href'] = Url::fromRoute('<current>', [], $options)->toString();
}
if (isset($variables['items']['next'])) {
$current = $pager->getCurrentPage();
$options = [
'query' => $pager_manager->getUpdatedParameters($parameters, $element, $current + 1),
];
$variables['items']['next']['href'] = Url::fromRoute('<current>', [], $options)->toString();
}
}
/**
* Alter views mini pager.
*/
function flexible_views_alter_pager_parameters($route, &$parameters) {
if ($route) {
// Get view id and display id from route.
$view_id = $route->getDefault('view_id');
$display_id = $route->getDefault('display_id');
if (!empty($view_id) && !empty($display_id)) {
// Get the view by id.
$view = Views::getView($view_id);
$view->initHandlers();
// Normally, all exposed filters are included in the parameters, so they
// are included in the pager links as parameters. We only want this ones
// to be active, which we have enables via the manual_selection exposed
// filter plugin.
if (isset($view->display_handler->options["exposed_form"]["type"]) && $view->display_handler->options["exposed_form"]["type"] === 'manual_selection') {
$view_exposed_input = $view->getExposedInput();
if (!empty($view_exposed_input)) {
$new_parameters = [];
foreach ($parameters as $parameter => $value) {
if (array_key_exists($parameter, $view_exposed_input)) {
$new_parameters[$parameter] = $value;
}
}
$parameters = $new_parameters;
}
else {
$parameters = [];
}
}
}
}
}
