Skip to content

Instantly share code, notes, and snippets.

@cyberlex404
Last active August 25, 2021 01:36
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save cyberlex404/b5ff8cddc742e1e8b5152bee258a7538 to your computer and use it in GitHub Desktop.
Save cyberlex404/b5ff8cddc742e1e8b5152bee258a7538 to your computer and use it in GitHub Desktop.
<?php
/**
* @file
* Contains wa_advice.module.
*/
use Drupal\Core\Routing\RouteMatchInterface;
use Drupal\node\Entity\NodeType;
use Drupal\Core\Form\FormStateInterface;
use Drupal\node\NodeTypeInterface;
use Drupal\Core\Entity\EntityInterface;
use Drupal\Core\Entity\Display\EntityViewDisplayInterface;
/**
* Implements hook_help().
*/
function wa_advice_help($route_name, RouteMatchInterface $route_match) {
switch ($route_name) {
// Main module help for the wa_advice module.
case 'help.page.wa_advice':
$output = '';
$output .= '<h3>' . t('About') . '</h3>';
$output .= '<p>' . t('W&amp;A Advice features') . '</p>';
return $output;
default:
}
}
/**
* Implements hook_theme().
*/
function wa_advice_theme() {
$themes = [];
return $themes;
}
/**
* Implements hook_entity_extra_field_info().
*/
function wa_advice_entity_extra_field_info() {
$extra = [];
$bundles = NodeType::loadMultiple();
$bundles = array_filter($bundles, function(NodeTypeInterface $bundle){
return $bundle->getThirdPartySetting('wa_advice', 'extra_fields_enabled') == 1;
});
foreach ($bundles as $bundle) {
/** @var $bundle NodeTypeInterface */
$extra['node'][$bundle->Id()]['display']['created_date'] = [
'label' => t('Create date'),
'description' => t('@bundle create date', ['@bundle' => $bundle->label()]),
'weight' => 100,
'visible' => TRUE,
];
$extra['node'][$bundle->Id()]['display']['editing_date'] = [
'label' => t('Editing date'),
'description' => t('@bundle edit date', ['@bundle' => $bundle->label()]),
'weight' => 100,
'visible' => TRUE,
];
}
return $extra;
}
/**
* Implements hook_ENTITY_TYPE_view().
*/
function wa_advice_node_view(array &$build, EntityInterface $entity, EntityViewDisplayInterface $display, $view_mode) {
$format = 'created_edited';
/** @var $entity \Drupal\node\NodeInterface */
if ($display->getComponent('created_date')) {
$timestamp = $entity->getCreatedTime();
$build['created_date'] = [
'#type' => 'html_tag',
'#tag' => 'span',
'#value' => \Drupal::service('date.formatter')->format($timestamp, $format),
];
}
if ($display->getComponent('editing_date')) {
$timestamp = $entity->get('changed')->value;
$build['editing_date'] = [
'#type' => 'html_tag',
'#tag' => 'span',
'#value' => \Drupal::service('date.formatter')->format($timestamp, $format),
];
}
}
/**
* Implements hook_form_FORM_ID_alter().
*/
function wa_advice_form_node_type_form_alter(&$form, FormStateInterface $form_state, $form_id) {
$node_type = $form_state->getFormObject()->getEntity();
$form['display']['wa_extra_fields_enabled'] = array(
'#type' => 'checkbox',
'#title' => t('View extra fields'),
'#description' => t('Check this box if you would enabled extra fields.'),
'#default_value' => $node_type->getThirdPartySetting('wa_advice', 'extra_fields_enabled', 0),
);
$form['#entity_builders'][] = 'wa_advice_form_node_type_form_builder';
}
/**
* Entity form builder for the node type form to map some values to third party
* settings
*/
function wa_advice_form_node_type_form_builder($entity_type, NodeTypeInterface $type, &$form, FormStateInterface $form_state) {
if ($form_state->getValue('wa_extra_fields_enabled') === 1) {
$type->setThirdPartySetting('wa_advice', 'extra_fields_enabled', 1);
return;
}
$type->unsetThirdPartySetting('wa_advice', 'extra_fields_enabled');
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment