protected static function FPAFormBuilder::buildTable in Fast Permissions Administration 8.2
Same name and namespace in other branches
- 3.0.x src/FPAFormBuilder.php \Drupal\fpa\FPAFormBuilder::buildTable()
1 call to FPAFormBuilder::buildTable()
- FPAFormBuilder::buildFPAPage in src/FPAFormBuilder.php
File
- src/FPAFormBuilder.php, line 71
- Contains Drupal\fpa\FPAFormBuilder.
Class
- FPAFormBuilder
- Class FPAFormBuilder.
Namespace
Drupal\fpa
Code
protected static function buildTable($form) {
$renderer = \Drupal::service('renderer');
$nameless_checkbox = [
'#type' => 'html_tag',
'#tag' => 'input',
'#attributes' => [
'type' => 'checkbox',
'class' => [
'rid-anonymous',
'form-checkbox',
'fpa-checkboxes-toggle',
],
],
];
$dummy_checkbox = [
'#type' => 'html_tag',
'#tag' => 'input',
'#attributes' => [
'type' => 'checkbox',
'disabled' => 'disabled',
'checked' => 'checked',
'title' => t('This permission is inherited from the authenticated user role.'),
'class' => [
'dummy-checkbox',
],
],
];
$dummy_checkbox_output = $renderer
->render($dummy_checkbox);
$permission_col_template = [
'#type' => 'container',
'#attributes' => [
'class' => [
'fpa-permission-container',
],
],
'description' => [],
'checkbox_cell' => [
'#type' => 'container',
'#attributes' => [
'class' => [
'fpa-row-toggle-container',
],
],
'checkbox_form_item' => [
'#type' => 'container',
'#attributes' => [
'title' => t('Toggle visible checkboxes in this row.'),
'class' => [
'form-item',
'form-type-checkbox',
],
],
'label' => [
'#type' => 'html_tag',
'#tag' => 'label',
'#attributes' => [
'class' => [
'visually-hidden',
],
],
'#value' => 'test',
],
'checkbox' => $nameless_checkbox,
],
],
];
$roles = \Drupal::service('entity.manager')
->getStorage('user_role')
->loadMultiple();
$roles_attr_values = [];
foreach ($roles as $role) {
$roles_attr_values[$role
->get('id')] = Html::getClass($role
->get('label'));
}
$modules = [];
$user_roles = [];
$module = NULL;
$i = 0;
$rows = [];
foreach (Element::children($form['permissions']) as $key) {
$row = [
'data' => [],
'title' => [],
FPA_ATTR_MODULE => [],
FPA_ATTR_PERMISSION => [],
FPA_ATTR_CHECKED => [],
FPA_ATTR_NOT_CHECKED => [],
];
$current_element = $form['permissions'][$key];
hide($form['permissions'][$key]);
$sub_children = Element::children($current_element);
if (is_numeric($sub_children[0])) {
$row['class'][] = 'fpa-module-row';
$row[FPA_ATTR_MODULE] = [
0 => $key,
1 => strip_tags($current_element[0]['#markup']),
];
hide($form['permissions'][$key][0]);
$row['data'][] = [
'data' => $form['permissions'][$key][0],
'class' => [
'module',
],
'id' => 'module-' . $key,
'colspan' => count($form['role_names']['#value']) + 1,
];
$row['title'] = [
$key,
];
$row[FPA_ATTR_SYSTEM_NAME] = $row[FPA_ATTR_MODULE][0];
$classes = [];
foreach ($row[FPA_ATTR_MODULE] as $item) {
$classes[] = Html::getClass($item);
}
$row[FPA_ATTR_MODULE] = array_unique($classes);
$modules[$row[FPA_ATTR_MODULE][0]] = [
'text' => strip_tags($current_element[0]['#markup']),
'title' => [
$key,
],
FPA_ATTR_MODULE => $row[FPA_ATTR_MODULE],
FPA_ATTR_PERMISSION => [],
];
$module = $i;
}
else {
$row['class'][] = 'fpa-permission-row';
$roles_keys = array_keys($roles_attr_values);
$permission_system_name = (string) $form['permissions'][$key]['description']['#context']['title'];
$label = $permission_col_template;
$label['description'] = $current_element['description'];
$row['data'][] = [
'data' => $label,
'class' => [
'permission',
],
];
foreach ($roles_keys as $rid) {
$checkbox = $form['permissions'][$key][$rid];
hide($form['permissions'][$key][$rid]);
$checkbox['#title'] = $roles[$rid]
->get('label') . ': ' . $checkbox['#title'];
$checkbox['#title_display'] = 'invisible';
$checkbox['#attributes']['class'][] = 'rid-' . $rid;
if ($rid == 'authenticated' && $checkbox['#checked'] === TRUE) {
$row['class'][] = 'fpa-authenticated-role-behavior';
}
if ($rid != 'anonymous' && $rid != 'authenticated') {
$checkbox['#suffix'] = $dummy_checkbox_output;
}
if ($checkbox['#checked'] === TRUE) {
$row[FPA_ATTR_CHECKED][] = $rid;
}
else {
$row[FPA_ATTR_NOT_CHECKED][] = $rid;
}
$row['data'][] = [
'data' => $checkbox,
'class' => [
'checkbox',
],
'title' => [
$roles[$rid]
->get('label'),
],
FPA_ATTR_ROLE => [
$rid,
],
];
}
if (!empty($rid)) {
$row['title'] = [
$key,
];
$row[FPA_ATTR_SYSTEM_NAME] = [
$key,
];
}
$row[FPA_ATTR_PERMISSION] = [
0 => $permission_system_name,
1 => (string) $form['permissions'][$key]['description']['#context']['title'],
];
$row[FPA_ATTR_MODULE] = $rows[$module][FPA_ATTR_MODULE];
$classes = [];
foreach ($row[FPA_ATTR_PERMISSION] as $item) {
$classes[] = Html::getClass($item);
}
$row[FPA_ATTR_PERMISSION] = array_unique($classes);
$rows[$module][FPA_ATTR_PERMISSION] = array_merge($rows[$module][FPA_ATTR_PERMISSION], $row[FPA_ATTR_PERMISSION]);
$rows[$module][FPA_ATTR_CHECKED] = array_unique(array_merge($rows[$module][FPA_ATTR_CHECKED], $row[FPA_ATTR_CHECKED]));
$rows[$module][FPA_ATTR_NOT_CHECKED] = array_unique(array_merge($rows[$module][FPA_ATTR_NOT_CHECKED], $row[FPA_ATTR_NOT_CHECKED]));
$modules[$rows[$module][FPA_ATTR_MODULE][0]][FPA_ATTR_PERMISSION][] = $row[FPA_ATTR_PERMISSION];
}
$rows[$i++] = $row;
}
$reset_button = [
'#type' => 'html_tag',
'#tag' => 'input',
'#attributes' => [
'type' => 'reset',
'class' => 'form-submit',
'value' => t('Reset changes'),
],
];
if (count(Element::children($form['actions'])) > 0) {
array_unshift($form['actions'], $reset_button);
}
$actions_output = [];
foreach (Element::children($form['actions']) as $key) {
$actions_output[] = $form['actions'][$key];
}
$header = [];
$header[] = [
'data' => [
'label' => [
'#type' => 'markup',
'#markup' => t('Permission'),
],
'actions' => $actions_output,
],
];
foreach ($form['role_names']['#value'] as $rid => $label) {
$header[] = [
'data' => [
'label' => [
'#type' => 'markup',
'#markup' => $label,
],
'checkbox' => $nameless_checkbox,
],
'class' => [
'checkbox',
],
'title' => [
$label,
],
FPA_ATTR_ROLE => [
$rid,
],
];
$user_roles[$rid] = $label;
}
$table = [
'header' => $header,
'rows' => $rows,
];
$table_wrapper = static::buildTableWrapper($table, $modules, $user_roles, $actions_output);
foreach (Element::children($form) as $key) {
if ($key == 'actions' || $key == 'permissions') {
continue;
}
$table_wrapper[$key] = $form[$key];
}
unset($form['role_names']);
unset($form['permissions']);
unset($form['actions']);
$form['fpa_container'] = $table_wrapper;
return $form;
}