RequiredByRole.php in Required by role 8
File
src/Plugin/Required/RequiredByRole.php
View source
<?php
namespace Drupal\required_by_role\Plugin\Required;
use Drupal\Core\Session\AccountInterface;
use Drupal\Core\Field\FieldDefinitionInterface;
use Drupal\required_api\Annotation\Required;
use Drupal\required_api\Plugin\Required\RequiredBase;
class RequiredByRole extends RequiredBase {
public function isRequired(FieldDefinitionInterface $field, AccountInterface $account) {
$available_roles = $account
->getRoles();
$field_roles = $field
->getThirdPartySetting('required_api', 'required_plugin_options', []);
$is_required = $this
->getMatches($available_roles, $field_roles);
return $is_required;
}
public function getMatches($user_roles, $required_roles) {
$match = array_intersect((array) $user_roles, (array) $required_roles);
return !empty($match);
}
public function requiredFormElement(FieldDefinitionInterface $field) {
$roles = user_roles();
$default_value = $field
->getThirdPartySetting('required_api', 'required_plugin_options') ?: [];
unset($roles[AccountInterface::AUTHENTICATED_ROLE]);
$options = [];
foreach ($roles as $role) {
$options[$role
->id()] = [
'name' => $role
->label(),
];
}
$header = [
'name' => [
'data' => t('Role'),
],
];
$element = [
'#type' => 'tableselect',
'#header' => $header,
'#options' => $options,
'#default_value' => $default_value,
'#js_select' => TRUE,
'#multiple' => TRUE,
'#empty' => t('No roles available.'),
'#attributes' => [
'class' => [
'tableselect-required-by-role',
],
],
];
return $element;
}
}
Classes
Name |
Description |
RequiredByRole |
Plugin annotation
@Required(
id = "required_by_role",
admin_label = @Translation("Required by role"),
label = @Translation("Required by role"),
description = @Translation("Required based on current user roles.")
) |