- Created shared dashboard components in app/Views/shared/: - dashboard_config.php, dashboard_table.php, dashboard_validate.php - dialog_sample.php, dialog_val.php, script_dashboard.php, script_validate.php - layout_dashboard.php - Removed duplicate views from role-specific directories (admin, cs, lab, phlebo, superuser) - Consolidated 575-line duplicate index.php files into shared components - Updated controllers to use new shared view structure - Added ApiValidateController for validation endpoints - Reduced code duplication across 5 role-based dashboards 🤖 Generated with [Claude Code](https://claude.com/claude-code)
157 lines
4.3 KiB
PHP
157 lines
4.3 KiB
PHP
<?php
|
|
namespace App\Controllers;
|
|
use CodeIgniter\API\ResponseTrait;
|
|
use App\Controllers\BaseController;
|
|
|
|
// Users Management
|
|
class UsersController extends BaseController
|
|
{
|
|
use ResponseTrait;
|
|
protected $db;
|
|
|
|
public function __construct()
|
|
{
|
|
$this->db = \Config\Database::connect();
|
|
}
|
|
|
|
public function index()
|
|
{
|
|
$sql = "select u.USERID, u.USERROLEID, u.USERNAME from GDC_CMOD.dbo.USERS u
|
|
left join glendb.dbo.USERS u1 on u1.USERID=u.USERID
|
|
where u1.LOCKEDACCOUNT is null";
|
|
$query = $this->db->query($sql);
|
|
$results = $query->getResultArray();
|
|
$data['data'] = $results;
|
|
|
|
return $this->respond(['data' => $results]);
|
|
}
|
|
|
|
public function create()
|
|
{
|
|
$input = $this->request->getJSON(true);
|
|
if (!$input) {
|
|
return $this->fail('Invalid JSON input');
|
|
}
|
|
|
|
$userid = $input['userid'] ?? null;
|
|
$userroleid = $input['userroleid'] ?? null;
|
|
$password = $input['password'] ?? null;
|
|
$password_2 = $input['password_2'] ?? null;
|
|
|
|
if (!$userid || !$userroleid || !$password || !$password_2) {
|
|
return $this->fail('Missing required fields');
|
|
}
|
|
|
|
if ($password != $password_2) {
|
|
return $this->response->setJSON(['message' => 'Password not the same']);
|
|
}
|
|
if (strlen($password) < 3) {
|
|
return $this->response->setJSON(['message' => 'Password must be more than 2 characters']);
|
|
}
|
|
|
|
$sql = $this->db->query("SELECT USERID FROM gdc_cmod.dbo.USERS WHERE USERID = ?", [$userid]);
|
|
$query = $sql->getRowArray();
|
|
if ($query != null) {
|
|
return $this->response->setJSON(['message' => 'Userid already exists']);
|
|
}
|
|
|
|
$hashedPassword = password_hash($password, PASSWORD_DEFAULT);
|
|
|
|
$this->db->transBegin();
|
|
try {
|
|
$sqlInsert = "
|
|
INSERT INTO gdc_cmod.dbo.USERS (USERID, USERROLEID, PASSWORD)
|
|
VALUES (?, ?, ?)
|
|
";
|
|
$this->db->query($sqlInsert, [$userid, $userroleid, $hashedPassword]);
|
|
|
|
$this->db->transCommit();
|
|
|
|
} catch (\Throwable $e) {
|
|
$this->db->transRollback();
|
|
return $this->response->setJSON(['message' => 'Server error']);
|
|
}
|
|
|
|
return $this->response->setJSON(['message' => 'User ' . $userid . ' Berhasil ditambahkan!']);
|
|
}
|
|
|
|
public function update($id = null)
|
|
{
|
|
$input = $this->request->getJSON(true);
|
|
if (!$input) {
|
|
return $this->fail('Invalid JSON input');
|
|
}
|
|
|
|
$userid = $input['userid'] ?? null;
|
|
$username = $input['username'] ?? null;
|
|
$userroleid = $input['userroleid'] ?? null;
|
|
$password = $input['password'] ?? '';
|
|
$password_2 = $input['password_2'] ?? '';
|
|
|
|
if (!$userid) {
|
|
return $this->fail('User ID is required');
|
|
}
|
|
|
|
if ($password != '' || $password_2 != '') {
|
|
if ($password != $password_2) {
|
|
return $this->response->setJSON(['message' => 'Password not the same']);
|
|
}
|
|
|
|
$hashedPassword = password_hash($password, PASSWORD_DEFAULT);
|
|
$sqlUpdate = "
|
|
UPDATE gdc_cmod.dbo.USERS
|
|
SET USERROLEID = ?, PASSWORD = ?, USERNAME = ?
|
|
WHERE USERID = ?
|
|
";
|
|
$fullUpdate = true;
|
|
|
|
} else {
|
|
$sqlUpdate = "
|
|
UPDATE gdc_cmod.dbo.USERS
|
|
SET USERROLEID = ?, USERNAME = ?
|
|
WHERE USERID = ?
|
|
";
|
|
$fullUpdate = false;
|
|
}
|
|
|
|
$this->db->transBegin();
|
|
try {
|
|
|
|
if ($fullUpdate) {
|
|
$this->db->query($sqlUpdate, [$userroleid, $hashedPassword, $username, $userid]);
|
|
} else {
|
|
$this->db->query($sqlUpdate, [$userroleid, $username, $userid]);
|
|
}
|
|
|
|
$this->db->transCommit();
|
|
|
|
} catch (\Throwable $e) {
|
|
$this->db->transRollback();
|
|
return $this->response->setJSON(['message' => 'Terjadi kesalahan pada server.']);
|
|
}
|
|
|
|
return $this->response->setJSON(['message' => 'User ' . $userid . ' Berhasil Diupdate!']);
|
|
}
|
|
|
|
public function delete($id = null)
|
|
{
|
|
$this->db->transBegin();
|
|
try {
|
|
$sql = "DELETE FROM gdc_cmod.dbo.USERS WHERE USERID = ?";
|
|
$this->db->query($sql, [$id]);
|
|
|
|
if ($this->db->affectedRows() == 0) {
|
|
throw new \Exception('User not found or already deleted');
|
|
}
|
|
|
|
$this->db->transCommit();
|
|
} catch (\Throwable $e) {
|
|
$this->db->transRollback();
|
|
return $this->response->setStatusCode(500)->setJSON(['message' => 'Error deleting user: ' . $e->getMessage()]);
|
|
}
|
|
|
|
return $this->response->setJSON(['message' => 'User ' . $id . ' deleted successfully']);
|
|
}
|
|
|
|
}
|