From e4d246ecd203601dfd98c2d7e762089e4749a85b Mon Sep 17 00:00:00 2001 From: unknown <13521043@std.stei.itb.ac.id> Date: Sat, 4 Nov 2023 03:12:33 +0700 Subject: [PATCH] update: application list on admin --- src/admin/gym/application/index.php | 44 +++++++++++++++++ src/admin/gym/index.php | 23 ++++++--- src/public/css/gym.css | 11 ++++- src/public/javascript/gym/application.js | 59 +++++++++++++++++++++++ src/public/javascript/gym/trainer_card.js | 35 ++++++++++++++ 5 files changed, 165 insertions(+), 7 deletions(-) create mode 100644 src/admin/gym/application/index.php create mode 100644 src/public/javascript/gym/application.js create mode 100644 src/public/javascript/gym/trainer_card.js diff --git a/src/admin/gym/application/index.php b/src/admin/gym/application/index.php new file mode 100644 index 0000000..735a214 --- /dev/null +++ b/src/admin/gym/application/index.php @@ -0,0 +1,44 @@ +<?php + +require_once __DIR__ . '/../../../components/NavbarAdmin.php'; +require_once __DIR__ . '/../../../middleware/AuthMiddleware.php'; + +AuthMiddleware::getInstance()->secureRoute(true); + +?> +<!DOCTYPE html> +<html lang="en"> + +<head> + <meta charset="UTF-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <link rel="stylesheet" href="/public/css/style.css"> + <title>Gym Finder App</title> +</head> + +<body> + <div class="app"> + <script> + const apikey = <?php echo json_encode($_ENV['API_KEY']) ?>; + </script> + <?php + echo NavbarAdmin(); + ?> + <div class="space"></div> + + <div class="gym-page-content"> + <div class="gym-content" id="gym-content"> + + </div> + <div class="space"></div> + + + <div class="space"></div> + </div> + </div> + <script src="/public/javascript/gym/format_card.js"></script> + <script src="/public/javascript/gym/trainer_card.js"></script> + <script src="/public/javascript/gym/application.js"></script> +</body> + +</html> \ No newline at end of file diff --git a/src/admin/gym/index.php b/src/admin/gym/index.php index 9373c45..0625314 100644 --- a/src/admin/gym/index.php +++ b/src/admin/gym/index.php @@ -42,36 +42,44 @@ AuthMiddleware::getInstance()->secureRoute(true); $formatted_price = formatPrice($gym->monthly_price); ?> <img class="photo-gym" src="/public/image/gym/<?= $gym->picture_id ?>.png" alt="Gym Image"> - <div class="space3"></div> + <div class="space"></div> <div class=gym-name><?= $gym->name ?></div> - <div class="space3"></div> + <div class="space"></div> <div class="gym-attribute">Location</div> <div class="nama-kota"> <?= $city_name ?> </div> - <div class="space3"></div> + <div class="space"></div> <div class="gym-attribute">Description</div> <div class="gym-description"> <?= $gym->description ?> </div> - <div class="space3"></div> + <div class="space"></div> <div class="gym-attribute">Price</div> <div class="gym-price"> <?= $formatted_price ?> </div> - <div class="space3"></div> + <div class="space"></div> <div class="gym-attribute">Training Video</div> - <div class="space3"></div> + <div class="space2"></div> <video controls class="video-gym"> <source src="/public/video/gym/<?= $gym->video_id ?>.mp4" type="video/mp4"> Your browser does not support the video tag. </video> </div> <div class="space"></div> + + <div class="gym-attribute">Application List</div> + <div class="gym-card-container" id="gym-application-list"> + <div class="space"></div> + Loading... + </div> + <div class="space"></div> + <div class="gym-attribute">Rate List</div> @@ -98,6 +106,9 @@ AuthMiddleware::getInstance()->secureRoute(true); <div class="space"></div> </div> </div> + <script src="/public/javascript/gym/format_card.js"></script> + <script src="/public/javascript/gym/trainer_card.js"></script> + <script src="/public/javascript/gym/application.js"></script> </body> </html> \ No newline at end of file diff --git a/src/public/css/gym.css b/src/public/css/gym.css index 990a671..4ababf6 100644 --- a/src/public/css/gym.css +++ b/src/public/css/gym.css @@ -28,7 +28,7 @@ flex-direction: column; align-items: center; } -.loading, .gym-name, .gym-attribute, .nama-kota, .gym-description, .gym-price, .rate-button, .gym-card-text { +.loading, .gym-name, .gym-attribute, .nama-kota, .gym-description, .gym-price, .rate-button, .gym-card-text, .trainer-card-text { color: var(--text-standard); text-align: center; font-family: var(--font-standard); @@ -73,6 +73,15 @@ width: 44%; margin: 0; } +.trainer-card-text { + font-size: var(--font-size-standard); + text-align: left; + width: 90%; +} +.gym-card-text-bottom { + width: 100%; + font-weight: 400; +} .gym-card { margin-top: 10px; margin-bottom: 5px; diff --git a/src/public/javascript/gym/application.js b/src/public/javascript/gym/application.js new file mode 100644 index 0000000..55a2b7b --- /dev/null +++ b/src/public/javascript/gym/application.js @@ -0,0 +1,59 @@ +function modifyGymApplicationList(data) { + const gymApplicationList = document.getElementById("gym-application-list"); + gymApplicationList.innerHTML = ""; + data.forEach((trainer) => { + gymApplicationList.innerHTML += TrainerCard(trainer); + }); +} +// dummy data +let trainer = { + name: "John Doe", + username: "johndoe", + acceptance: 0, + gym_id: 43 +} +let trainer2 = { + name: "Jane Doe", + username: "janedoe", + acceptance: 1, + gym_id: 43 +} +let data = [trainer, trainer2]; +modifyGymApplicationList(data); + +function getApplication(gymId, username) { + const xhr = new XMLHttpRequest(); + xhr.onreadystatechange = function () { + if (this.readyState === 4) { + if (this.status === 200) { + // modifyGymRateList(JSON.parse(this.responseText)["ratings"], username); + modifyGymApplicationList(JSON.parse(this.responseText)["trainers"]); + } else { + const json = JSON.parse(this.responseText); + alert(json["error"]); + } + } + }; + + // xhr.open("GET", `/api/gym/rating?gym_id=${gymId}`, true); + // xhr.setRequestHeader("X-API-KEY", apikey); + xhr.send(); +} + +function acceptApplication(username, gymId) { + const xhr = new XMLHttpRequest(); + xhr.onreadystatechange = function () { + if (this.readyState === 4) { + if (this.status === 200) { + + } else { + const json = JSON.parse(this.responseText); + alert(json["error"]); + } + } + }; + + // xhr.open("GET", `/api/gym/rating?gym_id=${gymId}`, true); + // xhr.setRequestHeader("X-API-KEY", apikey); + xhr.send(); +} \ No newline at end of file diff --git a/src/public/javascript/gym/trainer_card.js b/src/public/javascript/gym/trainer_card.js new file mode 100644 index 0000000..69a9ccf --- /dev/null +++ b/src/public/javascript/gym/trainer_card.js @@ -0,0 +1,35 @@ +function acceptance(acc_code){ + if (acc_code == 0){ + return "Applied"; + } else if (acc_code == 1){ + return "Accepted"; + } else if (acc_code == 2){ + return "Rejected"; + } else { + return "Unknown"; + } +} + +function TrainerCard(trainer){ + let truncated_name = truncateText(trainer.name, 16); + let acceptance_status = acceptance(trainer.acceptance); + let tname = "trainer name : " + truncated_name; + let tusername = "username : " + trainer.username; + let trainer_card = ` + <a class="gym-card" id="gym-card-${trainer.username}" href="./application/?gym_id=${trainer.gym_id}&trainer_username=${trainer.username}"> + <div class="trainer-card-text"> + <div class="gym-card-name"> ${tname} </div> + <div class="space3"></div> + <div class="gym-card-text-bottom"> + <div class="gym-card-text-bottom-left"> + ${tusername} + </div> + <div class="gym-card-text-bottom-right"> + ${acceptance_status} + </div> + </div> + </div> + </a> + `; + return trainer_card; +} \ No newline at end of file -- GitLab