ModerationStateWidget.php in Thunder 8.3
File
src/Plugin/Field/FieldWidget/ModerationStateWidget.php
View source
<?php
namespace Drupal\thunder\Plugin\Field\FieldWidget;
use Drupal\content_moderation\Plugin\Field\FieldWidget\ModerationStateWidget as CoreModerationStateWidget;
use Drupal\Core\Field\FieldItemListInterface;
use Drupal\Core\Form\FormStateInterface;
class ModerationStateWidget extends CoreModerationStateWidget {
public function formElement(FieldItemListInterface $items, $delta, array $element, array &$form, FormStateInterface $form_state) {
$entity = $items
->getEntity();
$workflow = $this->moderationInformation
->getWorkflowForEntity($entity);
$default = $items
->get($delta)->value ? $workflow
->getTypePlugin()
->getState($items
->get($delta)->value) : $workflow
->getTypePlugin()
->getInitialState($entity);
$transitions = $this->validator
->getValidTransitions($entity, $this->currentUser);
$transition_labels = [];
$default_value = NULL;
foreach ($transitions as $transition) {
$transition_to_state = $transition
->to();
$transition_labels[$transition_to_state
->id()] = $transition_to_state
->label();
if ($default
->id() === $transition_to_state
->id()) {
$default_value = $default
->id();
}
}
$element = [
'#type' => 'select',
'#key_column' => $this->column,
'#options' => $transition_labels,
'#default_value' => $default_value,
'#access' => !empty($transition_labels),
'#wrapper_attributes' => [
'class' => [
'container-inline',
],
],
];
$element['#element_validate'][] = [
get_class($this),
'validateElement',
];
return $element;
}
public static function validateElement(array $element, FormStateInterface $form_state) {
$form_state
->setValueForElement($element, [
$element['#key_column'] => $element['#value'],
]);
}
}