crossword-8.x-1.x-dev/modules/crossword_pseudofields/crossword_pseudofields.module
modules/crossword_pseudofields/crossword_pseudofields.module
<?php
/**
* @file
* Hooks for crossword pseudofields.
*/
use Drupal\Core\Entity\Display\EntityViewDisplayInterface;
use Drupal\node\Entity\NodeType;
use Drupal\node\NodeInterface;
/**
* Implements hook_entity_extra_field_info().
*/
function crossword_pseudofields_entity_extra_field_info() {
$extra = [];
$pseudo_keys = [
'title' => 'Title',
'author' => 'Author',
'notepad' => 'Notepad',
'controls' => 'Controls',
'active_clue' => 'Active Clue',
'grid' => 'Grid',
'across' => 'Clues Across',
'down' => 'Clues Down',
'playable' => 'Make it Playable/Interactive',
];
$entityFieldManager = \Drupal::service('entity_field.manager');
foreach (NodeType::loadMultiple() as $bundle) {
$fields = $entityFieldManager->getFieldDefinitions('node', $bundle->id());
foreach ($fields as $field) {
if ($field->getType() == 'crossword') {
foreach ($pseudo_keys as $key => $label) {
$extra['node'][$bundle->id()]['display']["crossword_$key"] = [
'label' => "{$field->getLabel()}: $label",
'visible' => FALSE,
];
}
break;
}
}
}
return $extra;
}
/**
* Implements hook_entity_view_alter().
*/
function crossword_pseudofields_node_view_alter(array &$build, NodeInterface $entity, EntityViewDisplayInterface $display) {
$entityFieldManager = \Drupal::service('entity_field.manager');
$fields = $entityFieldManager->getFieldDefinitions($entity->getEntityTypeId(), $entity->bundle());
foreach ($fields as $field_machine_name => $field) {
if ($field->getType() == 'crossword') {
$pseudo_keys = [
'title' => 'Title',
'author' => 'Author',
'notepad' => 'Notepad',
'controls' => 'Controls',
'active_clue' => 'Active Clue',
'grid' => 'Grid',
'across' => 'Clues Across',
'down' => 'Clues Down',
'playable' => 'Make it Playable',
];
$config = \Drupal::config('crossword_pseudofields.settings');
$settings = $config->get();
$render = $entity->{$field_machine_name}->view([
'type' => 'crossword_pseudofields',
'label' => 'hidden',
'settings' => $settings,
]);
foreach ($pseudo_keys as $key => $label) {
if ($component = $display->getComponent("crossword_$key")) {
$build["crossword_$key"] = $render[$key];
$build["crossword_$key"]['#weight'] = $component['weight'] ?? 0;
$build["crossword_$key"]['#cache']['tags'] = array_merge($build["crossword_$key"]['#cache']['tags'] ?? [], $config->getCacheTags());
}
}
break;
}
}
}
