You are here

class MaestroContentTypeTask in Maestro 3.x

Same name and namespace in other branches
  1. 8.2 src/Plugin/EngineTasks/MaestroContentTypeTask.php \Drupal\maestro\Plugin\EngineTasks\MaestroContentTypeTask

Maestro Content Type Task Plugin.

The plugin annotations below should include: id: The task type ID for this task. For Maestro tasks, this is Maestro[TaskType]. So for example, the start task shipped by Maestro is MaestroStart. The Maestro End task has an id of MaestroEnd Those task IDs are what's used in the engine when a task is injected into the queue.

Plugin annotation


@Plugin(
  id = "MaestroContentType",
  task_description = @Translation("The Maestro Engine's content type task."),
)

Hierarchy

Expanded class hierarchy of MaestroContentTypeTask

File

src/Plugin/EngineTasks/MaestroContentTypeTask.php, line 25

Namespace

Drupal\maestro\Plugin\EngineTasks
View source
class MaestroContentTypeTask extends PluginBase implements MaestroEngineTaskInterface {
  use MaestroTaskTrait;

  /**
   * Constructor.
   */
  public function __construct($configuration = NULL) {
    if (is_array($configuration)) {
      $this->processID = $configuration[0];
      $this->queueID = $configuration[1];
    }
  }

  /**
   * {@inheritDoc}
   */
  public function isInteractive() {
    return TRUE;
  }

  /**
   * {@inheritDoc}
   */
  public function shortDescription() {
    return t('Content Type Task');
  }

  /**
   * {@inheritDoc}
   */
  public function description() {
    return $this
      ->t('Content Type Task.');
  }

  /**
   * {@inheritDoc}
   *
   * @see \Drupal\Component\Plugin\PluginBase::getPluginId()
   */
  public function getPluginId() {
    return 'MaestroContentType';
  }

  /**
   * {@inheritDoc}
   */
  public function getTaskColours() {
    return '#0000ff';
  }

  /**
   * Part of the ExecutableInterface
   * Execution of the interactive task does nothing except for setting the run_once flag
   * {@inheritdoc}.
   */
  public function execute() {

    // Need to set the run_once flag here
    // as interactive and content type tasks are executed and completed by the user using the Maestro API.
    $queueRecord = \Drupal::entityTypeManager()
      ->getStorage('maestro_queue')
      ->load($this->queueID);
    $queueRecord
      ->set('run_once', 1);
    $queueRecord
      ->save();
    return FALSE;
  }

  /**
   * {@inheritDoc}
   */
  public function getExecutableForm($modal, MaestroExecuteInteractive $parent) {

    // we'll use the handler to determine what to do here.
  }

  /**
   * {@inheritDoc}
   */
  public function handleExecuteSubmit(array &$form, FormStateInterface $form_state) {
  }

