public function QueueExampleForm::buildForm in Examples for Developers 8
Form constructor.
Parameters
array $form: An associative array containing the structure of the form.
\Drupal\Core\Form\FormStateInterface $form_state: The current state of the form.
Return value
array The form structure.
Overrides FormInterface::buildForm
File
- queue_example/
src/ Forms/ QueueExampleForm.php, line 89
Class
- QueueExampleForm
- Form with examples on how to use queue.
Namespace
Drupal\queue_example\FormsCode
public function buildForm(array $form, FormStateInterface $form_state) {
// Simple counter that makes it possible to put auto-incrementing default
// string into the string to insert.
if (empty($form_state
->get('insert_counter'))) {
$form_state
->set('insert_counter', 1);
}
$queue_name = $form_state
->getValue('queue_name') ?: 'queue_example_first_queue';
$items = $this
->retrieveQueue($queue_name);
$form['help'] = [
'#type' => 'markup',
'#markup' => '<div>' . $this
->t('This page is an interface on the Drupal queue API. You can add new items to the queue, "claim" one (retrieve the next item and keep a lock on it), and delete one (remove it from the queue). Note that claims are not expired until cron runs, so there is a special button to run cron to perform any necessary expirations.') . '</div>',
];
$form['wrong_queue_warning'] = [
'#type' => 'markup',
'#markup' => '<div>' . $this
->t('Note: the example works only with the default queue implementation, which is not currently configured!!') . '</div>',
'#access' => !$this
->doesQueueUseDB(),
];
$queue_names = [
'queue_example_first_queue',
'queue_example_second_queue',
];
$form['queue_name'] = [
'#type' => 'select',
'#title' => $this
->t('Choose queue to examine'),
'#options' => array_combine($queue_names, $queue_names),
'#default_value' => $queue_name,
];
$form['queue_show'] = [
'#type' => 'submit',
'#value' => $this
->t('Show queue'),
'#submit' => [
'::submitShowQueue',
],
];
$form['status_fieldset'] = [
'#type' => 'fieldset',
'#title' => $this
->t('Queue status for @name', [
'@name' => $queue_name,
]),
'#collapsible' => TRUE,
];
if (count($items) > 0) {
$form['status_fieldset']['status'] = [
'#theme' => 'table',
'#header' => [
$this
->t('Item ID'),
$this
->t('Claimed/Expiration'),
$this
->t('Created'),
$this
->t('Content/Data'),
],
'#rows' => array_map([
$this,
'processQueueItemForTable',
], $items),
];
}
else {
$form['status_fieldset']['status'] = [
'#type' => 'markup',
'#markup' => $this
->t('There are no items in the queue.'),
];
}
$form['insert_fieldset'] = [
'#type' => 'fieldset',
'#title' => $this
->t('Insert into @name', [
'@name' => $queue_name,
]),
];
$form['insert_fieldset']['string_to_add'] = [
'#type' => 'textfield',
'#size' => 10,
'#default_value' => $this
->t('item @counter', [
'@counter' => $form_state
->get('insert_counter'),
]),
];
$form['insert_fieldset']['add_item'] = [
'#type' => 'submit',
'#value' => $this
->t('Insert into queue'),
'#submit' => [
'::submitAddQueueItem',
],
];
$form['claim_fieldset'] = [
'#type' => 'fieldset',
'#title' => $this
->t('Claim from queue'),
'#collapsible' => TRUE,
];
$form['claim_fieldset']['claim_time'] = [
'#type' => 'radios',
'#title' => $this
->t('Claim time, in seconds'),
'#options' => [
0 => $this
->t('none'),
5 => $this
->t('5 seconds'),
60 => $this
->t('60 seconds'),
],
'#description' => $this
->t('This time is only valid if cron runs during this time period. You can run cron manually below.'),
'#default_value' => $form_state
->getValue('claim_time') ?: 5,
];
$form['claim_fieldset']['claim_item'] = [
'#type' => 'submit',
'#value' => $this
->t('Claim the next item from the queue'),
'#submit' => [
'::submitClaimItem',
],
];
$form['claim_fieldset']['claim_and_delete_item'] = [
'#type' => 'submit',
'#value' => $this
->t('Claim the next item and delete it'),
'#submit' => [
'::submitClaimDeleteItem',
],
];
$form['claim_fieldset']['run_cron'] = [
'#type' => 'submit',
'#value' => $this
->t('Run cron manually to expire claims'),
'#submit' => [
'::submitRunCron',
],
];
$form['delete_queue'] = [
'#type' => 'submit',
'#value' => $this
->t('Delete the queue and items in it'),
'#submit' => [
'::submitDeleteQueue',
],
];
return $form;
}