public function QueueForm::form in Advanced Queue 8
Gets the actual form array to be built.
Overrides EntityForm::form
See also
\Drupal\Core\Entity\EntityForm::processForm()
\Drupal\Core\Entity\EntityForm::afterBuild()
File
- src/
Form/ QueueForm.php, line 46
Class
- QueueForm
- Queue form.
Namespace
Drupal\advancedqueue\FormCode
public function form(array $form, FormStateInterface $form_state) {
$form = parent::form($form, $form_state);
/** @var \Drupal\advancedqueue\Entity\QueueInterface $queue */
$queue = $this->entity;
$backends = array_column($this->backendManager
->getDefinitions(), 'label', 'id');
asort($backends);
// Use the first available backend as the default value.
if (!$queue
->getBackendId()) {
$backend_ids = array_keys($backends);
$backend_id = reset($backend_ids);
$queue
->setBackendId($backend_id);
}
// The form state will have a backend value if #ajax was used.
$backend_id = $form_state
->getValue('backend', $queue
->getBackendId());
// Pass the configuration only if the backend hasn't been changed via #ajax.
$backend_configuration = $queue
->getBackendId() == $backend_id ? $queue
->getBackendConfiguration() : [];
$backend = $this->backendManager
->createInstance($backend_id, $backend_configuration);
$wrapper_id = Html::getUniqueId('queue-form');
$form['#tree'] = TRUE;
$form['#prefix'] = '<div id="' . $wrapper_id . '">';
$form['#suffix'] = '</div>';
$form['#tree'] = TRUE;
$form['label'] = [
'#type' => 'textfield',
'#title' => $this
->t('Label'),
'#maxlength' => 255,
'#default_value' => $queue
->label(),
'#required' => TRUE,
];
$form['id'] = [
'#type' => 'machine_name',
'#default_value' => $queue
->id(),
'#machine_name' => [
'exists' => '\\Drupal\\advancedqueue\\Entity\\Queue::load',
],
'#disabled' => !$queue
->isNew(),
];
$form['backend'] = [
'#type' => 'radios',
'#title' => $this
->t('Backend'),
'#options' => $backends,
'#default_value' => $backend_id,
'#required' => TRUE,
'#disabled' => !$queue
->isNew(),
'#limit_validation_errors' => [],
'#ajax' => [
'callback' => '::ajaxRefresh',
'wrapper' => $wrapper_id,
],
'#access' => count($backends) > 1,
];
$form['configuration'] = [
'#type' => 'container',
// The backend needs to be initialized with the defaults before the new
// configuration is processed in validateForm() / submitForm().
'#default_configuration' => $backend_configuration,
// NestedArray::setValue() crashes when switching between two plugins
// that share a configuration element of the same name, but not the
// same type (e.g. "amount" of type number/commerce_price).
// Configuration must be keyed by plugin ID in $form_state to prevent
// that, either on this level, or in a parent form element.
'#parents' => [
'configuration',
$backend_id,
],
];
$form['configuration'] = $backend
->buildConfigurationForm($form['configuration'], $form_state);
$form['processor'] = [
'#type' => 'radios',
'#title' => $this
->t('Process the queue via:'),
'#options' => [
QueueInterface::PROCESSOR_CRON => $this
->t('Cron'),
QueueInterface::PROCESSOR_DAEMON => $this
->t('Daemon (Drush / Drupal Console)'),
],
'#default_value' => $queue
->getProcessor(),
];
$form['processing_time'] = [
'#type' => 'number',
'#title' => $this
->t('Processing time'),
'#description' => $this
->t('How long the queue is processed. 0 means "unlimited", and requires processing via daemon.'),
'#field_suffix' => $this
->t('seconds'),
'#default_value' => $queue
->getProcessingTime(),
'#min' => 0,
];
return $form;
}