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\user\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('user.private_tempstore'), $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;
}
$form['#title'] = $this
->t('Configure "%action" action applied to the selection', [
'%action' => $form_data['action_label'],
]);
$selection = [];
if (!empty($form_data['entity_labels'])) {
$form['list'] = [
'#theme' => 'item_list',
'#items' => $form_data['entity_labels'],
];
}
else {
$form['list'] = [
'#type' => 'item',
'#markup' => $this
->t('All view results'),
];
}
$form['list']['#title'] = $this
->t('Selected @count entities:', [
'@count' => $form_data['selected_count'],
]);
$form['actions']['#weight'] = 666;
$form['actions']['submit'] = [
'#type' => 'submit',
'#value' => $this
->t('Apply'),
'#submit' => [
[
$this,
'submitForm',
],
],
];
$action = $this->actionManager
->createInstance($form_data['action_id']);
if (method_exists($action, 'setContext')) {
$action
->setContext($form_data);
}
$form = $action
->buildConfigurationForm($form, $form_state);
$storage = $form_state
->getStorage();
$storage['views_bulk_operations'] = $form_data;
$form_state
->setStorage($storage);
return $form;
}
public function validateForm(array &$form, FormStateInterface $form_state) {
$storage = $form_state
->getStorage();
$form_data = $storage['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) {
$storage = $form_state
->getStorage();
$form_data = $storage['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();
}
$definition = $this->actionManager
->getDefinition($form_data['action_id']);
if (!empty($definition['confirm_form_route_name'])) {
$this->tempStoreFactory
->get($form_data['tempstore_name'])
->set($this
->currentUser()
->id(), $form_data);
$form_state
->setRedirect($definition['confirm_form_route_name'], [
'view_id' => $form_data['view_id'],
'display_id' => $form_data['display_id'],
]);
}
else {
$this->tempStoreFactory
->get($form_data['tempstore_name'])
->delete($this
->currentUser()
->id());
$this->actionProcessor
->executeProcessing($form_data);
$form_state
->setRedirectUrl($form_data['redirect_url']);
}
}
}