next-1.0.0-alpha2/modules/next_extras/next_extras.module
modules/next_extras/next_extras.module
<?php
/**
* @file
* Module implementation file.
*/
use Drupal\Core\Entity\EntityInterface;
use Drupal\Core\Entity\EntityTypeInterface;
use Drupal\Core\Field\BaseFieldDefinition;
use Drupal\Core\Field\FieldStorageDefinitionInterface;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Messenger\MessengerInterface;
use Drupal\next\Entity\NextEntityTypeConfigInterface;
/**
* Implements hook_entity_base_field_info().
*/
function next_extras_entity_base_field_info(EntityTypeInterface $entity_type) {
if (\Drupal::moduleHandler()->moduleExists('content_translation')) {
if (in_array($entity_type->id(), ['node'])) {
$fields['content_translations'] = BaseFieldDefinition::create('content_translations')
->setLabel(t('Content Translations'))
->setCardinality(FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED)
->setComputed(TRUE);
return $fields;
}
}
}
/**
* Implements hook_form_alter().
*/
function next_extras_form_next_entity_type_config_edit_form_alter(&$form, FormStateInterface $form_state) {
/** @var \Drupal\next\Entity\NextEntityTypeConfigInterface $entity */
$entity = $form_state->getFormObject()->getEntity();
$form['experimental'] = [
'#type' => 'details',
'#title' => t('Experimental'),
'#group' => 'settings',
];
$form['experimental']['messages'] = [
'#theme' => 'status_messages',
'#message_list' => [
MessengerInterface::TYPE_WARNING => [
t('DEPRECATED: See On-demand Revalidation.'),
],
],
];
$form['experimental']['revalidate'] = [
'#type' => 'checkbox',
'#title' => t('Revalidate'),
'#description' => t('If checked, a request will be made to the Next.js site for revalidation when the entity is updated.'),
'#default_value' => $entity->getThirdPartySetting('next_extras', 'revalidate'),
];
$form['experimental']['revalidate_paths'] = [
'#type' => 'textarea',
'#title' => t('Paths'),
'#description' => t('Additional paths to revalidate on entity update. Enter one path per line. Example %example.', [
'%example' => '/blog',
]),
'#default_value' => $entity->getThirdPartySetting('next_extras', 'revalidate_paths'),
'#states' => [
'visible' => [
':input[name="revalidate"]' => ['checked' => TRUE],
],
],
];
$form['#entity_builders'][] = 'next_extras_form_next_entity_type_config_edit_form_builder';
}
/**
* Callback for entity_builders for next_entity_type_config_edit_form.
*/
function next_extras_form_next_entity_type_config_edit_form_builder($entity_type, NextEntityTypeConfigInterface $entity, &$form, FormStateInterface $form_state) {
$entity->setThirdPartySetting('next_extras', 'revalidate', (bool) $form_state->getValue('revalidate'));
$entity->setThirdPartySetting('next_extras', 'revalidate_paths', $form_state->getValue('revalidate_paths'));
}
/**
* Shutdown callback for invalidating entity cache.
*
* @param \Drupal\Core\Entity\EntityInterface $entity
* The entity to revalidate.
* @param array $paths
* An array of paths to revalidate.
*/
function _next_extras_invalidate_entity_cache(EntityInterface $entity, array $paths) {
@trigger_error(__FUNCTION__ . '() is deprecated in next:1.4.0 and is removed from next:1.5.0. https://www.drupal.org/project/next/releases/1.4.0', E_USER_DEPRECATED);
/** @var \Drupal\next_extras\NextCacheInvalidator $next_cache_invalidator */
$next_cache_invalidator = \Drupal::service('next_extras.cache_invalidator');
$sites = $next_cache_invalidator->getSitesToInvalidate($entity);
if (!$sites) {
return;
}
// We call invalidatePath instead of invalidateEntity because in the shutdown
// entity alias is has already been purged.
foreach ($paths as $path) {
\Drupal::service('next_extras.cache_invalidator')
->invalidatePath($path, $sites);
}
}