  /**
   * {@inheritDoc}
   */
  public function getTaskEditForm(array $task, $templateMachineName) {
    $form = [
      '#markup' => t('Content Type Task Edit'),
    ];
    $form['content_type'] = [
      '#type' => 'textfield',
      '#title' => $this
        ->t('Content type'),
      '#description' => $this
        ->t('The content type for this task to use.'),
      '#default_value' => isset($task['data']['content_type']) ? $task['data']['content_type'] : '',
      '#required' => TRUE,
    ];
    $form['unique_id'] = [
      '#type' => 'textfield',
      '#title' => $this
        ->t('Give this piece of content a unique identifier'),
      '#description' => $this
        ->t('This identifier is stored along with its ID to allow you to recall it when filled in.'),
      '#default_value' => isset($task['data']['unique_id']) ? $task['data']['unique_id'] : '',
      '#required' => TRUE,
    ];
    $form['save_edit_later'] = [
      '#type' => 'checkbox',
      '#title' => $this
        ->t('Show a Save and Edit Later button on the content type form.'),
      '#description' => $this
        ->t('The Save and Edit Later button saves the content to the entity identifiers and the task remains uncompleted.'),
      '#default_value' => isset($task['data']['save_edit_later']) ? $task['data']['save_edit_later'] : 0,
      '#required' => FALSE,
    ];
    $form['link_to_edit'] = [
      '#type' => 'checkbox',
      '#title' => $this
        ->t('Link to the Edit page of the content in the task console.'),
      '#description' => $this
        ->t('When checked, the edit node page will be shown.  Unchecked means the view page is shown.'),
      '#default_value' => isset($task['data']['link_to_edit']) ? $task['data']['link_to_edit'] : 0,
      '#required' => FALSE,
    ];
    $form['show_maestro_buttons_on_view'] = [
      '#type' => 'checkbox',
      '#title' => $this
        ->t('Show the Maestro Accept and Reject buttons when viewing a content type.'),
      '#description' => $this
        ->t('When checked, the accept and reject buttons will appear when viewing a content type task. The Accept and Reject labels can be overridden.'),
      '#default_value' => isset($task['data']['show_maestro_buttons_on_view']) ? $task['data']['show_maestro_buttons_on_view'] : 0,
      '#required' => FALSE,
    ];
    $form['view_buttons'] = [
      '#type' => 'fieldset',
      '#states' => [
        'visible' => [
          ':input[name="show_maestro_buttons_on_view"]' => [
            'checked' => TRUE,
          ],
        ],
      ],
    ];
    $form['view_buttons']['accept_label'] = [
      '#type' => 'textfield',
      '#title' => $this
        ->t('Accept Label'),
      '#description' => $this
        ->t('The label applied to the accept button when viewing the content type managed by this task.'),
      '#default_value' => isset($task['data']['accept_label']) ? $task['data']['accept_label'] : '',
      '#size' => 15,
      '#states' => [
        'visible' => [
          ':input[name="show_maestro_buttons_on_view"]' => [
            'checked' => TRUE,
          ],
        ],
      ],
    ];
    $form['view_buttons']['accept_redirect_to'] = [
      '#type' => 'textfield',
      '#title' => $this
        ->t('Accept Redirect To Location'),
      '#description' => $this
        ->t('The URL location to redirect to when the accept button is pressed.'),
      '#default_value' => isset($task['data']['accept_redirect_to']) ? $task['data']['accept_redirect_to'] : '',
      '#states' => [
        'visible' => [
          ':input[name="show_maestro_buttons_on_view"]' => [
            'checked' => TRUE,
          ],
        ],
      ],
    ];
    $form['view_buttons']['reject_label'] = [
      '#type' => 'textfield',
      '#default_value' => isset($task['data']['reject_label']) ? $task['data']['reject_label'] : '',
      '#title' => $this
        ->t('Reject Label'),
      '#size' => 15,
      '#description' => $this
        ->t('The label applied to the reject button when viewing the content type managed by this task.'),
      '#states' => [
        'visible' => [
          ':input[name="show_maestro_buttons_on_view"]' => [
            'checked' => TRUE,
          ],
        ],
      ],
    ];
    $form['view_buttons']['reject_redirect_to'] = [
      '#type' => 'textfield',
      '#title' => $this
        ->t('Reject Redirect To Location'),
      '#description' => $this
        ->t('The URL location to redirect to when the reject button is pressed.'),
      '#default_value' => isset($task['data']['reject_redirect_to']) ? $task['data']['reject_redirect_to'] : '',
      '#states' => [
        'visible' => [
          ':input[name="show_maestro_buttons_on_view"]' => [
            'checked' => TRUE,
          ],
        ],
      ],
    ];
    $form['view_buttons']['supply_maestro_ids_in_url'] = [
      '#type' => 'checkbox',
      '#title' => $this
        ->t('Supply the maestro=1 and queueid=xxx URL parameters for the accept and reject buttons.'),
      '#description' => $this
        ->t('When checked, the URL redirected to for accept or reject will have the Maestro url parameters embedded in it.'),
      '#default_value' => isset($task['data']['supply_maestro_ids_in_url']) ? $task['data']['supply_maestro_ids_in_url'] : 0,
      '#required' => FALSE,
    ];
    $form['redirect_to'] = [
      '#type' => 'textfield',
      '#title' => $this
        ->t('Default Return Path'),
      '#description' => $this
        ->t('When saving a new piece of content or when viewing content that does not have the accept or reject redirect paths set, you can specify where your return path should go upon task completion.'),
      '#default_value' => isset($task['data']['redirect_to']) ? $task['data']['redirect_to'] : 'taskconsole',
      '#required' => TRUE,
    ];
    return $form;
  }

  /**
   * {@inheritDoc}
   */
  public function validateTaskEditForm(array &$form, FormStateInterface $form_state) {
  }

