diff --git a/lightning.services.yml b/lightning.services.yml index f9beb2df0..eb5d5bd3d 100644 --- a/lightning.services.yml +++ b/lightning.services.yml @@ -4,3 +4,7 @@ services: arguments: - '@app.root' - '@site.path' + lightning.form_helper: + class: '\Drupal\lightning\FormHelper' + arguments: + - '@element_info' diff --git a/modules/lightning_features/lightning_core/lightning_core.info.yml b/modules/lightning_features/lightning_core/lightning_core.info.yml index da5068668..dbf7bdb2b 100644 --- a/modules/lightning_features/lightning_core/lightning_core.info.yml +++ b/modules/lightning_features/lightning_core/lightning_core.info.yml @@ -1,7 +1,8 @@ -name: Lightning +name: Lightning Core core: 8.x type: module -description: Core functionality for the Lightning distribution. +package: Lightning +description: Shared functionality for the Lightning distribution. dependencies: # config dependencies - menu_ui @@ -10,3 +11,5 @@ dependencies: - path - text - user +components: + - lightning_page diff --git a/modules/lightning_features/lightning_core/lightning_core.module b/modules/lightning_features/lightning_core/lightning_core.module index d9cebc1c7..e78c0c86c 100644 --- a/modules/lightning_features/lightning_core/lightning_core.module +++ b/modules/lightning_features/lightning_core/lightning_core.module @@ -228,18 +228,10 @@ function lightning_core_form_system_modules_alter(array &$form) { */ function lightning_core_form_user_form_alter(array &$form) { if (isset($form['account']['roles'])) { - $element = &$form['account']['roles']; + // Ensure the standard process functions run first. + \Drupal::service('lightning.form_helper') + ->applyStandardProcessing($form['account']['roles']); - // Always ensure the standard #process function(s) run first. - if (empty($element['#process'])) { - $element_info = \Drupal::service('plugin.manager.element_info') - ->createInstance($element['#type']) - ->getInfo(); - - if (isset($element_info['#process'])) { - $element['#process'] = $element_info['#process']; - } - } $form['account']['roles']['#process'][] = 'lightning_core_set_role_descriptions'; } } diff --git a/modules/lightning_features/lightning_core/config/install/core.base_field_override.node.page.promote.yml b/modules/lightning_features/lightning_core/modules/lightning_page/config/install/core.base_field_override.node.page.promote.yml similarity index 100% rename from modules/lightning_features/lightning_core/config/install/core.base_field_override.node.page.promote.yml rename to modules/lightning_features/lightning_core/modules/lightning_page/config/install/core.base_field_override.node.page.promote.yml diff --git a/modules/lightning_features/lightning_core/config/install/core.base_field_override.node.page.status.yml b/modules/lightning_features/lightning_core/modules/lightning_page/config/install/core.base_field_override.node.page.status.yml similarity index 100% rename from modules/lightning_features/lightning_core/config/install/core.base_field_override.node.page.status.yml rename to modules/lightning_features/lightning_core/modules/lightning_page/config/install/core.base_field_override.node.page.status.yml diff --git a/modules/lightning_features/lightning_core/config/install/core.entity_form_display.node.page.default.yml b/modules/lightning_features/lightning_core/modules/lightning_page/config/install/core.entity_form_display.node.page.default.yml similarity index 82% rename from modules/lightning_features/lightning_core/config/install/core.entity_form_display.node.page.default.yml rename to modules/lightning_features/lightning_core/modules/lightning_page/config/install/core.entity_form_display.node.page.default.yml index a8e4aabb9..2eace495b 100644 --- a/modules/lightning_features/lightning_core/config/install/core.entity_form_display.node.page.default.yml +++ b/modules/lightning_features/lightning_core/modules/lightning_page/config/install/core.entity_form_display.node.page.default.yml @@ -14,12 +14,19 @@ targetEntityType: node bundle: page mode: default content: - body: - type: text_textarea_with_summary - weight: 6 + title: + type: string_textfield + weight: 0 settings: - rows: 9 - summary_rows: 3 + size: 60 + placeholder: '' + third_party_settings: { } + uid: + type: entity_reference_autocomplete + weight: 1 + settings: + match_operator: CONTAINS + size: 60 placeholder: '' third_party_settings: { } created: @@ -27,16 +34,6 @@ content: weight: 2 settings: { } third_party_settings: { } - field_meta_tags: - type: metatag_firehose - weight: 7 - settings: { } - third_party_settings: { } - path: - type: path - weight: 5 - settings: { } - third_party_settings: { } promote: type: boolean_checkbox settings: @@ -49,19 +46,33 @@ content: display_label: true weight: 4 third_party_settings: { } - title: - type: string_textfield - weight: 0 + path: + type: path + weight: 5 + settings: { } + third_party_settings: { } + body: + type: text_textarea_with_summary + weight: 6 settings: - size: 60 + rows: 9 + summary_rows: 3 placeholder: '' third_party_settings: { } - uid: - type: entity_reference_autocomplete - weight: 1 + field_meta_tags: + type: metatag_firehose + weight: 7 + settings: { } + third_party_settings: { } + scheduled_update: + type: inline_entity_form_complex + weight: 8 settings: + override_labels: false + label_singular: '' + label_plural: '' + allow_new: true + allow_existing: false match_operator: CONTAINS - size: 60 - placeholder: '' third_party_settings: { } hidden: { } diff --git a/modules/lightning_features/lightning_core/config/install/core.entity_view_display.node.page.default.yml b/modules/lightning_features/lightning_core/modules/lightning_page/config/install/core.entity_view_display.node.page.default.yml similarity index 100% rename from modules/lightning_features/lightning_core/config/install/core.entity_view_display.node.page.default.yml rename to modules/lightning_features/lightning_core/modules/lightning_page/config/install/core.entity_view_display.node.page.default.yml diff --git a/modules/lightning_features/lightning_core/config/install/core.entity_view_display.node.page.teaser.yml b/modules/lightning_features/lightning_core/modules/lightning_page/config/install/core.entity_view_display.node.page.teaser.yml similarity index 100% rename from modules/lightning_features/lightning_core/config/install/core.entity_view_display.node.page.teaser.yml rename to modules/lightning_features/lightning_core/modules/lightning_page/config/install/core.entity_view_display.node.page.teaser.yml diff --git a/modules/lightning_features/lightning_core/config/install/field.field.node.page.body.yml b/modules/lightning_features/lightning_core/modules/lightning_page/config/install/field.field.node.page.body.yml similarity index 100% rename from modules/lightning_features/lightning_core/config/install/field.field.node.page.body.yml rename to modules/lightning_features/lightning_core/modules/lightning_page/config/install/field.field.node.page.body.yml diff --git a/modules/lightning_features/lightning_core/config/install/field.field.node.page.field_meta_tags.yml b/modules/lightning_features/lightning_core/modules/lightning_page/config/install/field.field.node.page.field_meta_tags.yml similarity index 100% rename from modules/lightning_features/lightning_core/config/install/field.field.node.page.field_meta_tags.yml rename to modules/lightning_features/lightning_core/modules/lightning_page/config/install/field.field.node.page.field_meta_tags.yml diff --git a/modules/lightning_features/lightning_core/config/install/node.type.page.yml b/modules/lightning_features/lightning_core/modules/lightning_page/config/install/node.type.page.yml similarity index 61% rename from modules/lightning_features/lightning_core/config/install/node.type.page.yml rename to modules/lightning_features/lightning_core/modules/lightning_page/config/install/node.type.page.yml index ecb55f178..d0235e5cb 100644 --- a/modules/lightning_features/lightning_core/config/install/node.type.page.yml +++ b/modules/lightning_features/lightning_core/modules/lightning_page/config/install/node.type.page.yml @@ -8,6 +8,16 @@ third_party_settings: available_menus: - main parent: 'main:' + workbench_moderation: + enabled: true + allowed_moderation_states: + - archived + - draft + - needs_review + - published + default_moderation_state: draft + lightning_workflow: + embargo: true name: 'Basic page' type: page description: 'Use basic pages for your static content, such as an ''About us'' page.' diff --git a/modules/lightning_features/lightning_core/modules/lightning_page/lightning_page.info.yml b/modules/lightning_features/lightning_core/modules/lightning_page/lightning_page.info.yml new file mode 100644 index 000000000..1fc36bddc --- /dev/null +++ b/modules/lightning_features/lightning_core/modules/lightning_page/lightning_page.info.yml @@ -0,0 +1,7 @@ +name: Basic Page +package: Lightning +core: 8.x +type: module +description: Provides a "Basic Page" content type that is, indeed, very basic. +dependencies: + - lightning_core diff --git a/modules/lightning_features/lightning_layout/config/install/field.field.node.page.panelizer.yml b/modules/lightning_features/lightning_layout/config/optional/field.field.node.page.panelizer.yml similarity index 100% rename from modules/lightning_features/lightning_layout/config/install/field.field.node.page.panelizer.yml rename to modules/lightning_features/lightning_layout/config/optional/field.field.node.page.panelizer.yml diff --git a/modules/lightning_features/lightning_layout/lightning_layout.info.yml b/modules/lightning_features/lightning_layout/lightning_layout.info.yml index 96a008465..52f36769c 100644 --- a/modules/lightning_features/lightning_layout/lightning_layout.info.yml +++ b/modules/lightning_features/lightning_layout/lightning_layout.info.yml @@ -9,3 +9,5 @@ dependencies: # decoupled; see the issue summary in https://www.drupal.org/node/2600634. - page_manager - panelizer +components: + - lightning_landing_page diff --git a/modules/lightning_features/lightning_layout/config/install/core.base_field_override.node.landing_page.promote.yml b/modules/lightning_features/lightning_layout/modules/lightning_landing_page/config/install/core.base_field_override.node.landing_page.promote.yml similarity index 100% rename from modules/lightning_features/lightning_layout/config/install/core.base_field_override.node.landing_page.promote.yml rename to modules/lightning_features/lightning_layout/modules/lightning_landing_page/config/install/core.base_field_override.node.landing_page.promote.yml diff --git a/modules/lightning_features/lightning_layout/config/install/core.entity_form_display.node.landing_page.default.yml b/modules/lightning_features/lightning_layout/modules/lightning_landing_page/config/install/core.entity_form_display.node.landing_page.default.yml similarity index 100% rename from modules/lightning_features/lightning_layout/config/install/core.entity_form_display.node.landing_page.default.yml rename to modules/lightning_features/lightning_layout/modules/lightning_landing_page/config/install/core.entity_form_display.node.landing_page.default.yml diff --git a/modules/lightning_features/lightning_layout/config/install/core.entity_view_display.node.landing_page.default.yml b/modules/lightning_features/lightning_layout/modules/lightning_landing_page/config/install/core.entity_view_display.node.landing_page.default.yml similarity index 100% rename from modules/lightning_features/lightning_layout/config/install/core.entity_view_display.node.landing_page.default.yml rename to modules/lightning_features/lightning_layout/modules/lightning_landing_page/config/install/core.entity_view_display.node.landing_page.default.yml diff --git a/modules/lightning_features/lightning_layout/config/install/core.entity_view_display.node.landing_page.full.yml b/modules/lightning_features/lightning_layout/modules/lightning_landing_page/config/install/core.entity_view_display.node.landing_page.full.yml similarity index 100% rename from modules/lightning_features/lightning_layout/config/install/core.entity_view_display.node.landing_page.full.yml rename to modules/lightning_features/lightning_layout/modules/lightning_landing_page/config/install/core.entity_view_display.node.landing_page.full.yml diff --git a/modules/lightning_features/lightning_layout/config/install/field.field.node.landing_page.field_meta_tags.yml b/modules/lightning_features/lightning_layout/modules/lightning_landing_page/config/install/field.field.node.landing_page.field_meta_tags.yml similarity index 100% rename from modules/lightning_features/lightning_layout/config/install/field.field.node.landing_page.field_meta_tags.yml rename to modules/lightning_features/lightning_layout/modules/lightning_landing_page/config/install/field.field.node.landing_page.field_meta_tags.yml diff --git a/modules/lightning_features/lightning_layout/config/install/field.field.node.landing_page.panelizer.yml b/modules/lightning_features/lightning_layout/modules/lightning_landing_page/config/install/field.field.node.landing_page.panelizer.yml similarity index 100% rename from modules/lightning_features/lightning_layout/config/install/field.field.node.landing_page.panelizer.yml rename to modules/lightning_features/lightning_layout/modules/lightning_landing_page/config/install/field.field.node.landing_page.panelizer.yml diff --git a/modules/lightning_features/lightning_layout/config/install/node.type.landing_page.yml b/modules/lightning_features/lightning_layout/modules/lightning_landing_page/config/install/node.type.landing_page.yml similarity index 100% rename from modules/lightning_features/lightning_layout/config/install/node.type.landing_page.yml rename to modules/lightning_features/lightning_layout/modules/lightning_landing_page/config/install/node.type.landing_page.yml diff --git a/modules/lightning_features/lightning_layout/modules/lightning_landing_page/lightning_landing_page.info.yml b/modules/lightning_features/lightning_layout/modules/lightning_landing_page/lightning_landing_page.info.yml new file mode 100644 index 000000000..7367e7012 --- /dev/null +++ b/modules/lightning_features/lightning_layout/modules/lightning_landing_page/lightning_landing_page.info.yml @@ -0,0 +1,7 @@ +name: Landing Page +package: Lightning +core: 8.x +type: module +description: Provides a content type which allows you to build free-form one-off landing pages. +dependencies: + - lightning_layout diff --git a/modules/lightning_features/lightning_workflow/config/install/core.entity_form_display.scheduled_update.multiple_node_embargo.default.yml b/modules/lightning_features/lightning_workflow/config/install/core.entity_form_display.scheduled_update.multiple_node_embargo.default.yml index 2ff0c5106..a7cbb6109 100644 --- a/modules/lightning_features/lightning_workflow/config/install/core.entity_form_display.scheduled_update.multiple_node_embargo.default.yml +++ b/modules/lightning_features/lightning_workflow/config/install/core.entity_form_display.scheduled_update.multiple_node_embargo.default.yml @@ -4,8 +4,6 @@ dependencies: config: - field.field.scheduled_update.multiple_node_embargo.field_moderation_state_1 - scheduled_updates.scheduled_update_type.multiple_node_embargo -_core: - default_config_hash: TaoCbKG82-4tHEGba1IBuPl9liE6lSMUO14FtFyYH34 id: scheduled_update.multiple_node_embargo.default targetEntityType: scheduled_update bundle: multiple_node_embargo diff --git a/modules/lightning_features/lightning_workflow/config/install/core.entity_form_display.scheduled_update.node_embargo.default.yml b/modules/lightning_features/lightning_workflow/config/install/core.entity_form_display.scheduled_update.node_embargo.default.yml index 8f4752b1d..3bad8f23a 100644 --- a/modules/lightning_features/lightning_workflow/config/install/core.entity_form_display.scheduled_update.node_embargo.default.yml +++ b/modules/lightning_features/lightning_workflow/config/install/core.entity_form_display.scheduled_update.node_embargo.default.yml @@ -4,8 +4,6 @@ dependencies: config: - field.field.scheduled_update.node_embargo.field_moderation_state - scheduled_updates.scheduled_update_type.node_embargo -_core: - default_config_hash: XLM4XxWVsRabgIZ4Wt5dwKtYQJzf82ddxM1k4SpkCxw id: scheduled_update.node_embargo.default targetEntityType: scheduled_update bundle: node_embargo diff --git a/modules/lightning_features/lightning_workflow/config/install/field.field.node.page.scheduled_update.yml b/modules/lightning_features/lightning_workflow/config/install/field.field.node.page.scheduled_update.yml deleted file mode 100644 index 8b50928d0..000000000 --- a/modules/lightning_features/lightning_workflow/config/install/field.field.node.page.scheduled_update.yml +++ /dev/null @@ -1,25 +0,0 @@ -langcode: en -status: true -dependencies: - config: - - field.storage.node.scheduled_update - - node.type.page - - scheduled_updates.scheduled_update_type.node_embargo -_core: - default_config_hash: KwzC8YVg-OgyTOwu5a0Oa6N0xTb-P9H6HJv1FQNMIh8 -id: node.page.scheduled_update -field_name: scheduled_update -entity_type: node -bundle: page -label: 'Scheduled Update' -description: '' -required: false -translatable: false -default_value: { } -default_value_callback: '' -settings: - handler_settings: - target_bundles: - - node_embargo - handler: 'default:scheduled_update' -field_type: entity_reference diff --git a/modules/lightning_features/lightning_workflow/config/install/field.field.scheduled_update.multiple_node_embargo.field_moderation_state_1.yml b/modules/lightning_features/lightning_workflow/config/install/field.field.scheduled_update.multiple_node_embargo.field_moderation_state_1.yml index 170859f38..f42a568d7 100644 --- a/modules/lightning_features/lightning_workflow/config/install/field.field.scheduled_update.multiple_node_embargo.field_moderation_state_1.yml +++ b/modules/lightning_features/lightning_workflow/config/install/field.field.scheduled_update.multiple_node_embargo.field_moderation_state_1.yml @@ -4,8 +4,6 @@ dependencies: config: - field.storage.scheduled_update.field_moderation_state_1 - scheduled_updates.scheduled_update_type.multiple_node_embargo -_core: - default_config_hash: _jhq30skbuYSA2hgaBAOtm2J-oh2SOvwx9HO7f5fMuk id: scheduled_update.multiple_node_embargo.field_moderation_state_1 field_name: field_moderation_state_1 entity_type: scheduled_update diff --git a/modules/lightning_features/lightning_workflow/config/install/field.field.scheduled_update.node_embargo.field_moderation_state.yml b/modules/lightning_features/lightning_workflow/config/install/field.field.scheduled_update.node_embargo.field_moderation_state.yml index f6a5db0f4..42b75d55f 100644 --- a/modules/lightning_features/lightning_workflow/config/install/field.field.scheduled_update.node_embargo.field_moderation_state.yml +++ b/modules/lightning_features/lightning_workflow/config/install/field.field.scheduled_update.node_embargo.field_moderation_state.yml @@ -4,8 +4,6 @@ dependencies: config: - field.storage.scheduled_update.field_moderation_state - scheduled_updates.scheduled_update_type.node_embargo -_core: - default_config_hash: UUdOywcjdHs2k7tBQ85t84KEGF2xb3HTCFVoG53xMVM id: scheduled_update.node_embargo.field_moderation_state field_name: field_moderation_state entity_type: scheduled_update diff --git a/modules/lightning_features/lightning_workflow/config/install/field.storage.node.scheduled_update.yml b/modules/lightning_features/lightning_workflow/config/install/field.storage.node.scheduled_update.yml index ad21ff3d6..914b0e5a5 100644 --- a/modules/lightning_features/lightning_workflow/config/install/field.storage.node.scheduled_update.yml +++ b/modules/lightning_features/lightning_workflow/config/install/field.storage.node.scheduled_update.yml @@ -4,8 +4,6 @@ dependencies: module: - node - scheduled_updates -_core: - default_config_hash: 96C_n8O06F-YdI1bYCxqWc6Qt5LUhGopvsYBIY9E1Mo id: node.scheduled_update field_name: scheduled_update entity_type: node diff --git a/modules/lightning_features/lightning_workflow/config/install/field.storage.scheduled_update.field_moderation_state.yml b/modules/lightning_features/lightning_workflow/config/install/field.storage.scheduled_update.field_moderation_state.yml index 0bef04425..f5beca9c1 100644 --- a/modules/lightning_features/lightning_workflow/config/install/field.storage.scheduled_update.field_moderation_state.yml +++ b/modules/lightning_features/lightning_workflow/config/install/field.storage.scheduled_update.field_moderation_state.yml @@ -4,8 +4,6 @@ dependencies: module: - scheduled_updates - workbench_moderation -_core: - default_config_hash: _nHUpwBqKtOytog5Y0yrOVeXQIXO_qegv0S_Gs25IOY id: scheduled_update.field_moderation_state field_name: field_moderation_state entity_type: scheduled_update diff --git a/modules/lightning_features/lightning_workflow/config/install/field.storage.scheduled_update.field_moderation_state_1.yml b/modules/lightning_features/lightning_workflow/config/install/field.storage.scheduled_update.field_moderation_state_1.yml index 0cff7fd39..b15746e8f 100644 --- a/modules/lightning_features/lightning_workflow/config/install/field.storage.scheduled_update.field_moderation_state_1.yml +++ b/modules/lightning_features/lightning_workflow/config/install/field.storage.scheduled_update.field_moderation_state_1.yml @@ -4,8 +4,6 @@ dependencies: module: - scheduled_updates - workbench_moderation -_core: - default_config_hash: UfGyni46MHC7LmvLL-w3lvoMcZIahq2Hw-p-6iDFFkk id: scheduled_update.field_moderation_state_1 field_name: field_moderation_state_1 entity_type: scheduled_update diff --git a/modules/lightning_features/lightning_workflow/config/install/scheduled_updates.scheduled_update_type.multiple_node_embargo.yml b/modules/lightning_features/lightning_workflow/config/install/scheduled_updates.scheduled_update_type.multiple_node_embargo.yml index 235f50452..566d60427 100644 --- a/modules/lightning_features/lightning_workflow/config/install/scheduled_updates.scheduled_update_type.multiple_node_embargo.yml +++ b/modules/lightning_features/lightning_workflow/config/install/scheduled_updates.scheduled_update_type.multiple_node_embargo.yml @@ -1,8 +1,6 @@ langcode: en status: true dependencies: { } -_core: - default_config_hash: bsDvum-J70OIROUKs71tIZHm8tVkLQGImNDr4THMbx0 id: multiple_node_embargo label: 'Publish multiple nodes at a certain time' update_entity_type: node diff --git a/modules/lightning_features/lightning_workflow/config/install/scheduled_updates.scheduled_update_type.node_embargo.yml b/modules/lightning_features/lightning_workflow/config/install/scheduled_updates.scheduled_update_type.node_embargo.yml index 430e9861c..c8213b4c7 100644 --- a/modules/lightning_features/lightning_workflow/config/install/scheduled_updates.scheduled_update_type.node_embargo.yml +++ b/modules/lightning_features/lightning_workflow/config/install/scheduled_updates.scheduled_update_type.node_embargo.yml @@ -1,8 +1,6 @@ langcode: en status: true dependencies: { } -_core: - default_config_hash: Lx-emuGAmsJhShPvVJG03Ah7VtuJNjMuzHBjkG5vQzw id: node_embargo label: 'Publish single node at certain time' update_entity_type: node diff --git a/modules/lightning_features/lightning_workflow/config/install/views.view.moderation_history.yml b/modules/lightning_features/lightning_workflow/config/install/views.view.moderation_history.yml index 7b8c9bef9..f01a78aa3 100644 --- a/modules/lightning_features/lightning_workflow/config/install/views.view.moderation_history.yml +++ b/modules/lightning_features/lightning_workflow/config/install/views.view.moderation_history.yml @@ -4,8 +4,6 @@ dependencies: module: - node - user -_core: - default_config_hash: VrF4HC3OxIEMuLWUxvdZGAJV23vqV75Vif-Ly0Tl1n4 id: moderation_history label: 'Moderation History' module: views diff --git a/modules/lightning_features/lightning_workflow/lightning_workflow.install b/modules/lightning_features/lightning_workflow/lightning_workflow.install index d0a81e3cb..b99bca6d8 100644 --- a/modules/lightning_features/lightning_workflow/lightning_workflow.install +++ b/modules/lightning_features/lightning_workflow/lightning_workflow.install @@ -5,7 +5,6 @@ * Contains installation and update routines for Lightning Workflow. */ -use Drupal\Core\Entity\Entity\EntityFormDisplay; use Drupal\node\Entity\NodeType; use Drupal\views\Entity\View; @@ -13,49 +12,6 @@ use Drupal\views\Entity\View; * Implements hook_install(). */ function lightning_workflow_install() { - $module = 'workbench_moderation'; - - // Enable moderation for the Page content type, if it exists. - $page_type = NodeType::load('page'); - if ($page_type) { - $page_type - ->setThirdPartySetting($module, 'enabled', TRUE) - ->setThirdPartySetting($module, 'allowed_moderation_states', [ - 'archived', - 'draft', - 'needs_review', - 'published', - ]) - ->setThirdPartySetting($module, 'default_moderation_state', 'draft') - ->save(); - - /** @var \Drupal\Core\Entity\Display\EntityFormDisplayInterface $form_display */ - $form_display = EntityFormDisplay::load('node.page.default'); - if ($form_display) { - $weights = array_map( - function (array $component) { - return $component['weight']; - }, - $form_display->getComponents() - ); - - sort($weights); - $form_display->setComponent('scheduled_update', [ - 'type' => 'inline_entity_form_complex', - 'weight' => end($weights) + 1, - 'settings' => [ - 'override_labels' => FALSE, - 'label_singular' => '', - 'label_plural' => '', - 'allow_new' => TRUE, - 'allow_existing' => FALSE, - 'match_operator' => 'CONTAINS', - ], - 'third_party_settings' => [], - ])->save(); - } - } - // Set up content type-specific permissions. lightning_workflow_update_8001(); diff --git a/modules/lightning_features/lightning_workflow/lightning_workflow.module b/modules/lightning_features/lightning_workflow/lightning_workflow.module index 259c72874..ecc8da80a 100644 --- a/modules/lightning_features/lightning_workflow/lightning_workflow.module +++ b/modules/lightning_features/lightning_workflow/lightning_workflow.module @@ -5,7 +5,9 @@ * Provides workflow enhancements for Drupal. */ +use Drupal\Core\Entity\Entity\EntityFormDisplay; use Drupal\Core\Form\FormStateInterface; +use Drupal\field\Entity\FieldConfig; use Drupal\lightning_workflow\Plugin\views\field\NodeBulkForm; use Drupal\node\NodeTypeInterface; use Drupal\views\ViewExecutable; @@ -62,8 +64,9 @@ function lightning_workflow_form_node_form_alter(array &$form, FormStateInterfac * Implements hook_ENTITY_TYPE_insert(). */ function lightning_workflow_node_type_insert(NodeTypeInterface $node_type) { - /** @var \Drupal\user\RoleInterface $role */ - user_role_grant_permissions($node_type->id() . '_creator', [ + $id = $node_type->id(); + + user_role_grant_permissions($id . '_creator', [ 'view any unpublished content', 'use draft_draft transition', 'use draft_needs_review transition', @@ -71,12 +74,44 @@ function lightning_workflow_node_type_insert(NodeTypeInterface $node_type) { 'view latest version', ]); - user_role_grant_permissions($node_type->id() . '_reviewer', [ + user_role_grant_permissions($id . '_reviewer', [ 'use draft_published transition', 'use needs_review_draft transition', 'use needs_review_published transition', 'use published_published transition', ]); + + if ($node_type->getThirdPartySetting('lightning_workflow', 'embargo')) { + FieldConfig::create([ + 'field_name' => 'scheduled_update', + 'entity_type' => 'node', + 'bundle' => $id, + 'label' => t('Scheduled Update'), + 'settings' => [ + 'handler' => 'default:scheduled_update', + 'handler_settings' => [ + 'target_bundles' => ['node_embargo'], + ], + ], + ])->save(); + + $form_display = EntityFormDisplay::load('node.' . $id . '.default'); + if ($form_display) { + $form_display + ->setComponent('scheduled_update', [ + 'type' => 'inline_entity_form_complex', + 'settings' => [ + 'override_labels' => FALSE, + 'label_singular' => '', + 'label_plural' => '', + 'allow_new' => TRUE, + 'allow_existing' => FALSE, + 'match_operator' => 'CONTAINS', + ], + ]) + ->save(); + } + } } /** diff --git a/src/Form/ExtensionSelectForm.php b/src/Form/ExtensionSelectForm.php index f03a2c730..b73c3c7b9 100644 --- a/src/Form/ExtensionSelectForm.php +++ b/src/Form/ExtensionSelectForm.php @@ -7,9 +7,9 @@ use Drupal\Core\Form\FormBase; use Drupal\Core\Form\FormStateInterface; use Drupal\Core\Render\Element; -use Drupal\Core\Render\Element\Checkboxes; use Drupal\Core\StringTranslation\TranslationInterface; use Drupal\lightning\Extender; +use Drupal\lightning\FormHelper; use Symfony\Component\DependencyInjection\ContainerInterface; /** @@ -38,6 +38,13 @@ class ExtensionSelectForm extends FormBase { */ protected $infoParser; + /** + * The form helper. + * + * @var \Drupal\lightning\FormHelper + */ + protected $formHelper; + /** * ExtensionSelectForm constructor. * @@ -49,12 +56,15 @@ class ExtensionSelectForm extends FormBase { * The info parser service. * @param \Drupal\Core\StringTranslation\TranslationInterface $translator * The string translation service. + * @param \Drupal\lightning\FormHelper $form_helper + * The form helper. */ - public function __construct(Extender $extender, $root, InfoParserInterface $info_parser, TranslationInterface $translator) { + public function __construct(Extender $extender, $root, InfoParserInterface $info_parser, TranslationInterface $translator, FormHelper $form_helper) { $this->extender = $extender; $this->root = $root; $this->infoParser = $info_parser; $this->stringTranslation = $translator; + $this->formHelper = $form_helper; } /** @@ -65,7 +75,8 @@ public static function create(ContainerInterface $container) { $container->get('lightning.extender'), $container->get('app.root'), $container->get('info_parser'), - $container->get('string_translation') + $container->get('string_translation'), + $container->get('lightning.form_helper') ); } @@ -99,6 +110,7 @@ protected function getExtensionInfo() { $extensions = $this->pluck( [ + 'lightning_core', 'lightning_media', 'lightning_layout', 'lightning_workflow', @@ -143,18 +155,6 @@ public function buildForm(array $form, FormStateInterface $form_state, array &$i ]; $form['experimental']['modules'] = [ '#type' => 'checkboxes', - '#process' => [ - // Apply normal checkbox processing... - [ - Checkboxes::class, - 'processCheckboxes', - ], - // ...and our own special sauce. - [ - __CLASS__, - 'addExperimentalGate', - ], - ], ]; $form['actions'] = [ 'continue' => [ @@ -169,6 +169,12 @@ public function buildForm(array $form, FormStateInterface $form_state, array &$i '#value' => [], ]; + $this->formHelper->applyStandardProcessing($form['modules']); + $form['modules']['#process'][] = [__CLASS__, 'requireCore']; + + $this->formHelper->applyStandardProcessing($form['experimental']['modules']); + $form['experimental']['modules']['#process'][] = [__CLASS__, 'addExperimentalGate']; + foreach ($this->getExtensionInfo() as $key => $info) { if (empty($info['experimental'])) { $form['modules']['#options'][$key] = $info['name']; @@ -219,6 +225,26 @@ public function buildForm(array $form, FormStateInterface $form_state, array &$i return $form; } + /** + * Forces the Lightning Core extension to be selected. + * + * Turns the Lightning Core checkbox into a persistent server-side value so + * that it is always installed. + * + * @param array $element + * The set of checkboxes listing the available extensions. + * + * @return array + * The modified checkboxes. + */ + public static function requireCore(array $element) { + $element['lightning_core'] = [ + '#type' => 'value', + '#value' => $element['lightning_core']['#return_value'], + ]; + return $element; + } + /** * Process function to hide an element behind the experimental gate. * diff --git a/src/FormHelper.php b/src/FormHelper.php new file mode 100644 index 000000000..70e01f8b7 --- /dev/null +++ b/src/FormHelper.php @@ -0,0 +1,45 @@ +elementInfo = $element_info; + } + + /** + * Applies standard process functions to a form element. + * + * @param array $element + * The form element. + */ + public function applyStandardProcessing(array &$element) { + if (empty($element['#process'])) { + $info = $this->elementInfo->getInfo($element['#type']); + + if (isset($info['#process'])) { + $element['#process'] = $info['#process']; + } + } + } + +}