tide_test-8.x-1.1/tide_test.module
tide_test.module
<?php
/**
* @file
* Tide Test module functionality.
*/
use Drupal\Core\Form\FormStateInterface;
use Drupal\tide_site\TideSiteFields;
use Drupal\user\Entity\Role;
use Drupal\workflows\Entity\Workflow;
/**
* Implements hook_entity_bundle_create().
*/
function tide_test_entity_bundle_create($entity_type_id, $bundle) {
if ($entity_type_id == 'node' && $bundle == 'test') {
// Grant permissions on Test content type to Approver and Editor.
$roles = ['approver', 'editor'];
$permissions = [
'create test content',
'delete any test content',
'delete own test content',
'delete test revisions',
'edit any test content',
'edit own test content',
'revert test revisions',
'view test revisions',
];
foreach ($roles as $role_name) {
$role = Role::load($role_name);
if ($role) {
foreach ($permissions as $permission) {
$role->grantPermission($permission);
}
$role->save();
}
}
// Enable Editorial workflow.
$editorial_workflow = Workflow::load('editorial');
if ($editorial_workflow) {
$editorial_workflow->getTypePlugin()->addEntityTypeAndBundle($entity_type_id, $bundle);
$editorial_workflow->save();
}
}
}
/**
* Implements hook_modules_installed().
*/
function tide_test_modules_installed($modules) {
module_set_weight('tide_test', 1000);
// Invoke hook_entity_bundle_create again so that other modules can change
// entity form display of the `test` content type which was reverted by
// default config import during module installation.
if (!\Drupal::service('config.installer')->isSyncing() && in_array('tide_test', $modules)) {
/** @var \Drupal\Core\Extension\ModuleHandler $moduleHandler */
$moduleHandler = \Drupal::service('module_handler');
$moduleHandler->invokeAll('entity_bundle_create', ['node', 'test']);
}
}
/**
* Implements hook_field_widget_form_alter().
*
* @todo: Extract into a service.
*/
function tide_test_field_widget_form_alter(&$element, FormStateInterface $form_state, $context) {
// Check if the tide_site module is enabled.
$moduleHandler = \Drupal::service('module_handler');
if ($moduleHandler->moduleExists('tide_site')) {
// Add default values for the Site fields of Test content type, so that
// their mandatory nature won't affect other Behat tests without
// knowledge of Tide Site.
/** @var \Drupal\Core\Field\BaseFieldDefinition $field_definition */
$field_definition = $context['items']->getFieldDefinition();
if ($field_definition && $field_definition->getTargetEntityTypeId() == 'node' && $field_definition->getTargetBundle() == 'test') {
if (TideSiteFields::isSiteField($field_definition->getName(), TideSiteFields::FIELD_SITE)) {
$options = array_keys($element['#options']);
if (empty($element['#default_value']) || !count($element['#default_value'])) {
$element['#default_value'] = [reset($options)];
}
}
if (TideSiteFields::isSiteField($field_definition->getName(), TideSiteFields::FIELD_PRIMARY_SITE)) {
if (empty($element['#default_value']) || !count($element['#default_value'])) {
$options = array_keys($element['#options']);
$element['#default_value'] = reset($options);
}
}
}
}
}
/**
* Implements hook_config_ignore_settings_alter().
*/
function tide_test_config_ignore_settings_alter(array &$settings) {
// Ignore all test config.
$settings[] = '*.test';
$settings[] = '*.test*';
$settings[] = '*.test.*';
$settings[] = '*.field_test*';
$settings[] = '*_test*';
$settings[] = '*.node--test';
}
