/home/techb158/workloadmatch.com/api/routes
NameSizeModeActions
ai_generate.php116420644editdlrm
assignments.php99310644editdlrm
auth.php66970644editdlrm
chat.php99340644editdlrm
courses.php72250644editdlrm
coursesessions.php67050644editdlrm
dashboard.php62320644editdlrm
groups.php110990644editdlrm
logs.php35870644editdlrm
managers.php96120644editdlrm
masters.php66850644editdlrm
notifications.php59750644editdlrm
preferences.php64870644editdlrm
programs.php48820644editdlrm
reports.php136960644editdlrm
roles.php85160644editdlrm
schedules.php110420644editdlrm
settings.php42950644editdlrm
teachers.php160130644editdlrm
timeslots.php48070644editdlrm
Edit: /home/techb158/workloadmatch.com/api/routes/roles.php (8516B)
query("SELECT r.*, (SELECT COUNT(*) FROM role_permissions WHERE role_id = r.role_id) AS permission_count FROM roles r ORDER BY r.role_name"); $items = $result->fetch_all(MYSQLI_ASSOC); $result->close(); // Get user count per role foreach ($items as &$role) { $role['user_count'] = 0; $role['permissions'] = []; $s = $mysqli->prepare("SELECT module, can_view, can_create, can_edit, can_delete, can_enable, can_disable FROM role_permissions WHERE role_id = ?"); $s->bind_param('i', $role['role_id']); $s->execute(); $r = $s->get_result(); while ($perm = $r->fetch_assoc()) { $role['permissions'][$perm['module']] = [ 'view' => (bool)$perm['can_view'], 'create' => (bool)$perm['can_create'], 'edit' => (bool)$perm['can_edit'], 'delete' => (bool)$perm['can_delete'], 'enable' => (bool)$perm['can_enable'], 'disable' => (bool)$perm['can_disable'], ]; } $s->close(); } Response::success($items); } function getRole(string $id, mysqli $mysqli): void { Auth::requireRole('admin_profile'); $stmt = $mysqli->prepare("SELECT * FROM roles WHERE role_id = ?"); $stmt->bind_param('i', $id); $stmt->execute(); $result = $stmt->get_result(); $item = $result->fetch_assoc(); $stmt->close(); if (!$item) Response::notFound('Role not found'); // Get permissions $s = $mysqli->prepare("SELECT * FROM role_permissions WHERE role_id = ?"); $s->bind_param('i', $id); $s->execute(); $r = $s->get_result(); $item['permissions'] = $r->fetch_all(MYSQLI_ASSOC); $s->close(); Response::success($item); } function createRole(?array $body, mysqli $mysqli): void { Auth::requireRole('admin_profile'); $roleName = trim($body['role_name'] ?? ''); $description = trim($body['description'] ?? ''); if (!$roleName) Response::validationError(['role_name' => 'Required']); $stmt = $mysqli->prepare("INSERT INTO roles (role_name, description) VALUES (?, ?)"); $stmt->bind_param('ss', $roleName, $description); $stmt->execute(); $newId = $stmt->insert_id; $stmt->close(); // If permissions provided, save them if (!empty($body['permissions']) && is_array($body['permissions'])) { saveRolePermissions($mysqli, $newId, $body['permissions']); } log_activity($mysqli, 'create', 'role', $newId, $roleName, 'Role created via API'); $stmt = $mysqli->prepare("SELECT * FROM roles WHERE role_id = ?"); $stmt->bind_param('i', $newId); $stmt->execute(); $result = $stmt->get_result(); $item = $result->fetch_assoc(); $stmt->close(); Response::created($item); } function updateRole(?string $id, ?array $body, mysqli $mysqli): void { Auth::requireRole('admin_profile'); if (!$id) Response::error('Role ID required'); $stmt = $mysqli->prepare("SELECT * FROM roles WHERE role_id = ?"); $stmt->bind_param('i', $id); $stmt->execute(); $result = $stmt->get_result(); $existing = $result->fetch_assoc(); $stmt->close(); if (!$existing) Response::notFound('Role not found'); $roleName = trim($body['role_name'] ?? $existing['role_name']); $description = $body['description'] ?? $existing['description']; $stmt = $mysqli->prepare("UPDATE roles SET role_name = ?, description = ? WHERE role_id = ?"); $stmt->bind_param('ssi', $roleName, $description, $id); $stmt->execute(); $stmt->close(); log_activity($mysqli, 'update', 'role', $id, $roleName, 'Role updated via API'); $stmt = $mysqli->prepare("SELECT * FROM roles WHERE role_id = ?"); $stmt->bind_param('i', $id); $stmt->execute(); $result = $stmt->get_result(); $item = $result->fetch_assoc(); $stmt->close(); Response::success($item, 'Role updated'); } function deleteRole(?string $id, mysqli $mysqli): void { Auth::requireRole('admin_profile'); if (!$id) Response::error('Role ID required'); $stmt = $mysqli->prepare("SELECT role_name FROM roles WHERE role_id = ?"); $stmt->bind_param('i', $id); $stmt->execute(); $stmt->bind_result($name); $stmt->fetch(); $stmt->close(); if (!$name) Response::notFound('Role not found'); // Delete permissions first $stmt = $mysqli->prepare("DELETE FROM role_permissions WHERE role_id = ?"); $stmt->bind_param('i', $id); $stmt->execute(); $stmt->close(); $stmt = $mysqli->prepare("DELETE FROM roles WHERE role_id = ?"); $stmt->bind_param('i', $id); $stmt->execute(); $stmt->close(); log_activity($mysqli, 'delete', 'role', $id, $name, 'Role deleted via API'); Response::success(null, 'Role deleted'); } function updateRolePermissions(string $roleId, ?array $body, mysqli $mysqli): void { Auth::requireRole('admin_profile'); if (!isset($body['permissions']) || !is_array($body['permissions'])) { Response::validationError(['permissions' => 'Array of permissions required']); } // Delete existing $stmt = $mysqli->prepare("DELETE FROM role_permissions WHERE role_id = ?"); $stmt->bind_param('i', $roleId); $stmt->execute(); $stmt->close(); saveRolePermissions($mysqli, $roleId, $body['permissions']); log_activity($mysqli, 'update', 'role_permissions', $roleId, "Role $roleId permissions updated", 'Permissions updated via API'); Response::success(null, 'Permissions updated'); } function saveRolePermissions(mysqli $mysqli, $roleId, array $permissions): void { $modules = get_permission_modules(); $actions = get_permission_actions(); foreach ($permissions as $module => $perms) { if (!in_array($module, $modules)) continue; $canView = (int)($perms['view'] ?? $perms['can_view'] ?? 0); $canCreate = (int)($perms['create'] ?? $perms['can_create'] ?? 0); $canEdit = (int)($perms['edit'] ?? $perms['can_edit'] ?? 0); $canDelete = (int)($perms['delete'] ?? $perms['can_delete'] ?? 0); $canEnable = (int)($perms['enable'] ?? $perms['can_enable'] ?? 0); $canDisable = (int)($perms['disable'] ?? $perms['can_disable'] ?? 0); $stmt = $mysqli->prepare("INSERT INTO role_permissions (role_id, module, can_view, can_create, can_edit, can_delete, can_enable, can_disable) VALUES (?, ?, ?, ?, ?, ?, ?, ?)"); $stmt->bind_param('isiiiiii', $roleId, $module, $canView, $canCreate, $canEdit, $canDelete, $canEnable, $canDisable); $stmt->execute(); $stmt->close(); } } function listPermissions(mysqli $mysqli): void { Auth::requireRole('admin_profile'); $modules = get_permission_modules(); $actions = get_permission_actions(); $result = $mysqli->query("SELECT * FROM role_permissions ORDER BY role_id, module"); $dbPerms = []; while ($row = $result->fetch_assoc()) { $dbPerms[$row['role_id']][$row['module']] = $row; } $result->close(); $roles = []; $r = $mysqli->query("SELECT * FROM roles"); while ($row = $r->fetch_assoc()) { $roles[] = $row; } $r->close(); Response::success([ 'modules' => $modules, 'actions' => $actions, 'roles' => $roles, 'permissions' => $dbPerms, ]); }