degov-8.x-2.0/modules/degov_paragraph_slideshow/degov_paragraph_slideshow.module
modules/degov_paragraph_slideshow/degov_paragraph_slideshow.module
<?php
use Drupal\degov_common\Common;
use Drupal\Core\Url;
/**
* Implements hook_preprocess().
*/
function degov_paragraph_slideshow_preprocess(&$variables, $hook, &$info) {
// Add template suggestions and libraries implemented in this module.
Common::addThemeSuggestions($variables, $hook, $info, [
'module_name' => 'degov_paragraph_slideshow',
'entity_type' => 'paragraph',
'entity_bundles' => ['slide', 'slideshow'],
'entity_view_modes' => ['preview'],
]);
}
/**
* Implements hook_preprocess_paragraph().
*/
function degov_paragraph_slideshow_preprocess_paragraph(&$variables) {
$paragraph = $variables['paragraph'];
// Add variables to the slideshow template file.
if (_getSourceType($paragraph) == 'slideshow') {
// Add the variable slideshow_type.
$variables['slideshow_type'] = $paragraph->field_slideshow_type->value;
$moduleHandler = \Drupal::service('module_handler');
// Loop each paragraph in the slideshow field to propagate referenced slides.
if ($moduleHandler->moduleExists('degov_paragraph_node_reference') || $moduleHandler->moduleExists('degov_paragraph_view_reference')) {
$propagated_slides = [];
$paragraph_slides = $paragraph->field_slideshow_slides->referencedEntities();
foreach ($paragraph_slides as $i => $paragraph_slide) {
if ($paragraph_slide->hasField('field_node_reference_nodes')) {
// Every node reference should be included as a single slide.
foreach ($paragraph_slide->field_node_reference_nodes->referencedEntities() as $node) {
$view_builder = \Drupal::entityManager()->getViewBuilder('node');
$propagated_slides[] = $view_builder->view($node, 'slideshow');
}
}
elseif ($paragraph_slide->hasField('field_view_reference_view')) {
// Every node in a view reference should be included as a single slide.
$result = views_get_view_result($paragraph_slide->field_view_reference_view->target_id, $paragraph_slide->field_view_reference_view->display_id);
foreach ($result as $row) {
$view_builder = \Drupal::entityManager()->getViewBuilder('node');
$propagated_slides[] = $view_builder->view($row->_entity, 'slideshow');
}
}
else {
// Normal paragraph slides will be included back in the slideshow.
$propagated_slides[] = $variables['content']['field_slideshow_slides'][$i];
}
// Unset each slide, as last step will propagate all slides again.
unset($variables['content']['field_slideshow_slides'][$i]);
}
$variables['content']['field_slideshow_slides'] += $propagated_slides;
}
}
// Add variables to the slideshow template file.
if (_getSourceType($paragraph) == 'slide') {
// Add the variable slide_link.
$variables['slide_link'] = FALSE;
if ($paragraph->field_slide_link->uri) {
$url = Url::fromUri($paragraph->field_slide_link->uri);
//var_dump($url);
$variables['slide_link'] = $url;
}
}
}
function _getSourceType($paragraph) {
$methods = get_class_methods(get_class($paragraph));
if(in_array('getSource',$methods)) {
return $paragraph->getSource();
}
else {
return $paragraph->getType();
}
}
