contacts-8.x-1.x-dev/modules/dbs/contacts_dbs.module

modules/dbs/contacts_dbs.module
<?php

/**
 * @file
 * Module related hook implementations for the contacts_dbs module.
 */

use Drupal\Core\Database\Query\SelectInterface;
use Drupal\Core\Datetime\DrupalDateTime;
use Drupal\Core\Entity\EntityInterface;
use Drupal\Core\Site\Settings;
use Drupal\Core\StringTranslation\TranslatableMarkup;
use Drupal\contacts_dbs\Entity\DBSStatus;
use Drupal\contacts_dbs\Entity\DBSStatusInterface;

/**
 * Implements hook_query_TAG_alter() for dbs_status_active.
 *
 * All DBS active queries by default should exclude the archived status items.
 */
function contacts_dbs_query_dbs_status_active_alter(SelectInterface $query) {
  $query->condition('dbs_status_field_data.archived', FALSE);
}

/**
 * Implements hook_cron().
 *
 * Archive all expired dbs status items.
 *
 * @todo Implement a throttled cron helper to avoid this constant pattern.
 */
function contacts_dbs_cron() {
  // Check that its been a day since last run.
  $cron_last_run = \Drupal::state()->get('contacts_dbs.cron_last_run');
  $now = \Drupal::time()->getRequestTime();

  if ($cron_last_run <= $now - 86400) {
    $expiry = DrupalDateTime::createFromTimestamp($now);
    // Get all expired status items.
    $ids = \Drupal::entityQuery('dbs_status')
      ->accessCheck(FALSE)
      ->condition('expiry', $expiry->format(DBSStatusInterface::DATE_FORMAT), '<')
      ->condition('status', DBSStatus::getClearedStatuses(), 'IN')
      ->sort('expiry', 'ASC')
      ->sort('id', 'DESC')
      ->execute();

    if (!empty($ids)) {
      /** @var \Drupal\Core\Queue\QueueInterface $queue */
      $queue = \Drupal::service('queue')->get('contacts_dbs_archive');

      // Dont attempt to do too many items at once.
      $batch_size = Settings::get('entity_update_batch_size', 50);
      foreach (array_chunk($ids, $batch_size) as $queue_set) {
        $queue->createItem($queue_set);
      }
    }

    \Drupal::state()->set('contacts_dbs.cron_last_run', $now);
  }
}

/**
 * Implements hook_entity_operation().
 */
function contacts_dbs_entity_operation(EntityInterface $entity) {
  $operations = [];

  /** @var \Drupal\contacts_dbs\Entity\DBSStatus $entity */
  // @todo There is no specific archive access check, everything is checked
  // against the entity admin permission.
  if ($entity instanceof DBSStatus && $entity->access('archive')) {
    $operations['archive'] = [
      'title' => new TranslatableMarkup('Archive'),
      'weight' => 100,
      'url' => $entity->toUrl('archive-form'),
    ];
  }

  return $operations;
}

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

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