Last active
August 25, 2021 01:36
-
-
Save cyberlex404/b5ff8cddc742e1e8b5152bee258a7538 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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&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