  /**
   * {@inheritDoc}
   */
  public function prepareTaskForSave(array &$form, FormStateInterface $form_state, array &$task) {
    $task['data']['unique_id'] = $form_state
      ->getValue('unique_id');
    $task['data']['content_type'] = $form_state
      ->getValue('content_type');
    $task['data']['save_edit_later'] = $form_state
      ->getValue('save_edit_later');
    $task['data']['link_to_edit'] = $form_state
      ->getValue('link_to_edit');
    $task['data']['show_maestro_buttons_on_view'] = $form_state
      ->getValue('show_maestro_buttons_on_view');
    $task['data']['accept_label'] = $form_state
      ->getValue('accept_label');
    $task['data']['reject_label'] = $form_state
      ->getValue('reject_label');
    $task['data']['accept_redirect_to'] = $form_state
      ->getValue('accept_redirect_to');
    $task['data']['reject_redirect_to'] = $form_state
      ->getValue('reject_redirect_to');
    $task['data']['supply_maestro_ids_in_url'] = $form_state
      ->getValue('supply_maestro_ids_in_url');
    $redirect = $form_state
      ->getValue('redirect_to');
    if (isset($redirect)) {
      $task['data']['redirect_to'] = $redirect;
    }
    else {
      $task['data']['redirect_to'] = '';
    }

    // We create our own handler here based on the content type and signify that it is maestro based
    // This is the NODE ADD handler.  We alter this in a post-assignment hook if the entity identifier already exists in maestro.module
    // see maestro_maestro_post_production_assignments.
    $task['handler'] = '/node/add/' . $form_state
      ->getValue('content_type') . '?maestro=1';
  }

  /**
   * {@inheritDoc}
   */
  public function performValidityCheck(array &$validation_failure_tasks, array &$validation_information_tasks, array $task) {
    if (array_key_exists('unique_id', $task['data']) && $task['data']['unique_id'] == '' || !array_key_exists('unique_id', $task['data'])) {
      $validation_failure_tasks[] = [
        'taskID' => $task['id'],
        'taskLabel' => $task['label'],
        'reason' => t('The Content Type Task has not been set up properly.  The "unique identifier" option is missing and thus the engine will be unable to execute this task.'),
      ];
    }
    if (array_key_exists('content_type', $task['data']) && $task['data']['content_type'] == '' || !array_key_exists('content_type', $task['data'])) {
      $validation_failure_tasks[] = [
        'taskID' => $task['id'],
        'taskLabel' => $task['label'],
        'reason' => t('The Content Type Task has not been set up properly.  The "content type" option is missing and thus the engine will be unable to execute this task.'),
      ];
    }
    if (array_key_exists('redirect_to', $task['data']) && $task['data']['redirect_to'] == '' || !array_key_exists('redirect_to', $task['data'])) {
      $validation_failure_tasks[] = [
        'taskID' => $task['id'],
        'taskLabel' => $task['label'],
        'reason' => t('The Content Type Task has not been set up properly.  The "Return Path" option is missing and thus the engine will be unable to execute this task.'),
      ];
    }
  }

  /**
   * {@inheritDoc}
   */
  public function getTemplateBuilderCapabilities() {
    return [
      'edit',
      'drawlineto',
      'removelines',
      'remove',
    ];
  }

}

Members

