Skip to content
Snippets Groups Projects
Commit 585e96f2 authored by Fawwaz Anugrah Wiradhika Dharmasatya's avatar Fawwaz Anugrah Wiradhika Dharmasatya
Browse files

fix: fix sorting and filtering and turn it into less bloaty (for runtime

parent d5fd321c
Branches
No related merge requests found
......@@ -127,13 +127,27 @@ const SONG_sIZE = 10;
}
static function redirectSearchLagu(IRequest $req, IResponse $res){
$sortType = $req->getQuery("sortsType")!==null?$req->getQuery("sortsType"):"titleASC";
$genre = $req->getQuery("filteredGenre")!==null?$req->getQuery("filteredGenre"):"nofilter";
$filteredGenre = strtolower($genre);
$queryString = strtolower($req->getQuery("q"));
return $res->redirect("/search?sortsType=$sortType&q=$queryString+&filteredGenre=$filteredGenre");
}
static function searchLagu(IRequest $req,IResponse $res){
$lagu_db = new Song($req->db);
$transaction = $lagu_db->transaction();
$sortType = $req->getQuery("sortsType");
$filteredGenre = strtolower($req->getQuery("filteredGenre"));
$sortType = $req->getQuery("sortsType")!==null?$req->getQuery("sortsType"):"titleASC";
$genre = $req->getQuery("filteredGenre")!==null?$req->getQuery("filteredGenre"):"nofilter";
$filteredGenre = strtolower($genre);
$lagu = $transaction->select(["*"]);
$queryString = strtolower($req->getQuery("q"));
if($req->getHeader("accept")==="text/html"){
$res->setHeader("content-type","text/html");
return $res->redirect("/search?sortsType=$sortType&q=$queryString+&filteredGenre=$filteredGenre");
}
if(!is_null($queryString) && strlen($queryString)>0){
$lagu->where("LOWER(title) LIKE ?",["%".$queryString."%"]);
}
......@@ -176,7 +190,12 @@ const SONG_sIZE = 10;
}
if ($page > $total_page) {
return $res->redirect("/");
if($total_page>0){
return $res->redirect("/search?sortsType=$sortType&q=$queryString&filteredGenre=$filteredGenre&page=1");
}
else{
return $res->redirect("/");
}
}
$transaction->commit();
......@@ -186,6 +205,7 @@ const SONG_sIZE = 10;
}
// print_r($hasil);
// print_r($total_page);
print_r($filteredGenre);
return $res->view("Pages/SearchLagu",
[ "songs" =>$hasil,
"sortsType"=>$sortType,
......
......@@ -205,7 +205,7 @@ class SubsciberController {
($req->getQuery("limit")>0?$req->getQuery("limit"):SubsciberController::DEFAULT_LIMIT)
:SubsciberController::DEFAULT_LIMIT;
$data = SubsciberController::fetchSubscriptions($page,$limit,$user_id,$req->db);
if(!$data){
if($data===false){
// return $res->json([
// "status"=>"failed",
// "message"=>"fetch operations failed",
......
......@@ -27,6 +27,7 @@ class AppRoutes
$route->route(HttpMethod::Get, "/", [HomeController::class, "homepage"]);
//halaman lihat lagu
$route->route(HttpMethod::Get, "/redirect/search", [LaguController::class, "redirectSearchLagu"]);
$route->route(HttpMethod::Get, "/search", [LaguController::class, "searchLagu"]);
$route->route(HttpMethod::Post, "/lagu/add", [LaguController::class, "addLagu"]);
$route->route(HttpMethod::Get, "/lagu/:id", [LaguController::class, "getLagu"]);
......
......@@ -35,7 +35,7 @@
<?php foreach($genreList as $_genre){ ?>
<option
value="<?=$_genre["genre"]?>"
<?php if($selectedGenre===$_genre){ ?>
<?php if($selectedGenre===strtolower($_genre["genre"])){ ?>
selected
<?php } ?>
>
......
......@@ -14,8 +14,6 @@
<img src="/static/img/search.png" alt="Webtune logo" />
</div>
<input type="text" name="q" placeholder="Lagu Dinosaurus" />
<input type="hidden" name="sortsType" value="titleASC"/>
<input type="hidden" name="filteredGenre" value="nofilter" />
</label>
</form>
</div>
......
......@@ -3,9 +3,9 @@ const container = document.querySelector("#list__container")
//const searchBar = document.querySelector("#searchbar")
const searchBar = document.querySelector(".header__search-bar > input")
const genreFilter = document.querySelector("#filteredGenre")
const pagination_number = document.querySelector(".pagination__page")
//const searchButton = document.querySelector("#searchButton")
function regenerateData(data){
html = ''
data.forEach(song => {
......@@ -32,28 +32,11 @@ function regenerateData(data){
container.innerHTML = html
}
async function fetchContent(type){
const data = await http.get("/search?sortsType="+type+"&q="+searchBar.value+"&filteredGenre="+genreFilter.value, {
json: true,
headers: {
"Accept": "application/json"
},
});
const lagu = data["data"]["hasil"]
document.querySelector(".pagination__page").innerHTML = "Page "+data["data"]["page"]
page = data["data"]["page"]
let total_page = data["data"]["total_page"]
if(page>total_page){
document.querySelector("#next_button").display = "hidden";
}
if(page<=1){
document.querySelector("#prev_button").display = "hidden";
}
console.log(lagu)
container.innerHTML = ''
console.log(container)
console.log(lagu)
regenerateData(lagu)
async function resortPage(type){
let page = pagination_number.innerText.split(" ")[1]
let url = `/search?sortsType=${type}&q=${searchBar.value}&filteredGenre=${genreFilter.value}&page=${page}`
await http.get(url, {});
window.location = url
}
async function searchResult(query){
......@@ -82,35 +65,40 @@ async function searchResult(query){
}
async function filterSearch(genre){
console.log("/search?sortsType="+sort_type_selector.value+"&q="+searchBar.value+"&filteredGenre="+genre)
const data = await http.get("/search?sortsType="+sort_type_selector.value+"&q="+searchBar.value+"&filteredGenre="+genre, {
json: true,
headers: {
"Accept": "application/json"
},
});
const lagu = data["data"]["hasil"]
document.querySelector(".pagination__page").innerHTML = "Page "+data["data"]["page"]
page = data["data"]["page"]
let total_page = data["data"]["total_page"]
if(page>total_page){
document.querySelector("#next_button").display = "hidden";
}
if(page<=1){
document.querySelector("#prev_button").display = "hidden";
}
console.log(lagu)
container.innerHTML = ''
console.log(container)
console.log(lagu)
regenerateData(lagu)
let page = pagination_number.innerText.split(" ")[1]
let url = `/search?sortsType=${sort_type_selector.value}&q=${searchBar.value}&filteredGenre=${genre}&page=${page}`
await http.get(url, {});
window.location = url
// console.log("/search?sortsType="+sort_type_selector.value+"&q="+searchBar.value+"&filteredGenre="+genre)
// const data = await http.get("/search?sortsType="+sort_type_selector.value+"&q="+searchBar.value+"&filteredGenre="+genre, {
// json: true,
// headers: {
// "Accept": "application/json"
// },
// });
// const lagu = data["data"]["hasil"]
// document.querySelector(".pagination__page").innerHTML = "Page "+data["data"]["page"]
// page = data["data"]["page"]
// let total_page = data["data"]["total_page"]
// if(page>total_page){
// document.querySelector("#next_button").display = "hidden";
// }
// if(page<=1){
// document.querySelector("#prev_button").display = "hidden";
// }
// console.log(lagu)
// container.innerHTML = ''
// console.log(container)
// console.log(lagu)
// regenerateData(lagu)
}
sort_type_selector.onchange =
(e)=>{
type = e.target.value;
setTimeout(() => {
fetchContent(type)
resortPage(type)
}, 100);
}
......@@ -119,13 +107,4 @@ genreFilter.onchange = (e)=>{
setTimeout(()=>{
filterSearch(genre)
},100)
}
/*
searchButton.onclick = (e)=>
{
query = searchBar.value
setTimeout(()=>{
searchResult(query)
},100)
}*/
\ No newline at end of file
}
\ No newline at end of file
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment