users.php 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. <?php
  2. header("Access-Control-Allow-Origin: *");
  3. header("Content-Type: application/json; charset=UTF-8");
  4. header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS");
  5. header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With");
  6. if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
  7. exit(0);
  8. }
  9. require_once __DIR__ . '/../config/database.php';
  10. require_once __DIR__ . '/../models/User.php';
  11. $database = new Database();
  12. $db = $database->getConnection();
  13. $user = new User($db);
  14. $request_method = $_SERVER['REQUEST_METHOD'];
  15. switch($request_method) {
  16. case 'GET':
  17. if(isset($_GET['id'])) {
  18. $user->id = $_GET['id'];
  19. $user->readOne();
  20. if($user->username != null) {
  21. $user_arr = array(
  22. "id" => $user->id,
  23. "username" => $user->username,
  24. "email" => $user->email,
  25. "first_name" => $user->first_name,
  26. "last_name" => $user->last_name,
  27. "role" => $user->role,
  28. "is_active" => $user->is_active,
  29. "last_login" => $user->last_login,
  30. "created_at" => $user->created_at,
  31. "updated_at" => $user->updated_at,
  32. "role_badge" => $user->getRoleBadge(),
  33. "status_badge" => $user->getStatusBadge()
  34. );
  35. http_response_code(200);
  36. echo json_encode($user_arr);
  37. } else {
  38. http_response_code(404);
  39. echo json_encode(array("message" => "User not found."));
  40. }
  41. } else {
  42. $stmt = $user->read();
  43. $num = $stmt->rowCount();
  44. if($num > 0) {
  45. $users_arr = array();
  46. $users_arr["records"] = array();
  47. while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
  48. extract($row);
  49. $user_item = array(
  50. "id" => $id,
  51. "username" => $username,
  52. "email" => $email,
  53. "first_name" => $first_name,
  54. "last_name" => $last_name,
  55. "role" => $role,
  56. "is_active" => $is_active,
  57. "last_login" => $last_login,
  58. "created_at" => $created_at,
  59. "updated_at" => $updated_at,
  60. "role_badge" => getRoleBadge($role),
  61. "status_badge" => getStatusBadge($is_active)
  62. );
  63. array_push($users_arr["records"], $user_item);
  64. }
  65. http_response_code(200);
  66. echo json_encode($users_arr);
  67. } else {
  68. http_response_code(200);
  69. echo json_encode(array("records" => array()));
  70. }
  71. }
  72. break;
  73. case 'POST':
  74. $data = json_decode(file_get_contents("php://input"));
  75. if(!empty($data->username) && !empty($data->email) && !empty($data->first_name) && !empty($data->last_name) && !empty($data->password)) {
  76. // Check if username or email already exists
  77. $existing_user = $user->findByEmail($data->email);
  78. if($existing_user) {
  79. http_response_code(409);
  80. echo json_encode(array("message" => "Email already exists"));
  81. break;
  82. }
  83. $existing_user = $user->findByUsername($data->username);
  84. if($existing_user) {
  85. http_response_code(409);
  86. echo json_encode(array("message" => "Username already exists"));
  87. break;
  88. }
  89. $user->username = $data->username;
  90. $user->email = $data->email;
  91. $user->password_hash = $data->password;
  92. $user->first_name = $data->first_name;
  93. $user->last_name = $data->last_name;
  94. $user->role = $data->role ?? 'user';
  95. $user->is_active = $data->is_active ?? true;
  96. if($user->create()) {
  97. http_response_code(201);
  98. echo json_encode(array("message" => "User was created."));
  99. } else {
  100. http_response_code(503);
  101. echo json_encode(array("message" => "Unable to create user."));
  102. }
  103. } else {
  104. http_response_code(400);
  105. echo json_encode(array("message" => "Unable to create user. Data is incomplete."));
  106. }
  107. break;
  108. case 'PUT':
  109. $data = json_decode(file_get_contents("php://input"));
  110. if(!empty($data->id) && !empty($data->username) && !empty($data->email) && !empty($data->first_name) && !empty($data->last_name)) {
  111. $user->id = $data->id;
  112. $user->username = $data->username;
  113. $user->email = $data->email;
  114. $user->first_name = $data->first_name;
  115. $user->last_name = $data->last_name;
  116. $user->role = $data->role ?? 'user';
  117. $user->is_active = $data->is_active ?? true;
  118. // Update password if provided
  119. $update_password = !empty($data->password);
  120. if($update_password) {
  121. $user->password_hash = $data->password;
  122. }
  123. if($user->update($update_password)) {
  124. http_response_code(200);
  125. echo json_encode(array("message" => "User was updated."));
  126. } else {
  127. http_response_code(503);
  128. echo json_encode(array("message" => "Unable to update user."));
  129. }
  130. } else {
  131. http_response_code(400);
  132. echo json_encode(array("message" => "Unable to update user. Data is incomplete."));
  133. }
  134. break;
  135. case 'DELETE':
  136. if(isset($_GET['id'])) {
  137. $user->id = $_GET['id'];
  138. if($user->delete()) {
  139. http_response_code(200);
  140. echo json_encode(array("message" => "User was deleted."));
  141. } else {
  142. http_response_code(503);
  143. echo json_encode(array("message" => "Unable to delete user."));
  144. }
  145. } else {
  146. http_response_code(400);
  147. echo json_encode(array("message" => "Unable to delete user. ID is missing."));
  148. }
  149. break;
  150. default:
  151. http_response_code(405);
  152. echo json_encode(array("message" => "Method not allowed."));
  153. break;
  154. }
  155. // Helper functions
  156. function getRoleBadge($role) {
  157. $badges = array(
  158. 'admin' => '<span style="background-color: #dc3545; color: white; padding: 2px 8px; border-radius: 12px; font-size: 12px; font-weight: 500;">Admin</span>',
  159. 'manager' => '<span style="background-color: #28a745; color: white; padding: 2px 8px; border-radius: 12px; font-size: 12px; font-weight: 500;">Manager</span>',
  160. 'user' => '<span style="background-color: #6c757d; color: white; padding: 2px 8px; border-radius: 12px; font-size: 12px; font-weight: 500;">User</span>'
  161. );
  162. return $badges[$role] ?? $badges['user'];
  163. }
  164. function getStatusBadge($is_active) {
  165. if($is_active) {
  166. return '<span style="background-color: #28a745; color: white; padding: 2px 8px; border-radius: 12px; font-size: 12px; font-weight: 500;">Active</span>';
  167. } else {
  168. return '<span style="background-color: #6c757d; color: white; padding: 2px 8px; border-radius: 12px; font-size: 12px; font-weight: 500;">Inactive</span>';
  169. }
  170. }
  171. ?>