bootstrap_components_toolkit-1.0.0/modules/bootstrap_components_toolkit_views_accordion/bootstrap_components_toolkit_views_accordion.module
modules/bootstrap_components_toolkit_views_accordion/bootstrap_components_toolkit_views_accordion.module
<?php
/**
* @file
* Primary module hooks for Boostrap components toolkit module.
*/
use Drupal\Component\Utility\Html;
/**
* Prepares variables for views_style_bct_accordion.html.twig template.
*/
function template_preprocess_views_style_bct_accordion(&$variables) {
$view = $variables['view'];
$variables['id'] = Html::getUniqueId('bct-accordion-' . $view->storage->id() . '-' . $view->current_display . '-' . rand(10, 99));
$variables['options'] = $view->style_plugin->options;
// Set wrapper classes.
if ($view->style_plugin->options['wrapper_class']) {
$wrapper_class = explode(' ', $view->style_plugin->options['wrapper_class']);
$variables['attributes']['class'] = array_map('\Drupal\Component\Utility\Html::cleanCssIdentifier', $wrapper_class);
}
// Group results by field.
$panel_title_field = $view->style_plugin->options['panel_title_field'];
if ($panel_title_field) {
foreach ($variables['rows'] as $id => $row) {
$row_id = Html::cleanCssIdentifier(strtolower(trim(strip_tags($view->style_plugin->getField($id, $panel_title_field)))));
if (!isset($variables['rows'][$row_id])) {
$variables['rows'][$row_id] = [];
$variables['rows'][$row_id]['parent_id'] = $variables['id'];
$variables['rows'][$row_id]['item_id'] = $row_id . '-' . rand(1, 1000);
$variables['rows'][$row_id]['header_tag'] = $variables['options']['header_html_tag'];
$variables['rows'][$row_id]['is_open'] = FALSE;
$variables['rows'][$row_id]['always_open'] = $variables['options']['always_open'];
$variables['rows'][$row_id]['header_text'] = $view->style_plugin->getField($id, $panel_title_field);
}
$variables['rows'][$row_id]['body_content'][$id] = $row;
unset($variables['rows'][$id]);
}
// Set open/close accordion items.
$results = count($variables['rows']);
if ($results > 0 && isset($view->style_plugin->options['collapse']['first']) && $view->style_plugin->options['collapse']['first'] > 0) {
$variables['rows'][array_key_first($variables['rows'])]['is_open'] = TRUE;
}
if ($results > 1 && isset($view->style_plugin->options['collapse']['last']) && $view->style_plugin->options['collapse']['last'] > 0) {
$variables['rows'][array_key_last($variables['rows'])]['is_open'] = TRUE;
}
if ($results > 2 && isset($view->style_plugin->options['collapse']['middle']) && $view->style_plugin->options['collapse']['middle'] > 0) {
$row_keys = array_keys(array_slice($variables['rows'], 1, -1));
foreach ($row_keys as $key) {
$variables['rows'][$key]['is_open'] = TRUE;
}
}
}
}
