Commit ba8d0c05 authored by Lola Slade's avatar Lola Slade Committed by Pawel Ginalski
Browse files

Issue #3118519 by lolcode, Spokje, gbyte, Diego_Mow, AndyF: Move search engine...

Issue #3118519 by lolcode, Spokje, gbyte, Diego_Mow, AndyF: Move search engine last submitted timestamp away from configuration
parent 98137dec
Loading
Loading
Loading
Loading
+0 −3
Original line number Diff line number Diff line
@@ -17,9 +17,6 @@ simple_sitemap_engines.simple_sitemap_engine.*:
      sequence:
        type: string
        label: 'Sitemap variant'
    last_submitted:
      type: integer
      label: 'Last submitted'

simple_sitemap_engines.settings:
  type: config_object
+28 −1
Original line number Diff line number Diff line
@@ -9,5 +9,32 @@
 * Implements hook_uninstall().
 */
function simple_sitemap_engines_uninstall() {
  \Drupal::service('state')->delete('simple_sitemap_engines_last_submitted');
  $state = \Drupal::service('state');
  $state->delete('simple_sitemap_engines_last_submitted');

  $engines = \Drupal::entityTypeManager()
    ->getStorage('simple_sitemap_engine')
    ->loadMultiple();
  foreach ($engines as $engine_id => $engine) {
    $state->delete("simple_sitemap_engines.simple_sitemap_engine.{$engine_id}.last_submitted");
  }
}

/**
 * Moving last_submitted data from configuration to state.
 */
function simple_sitemap_engines_update_8301() {
  $engines = \Drupal::entityTypeManager()
    ->getStorage('simple_sitemap_engine')
    ->loadMultiple();
  foreach ($engines as $engine_id => $engine) {
    $config = \Drupal::configFactory()
      ->getEditable("simple_sitemap_engines.simple_sitemap_engine.$engine_id");
    $last_submitted = $config->get('last_submitted');
    $config->clear('last_submitted')->save();
    if ($last_submitted !== NULL) {
      \Drupal::state()->set("simple_sitemap_engines.simple_sitemap_engine.{$engine_id}.last_submitted",
        $last_submitted);
    }
  }
}
+6 −12
Original line number Diff line number Diff line
@@ -14,28 +14,22 @@
 * @see Drupal\simple_sitemap_engines\Plugin\QueueWorker\SitemapSubmitter
 */
function simple_sitemap_engines_cron() {

  /** @var \Drupal\Core\Config\Config $config */
  $config = \Drupal::config('simple_sitemap_engines.settings');

  if ($config->get('enabled')) {
    $interval = (int) $config->get('submission_interval') * 60 * 60;
    $request_time = \Drupal::service('datetime.time')->getRequestTime();
    $state = \Drupal::state();

    if ($interval === 0
      || $state->get('simple_sitemap_engines_last_submitted', 0) + $interval <= $request_time) {

      /** @var \Drupal\Core\Queue\QueueInterface $queue */
      $queue = \Drupal::queue('simple_sitemap_engine_submit');

      $state->set('simple_sitemap_engines_last_submitted', $request_time);
    foreach (\Drupal::entityTypeManager()
      ->getStorage('simple_sitemap_engine')
      ->loadMultiple() as $id => $engine) {
        if (!empty($engine->sitemap_variants)) {
          $queue->createItem($id);
      $last_submitted = \Drupal::state()->get("simple_sitemap_engines.simple_sitemap_engine.{$id}.last_submitted", -1);
      if ($last_submitted !== -1
        && $last_submitted + $interval > $request_time) {
        continue;
      }
      if (!empty($engine->sitemap_variants)) {
        \Drupal::queue('simple_sitemap_engine_submit')->createItem($id);
      }
    }
  }
+25 −6
Original line number Diff line number Diff line
@@ -7,6 +7,7 @@ use Drupal\Core\Datetime\DateFormatterInterface;
use Drupal\Core\Entity\EntityInterface;
use Drupal\Core\Entity\EntityStorageInterface;
use Drupal\Core\Entity\EntityTypeInterface;
use Drupal\Core\State\StateInterface;
use Drupal\simple_sitemap\Form\FormHelper;
use Symfony\Component\DependencyInjection\ContainerInterface;

@@ -22,6 +23,11 @@ class SearchEngineListBuilder extends ConfigEntityListBuilder {
   */
  protected $dateFormatter;

  /**
   * @var \Drupal\Core\State\StateInterface
   */
  protected $state;

  /**
   * SearchEngineListBuilder constructor.
   *
@@ -31,10 +37,16 @@ class SearchEngineListBuilder extends ConfigEntityListBuilder {
   *   The entity storage class.
   * @param \Drupal\Core\Datetime\DateFormatterInterface $date_formatter
   *   The date formatter service.
   * @param \Drupal\Core\State\StateInterface $state
   *   The state service.
   */
  public function __construct(EntityTypeInterface $entity_type, EntityStorageInterface $storage, DateFormatterInterface $date_formatter) {
  public function __construct(EntityTypeInterface $entity_type,
                              EntityStorageInterface $storage,
                              DateFormatterInterface $date_formatter,
                              StateInterface $state) {
    parent::__construct($entity_type, $storage);
    $this->dateFormatter = $date_formatter;
    $this->state = $state;
  }

  /**
@@ -44,7 +56,8 @@ class SearchEngineListBuilder extends ConfigEntityListBuilder {
    return new static(
      $entity_type,
      $container->get('entity_type.manager')->getStorage($entity_type->id()),
      $container->get('date.formatter')
      $container->get('date.formatter'),
      $container->get('state')
    );
  }

@@ -64,27 +77,33 @@ class SearchEngineListBuilder extends ConfigEntityListBuilder {
   * {@inheritdoc}
   */
  public function buildRow(EntityInterface $entity) {
    $last_submitted = $this->state->get("simple_sitemap_engines.simple_sitemap_engine.{$entity->id()}.last_submitted", -1);

    /** @var \Drupal\simple_sitemap_engines\Entity\SearchEngine $entity */
    $row['label'] = $entity->label();
    $row['url'] = $entity->url;
    $row['variants'] = implode(', ', $entity->sitemap_variants);
    $row['last_submitted'] = $entity->last_submitted
      ? $this->dateFormatter->format($entity->last_submitted, 'short')
    $row['last_submitted'] = $last_submitted !== -1
      ? $this->dateFormatter->format($last_submitted, 'short')
      : $this->t('Never');

    return $row;
  }

  /**
   * Build the render array.
   */
  public function render() {
    return ['simple_sitemap_engines' => [
    return [
      'simple_sitemap_engines' => [
        '#type' => 'details',
        '#open' => TRUE,
        '#prefix' => FormHelper::getDonationText(),
        '#title' => $this->t('Submission status'),
        'table' => parent::render(),
        '#description' => $this->t('Submission settings can be configured <a href="@url">here</a>.', ['@url' => $GLOBALS['base_url'] . '/admin/config/search/simplesitemap/engines/settings']),
    ]];
      ],
    ];
  }

}
+0 −7
Original line number Diff line number Diff line
@@ -63,13 +63,6 @@ class SearchEngine extends ConfigEntityBase {
   */
  public $sitemap_variants;

  /**
   * Timestamp when the sitemap was last submitted to this search engine.
   *
   * @var int
   */
  public $last_submitted;

  /**
   * Implements magic __toString() to simplify checkbox list building.
   *
Loading