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);
  }
}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc