Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
8514ead
Minor Refactor on File Naming and Stuff + Additional UI and UX improv…
petorikooru Feb 18, 2026
5f14845
Remove svg filter for performance reason (it kinda useless though)
petorikooru Mar 27, 2026
1b3a4a5
Added mute button
petorikooru Mar 27, 2026
c8ffed2
Updated the assistant list
petorikooru Mar 27, 2026
b578b47
Updated the README.md image linking
petorikooru Mar 27, 2026
b2517e7
Set the default admin name to "Admin"
petorikooru Mar 27, 2026
e10ec79
Fix typo on the home admin
petorikooru Mar 27, 2026
5e00129
Adjust the url to the true naming
petorikooru Mar 27, 2026
3e28e35
Fixed the text wrapping on the description area
petorikooru Mar 27, 2026
45391a2
Add changes
kaylaperanginangin Mar 27, 2026
37f0b1c
Merge branch 'main' of https://github.com/kaylaperanginangin/daskomrec26
kaylaperanginangin Mar 27, 2026
e86d969
Add explicit "Process" stage (in case someone accidentally reopen the…
petorikooru Mar 27, 2026
39f3724
Moved the button a bit up
petorikooru Mar 27, 2026
2fd4bd0
Removed the close button (we forgot :skull:)
petorikooru Mar 27, 2026
07f0bb5
Merge branch 'petorikooru:main' into main
kaylaperanginangin Mar 27, 2026
1125d20
Added a change password page in admin specifically for the praktikans…
petorikooru Mar 27, 2026
d9f85ca
Merge branch 'petorikooru:main' into main
kaylaperanginangin Mar 27, 2026
536f477
Add change announcement page
kaylaperanginangin Mar 28, 2026
d7a8f3d
Update Admin prewiew announcement text
kaylaperanginangin Mar 28, 2026
9d9afb6
deleted image png and song mp3
kaylaperanginangin Mar 28, 2026
acac7c0
deleted file
kaylaperanginangin Mar 28, 2026
0029018
Merge pull request #14 from kaylaperanginangin/main
petorikooru Mar 28, 2026
2311ef4
Merge branch 'main' into main
petorikooru Mar 28, 2026
a5d9ec2
Revert the changes on the img url since we add new 2 easter egg assis…
petorikooru Mar 29, 2026
8437c0b
Adjust the footer size to match with others
petorikooru Mar 29, 2026
e661adc
Making sure that the change password for all user only available for …
petorikooru Mar 30, 2026
dceea51
Fix typos on the footer text
petorikooru Mar 30, 2026
7bebb9e
Moved the mute button to sidebar instead so that it wont obstruct the…
petorikooru Mar 30, 2026
7d7ef1e
Pre-process the image instead of adding filter (improving the perform…
petorikooru Mar 30, 2026
15e0255
Tweaked the animation on Card and Assistant Book + fix the typos
petorikooru Mar 30, 2026
ebf186a
Fix the text overflow on configuration editor preview + forgot to add…
petorikooru Mar 30, 2026
049e22a
Remove unnecessary classes
petorikooru Mar 30, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 7 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,31 +1,36 @@
<p align="center"><img src="public/assets/logo/dlor2026.png" width="350"></p>
<p align="center"><img src="public/assets/logo/dlor2026.webp" width="350"></p>
<p align="center" style="font-size:20px;font-weight:600">WELCOME TO DASKOM LABORATORY RECRUITMENT 2026
</p>
<br>

## About DLOR 2026

_Open Recruitment Platform for Dasar Komputer Laboratory, Telkom University_

Welcome to the **DLOR 2026** repository! This project is dedicated to creating a modern, user-friendly platform for recruiting teaching assistants for the **Dasar Komputer Laboratory** at **Telkom University**.

## Project Summary

DLOR 2026 is a recruitment platform designed to streamline the application process for teaching assistants. It features an intuitive UI, a secure backend, and an efficient application workflow.

## Features

- User-friendly application form
- Secure authentication system
- Real-time updates on application status
- Admin dashboard for managing recruitment
- Nice looking UI and intuitive UX

## Team Members

- [Jyothi Divyananda](https://github.com/jyowl) (JYO)
- [Kayla Priskila Adalia Peranginangin](https://github.com/kaylaperanginangin) (KAY)
- [Muhammad Raditya Dwi Putra](https://github.com/petorikooru) (VIM)
- [Ahmad Syifa](https://github.com/Guaritore79) (GTR)
- [Wildan Khalid Wijaya](https://github.com/ShowMeMyCent) (WIL)

## Development using Distrobox
Distrobox is basically a nice wrapper for docker and podman to containerize your workspaces

Distrobox is basically a nice wrapper for docker and podman to containerize your workspaces
(Linux only, you can use docker directly if you use Windows or MacOS).
For further instruction, you may see this file [docs/DISTROBOX.md](./docs/DISTROBOX.md)
6 changes: 5 additions & 1 deletion app/Http/Controllers/User/AnnouncementController.php
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,11 @@ public function index()
}

// Determine user status based on CaasStage
$userStatus = $caasStage->status === 'LOLOS' ? 'passed' : 'failed';
$userStatus = match ($caasStage->status) {
'LOLOS' => 'passed',
'GAGAL' => 'failed',
default => 'pending',
};

// Get the configuration for the user's stage
$configuration = Configuration::where('stage_id', $stage->id)->first();
Expand Down
63 changes: 56 additions & 7 deletions app/Http/Controllers/UserController.php
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ public function index()
$search = request('search', '');
$stageId = request('stage_id', '');
$status = request('status', '');

$users = User::with('profile', 'caasStage.stage')
->join('caas_stages', 'users.id', '=', 'caas_stages.user_id')
->where('users.is_admin', false)
Expand All @@ -48,7 +48,7 @@ public function index()
->appends(['search' => $search, 'perPage' => $perPage, 'stage_id' => $stageId, 'status' => $status]);

$stages = Stage::orderBy('id')->get();

return inertia('Admin/caas', [
'users' => $users,
'stages' => $stages,
Expand Down Expand Up @@ -195,27 +195,76 @@ public function import(Request $request)
try {
$import = new CaasImport;
Excel::import($import, $request->file('file'));

$imported = $import->getImportedCount();
$skipped = $import->getSkippedCount();

$message = "Successfully imported {$imported} user(s).";
if ($skipped > 0) {
$message .= " Skipped {$skipped} duplicate(s).";
}

return back()->with('success', $message);
} catch (\Maatwebsite\Excel\Validators\ValidationException $e) {
$failures = $e->failures();
$errors = [];

foreach ($failures as $failure) {
$errors[] = "Row {$failure->row()}: " . implode(', ', $failure->errors());
}

return back()->with('error', 'Import validation failed: ' . implode(' | ', array_slice($errors, 0, 5)));
} catch (\Exception $e) {
return back()->with('error', 'Import failed: ' . $e->getMessage());
}
}

/**
* Show the form for changing a user's password.
*/
public function passwordChangeView(Request $request)
{
$search = $request->search;

if ($search) {
$users = User::with('profile')
->where('nim', 'like', "%{$search}%")
->orWhereHas('profile', function ($q) use ($search) {
$q->where('name', 'like', "%{$search}%");
Comment on lines +229 to +233
Copy link

Copilot AI Mar 29, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The search query can return admin accounts too (no is_admin = false filter). Since this page is for changing practikans/CaAs passwords, consider explicitly restricting results to non-admin users (and ideally only eligible roles) to avoid accidentally exposing/changing admin credentials.

Copilot uses AI. Check for mistakes.
})
->limit(10)
->get();
} else {
$users = collect(); // Return empty if no search
}

return inertia('Admin/password', [
'users' => ['data' => $users]
]);
}

/**
* Update the user's password.
*/
public function updatePassword(Request $request)
{
$request->validate([
'current_password' => 'required|exists:users,nim', // We used NIM for this field in React
'password' => 'required|min:8|confirmed',
], [
'current_password.exists' => 'Praktikan NIM not found.',
]);

$authenticatedUser = $request->user();
if (!$authenticatedUser || $authenticatedUser->nim !== $request->current_password) {
return back()->withErrors([
'current_password' => 'The provided NIM does not match the authenticated user.',
]);
}
$authenticatedUser->update([
'password' => bcrypt($request->password),
]);

return back()->with('success', 'Password changed successfully.');
}
}
Loading