varbase_workflow.module in Varbase Workflow 2.0.x
Contains varbase_workflow.module.
File
varbase_workflow.moduleView source
<?php
/**
* @file
* Contains varbase_workflow.module.
*/
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Url;
use Drupal\Core\Link;
use Vardot\Entity\EntityDefinitionUpdateManager;
/**
* Implements hook_form_alter().
*/
function varbase_workflow_form_alter(array &$form, FormStateInterface $form_state, $form_id) {
if ($form_id == 'node_type_add_form' || $form_id == 'node_type_edit_form') {
$default_workflow_option = '_none';
// List of workflows.workflow.* config in the site.
$content_moderation_workflow_options = [
'_none' => t('- none -'),
];
$config_factory = \Drupal::service('config.factory');
$workflows = $config_factory
->listAll('workflows.workflow.');
foreach ($workflows as $workflow) {
$content_moderation_workflow_options[$workflow] = $config_factory
->getEditable($workflow)
->get('label');
if ($workflow == 'workflows.workflow.varbase_simple_workflow' && $default_workflow_option == '_none') {
$default_workflow_option = 'workflows.workflow.varbase_simple_workflow';
}
}
$workflows_configuration_page = Link::fromTextAndUrl(t('Workflows configuration page'), new Url('entity.workflow.collection'));
$form['workflow']['content_moderation_workflow'] = [
'#type' => 'select',
'#title' => t('Content moderation workflow'),
'#default_value' => $default_workflow_option,
'#options' => $content_moderation_workflow_options,
'#description' => t('Select the workflow you would like to use for this content type. Once selected, you can only change it for this content type from the @link.', [
'@link' => $workflows_configuration_page
->toString(),
]),
];
if ($form_id == 'node_type_add_form') {
foreach (array_keys($form['actions']) as $action) {
if ($action != 'preview' && isset($form['actions'][$action]['#type']) && $form['actions'][$action]['#type'] === 'submit') {
$form['actions'][$action]['#submit'][] = '_varbase_workflow_node_type_add_form';
}
}
}
else {
$form['workflow']['content_moderation_workflow']['#attributes']['readonly'] = 'readonly';
$form['workflow']['content_moderation_workflow']['#attributes']['disabled'] = 'disabled';
$form['workflow']['content_moderation_workflow']['#default_value'] = '_none';
foreach ($workflows as $workflow) {
$workflow_type_settings = $config_factory
->getEditable($workflow)
->get('type_settings');
$node_type = $form_state
->getFormObject()
->getEntity()
->get('type');
if (isset($workflow_type_settings['entity_types']) && isset($workflow_type_settings['entity_types']['node'])) {
if (in_array($node_type, $workflow_type_settings['entity_types']['node'])) {
$form['workflow']['content_moderation_workflow']['#default_value'] = $workflow;
}
}
}
}
}
elseif (preg_match('/^node_.*._form$/', $form_id) && isset($form['moderation_state'])) {
if (isset($form['publish_state'])) {
$form['publish_state']['#access'] = FALSE;
$form['publish_state']['widget'][0]['#default_value'] = 'published';
}
if (isset($form['unpublish_state'])) {
$form['unpublish_state']['#access'] = FALSE;
$form['unpublish_state']['widget'][0]['#default_value'] = 'archived';
}
}
return $form;
}
/**
* Varbase workflow node type add form.
*/
function _varbase_workflow_node_type_add_form(array &$form, FormStateInterface &$form_state) {
$node_type = $form_state
->getFormObject()
->getEntity()
->get('type');
$content_moderation_workflow = $form_state
->getFormObject()
->getEntity()
->get('content_moderation_workflow');
if (isset($content_moderation_workflow) && $content_moderation_workflow != '' && $content_moderation_workflow != '_none') {
$config_factory = \Drupal::service('config.factory');
$workflow_type_settings = $config_factory
->getEditable($content_moderation_workflow)
->get('type_settings');
if (isset($workflow_type_settings['entity_types'])) {
if (isset($workflow_type_settings['entity_types']['node'])) {
if (!in_array($node_type, $workflow_type_settings['entity_types']['node'])) {
$workflow_type_settings['entity_types']['node'][] = $node_type;
$config_factory
->getEditable($content_moderation_workflow)
->set('type_settings', $workflow_type_settings)
->save(TRUE);
}
}
else {
$workflow_type_settings['entity_types']['node'] = [];
$workflow_type_settings['entity_types']['node'][] = $node_type;
$config_factory
->getEditable($content_moderation_workflow)
->set('type_settings', $workflow_type_settings)
->save(TRUE);
}
// Entity updates to clear up any mismatched entity and/or field definitions
// And Fix changes were detected in the entity type and field definitions.
\Drupal::classResolver()
->getInstanceFromDefinition(EntityDefinitionUpdateManager::class)
->applyUpdates();
}
}
}
Functions
Name![]() |
Description |
---|---|
varbase_workflow_form_alter | Implements hook_form_alter(). |
_varbase_workflow_node_type_add_form | Varbase workflow node type add form. |