init backend presensi
This commit is contained in:
45
app/Controllers/BaseController.php
Normal file
45
app/Controllers/BaseController.php
Normal file
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
|
||||
namespace App\Controllers;
|
||||
|
||||
use CodeIgniter\Controller;
|
||||
use CodeIgniter\HTTP\RequestInterface;
|
||||
use CodeIgniter\HTTP\ResponseInterface;
|
||||
use Psr\Log\LoggerInterface;
|
||||
|
||||
/**
|
||||
* BaseController provides a convenient place for loading components
|
||||
* and performing functions that are needed by all your controllers.
|
||||
*
|
||||
* Extend this class in any new controllers:
|
||||
* ```
|
||||
* class Home extends BaseController
|
||||
* ```
|
||||
*
|
||||
* For security, be sure to declare any new methods as protected or private.
|
||||
*/
|
||||
abstract class BaseController extends Controller
|
||||
{
|
||||
/**
|
||||
* Be sure to declare properties for any property fetch you initialized.
|
||||
* The creation of dynamic property is deprecated in PHP 8.2.
|
||||
*/
|
||||
|
||||
// protected $session;
|
||||
|
||||
/**
|
||||
* @return void
|
||||
*/
|
||||
public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
|
||||
{
|
||||
// Load here all helpers you want to be available in your controllers that extend BaseController.
|
||||
// Caution: Do not put the this below the parent::initController() call below.
|
||||
// $this->helpers = ['form', 'url'];
|
||||
|
||||
// Caution: Do not edit this line.
|
||||
parent::initController($request, $response, $logger);
|
||||
|
||||
// Preload any models, libraries, etc, here.
|
||||
// $this->session = service('session');
|
||||
}
|
||||
}
|
||||
152
app/Controllers/DashboardAcademicController.php
Normal file
152
app/Controllers/DashboardAcademicController.php
Normal file
@@ -0,0 +1,152 @@
|
||||
<?php
|
||||
|
||||
namespace App\Controllers;
|
||||
|
||||
use App\Modules\Auth\Services\AuthService;
|
||||
use App\Modules\Academic\Models\ClassModel;
|
||||
use CodeIgniter\HTTP\ResponseInterface;
|
||||
|
||||
/**
|
||||
* Dashboard Academic (admin-only) pages.
|
||||
*/
|
||||
class DashboardAcademicController extends BaseController
|
||||
{
|
||||
/**
|
||||
* GET /dashboard/academic/settings
|
||||
* Academic settings hub (ADMIN only).
|
||||
*/
|
||||
public function academicSettings(): ResponseInterface
|
||||
{
|
||||
$authService = new AuthService();
|
||||
$user = $authService->currentUser();
|
||||
$data = ['user' => $user, 'content' => view('dashboard/academic_settings')];
|
||||
return $this->response->setBody(view('layouts/main', $data));
|
||||
}
|
||||
|
||||
/**
|
||||
* GET /dashboard/academic/classes
|
||||
* Class management page (ADMIN only).
|
||||
*/
|
||||
public function classes(): ResponseInterface
|
||||
{
|
||||
$authService = new AuthService();
|
||||
$user = $authService->currentUser();
|
||||
$data = ['user' => $user, 'content' => view('dashboard/classes')];
|
||||
return $this->response->setBody(view('layouts/main', $data));
|
||||
}
|
||||
|
||||
/**
|
||||
* GET /dashboard/academic/subjects
|
||||
*/
|
||||
public function subjects(): ResponseInterface
|
||||
{
|
||||
$authService = new AuthService();
|
||||
$user = $authService->currentUser();
|
||||
$data = ['user' => $user, 'content' => view('dashboard/subjects')];
|
||||
return $this->response->setBody(view('layouts/main', $data));
|
||||
}
|
||||
|
||||
/**
|
||||
* GET /dashboard/academic/teachers
|
||||
*/
|
||||
public function teachers(): ResponseInterface
|
||||
{
|
||||
$authService = new AuthService();
|
||||
$user = $authService->currentUser();
|
||||
$data = ['user' => $user, 'content' => view('dashboard/teachers')];
|
||||
return $this->response->setBody(view('layouts/main', $data));
|
||||
}
|
||||
|
||||
/**
|
||||
* GET /dashboard/academic/lesson-slots
|
||||
*/
|
||||
public function lessonSlots(): ResponseInterface
|
||||
{
|
||||
$authService = new AuthService();
|
||||
$user = $authService->currentUser();
|
||||
$data = ['user' => $user, 'content' => view('dashboard/lesson_slots')];
|
||||
return $this->response->setBody(view('layouts/main', $data));
|
||||
}
|
||||
|
||||
/**
|
||||
* GET /dashboard/academic/students
|
||||
*/
|
||||
public function students(): ResponseInterface
|
||||
{
|
||||
$authService = new AuthService();
|
||||
$user = $authService->currentUser();
|
||||
$data = ['user' => $user, 'content' => view('dashboard/students')];
|
||||
return $this->response->setBody(view('layouts/main', $data));
|
||||
}
|
||||
|
||||
/**
|
||||
* GET /dashboard/academic/dapodik
|
||||
*/
|
||||
public function dapodik(): ResponseInterface
|
||||
{
|
||||
$authService = new AuthService();
|
||||
$user = $authService->currentUser();
|
||||
$data = ['user' => $user, 'content' => view('dashboard/dapodik')];
|
||||
return $this->response->setBody(view('layouts/main', $data));
|
||||
}
|
||||
|
||||
/**
|
||||
* GET /dashboard/academic/schedule-builder
|
||||
* Class selector page; then redirect to schedule-builder/{classId}.
|
||||
*/
|
||||
public function scheduleBuilderIndex(): ResponseInterface
|
||||
{
|
||||
$authService = new AuthService();
|
||||
$user = $authService->currentUser();
|
||||
|
||||
$data = [
|
||||
'user' => $user,
|
||||
'content' => view('dashboard/schedule_builder_index'),
|
||||
];
|
||||
|
||||
return $this->response->setBody(view('layouts/main', $data));
|
||||
}
|
||||
|
||||
/**
|
||||
* GET /dashboard/academic/schedule-builder/{classId}
|
||||
*/
|
||||
public function scheduleBuilder($classId): ResponseInterface
|
||||
{
|
||||
$authService = new AuthService();
|
||||
$user = $authService->currentUser();
|
||||
|
||||
$classId = (int) $classId;
|
||||
$classModel = new ClassModel();
|
||||
$classEntity = $classModel->find($classId);
|
||||
$className = $classEntity ? (string) $classEntity->name : 'Kelas ' . $classId;
|
||||
|
||||
$data = [
|
||||
'user' => $user,
|
||||
'classId' => $classId,
|
||||
'className' => $className,
|
||||
'content' => view('dashboard/schedule_builder', [
|
||||
'classId' => $classId,
|
||||
'className' => $className,
|
||||
]),
|
||||
];
|
||||
|
||||
return $this->response->setBody(view('layouts/main', $data));
|
||||
}
|
||||
|
||||
/**
|
||||
* GET /dashboard/academic/discipline-settings
|
||||
* Master poin pelanggaran (ADMIN only, via route filter).
|
||||
*/
|
||||
public function disciplineSettings(): ResponseInterface
|
||||
{
|
||||
$authService = new AuthService();
|
||||
$user = $authService->currentUser();
|
||||
|
||||
$data = [
|
||||
'user' => $user,
|
||||
'content' => view('dashboard/discipline_settings'),
|
||||
];
|
||||
|
||||
return $this->response->setBody(view('layouts/main', $data));
|
||||
}
|
||||
}
|
||||
147
app/Controllers/DashboardPageController.php
Normal file
147
app/Controllers/DashboardPageController.php
Normal file
@@ -0,0 +1,147 @@
|
||||
<?php
|
||||
|
||||
namespace App\Controllers;
|
||||
|
||||
use App\Modules\Auth\Services\AuthService;
|
||||
use CodeIgniter\HTTP\ResponseInterface;
|
||||
|
||||
/**
|
||||
* Web Dashboard Page Controller
|
||||
*
|
||||
* Serves /dashboard with TailAdmin layout. Requires authenticated session.
|
||||
*/
|
||||
class DashboardPageController extends BaseController
|
||||
{
|
||||
public function index(): ResponseInterface
|
||||
{
|
||||
$authService = new AuthService();
|
||||
$user = $authService->currentUser();
|
||||
|
||||
$data = [
|
||||
'user' => $user,
|
||||
'content' => view('dashboard/index'),
|
||||
];
|
||||
|
||||
return $this->response->setBody(view('layouts/main', $data));
|
||||
}
|
||||
|
||||
/**
|
||||
* GET /dashboard/attendance/reports
|
||||
* Attendance reports index: pick date, list schedules, link to report per schedule.
|
||||
*/
|
||||
public function attendanceReports(): ResponseInterface
|
||||
{
|
||||
$authService = new AuthService();
|
||||
$user = $authService->currentUser();
|
||||
|
||||
$data = [
|
||||
'user' => $user,
|
||||
'content' => view('dashboard/attendance_reports'),
|
||||
];
|
||||
|
||||
return $this->response->setBody(view('layouts/main', $data));
|
||||
}
|
||||
|
||||
/**
|
||||
* GET /dashboard/attendance/report/{scheduleId}
|
||||
* Schedule attendance report page (expected, present, late, absent).
|
||||
*/
|
||||
public function attendanceReport($scheduleId): ResponseInterface
|
||||
{
|
||||
$authService = new AuthService();
|
||||
$user = $authService->currentUser();
|
||||
|
||||
$data = [
|
||||
'user' => $user,
|
||||
'scheduleId' => (int) $scheduleId,
|
||||
'content' => view('dashboard/attendance_report', ['scheduleId' => (int) $scheduleId]),
|
||||
];
|
||||
|
||||
return $this->response->setBody(view('layouts/main', $data));
|
||||
}
|
||||
|
||||
/**
|
||||
* GET /dashboard/devices
|
||||
* Devices list page (ADMIN only).
|
||||
*/
|
||||
public function devices(): ResponseInterface
|
||||
{
|
||||
$authService = new AuthService();
|
||||
$user = $authService->currentUser();
|
||||
|
||||
$data = [
|
||||
'user' => $user,
|
||||
'content' => view('dashboard/devices'),
|
||||
];
|
||||
|
||||
return $this->response->setBody(view('layouts/main', $data));
|
||||
}
|
||||
|
||||
/**
|
||||
* GET /dashboard/schedule/today
|
||||
* Daily schedule page (today's schedules, role-filtered).
|
||||
*/
|
||||
public function scheduleToday(): ResponseInterface
|
||||
{
|
||||
$authService = new AuthService();
|
||||
$user = $authService->currentUser();
|
||||
|
||||
$data = [
|
||||
'user' => $user,
|
||||
'content' => view('dashboard/schedule_today'),
|
||||
];
|
||||
|
||||
return $this->response->setBody(view('layouts/main', $data));
|
||||
}
|
||||
|
||||
/**
|
||||
* GET /dashboard/discipline
|
||||
* Poin pelanggaran / disiplin siswa (guru, wali, admin).
|
||||
*/
|
||||
public function discipline(): ResponseInterface
|
||||
{
|
||||
$authService = new AuthService();
|
||||
$user = $authService->currentUser();
|
||||
|
||||
$data = [
|
||||
'user' => $user,
|
||||
'content' => view('dashboard/discipline'),
|
||||
];
|
||||
|
||||
return $this->response->setBody(view('layouts/main', $data));
|
||||
}
|
||||
|
||||
/**
|
||||
* GET /dashboard/parent
|
||||
* Portal Orang Tua - untuk melihat data anak (absensi, pelanggaran).
|
||||
*/
|
||||
public function parent(): ResponseInterface
|
||||
{
|
||||
$authService = new AuthService();
|
||||
$user = $authService->currentUser();
|
||||
|
||||
$data = [
|
||||
'user' => $user,
|
||||
'content' => view('dashboard/parent'),
|
||||
];
|
||||
|
||||
return $this->response->setBody(view('layouts/main', $data));
|
||||
}
|
||||
|
||||
/**
|
||||
* GET /dashboard/presence-settings
|
||||
* Pengaturan presensi terpusat: koordinat sekolah + jam masuk & jam pulang (ADMIN only).
|
||||
*/
|
||||
public function presenceSettings(): ResponseInterface
|
||||
{
|
||||
$authService = new AuthService();
|
||||
$user = $authService->currentUser();
|
||||
|
||||
$data = [
|
||||
'user' => $user,
|
||||
'content' => view('dashboard/presence_settings'),
|
||||
];
|
||||
|
||||
return $this->response->setBody(view('layouts/main', $data));
|
||||
}
|
||||
}
|
||||
24
app/Controllers/LoginController.php
Normal file
24
app/Controllers/LoginController.php
Normal file
@@ -0,0 +1,24 @@
|
||||
<?php
|
||||
|
||||
namespace App\Controllers;
|
||||
|
||||
use App\Modules\Auth\Services\AuthService;
|
||||
use CodeIgniter\HTTP\ResponseInterface;
|
||||
|
||||
/**
|
||||
* Login Page Controller
|
||||
*
|
||||
* GET /login shows form; form submits to /api/auth/login (client-side).
|
||||
*/
|
||||
class LoginController extends BaseController
|
||||
{
|
||||
public function index(): ResponseInterface
|
||||
{
|
||||
$authService = new AuthService();
|
||||
if ($authService->currentUser() !== null) {
|
||||
return redirect()->to('/dashboard');
|
||||
}
|
||||
|
||||
return $this->response->setBody(view('login/index'));
|
||||
}
|
||||
}
|
||||
18
app/Controllers/LogoutController.php
Normal file
18
app/Controllers/LogoutController.php
Normal file
@@ -0,0 +1,18 @@
|
||||
<?php
|
||||
|
||||
namespace App\Controllers;
|
||||
|
||||
use App\Modules\Auth\Services\AuthService;
|
||||
use CodeIgniter\HTTP\ResponseInterface;
|
||||
|
||||
/**
|
||||
* Web Logout: clears session and redirects to login.
|
||||
*/
|
||||
class LogoutController extends BaseController
|
||||
{
|
||||
public function index(): ResponseInterface
|
||||
{
|
||||
(new AuthService())->logout();
|
||||
return redirect()->to('/login');
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user