WorkflowAccessRoleForm.php in Workflow 8
File
modules/workflow_access/src/Form/WorkflowAccessRoleForm.php
View source
<?php
namespace Drupal\workflow_access\Form;
use Drupal\Core\Entity\EntityInterface;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Session\AccountInterface;
use Drupal\workflow\Entity\WorkflowState;
use Drupal\workflow\Form\WorkflowConfigTransitionFormBase;
class WorkflowAccessRoleForm extends WorkflowConfigTransitionFormBase {
protected $entitiesKey = 'workflow_state';
protected $type = 'access';
public function getFormId() {
return 'workflow_access_role';
}
protected function getEditableConfigNames() {
return [
'workflow_access.role',
];
}
public function buildHeader() {
$header = [
'label_new' => $this
->t('State'),
'view' => $this
->t('Roles who can view posts in this state'),
'update' => $this
->t('Roles who can edit posts in this state'),
'delete' => $this
->t('Roles who can delete posts in this state'),
];
return $header;
}
public function buildRow(EntityInterface $entity) {
$row = [];
$workflow = $this->workflow;
if ($workflow) {
$state = $entity;
$sid = $state
->id();
$type_id = $workflow
->id();
$roles = workflow_get_user_role_names("create {$type_id} workflow_transition");
if ($state
->isCreationState()) {
return [];
}
$view = $update = $delete = [];
$count = 0;
foreach (workflow_access_get_workflow_access_by_sid($sid) as $rid => $access) {
$count++;
$view[$rid] = $access['grant_view'] ? $rid : 0;
$update[$rid] = $access['grant_update'] ? $rid : 0;
$delete[$rid] = $access['grant_delete'] ? $rid : 0;
}
if (!$count) {
$view = [
AccountInterface::ANONYMOUS_ROLE => AccountInterface::ANONYMOUS_ROLE,
AccountInterface::AUTHENTICATED_ROLE => AccountInterface::AUTHENTICATED_ROLE,
];
}
$row['label_new'] = [
'#type' => 'value',
'#markup' => $this
->t('@label', [
'@label' => $state
->label(),
]),
];
$row['view'] = [
'#type' => 'checkboxes',
'#options' => $roles,
'#default_value' => $view,
];
$row['update'] = [
'#type' => 'checkboxes',
'#options' => $roles,
'#default_value' => $update,
];
$row['delete'] = [
'#type' => 'checkboxes',
'#options' => $roles,
'#default_value' => $delete,
];
}
return $row;
}
public function submitForm(array &$form, FormStateInterface $form_state) {
foreach ($form_state
->getValue($this->entitiesKey) as $sid => $access) {
if (!WorkflowState::load($sid)) {
continue;
}
foreach ($access['view'] as $rid => $checked) {
$data[$rid] = [
'grant_view' => !empty($access['view'][$rid]) ? (bool) $access['view'][$rid] : 0,
'grant_update' => !empty($access['update'][$rid]) ? (bool) $access['update'][$rid] : 0,
'grant_delete' => !empty($access['delete'][$rid]) ? (bool) $access['delete'][$rid] : 0,
];
}
workflow_access_insert_workflow_access_by_sid($sid, $data);
node_access_needs_rebuild(TRUE);
}
parent::submitForm($form, $form_state);
}
}