diff --git a/api/challenge/challenge.php b/api/challenge/challenge.php new file mode 100644 index 0000000000000000000000000000000000000000..911599bb49ff7c12a98afddbf451760767f936fc --- /dev/null +++ b/api/challenge/challenge.php @@ -0,0 +1,131 @@ +<?php +include_once __DIR__."/../session.php"; +session_start(); + +$username = $_SESSION['username']; + +$conn = Database::getInstance(); + +$page = isset($_GET['page']) ? $_GET['page'] : 1; +$limit = isset($_COOKIE['challenge-limit']) ? $_COOKIE['challenge-limit'] : 5; +$search = isset($_COOKIE['challenge-search']) ? $_COOKIE['challenge-search'] : ''; +$searchAttr = isset($_COOKIE['challenge-search-type']) ? $_COOKIE['challenge-search-type'] : 'name'; +$sort = isset($_COOKIE['challenge-sort']) ? $_COOKIE['challenge-sort'] : ''; +$sortType = isset($_COOKIE['challenge-order']) ? $_COOKIE['challenge-order'] : 'asc'; +$sortType = $sortType == 'desc' ? 'desc' : 'asc'; +$sort = $sort == 'default' ? '' : $sort; +$start = ($page - 1) * $limit; + +$sql1 = "SELECT * FROM quest"; + +if ($search !== '') { + $sql1 .= " WHERE $searchAttr LIKE '%$search%'"; +} + +if ($sort !== '') { + $sql1 .= " ORDER BY $sort $sortType"; +} + +$sql1 .= " LIMIT $start, $limit"; + +$sql2 = "SELECT COUNT(id) AS id FROM quest"; + +if ($search !== '') { + $sql2 .= " AND name LIKE '%$search%'"; +} + +$result = $conn->query($sql1); +$customers = $result->fetch_all(MYSQLI_ASSOC); + +$result1 = $conn->query($sql2); +$custCount = $result1->fetch_all(MYSQLI_ASSOC); +$total = $custCount[0]['id']; +$pages = ceil( $total / $limit ); + +$Previous = $page - 1; +$Next = $page + 1; + +function getUserId($username){ + $conn = Database::getInstance(); + $sql = "SELECT id FROM users WHERE username = '$username'"; + $result = $conn->query($sql); + $customers = $result->fetch_all(MYSQLI_ASSOC); + return $customers[0]['id']; +} + +function getStatusClaim($user_id, $quest_id){ + $conn = Database::getInstance(); + $sql = "SELECT * FROM user_quest WHERE user_id = $user_id AND quest_id = $quest_id"; + $result = $conn->query($sql); + $customers = $result->fetch_all(MYSQLI_ASSOC); + if (count($customers) > 0){ + return true; + } else { + return false; + } +} + +$user_id = getUserId($username); + +$achievementList = ''; +foreach ($customers as $item) { + $claimStatus = getStatusClaim($user_id, $item["id"]); + $achievementList .= '<tr>'; + $achievementList .= '<td>'.$item["id"].'</td> '; + $achievementList .= '<td>'.$item["name"].'</td> '; + $achievementList .= '<td>'.$item["description"].'</td> '; + $achievementList .= '<td>'.$item["threshold"].'</td> '; + $achievementList .= '<td>'; + if ($claimStatus){ + $achievementList .= '<button id="cobtain" onclick=#>Obtained </button>'; + } else { + $achievementList .= '<button id="obtain-not" onclick=#>Unobtained </button>'; + } + $achievementList .= '</td><td>'; + if (!$claimStatus){ + $achievementList .= '<button id="claim" onclick=claimFunction(' .$user_id. ',' .$item["id"]. ')>Claim</button>'; + } else { + $achievementList .= '<button id="claim-not" onclick=unclaimFunction(' .$user_id. ',' .$item["id"]. ')>Unclaim</button>'; + } + $achievementList .= '</td></tr>'; +} + +// Buat tombol pagination +$previous = ($page == 1) ? 1 : $page - 1; +$next = ($page == $pages) ? $pages : $page + 1; +$first = 1; +$last = $pages; + +$paginationButtons = '<ul class="achievement">'; + +if ($page > 1){ + $paginationButtons .= "<li><a href='?page=$first' class='pagination-link' data-page='$first'><b><<</b></a></li>"; + $paginationButtons .= "<li><a href='?page=$previous' class='pagination-link' data-page='$previous'><b><</b></a></li>"; +} + +$range = 5; +$start = max(1, $page - $range); +$end = min($pages, $page + $range); + +for ($i = $start; $i <= $end; $i++) { + $activeClass = ($i == $page) ? 'active' : ''; + $paginationButtons .= "<li><a href='?page=$i' class='pagination-link $activeClass' data-page='$i'>$i</a></li>"; +} + +if ($page < $pages){ + $paginationButtons .= "<li><a href='?page=$next' class='pagination-link' data-page='$next'><b>></b></a></li>"; + $paginationButtons .= "<li><a href='?page=$last' class='pagination-link' data-page='$last'><b>>></b></a></li>"; +} + +$paginationButtons .= '</ul>'; + +$response = [ + 'achievementList' => $achievementList, + 'paginationButtons' => $paginationButtons, + 'query1' => $sql1, + 'query2' => $sql2, + +]; + +echo json_encode($response); +?>