entity; $access = $webform->getAccessRules(); $permissions = [ 'create' => $this->t('Create webform submissions'), 'view_any' => $this->t('View all webform submissions'), 'update_any' => $this->t('Update all webform submissions'), 'delete_any' => $this->t('Delete all webform submissions'), 'purge_any' => $this->t('Purge all webform submissions'), 'view_own' => $this->t('View own webform submissions'), 'update_own' => $this->t('Update own webform submissions'), 'delete_own' => $this->t('Delete own webform submissions'), ]; $form['access']['#tree'] = TRUE; foreach ($permissions as $name => $title) { $form['access'][$name] = [ '#type' => ($name === 'create') ? 'fieldset' : 'details', '#title' => $title, '#open' => ($access[$name]['roles'] || $access[$name]['users']) ? TRUE : FALSE, ]; $form['access'][$name]['roles'] = [ '#type' => 'webform_roles', '#title' => $this->t('Roles'), '#include_anonymous' => (in_array($name, ['create', 'view_any'])) ? TRUE : FALSE, '#default_value' => $access[$name]['roles'], ]; $form['access'][$name]['users'] = [ '#type' => 'webform_users', '#title' => $this->t('Users'), '#default_value' => $access[$name]['users'] ? $this->entityTypeManager->getStorage('user')->loadMultiple($access[$name]['users']) : [], ]; } return parent::form($form, $form_state); } /** * {@inheritdoc} */ protected function actionsElement(array $form, FormStateInterface $form_state) { $element = parent::actionsElement($form, $form_state); // Don't display delete button. unset($element['delete']); return $element; } /** * {@inheritdoc} */ public function save(array $form, FormStateInterface $form_state) { $access = $form_state->getValue('access'); /** @var \Drupal\webform\WebformInterface $webform */ $webform = $this->getEntity(); $webform->setAccessRules($access); $webform->save(); $this->logger('webform')->notice('Webform access @label saved.', ['@label' => $webform->label()]); drupal_set_message($this->t('Webform access %label saved.', ['%label' => $webform->label()])); } }