Skip to content
Snippets Groups Projects
Commit f57c2af8 authored by Bob McDonald's avatar Bob McDonald Committed by Benjamin Melançon
Browse files

Issue #3386885: Show buttons on Custom Entity view pages (replacement for...

Issue #3386885: Show buttons on Custom Entity view pages (replacement for Moderation control pseudofield)
parent 8b6d2377
No related branches found
No related tags found
1 merge request!10Issue #3386885: Show buttons on Custom Entity view pages (replacement for Moderation control pseudofield)
......@@ -339,13 +339,8 @@ class WorkflowButtonsWidget extends OptionsSelectWidget implements ContainerFact
}
}
// Only include one set of buttons if on a node view or revision route.
$routes_list = [
'entity.node.canonical',
'entity.node.revision',
'entity.node.latest_version',
];
if (in_array(\Drupal::routeMatch()->getRouteName(), $routes_list)) {
// Only include one set of buttons if on a entity view or revision route.
if ($form_state->get('workflow_buttons')) {
unset($form['actions_top']);
}
......
......@@ -5,14 +5,15 @@
* The workflow_buttons module file.
*/
use Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException;
use Drupal\content_moderation\Plugin\Field\ModerationStateFieldItemList;
use Drupal\Core\Entity\ContentEntityForm;
use Drupal\Core\Entity\ContentEntityType;
use Drupal\Core\Entity\Display\EntityViewDisplayInterface;
use Drupal\Core\Entity\EntityInterface;
use Drupal\Core\Entity\EntityTypeInterface;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Routing\RouteMatchInterface;
use Drupal\node\Entity\NodeType;
use Drupal\node\NodeForm;
/**
* Implements hook_help().
......@@ -26,30 +27,23 @@ function workflow_buttons_help($route_name, RouteMatchInterface $route_match) {
* Implements hook_form_BASE_FORM_ID_alter().
*/
function workflow_buttons_form_alter(&$form, FormStateInterface $form_state, $form_id) {
if (!($form_state->getFormObject() instanceof NodeForm)) {
if (!($form_state->getFormObject() instanceof ContentEntityForm)) {
return;
}
$form['#entity_builders']['update_status'] = '\Drupal\workflow_buttons\Plugin\Field\FieldWidget\WorkflowButtonsWidget::updateStatus';
// Only display the workflow buttons when rendering the pseudofield.
if (array_key_exists('workflow_buttons', $form_state->getStorage())) {
$routes_list = [
'entity.node.canonical',
'entity.node.revision',
'entity.node.latest_version',
];
if (in_array(\Drupal::routeMatch()->getRouteName(), $routes_list)) {
$form_elements_keep_list = [
'actions',
'moderation_state',
'form_token',
'form_id',
];
foreach ($form as $key => $value) {
if (!str_starts_with($key, '#') && !in_array($key, $form_elements_keep_list)) {
unset($form[$key]);
if ($form_state->get('workflow_buttons')) {
$form_elements_keep_list = [
'actions',
'moderation_state',
'form_token',
'form_id',
];
foreach ($form as $key => $value) {
if (!str_starts_with($key, '#') && !in_array($key, $form_elements_keep_list)) {
unset($form[$key]);
}
}
}
}
}
}
......@@ -71,12 +65,21 @@ function workflow_buttons_entity_base_field_info_alter(&$fields, EntityTypeInter
*/
function workflow_buttons_entity_extra_field_info() {
$extra = [];
$content_entity_types = [];
$entity_type_definitions = \Drupal::entityTypeManager()->getDefinitions();
/* @var $definition EntityTypeInterface */
foreach ($entity_type_definitions as $definition) {
if ($definition instanceof ContentEntityType) {
$content_entity_types[] = $definition->get('id');
}
}
$entity_type_bundle_info = \Drupal::service('entity_type.bundle.info');
$bundle_info = $entity_type_bundle_info->getBundleInfo('node');
foreach (NodeType::loadMultiple() as $bundle) {
if (array_key_exists($bundle->id(), $bundle_info)) {
if (array_key_exists('workflow', $bundle_info[$bundle->id()])) {
$extra['node'][$bundle->id()]['display']['workflow_buttons'] = [
foreach ($content_entity_types as $content_entity_type) {
$content_entity_type_info = $entity_type_bundle_info->getBundleInfo($content_entity_type);
foreach ($content_entity_type_info as $bundle_key => $bundle_info) {
if (array_key_exists('workflow', $bundle_info)) {
$extra[$content_entity_type][$bundle_key]['display']['workflow_buttons'] = [
'label' => t('Workflow buttons'),
'description' => t('Workflow buttons'),
'weight' => 0,
......@@ -84,6 +87,7 @@ function workflow_buttons_entity_extra_field_info() {
];
}
}
}
return $extra;
}
......@@ -96,7 +100,15 @@ function workflow_buttons_entity_view(array &$build, EntityInterface $entity, En
$form_state_additions = [
'workflow_buttons' => TRUE,
];
$form = \Drupal::service('entity.form_builder')->getForm($entity, 'default', $form_state_additions);
/* @var \Drupal\Core\Form\FormBuilder $form_builder */
$form_builder = \Drupal::service('entity.form_builder');
try {
$form = $form_builder->getForm($entity, 'default', $form_state_additions);
}
// Not all custom entities are likely to have a default form, use edit if they don't.
catch (InvalidPluginDefinitionException $e) {
$form = $form_builder->getForm($entity, 'edit', $form_state_additions);
}
$build['workflow_buttons'] = $form;
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment