gdc_cmod/app/Controllers/Pages/SuperuserController.php
mahdahar 2aa2ef50f2 feat: add v2 dashboards and server-side request pagination
Introduces v2 role routes/views and moves request list filtering, sorting, and pagination to the backend for better performance. Also switches shared pages to a generated Tailwind CSS bundle with supporting npm assets.
2026-04-02 13:02:29 +07:00

148 lines
4.7 KiB
PHP

<?php
namespace App\Controllers\Pages;
use App\Controllers\BaseController;
class SuperuserController extends BaseController
{
public function __construct()
{
helper(['url', 'form', 'text']);
}
public function index()
{
$config = require APPPATH . 'Views/shared/config.php';
return view('superuser/index', ['roleConfig' => $config['superuser']]);
}
public function indexV2()
{
$config = require APPPATH . 'Views/shared/config.php';
return view('v2/superuser/index', ['roleConfig' => $config['superuser']]);
}
public function users()
{
$config = require APPPATH . 'Views/shared/config.php';
return view('superuser/users', ['roleConfig' => $config['superuser']]);
}
public function validatePage()
{
$config = require APPPATH . 'Views/shared/config.php';
return view('superuser/validate', ['roleConfig' => $config['superuser']]);
}
public function pdfBatch()
{
$config = require APPPATH . 'Views/shared/config.php';
return view('superuser/pdf_batch', ['roleConfig' => $config['superuser']]);
}
public function processPdfBatch()
{
$input = $this->request->getJSON(true);
$accessNumbers = $input['accessNumbers'] ?? [];
if (empty($accessNumbers)) {
return $this->response->setStatusCode(400)->setJSON([
'success' => false,
'message' => 'No access numbers provided'
]);
}
$results = [];
$db = \Config\Database::connect();
foreach ($accessNumbers as $index => $accessnumber) {
$accessnumber = trim($accessnumber);
if (empty($accessnumber)) {
continue;
}
try {
// Check if request exists
$sql = "SELECT ACCESSNUMBER, REPORT_LANG FROM GDC_CMOD.dbo.CM_REQUESTS WHERE ACCESSNUMBER = ?";
$row = $db->query($sql, [$accessnumber])->getRowArray();
if (!$row) {
$results[] = [
'accessnumber' => $accessnumber,
'success' => false,
'error' => 'Access number not found',
'lang' => null,
'isRegen' => false
];
continue;
}
// Call PDF generation service
$response = $this->callReportPdfEndpoint($accessnumber);
if ($response['success']) {
$results[] = [
'accessnumber' => $accessnumber,
'success' => true,
'error' => null,
'lang' => $response['lang'] ?? 'Unknown',
'isRegen' => $response['isRegen'] ?? false
];
} else {
$results[] = [
'accessnumber' => $accessnumber,
'success' => false,
'error' => $response['error'] ?? 'PDF generation failed',
'lang' => null,
'isRegen' => false
];
}
} catch (\Throwable $e) {
$results[] = [
'accessnumber' => $accessnumber,
'success' => false,
'error' => $e->getMessage(),
'lang' => null,
'isRegen' => false
];
}
}
return $this->response->setJSON([
'success' => true,
'results' => $results,
'total' => count($results),
'successful' => count(array_filter($results, fn($r) => $r['success'])),
'failed' => count(array_filter($results, fn($r) => !$r['success']))
]);
}
private function callReportPdfEndpoint($accessnumber)
{
$db = \Config\Database::connect();
$sql = "SELECT REPORT_LANG FROM GDC_CMOD.dbo.CM_REQUESTS WHERE ACCESSNUMBER = ?";
$row = $db->query($sql, [$accessnumber])->getRowArray();
$eng = (int) ($row['REPORT_LANG'] ?? 0);
$pdfService = new \App\Libraries\PdfBatchService($db);
$result = $pdfService->generatePdf($accessnumber);
if ($result['success']) {
return [
'success' => true,
'lang' => $result['lang'] ?? ($eng == 1 ? 'English' : 'Indonesian'),
'isRegen' => $result['isRegen'] ?? false
];
}
return [
'success' => false,
'error' => $result['error'] ?? 'PDF generation failed'
];
}
}