Skip to content
Snippets Groups Projects
Commit 36d63191 authored by Rajab Natshah's avatar Rajab Natshah
Browse files

Issue #3406041: Add a Varbase Workflow settings for limited applicable entity...

Issue #3406041: Add a Varbase Workflow settings for limited applicable entity types to use with Auto grant access unpublished for limited applicable entity types when enabling extra Varbase features
parent 657dd852
No related branches found
No related tags found
No related merge requests found
limited_applicable_entity_types:
block_content: 0
entity_subqueue: 0
media: 0
menu_link_content: 0
node: 1
paragraphs_library_item: 0
taxonomy_term: 1
varbase_workflow.settings:
type: config_object
label: "Varbase Workflow settings"
mapping:
limited_applicable_entity_types:
type: sequence
label: "Access unpublished limited applicable entity types"
entity_type:
type: string
label: "Entity type"
......@@ -10,23 +10,55 @@
use Drupal\user\Entity\Role;
use Drupal\access_unpublished\AccessUnpublished;
/**
* Auto grant access unpublished for limited applicable entity types.
*/
function varbase_workflow__auto_grant_access_unpublished() {
$vw_settings = \Drupal::service('config.factory')->get('varbase_workflow.settings')->get('limited_applicable_entity_types');
$definitions = \Drupal::service('entity_type.manager')->getDefinitions();
foreach ($definitions as $definition) {
if (!empty($vw_settings[$definition->id()])
&& isset($vw_settings[$definition->id()])
&& $vw_settings[$definition->id()]) {
// Grant new access unpublished permissions for anonymous and all authenticated user roles
varbase_workflow__grant_access_unpublished_permissions('anonymous', $definition->id());
varbase_workflow__grant_access_unpublished_permissions('authenticated', $definition->id());
}
}
}
/**
* Grant Access Unpublished permissions for a user role.
*/
function grant_access_unpublished_permissions(string $user_role) {
if ($site_admin_user_role = Role::load($user_role)) {
function varbase_workflow__grant_access_unpublished_permissions(string $user_role, string $definition_id = '', string $bundle = '') {
if ($role = Role::load($user_role)) {
$vw_settings = \Drupal::service('config.factory')->get('varbase_workflow.settings')->get('limited_applicable_entity_types');
// Default Access Unpublished permissions.
$permissions = [];
$definitions = \Drupal::service('entity_type.manager')->getDefinitions();
foreach ($definitions as $definition) {
if (AccessUnpublished::applicableEntityType($definition)) {
if (($definition_id == '' || $definition->id() == $definition_id)
&& AccessUnpublished::applicableEntityType($definition)
&& !empty($vw_settings[$definition_id])
&& isset($vw_settings[$definition_id])
&& $vw_settings[$definition_id]) {
$permission = 'access_unpublished ' . $definition->id();
if ($definition->get('bundle_entity_type')) {
$bundles = \Drupal::service('entity_type.manager')->getStorage($definition->getBundleEntityType())->loadMultiple();
foreach ($bundles as $bundle) {
$permissions[] = $permission . ' ' . $bundle->id();
if ($bundle == '') {
$bundles = \Drupal::service('entity_type.manager')->getStorage($definition->getBundleEntityType())->loadMultiple();
foreach ($bundles as $bundle) {
$permissions[] = $permission . ' ' . $bundle->id();
}
}
else {
$permissions[] = $permission . ' ' . $bundle;
}
}
else {
$permissions[] = $permission;
......@@ -36,10 +68,10 @@ function grant_access_unpublished_permissions(string $user_role) {
}
foreach ($permissions as $permission) {
$site_admin_user_role->grantPermission($permission);
$role->grantPermission($permission);
}
$site_admin_user_role->trustData()->save();
$role->trustData()->save();
}
}
......@@ -15,14 +15,13 @@ function varbase_workflow_update_103001() {
\Drupal::service('module_installer')->install(['access_unpublished'], FALSE);
}
// Grant new access unpublished permissions for anonymous and all authenticated user roles.
grant_access_unpublished_permissions('anonymous');
grant_access_unpublished_permissions('authenticated');
// Grant the Site Admin user role with generate token permissions.
user_role_grant_permissions('site_admin', [
'access tokens overview',
'renew token',
'delete token',
]);
// Auto grant access unpublished for limited applicable entity types.
varbase_workflow__auto_grant_access_unpublished();
}
<?php
namespace Drupal\varbase_workflow\Form;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Drupal\Core\Form\ConfigFormBase;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\Core\Extension\ModuleHandlerInterface;
use Drupal\Core\Entity\EntityTypeBundleInfoInterface;
use Drupal\Core\DependencyInjection\ClassResolverInterface;
use Drupal\user\Entity\Role;
use Drupal\access_unpublished\AccessUnpublished;
/**
* Varbase Workflow Settings Form Class.
*/
class VarbaseWorkflowSettingsForm extends ConfigFormBase {
/**
* The module handler service.
*
* @var \Drupal\Core\Extension\ModuleHandlerInterface
*/
protected $moduleHandler;
/**
* The entity type manager.
*
* @var \Drupal\Core\Entity\EntityTypeManagerInterface
*/
protected $entityTypeManager;
/**
* The entity type bundle information service.
*
* @var \Drupal\Core\Entity\EntityTypeBundleInfoInterface
*/
protected $bundleInfo;
/**
* The class resolver.
*
* @var \Drupal\Core\DependencyInjection\ClassResolverInterface
*/
protected $classResolver;
/**
* Constructs a new Varbase Workflow Block.
*
* @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
* The factory for configuration objects.
* @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler
* The module handler service.
* @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
* The entity type manager service.
* @param \Drupal\Core\Entity\EntityTypeBundleInfoInterface $bundle_info
* The entity type bundle service.
* @param \Drupal\Core\DependencyInjection\ClassResolverInterface $class_resolver
* (optional) The class resolver.
*/
public function __construct(ConfigFactoryInterface $config_factory, ModuleHandlerInterface $module_handler, EntityTypeManagerInterface $entity_type_manager, EntityTypeBundleInfoInterface $bundle_info, ClassResolverInterface $class_resolver) {
parent::__construct($config_factory);
$this->moduleHandler = $module_handler;
$this->entityTypeManager = $entity_type_manager;
$this->bundleInfo = $bundle_info;
$this->classResolver = $class_resolver;
}
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container) {
return new static(
$container->get('config.factory'),
$container->get('module_handler'),
$container->get('entity_type.manager'),
$container->get('entity_type.bundle.info'),
$container->get('class_resolver')
);
}
/**
* {@inheritdoc}
*/
public function getFormId() {
return 'varbase_workflow_settings_form';
}
/**
* {@inheritdoc}
*/
public function buildForm(array $form, FormStateInterface $form_state) {
$config = $this->config('varbase_workflow.settings');
$definitions = $this->entityTypeManager->getDefinitions();
$vw_settings = $config->get('limited_applicable_entity_types');
$form['limited_applicable_entity_types'] = [
'#type' => 'fieldset',
'#title' => $this->t('Limit Applicable Entity Types for Access Unpublished'),
'#collapsible' => TRUE,
'#collapsed' => FALSE,
'#tree' => TRUE,
'#description' => $this->t('Select applicable Entity type to auto grant new access unpublished permissions for anonymous and all authenticated user roles for these entity types.'),
];
foreach ($definitions as $definition) {
if (AccessUnpublished::applicableEntityType($definition)) {
$form['limited_applicable_entity_types'][$definition->id()] = [
'#type' => 'checkbox',
'#title' => $definition->getLabel(),
'#default_value' => !empty($vw_settings[$definition->id()]) ?? [],
];
}
}
return parent::buildForm($form, $form_state);
}
/**
* {@inheritdoc}
*/
public function submitForm(array &$form, FormStateInterface $form_state) {
// Entity types which are going to use the varbase Workflow.
$this->config('varbase_workflow.settings')
->set('limited_applicable_entity_types', $form_state->getValue('limited_applicable_entity_types'))
->save();
$this->autoGrantLimitedApplicableEntityTypes();
parent::submitForm($form, $form_state);
}
/**
* {@inheritdoc}
*/
protected function getEditableConfigNames() {
return ['varbase_workflow.settings'];
}
/**
* Auto grant limited applicable entity types.
*/
public function autoGrantLimitedApplicableEntityTypes() {
$vw_settings = $this->config('varbase_workflow.settings')->get('limited_applicable_entity_types');
$definitions = $this->entityTypeManager->getDefinitions();
foreach ($definitions as $definition) {
if (!empty($vw_settings[$definition->id()])
&& isset($vw_settings[$definition->id()])
&& $vw_settings[$definition->id()]) {
// Grant new access unpublished permissions for anonymous and all authenticated user roles
$this->grantAccessUnpublishedPermissions('anonymous', $definition->id());
$this->grantAccessUnpublishedPermissions('authenticated', $definition->id());
}
}
}
/**
* Grant Access Unpublished permissions for a user role.
*/
public function grantAccessUnpublishedPermissions(string $userRole, string $definitionId = '') {
if ($role = Role::load($userRole)) {
// Default Access Unpublished permissions.
$permissions = [];
$definitions = \Drupal::service('entity_type.manager')->getDefinitions();
foreach ($definitions as $definition) {
if (($definitionId == '' || $definition->id() == $definitionId)
&& AccessUnpublished::applicableEntityType($definition)) {
$permission = 'access_unpublished ' . $definition->id();
if ($definition->get('bundle_entity_type')) {
$bundles = \Drupal::service('entity_type.manager')->getStorage($definition->getBundleEntityType())->loadMultiple();
foreach ($bundles as $bundle) {
$permissions[] = $permission . ' ' . $bundle->id();
}
}
else {
$permissions[] = $permission;
}
}
}
foreach ($permissions as $permission) {
$role->grantPermission($permission);
}
$role->trustData()->save();
}
}
}
......@@ -33,8 +33,7 @@ function varbase_workflow_install() {
// Add permissions.
ModuleInstallerFactory::addPermissions('varbase_workflow');
// Grant new access unpublished permissions for anonymous and all authenticated user roles
grant_access_unpublished_permissions('anonymous');
grant_access_unpublished_permissions('authenticated');
// Auto grant access unpublished for limited applicable entity types.
varbase_workflow__auto_grant_access_unpublished();
}
varbase_workflow.settings:
title: "Varbase Workflow settings"
description: "Configuring Varbase Workflow."
parent: varbase_core.settings_index
route_name: varbase_workflow.settings
varbase_workflow.settings:
title: "Varbase Workflow settings"
route_name: varbase_core.settings_index
base_route: varbase_workflow.settings
......@@ -10,6 +10,9 @@ use Drupal\Core\Url;
use Drupal\Core\Link;
use Vardot\Entity\EntityDefinitionUpdateManager;
// Include all helpers.
include_once __DIR__ . '/includes/helpers.inc';
/**
* Implements hook_form_alter().
*/
......@@ -123,3 +126,13 @@ function _varbase_workflow_node_type_add_form(array &$form, FormStateInterface &
}
}
/**
* Implements hook_entity_bundle_create().
*/
function varbase_workflow_entity_bundle_create($entity_type_id, $bundle) {
// Grant new access unpublished permissions for anonymous and all authenticated user roles.
varbase_workflow__grant_access_unpublished_permissions('anonymous', $entity_type_id, $bundle);
varbase_workflow__grant_access_unpublished_permissions('authenticated', $entity_type_id, $bundle);
}
administer varbase workflow:
title: "Administer varbase workflow"
description: "Perform administration tasks for varbase workflow."
varbase_workflow.settings:
path: "/admin/config/varbase/varbase-workflow"
defaults:
_form: '\Drupal\varbase_workflow\Form\VarbaseWorkflowSettingsForm'
_title: "Varbase Workflow Settings"
requirements:
_permission: "administer varbase workflow"
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