0) { PermissionService::getUserPermissions($currentUserId); } $uuid = trim((string) ($id ?? '')); $role = $uuid !== '' ? RoleService::findByUuid($uuid) : null; if (!$role) { Flash::error('Role not found', 'admin/roles', 'role_not_found'); Router::redirect('admin/roles'); } $roleId = (int) ($role['id'] ?? 0); $creatorId = (int) ($role['created_by'] ?? 0); if ($creatorId > 0) { $creator = UserService::findById($creatorId); if ($creator) { $creatorName = trim(($creator['first_name'] ?? '') . ' ' . ($creator['last_name'] ?? '')); $role['created_by_label'] = $creatorName !== '' ? $creatorName : ($creator['email'] ?? ''); $role['created_by_uuid'] = $creator['uuid'] ?? null; } } $modifierId = (int) ($role['modified_by'] ?? 0); if ($modifierId > 0) { $modifier = UserService::findById($modifierId); if ($modifier) { $modifierName = trim(($modifier['first_name'] ?? '') . ' ' . ($modifier['last_name'] ?? '')); $role['modified_by_label'] = $modifierName !== '' ? $modifierName : ($modifier['email'] ?? ''); $role['modified_by_uuid'] = $modifier['uuid'] ?? null; } } $errors = []; $form = $role; $permissions = PermissionRepository::list(); $selectedPermissionIds = RolePermissionRepository::listPermissionIdsByRoleId($roleId); if (isset($_POST['description'])) { if (!PermissionService::userHas($currentUserId, PermissionService::ROLES_UPDATE)) { Flash::error('Permission denied', "admin/roles/edit/{$uuid}", 'permission_denied'); Router::redirect("admin/roles/edit/{$uuid}"); return; } $result = RoleService::updateFromAdmin($roleId, $_POST, $currentUserId); $form = $result['form'] ?? $form; $errors = $result['errors'] ?? []; $selectedPermissionIds = $_POST['permission_ids'] ?? $selectedPermissionIds; if (!is_array($selectedPermissionIds)) { $selectedPermissionIds = [$selectedPermissionIds]; } $selectedPermissionIds = array_values(array_unique(array_map('intval', $selectedPermissionIds))); if ($result['ok'] ?? false) { $permissionIds = $_POST['permission_ids'] ?? []; if (!is_array($permissionIds)) { $permissionIds = [$permissionIds]; } $permissionIds = array_values(array_unique(array_map('intval', $permissionIds))); RolePermissionRepository::replaceForRole($roleId, $permissionIds); $action = (string) ($_POST['action'] ?? 'save'); if ($action === 'save_close') { Flash::success('Role updated', 'admin/roles', 'role_updated'); Router::redirect('admin/roles'); } else { Flash::success('Role updated', "admin/roles/edit/{$uuid}", 'role_updated'); Router::redirect("admin/roles/edit/{$uuid}"); } } } Buffer::set('title', t('Edit role'));