View source
<?php
namespace Drupal\views_bulk_operations\Form;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Drupal\Core\Form\FormBase;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\TempStore\PrivateTempStoreFactory;
use Drupal\views_bulk_operations\Service\ViewsBulkOperationsActionManager;
use Drupal\views_bulk_operations\Service\ViewsBulkOperationsActionProcessorInterface;
class ConfigureAction extends FormBase {
use ViewsBulkOperationsFormTrait;
protected $tempStoreFactory;
protected $actionManager;
protected $actionProcessor;
public function __construct(PrivateTempStoreFactory $tempStoreFactory, ViewsBulkOperationsActionManager $actionManager, ViewsBulkOperationsActionProcessorInterface $actionProcessor) {
$this->tempStoreFactory = $tempStoreFactory;
$this->actionManager = $actionManager;
$this->actionProcessor = $actionProcessor;
}
public static function create(ContainerInterface $container) {
return new static($container
->get('tempstore.private'), $container
->get('plugin.manager.views_bulk_operations_action'), $container
->get('views_bulk_operations.processor'));
}
public function getFormId() {
return 'views_bulk_operations_configure_action';
}
public function buildForm(array $form, FormStateInterface $form_state, $view_id = NULL, $display_id = NULL) {
$form_data = $this
->getFormData($view_id, $display_id);
if (!isset($form_data['action_id'])) {
return [
'#markup' => $this
->t('No items selected. Go back and try again.'),
];
}
$form['#title'] = $this
->t('Configure "%action" action applied to the selection', [
'%action' => $form_data['action_label'],
]);
$form['list'] = $this
->getListRenderable($form_data);
$form['actions']['#weight'] = 666;
$form['actions']['submit'] = [
'#type' => 'submit',
'#value' => $this
->t('Apply'),
'#submit' => [
[
$this,
'submitForm',
],
],
];
$this
->addCancelButton($form);
$action = $this->actionManager
->createInstance($form_data['action_id']);
if (method_exists($action, 'setContext')) {
$action
->setContext($form_data);
}
$form_state
->set('views_bulk_operations', $form_data);
$form = $action
->buildConfigurationForm($form, $form_state);
return $form;
}
public function validateForm(array &$form, FormStateInterface $form_state) {
$form_data = $form_state
->get('views_bulk_operations');
$action = $this->actionManager
->createInstance($form_data['action_id']);
if (method_exists($action, 'validateConfigurationForm')) {
$action
->validateConfigurationForm($form, $form_state);
}
}
public function submitForm(array &$form, FormStateInterface $form_state) {
$form_data = $form_state
->get('views_bulk_operations');
$action = $this->actionManager
->createInstance($form_data['action_id']);
if (method_exists($action, 'submitConfigurationForm')) {
$action
->submitConfigurationForm($form, $form_state);
$form_data['configuration'] = $action
->getConfiguration();
}
else {
$form_state
->cleanValues();
$form_data['configuration'] = $form_state
->getValues();
}
if (!empty($form_data['confirm_route'])) {
$this
->setTempstoreData($form_data, $form_data['view_id'], $form_data['display_id']);
$form_state
->setRedirect($form_data['confirm_route'], [
'view_id' => $form_data['view_id'],
'display_id' => $form_data['display_id'],
]);
}
else {
$this
->deleteTempstoreData($form_data['view_id'], $form_data['display_id']);
$this->actionProcessor
->executeProcessing($form_data);
$form_state
->setRedirectUrl($form_data['redirect_url']);
}
}
}