advancedqueue-8.x-1.x-dev/src/Plugin/views/field/Operations.php

src/Plugin/views/field/Operations.php
<?php

namespace Drupal\advancedqueue\Plugin\views\field;

use Drupal\advancedqueue\Job;
use Drupal\Core\Session\AccountInterface;
use Drupal\Core\Url;
use Drupal\views\Plugin\views\display\DisplayPluginBase;
use Drupal\views\Plugin\views\field\FieldPluginBase;
use Drupal\views\ResultRow;
use Drupal\views\ViewExecutable;

/**
 * Field handler to render operations available for a given job.
 *
 * @ingroup views_field_handlers
 *
 * @ViewsField("advancedqueue_job_operations")
 */
class Operations extends FieldPluginBase {

  /**
   * {@inheritdoc}
   */
  public function init(ViewExecutable $view, DisplayPluginBase $display, ?array &$options = NULL) {
    parent::init($view, $display, $options);

    $this->additional_fields['state'] = 'state';
    $this->additional_fields['queue_id'] = 'queue_id';
    $this->additional_fields['job_id'] = 'job_id';
  }

  /**
   * {@inheritdoc}
   */
  public function query() {
    $this->ensureMyTable();
    $this->addAdditionalFields();
  }

  /**
   * {@inheritdoc}
   */
  public function access(AccountInterface $account) {
    return $account->hasPermission('administer advancedqueue');
  }

  /**
   * {@inheritdoc}
   */
  public function render(ResultRow $values) {
    $operations = [];

    $state = $this->getValue($values, 'state');
    $queue_id = $this->getValue($values, 'queue_id');
    $job_id = $this->getValue($values, 'job_id');

    if ($state === Job::STATE_PROCESSING) {
      $operations['release'] = [
        'title' => $this->t('Release'),
        'weight' => -10,
        'url' => Url::fromRoute('advancedqueue.job.release', [
          'advancedqueue_queue' => $queue_id,
          'job_id' => $job_id,
        ]),
      ];
    }

    if ($state == Job::STATE_FAILURE) {
      $operations['retry'] = [
        'title' => $this->t('Retry'),
        'weight' => -5,
        'url' => Url::fromRoute('advancedqueue.job.retry', [
          'advancedqueue_queue' => $queue_id,
          'job_id' => $job_id,
        ]),
      ];
    }

    $operations['delete'] = [
      'title' => $this->t('Delete'),
      'weight' => 0,
      'url' => Url::fromRoute('advancedqueue.job.delete', [
        'advancedqueue_queue' => $queue_id,
        'job_id' => $job_id,
      ]),
    ];

    $build = [
      '#type' => 'operations',
      '#links' => $operations,
    ];

    return $build;
  }

}

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

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