Namesort descending Modifiers Type Description Overrides
DependencySerializationTrait::$_entityStorages protected property
DependencySerializationTrait::$_serviceIds protected property
DependencySerializationTrait::__sleep public function 2
DependencySerializationTrait::__wakeup public function 2
MaestroContentTypeTask::description public function Longer description. This generally follows the short Description but can be used to be more descriptive if you wish to surface this description in a UI element. Overrides MaestroEngineTaskInterface::description
MaestroContentTypeTask::execute public function Part of the ExecutableInterface Execution of the interactive task does nothing except for setting the run_once flag . Overrides ExecutableInterface::execute
MaestroContentTypeTask::getExecutableForm public function Gets the Maestro executable form for a task console. Overrides MaestroEngineTaskInterface::getExecutableForm
MaestroContentTypeTask::getPluginId public function Overrides PluginBase::getPluginId
MaestroContentTypeTask::getTaskColours public function Returns the task's defined colours. This is useful if you want to let the tasks decide on what colours to paint themselves in the UI. Overrides MaestroEngineTaskInterface::getTaskColours
MaestroContentTypeTask::getTaskEditForm public function Method to allow a task to add their own fields to the task edit form. Overrides MaestroEngineTaskInterface::getTaskEditForm
MaestroContentTypeTask::getTemplateBuilderCapabilities public function Returns an array of consistenly keyed array elements that define what this task can do in the template builder. Elements are: edit, drawlineto, drawfalselineto, removelines, remove. Overrides MaestroEngineTaskInterface::getTemplateBuilderCapabilities
MaestroContentTypeTask::handleExecuteSubmit public function Interactive tasks, or tasks that signal themselves as requiring human interaction will have the resulting form submissions sent to their own handler for processing to determine if the task should be completed or not or to carry out any task processing… Overrides MaestroEngineTaskInterface::handleExecuteSubmit
MaestroContentTypeTask::isInteractive public function Returns TRUE or FALSE to denote if this task has an interactive interface that needs to be shown in the Task Console and for any other requirements of the task. Overrides MaestroEngineTaskInterface::isInteractive
MaestroContentTypeTask::performValidityCheck public function Lets the task perform validation on itself. If the task is missing any internal requirements, it can flag itself as having an issue. Return array MUST be in the format of array( 'taskID' => the task machine name, 'taskLabel'… Overrides MaestroEngineTaskInterface::performValidityCheck
MaestroContentTypeTask::prepareTaskForSave public function The specific task's manipulation of the values to save for a template save. Overrides MaestroEngineTaskInterface::prepareTaskForSave
MaestroContentTypeTask::shortDescription public function Get the task's short description. Useful for things like labels. Overrides MaestroEngineTaskInterface::shortDescription
MaestroContentTypeTask::validateTaskEditForm public function This method must be called by the template builder in order to validate the form entry values before saving. Overrides MaestroEngineTaskInterface::validateTaskEditForm
MaestroContentTypeTask::__construct public function Constructor. Overrides PluginBase::__construct
MaestroTaskTrait::$completionStatus protected property Default will be that the task completed normally.
MaestroTaskTrait::$executionStatus protected property The default will be success for the execution status.
MaestroTaskTrait::$processID protected property The Maestro Process ID.
MaestroTaskTrait::$queueID protected property The Maestro queue ID.
MaestroTaskTrait::getAssignmentsAndNotificationsForm public function Retrieve the core Maestro form edit elements for Assignments and Notifications.
MaestroTaskTrait::getBaseEditForm public function Retrieve the core Maestro form edit elements that all tasks MUST adhere to.
MaestroTaskTrait::getCompletionStatus public function Returns the value of the completion status protected variable denoting any special completion status condition the task wishes to pass along.
MaestroTaskTrait::getExecutionStatus public function Returns the value of the execution status protected variable denoting if the execution of this task is complete.
MaestroTaskTrait::saveTask public function Available for all tasks -- this does the general task construction for us, ensuring we have sanity in the saved Config Entity for the task. Assignments and Notifications are the two main elements this method worries about.
MessengerTrait::$messenger protected property The messenger. 27
MessengerTrait::messenger public function Gets the messenger. 27
MessengerTrait::setMessenger public function Sets the messenger.
PluginBase::$configuration protected property Configuration information passed into the plugin. 1
PluginBase::$pluginDefinition protected property The plugin implementation definition. 1
PluginBase::$pluginId protected property The plugin_id.
PluginBase::DERIVATIVE_SEPARATOR constant A string which is used to separate base plugin IDs from the derivative ID.
PluginBase::getBaseId public function Gets the base_plugin_id of the plugin instance. Overrides DerivativeInspectionInterface::getBaseId
PluginBase::getDerivativeId public function Gets the derivative_id of the plugin instance. Overrides DerivativeInspectionInterface::getDerivativeId
PluginBase::getPluginDefinition public function Gets the definition of the plugin implementation. Overrides PluginInspectionInterface::getPluginDefinition 2
PluginBase::isConfigurable public function Determines if the plugin is configurable.
StringTranslationTrait::$stringTranslation protected property The string translation service. 4
StringTranslationTrait::formatPlural protected function Formats a string containing a count of items.
StringTranslationTrait::getNumberOfPlurals protected function Returns the number of plurals supported by a given language.
StringTranslationTrait::getStringTranslation protected function Gets the string translation service.
StringTranslationTrait::setStringTranslation public function Sets the string translation service to use. 2
StringTranslationTrait::t protected function Translates a string to the current language or to a given language.