ai_content_lifecycle-1.0.0/ai_content_lifecycle.module

ai_content_lifecycle.module
<?php

/**
 * @file
 * Primary module hooks for ai_content_lifecycle module.
 */

use Drupal\Core\Render\Element;
use Drupal\user\UserInterface;

/**
 * Implements hook_theme().
 */
function ai_content_lifecycle_theme(): array {
  return [
    'content_life_cycle' => ['render element' => 'elements'],
    'ai_content_lifecycle_confirmation' => [
      'variables' => ['confirmation' => NULL],
      'template' => 'ai-content-lifecycle-confirmation',
    ],
  ];
}

/**
 * Prepares variables for content life cycle templates.
 *
 * Default template: content-life-cycle.html.twig.
 *
 * @param array $variables
 *   An associative array containing:
 *   - elements: An associative array containing the content life cycle information and any
 *     fields attached to the entity.
 *   - attributes: HTML attributes for the containing element.
 */
function template_preprocess_content_life_cycle(array &$variables): void {
  $variables['view_mode'] = $variables['elements']['#view_mode'];
  foreach (Element::children($variables['elements']) as $key) {
    $variables['content'][$key] = $variables['elements'][$key];
  }
}

/**
 * Implements hook_preprocess_HOOK() for ai_content_lifecycle_confirmation.
 */
function template_preprocess_ai_content_lifecycle_confirmation(array &$variables): void {
  // Add necessary classes for styling.
  if (!isset($variables['attributes'])) {
    $variables['attributes'] = [];
  }
  if (!isset($variables['attributes']['class'])) {
    $variables['attributes']['class'] = [];
  }
  $variables['attributes']['class'][] = 'ai-content-lifecycle-confirmation';

  // Attach the CSS.
  $variables['#attached']['library'][] = 'ai_content_lifecycle/confirmation';
}

/**
 * Implements hook_user_cancel().
 */
function ai_content_lifecycle_user_cancel($edit, UserInterface $account, $method): void {
  switch ($method) {
    case 'user_cancel_reassign':
      // Anonymize content life cycles.
      $storage = \Drupal::entityTypeManager()->getStorage('content_life_cycle');
      $content_life_cycle_ids = $storage->getQuery()
        ->condition('uid', $account->id())
        ->accessCheck(FALSE)
        ->execute();
      foreach ($storage->loadMultiple($content_life_cycle_ids) as $content_life_cycle) {
        $content_life_cycle->setOwnerId(0)->save();
      }
      break;
  }
}

/**
 * Implements hook_ENTITY_TYPE_predelete() for user entities.
 */
function ai_content_lifecycle_user_predelete(UserInterface $account): void {
  // Delete content life cycles that belong to this account.
  $storage = \Drupal::entityTypeManager()->getStorage('content_life_cycle');
  $content_life_cycle_ids = $storage->getQuery()
    ->condition('uid', $account->id())
    ->accessCheck(FALSE)
    ->execute();
  $storage->delete(
    $storage->loadMultiple($content_life_cycle_ids)
  );
  // Delete old revisions.
  $content_life_cycle_ids = $storage->getQuery()
    ->allRevisions()
    ->condition('uid', $account->id())
    ->accessCheck(FALSE)
    ->execute();
  foreach (array_keys($content_life_cycle_ids) as $revision_id) {
    $storage->deleteRevision($revision_id);
  }
}

/**
 * Implements hook_views_data_alter().
 */
function ai_content_lifecycle_views_data_alter(array &$data) {
  // Get the actual table name for the content lifecycle entity
  $entity_type_manager = \Drupal::entityTypeManager();
  $entity_type = $entity_type_manager->getDefinition('content_life_cycle');
  $base_table = $entity_type->getDataTable();

  // Add node relationship
  if (isset($data[$base_table])) {
    $data[$base_table]['node_relationship'] = [
      'title' => t('Node'),
      'help' => t('Relationship to the node this lifecycle belongs to.'),
      'relationship' => [
        'base' => 'node_field_data',
        'base field' => 'nid',
        'field' => 'entity_id',
        'id' => 'standard',
        'label' => t('Node'),
        'extra' => [
          [
            'left_field' => 'entity_type',
            'value' => 'node',
            'operator' => '=',
          ],
        ],
      ],
    ];
  }

  // Add reverse relationships from entities to lifecycle data
  if (isset($data['node_field_data'])) {
    $data['node_field_data']['content_lifecycle'] = [
      'title' => t('Content Lifecycle'),
      'help' => t('Content Lifecycle data for this node.'),
      'relationship' => [
        'base' => $base_table,
        'base field' => 'entity_id',
        'field' => 'nid',
        'id' => 'standard',
        'label' => t('Content Lifecycle'),
        'extra' => [
          [
    // This is a field from the right table (content_life_cycle)
            'field' => 'entity_type',
            'value' => 'node',
            'operator' => '=',
          ],
        ],
      ],
    ];
  }
}

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

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