+ User Management +
+ +| User ID | +Role/Level | +Actions | +
|---|---|---|
| + | + + | ++ + + | +
Loading users...
+diff --git a/app/Config/Routes.php b/app/Config/Routes.php index 7bde72e..e44bd79 100644 --- a/app/Config/Routes.php +++ b/app/Config/Routes.php @@ -73,6 +73,13 @@ $routes->group('v2', function($routes) { $routes->post('login', 'V2::login'); $routes->group('admin', ['filter' => 'role:1'], function($routes) { $routes->get('', 'V2\Admin::index'); + $routes->get('users', 'V2\Admin::users'); + + // internal api for this module + $routes->get('api/users', 'V2\Admin::usersList'); + $routes->post('api/users', 'V2\Admin::userCreate'); + $routes->post('api/users/update', 'V2\Admin::userUpdate'); + $routes->post('api/users/delete', 'V2\Admin::userDelete'); }); }); diff --git a/app/Controllers/V2.php b/app/Controllers/V2.php index 7e14c65..80ac6cd 100644 --- a/app/Controllers/V2.php +++ b/app/Controllers/V2.php @@ -18,9 +18,9 @@ class V2 extends BaseController { case 1: return redirect()->to('v2/admin'); case 2: - return redirect()->to('v2/dokter'); + return redirect()->to('v2/analyst'); case 3: - return redirect()->to('v2/analis'); + return redirect()->to('v2/phlebotomist'); case 4: return redirect()->to('v2/cs'); default: @@ -52,10 +52,10 @@ class V2 extends BaseController { $role = 'admin'; break; case 2: - $role = 'doctor'; + $role = 'analyst'; break; case 3: - $role = 'analyst'; + $role = 'phlebotomist'; break; case 4: $role = 'cs'; @@ -78,9 +78,9 @@ class V2 extends BaseController { case 1: return redirect()->to('v2/admin'); case 2: - return redirect()->to('v2/doctor'); - case 3: return redirect()->to('v2/analyst'); + case 3: + return redirect()->to('v2/phlebotomist'); case 4: return redirect()->to('v2/cs'); default: diff --git a/app/Controllers/V2/Admin.php b/app/Controllers/V2/Admin.php index a47455a..563c978 100644 --- a/app/Controllers/V2/Admin.php +++ b/app/Controllers/V2/Admin.php @@ -2,9 +2,140 @@ namespace App\Controllers\V2; use App\Controllers\BaseController; +use CodeIgniter\API\ResponseTrait; class Admin extends BaseController { - public function index() { - return view('v2/admin/index'); - } + use ResponseTrait; + + protected $db; + + public function __construct() { + $this->db = \Config\Database::connect(); + helper(['url', 'form', 'text']); + } + + public function index() { + return view('v2/admin/index'); + } + + public function users() { + return view('v2/admin/users'); + } + + public function profile() { + return view('v2/admin/profile'); + } + + public function settings() { + return view('v2/admin/settings'); + } + + // API Methods + public function usersList() { + $sql = "select u.USERID, u.USERLEVEL 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(); + return $this->respond(['data' => $results]); + } + + public function userCreate() { + $json = $this->request->getJSON(); + $userid = strtoupper(trim($json->userid ?? '')); + $userlevel = trim($json->userlevel ?? ''); + $password = trim($json->password ?? ''); + $password_2 = trim($json->password_2 ?? ''); + + if (empty($userid) || empty($userlevel) || empty($password)) { + return $this->fail('All fields are required', 400); + } + + if ($password != $password_2) { + return $this->fail('Passwords do not match', 400); + } + if (strlen($password) < 3) { + return $this->fail('Password must be at least 3 characters', 400); + } + + // Check exists + $sql = $this->db->query("SELECT USERID FROM gdc_cmod.dbo.USERS WHERE USERID = ?", [$userid]); + if ($sql->getRowArray()) { + return $this->fail('User ID already exists', 400); + } + + $hashedPassword = password_hash($password, PASSWORD_DEFAULT); + + $this->db->transBegin(); + try { + $sqlInsert = "INSERT INTO gdc_cmod.dbo.USERS (USERID, USERLEVEL, PASSWORD) VALUES (?, ?, ?)"; + $this->db->query($sqlInsert, [$userid, $userlevel, $hashedPassword]); + $this->db->transCommit(); + } catch (\Throwable $e) { + $this->db->transRollback(); + return $this->failServerError($e->getMessage()); + } + + return $this->respondCreated(['message' => 'User created']); + } + + public function userUpdate() { + $json = $this->request->getJSON(); + $userid = strtoupper(trim($json->userid ?? '')); + $userlevel = trim($json->userlevel ?? ''); + $password = trim($json->password ?? ''); + $password_2 = trim($json->password_2 ?? ''); + + if (empty($userid)) { + return $this->fail('User ID is required', 400); + } + + $fullUpdate = false; + $hashedPassword = ''; + + if (!empty($password) || !empty($password_2)) { + if ($password != $password_2) { + return $this->fail('Passwords do not match', 400); + } + $hashedPassword = password_hash($password, PASSWORD_DEFAULT); + $fullUpdate = true; + } + + $this->db->transBegin(); + try { + if ($fullUpdate) { + $sql = "UPDATE gdc_cmod.dbo.USERS SET USERLEVEL = ?, PASSWORD = ? WHERE USERID = ?"; + $this->db->query($sql, [$userlevel, $hashedPassword, $userid]); + } else { + $sql = "UPDATE gdc_cmod.dbo.USERS SET USERLEVEL = ? WHERE USERID = ?"; + $this->db->query($sql, [$userlevel, $userid]); + } + $this->db->transCommit(); + } catch (\Throwable $e) { + $this->db->transRollback(); + return $this->failServerError(); + } + + return $this->respond(['message' => 'User updated']); + } + + public function userDelete() { + $json = $this->request->getJSON(); + $userid = strtoupper(trim($json->userid ?? '')); + + if (empty($userid)) { + return $this->fail('User ID is required', 400); + } + + $this->db->transBegin(); + try { + $sqlDelete = "DELETE FROM gdc_cmod.dbo.USERS WHERE USERID = ?"; + $this->db->query($sqlDelete, [$userid]); + $this->db->transCommit(); + } catch (\Throwable $e) { + $this->db->transRollback(); + return $this->failServerError(); + } + return $this->respondDeleted(['message' => 'User deleted']); + } } diff --git a/app/Views/v2/admin/index.php b/app/Views/v2/admin/index.php index 85ba514..0081335 100644 --- a/app/Views/v2/admin/index.php +++ b/app/Views/v2/admin/index.php @@ -42,8 +42,9 @@
diff --git a/app/Views/v2/admin/users.php b/app/Views/v2/admin/users.php new file mode 100644 index 0000000..421581d --- /dev/null +++ b/app/Views/v2/admin/users.php @@ -0,0 +1,264 @@ + + + + + +| User ID | +Role/Level | +Actions | +
|---|---|---|
| + | + + | ++ + + | +
Loading users...
+