$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 $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 report/{accessnumber}/pdf endpoint internally $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); $url = base_url("report/{$accessnumber}/pdf"); $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_TIMEOUT, 30); $cookieString = ''; foreach ($_COOKIE as $name => $value) { $cookieString .= $name . '=' . $value . '; '; } curl_setopt($ch, CURLOPT_COOKIE, $cookieString); $response = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); $error = curl_error($ch); curl_close($ch); if ($error) { return [ 'success' => false, 'error' => 'cURL error: ' . $error ]; } $data = json_decode($response, true); if ($httpCode === 200 && $data && isset($data['success']) && $data['success']) { return [ 'success' => true, 'lang' => $data['lang'] ?? ($eng == 1 ? 'English' : 'Indonesian'), 'isRegen' => $data['isRegen'] ?? false ]; } return [ 'success' => false, 'error' => $data['error'] ?? "HTTP {$httpCode}: Failed to generate PDF" ]; } }