$form->setApplyUrl(rex_url::currentBackendPage()); $form->setEditMode($func == 'edit'); $field = $form->addTextField('name'); $field->setLabel(rex_i18n::msg('name')); $field = $form->addTextAreaField('description'); $field->setLabel(rex_i18n::msg('description')); $fieldContainer = $form->addContainerField('perms'); $fieldContainer->setMultiple(false); $group = 'all'; $fieldContainer->setActive($group); // Check all page permissions and add them to rex_perm if not already registered $registerImplicitePagePermissions = function ($pages) use(&$registerImplicitePagePermissions) { foreach ($pages as $page) { foreach ($page->getRequiredPermissions() as $perm) { // ignore admin perm and complex perms (with "/") if ($perm && !in_array($perm, ['isAdmin', 'admin', 'admin[]']) && strpos($perm, '/') === false && !rex_perm::has($perm)) { rex_perm::register($perm); } } $registerImplicitePagePermissions($page->getSubpages()); } }; $registerImplicitePagePermissions(rex_be_controller::getPages()); foreach ([rex_perm::GENERAL, rex_perm::OPTIONS, rex_perm::EXTRAS] as $permgroup) { $field = $fieldContainer->addGroupedField($group, 'select', $permgroup); $field->setLabel(rex_i18n::msg('user_' . $permgroup)); $select = $field->getSelect(); $select->setMultiple(true); $perms = rex_perm::getAll($permgroup); $select->setSize(min(10, max(3, count($perms)))); $select->addArrayOptions($perms);