diff --git a/src/web/controller/albumController.php b/src/web/controller/albumController.php index 5ba3bfa5e565390296a5d243beb603d585ae579c..fec8d53844e320a5291d91508fd2af3f2f6f39d1 100644 --- a/src/web/controller/albumController.php +++ b/src/web/controller/albumController.php @@ -42,7 +42,7 @@ try { exit; } - $query = 'SELECT * FROM album INNER JOIN account ON album.owner_account_id = account.account_id WHERE (album.name LIKE :searchQuery OR account.username LIKE :searchQuery) '.$creatorCondition.' ORDER BY '.$sortBy.' '.$order; + $query = 'SELECT *, account.username as username FROM album INNER JOIN account ON album.owner_account_id = account.account_id WHERE (album.name LIKE :searchQuery OR account.username LIKE :searchQuery) '.$creatorCondition.' ORDER BY '.$sortBy.' '.$order; $params = [ 'searchQuery' => '%'.$searchQuery.'%', diff --git a/src/web/controller/musicController.php b/src/web/controller/musicController.php index e5d5993176516e66283dbc0a5787d2cc074df96b..f0ea665ffbf408e4c54c97515e4b2741c6399f85 100644 --- a/src/web/controller/musicController.php +++ b/src/web/controller/musicController.php @@ -44,7 +44,7 @@ try { exit; } - $query = 'SELECT * FROM music WHERE (title LIKE :searchQuery OR genre LIKE :searchQuery) '.$genreCondition.' '.$creatorCondition.' ORDER BY '.$sortBy.' '.$order; + $query = 'SELECT *, username FROM music INNER JOIN account ON music.owner_account_id = account.account_id WHERE (music.title LIKE :searchQuery OR music.genre LIKE :searchQuery) '.$genreCondition.' '.$creatorCondition.' ORDER BY '.$sortBy.' '.$order; $params = [ 'searchQuery' => '%'.$searchQuery.'%', diff --git a/src/web/presentation/home/home.php b/src/web/presentation/home/home.php index db2c29408a4f17477fb327919773215a2a767293..fb2bd9808009765bf7e96c8f9378a999425cc11d 100644 --- a/src/web/presentation/home/home.php +++ b/src/web/presentation/home/home.php @@ -15,6 +15,6 @@ if(!isset($_COOKIE['token'])) { //Get id $accountId = authenticateToken($_COOKIE['token']); // Get random songs -$eightalbums = execSelect('SELECT * FROM album ORDER BY RANDOM() LIMIT 8', []); +$shownalbums = execSelect('SELECT * FROM album ORDER BY RANDOM() LIMIT 6', []); require 'presentation/home/home.view.php'; \ No newline at end of file diff --git a/src/web/presentation/home/home.view.php b/src/web/presentation/home/home.view.php index ea3de69fce336728043acdffe653b1ee67bbfca5..71a1fe591a06d77ad9499447c3dd1c2673d89470 100644 --- a/src/web/presentation/home/home.view.php +++ b/src/web/presentation/home/home.view.php @@ -22,11 +22,11 @@ <?php include('presentation/template/navbar.php') ?> <section class="container-album"> <div class="category"> - <?php if(isset($eightalbums[0])) {?> + <?php if(isset($shownalbums[0])) {?> <h2>Albums for you</h2> <div class="album-wrapper"> <?php - foreach ($eightalbums as $row) { ?> + foreach ($shownalbums as $row) { ?> <div id="<?php echo $row['album_id'] ?>" class="album"> <img src="presentation/music/info/img/defalbum.jpg" alt="Playlist 1"> <h3><?php echo $row['name'] ?></h3> diff --git a/src/web/presentation/music/list/albumList.php b/src/web/presentation/music/list/albumList.php index aa1b1e8956530880ec318fbc5ad3e1a59889ed80..f51881aed24de4fd88f56c946c2870659d3fca1b 100644 --- a/src/web/presentation/music/list/albumList.php +++ b/src/web/presentation/music/list/albumList.php @@ -2,7 +2,7 @@ require_once 'db/db-executor.php'; require_once 'auth/authenticator.php'; -require_once 'util/album-finder.php'; +require_once 'auth/authorizer.php'; $errMsg = ''; @@ -15,7 +15,6 @@ if(!isset($_COOKIE['token'])) { //Get id of account to verify user $accountId = authenticateToken($_COOKIE['token']); - $allCreators = execSelect('SELECT DISTINCT username, account_id FROM account WHERE is_admin = CAST(1 AS SMALLINT)', []); diff --git a/src/web/presentation/music/list/albumList.view.php b/src/web/presentation/music/list/albumList.view.php index 23d7656a11b52e8b29fdf2c6c8531bb0fd49cef1..18317a5ee3fe40f61f4fe6d7b0f41a5eb02e6894 100644 --- a/src/web/presentation/music/list/albumList.view.php +++ b/src/web/presentation/music/list/albumList.view.php @@ -59,7 +59,8 @@ <div class="album" id="<?php echo $row['album_id']?>" > <img src="<? echo getAlbumImageByID($row['album_id']) ?>" alt="Album Cover"> <h3><? echo $row['name'] ?></h3> - <p><? echo $row['year'] ?></p> + <p>By : <? echo getAlbumCreator($row['album_id']) ?></p> + <p>Released : <? echo $row['year'] ?></p> <p>ID : <? echo $row['album_id'] ?></p> </div> <?php } ?> diff --git a/src/web/presentation/music/list/css/albumList.css b/src/web/presentation/music/list/css/albumList.css index b7cb5908f9db4dbb15049d3d6bf8cfa19eff887c..ead13e69c08850b70910c78c99819e3fa539324e 100644 --- a/src/web/presentation/music/list/css/albumList.css +++ b/src/web/presentation/music/list/css/albumList.css @@ -59,7 +59,7 @@ .album p { margin-top: 5px; - margin-bottom: 22px; + margin-bottom: 5px; } .no-result { diff --git a/src/web/presentation/music/list/css/musicList.css b/src/web/presentation/music/list/css/musicList.css index c93fa77b9c9297100df894e1a32f829eac4e465c..392b98eeb6eb015f8c107ea149eb9f3bd4e0c364 100644 --- a/src/web/presentation/music/list/css/musicList.css +++ b/src/web/presentation/music/list/css/musicList.css @@ -43,6 +43,7 @@ justify-content: space-evenly; background-color: rgb(206, 206, 206); border-radius: 5px; + cursor: pointer; } .music img { @@ -58,7 +59,7 @@ .music p { margin-top: 5px; - margin-bottom: 22px; + margin-bottom: 5px; } .search { diff --git a/src/web/presentation/music/list/js/albumList.js b/src/web/presentation/music/list/js/albumList.js index 44ed477d7bf6caeb70e5e50f1757600faf74cfa9..e3c795f71649fae13927f96c0176dfbfa33ae645 100644 --- a/src/web/presentation/music/list/js/albumList.js +++ b/src/web/presentation/music/list/js/albumList.js @@ -1,17 +1,13 @@ const searchInput = document.querySelector(".input-search"); - const prevButton = document.querySelector("#previous"); const nextButton = document.querySelector("#next"); const buttonSearch = document.querySelector(".search"); const pageNumber = document.querySelector("#page-number"); const pagesCount = document.querySelector("#pages"); - const pageText = document.querySelector("#pagination-text"); -const songsResult = document.querySelector(".album-wrapper"); +const albumResult = document.querySelector(".album-wrapper"); const pagination = document.querySelector(".pagination"); - const albums = document.querySelectorAll(".album"); - const sortInput = document.querySelector(".sort-select"); const orderInput = document.querySelector(".order-select"); const creatorInput = document.querySelector(".creator-select"); @@ -29,53 +25,6 @@ const debounce = (func, delay) => { let currentPage = 1; let limit = 6; - - -prevButton && - prevButton.addEventListener("click", async () => { - if (currentPage === 1) { - return; - } - currentPage -= 1; - const xhr = new XMLHttpRequest(); - xhr.open( - "GET", - `/public/song/fetch/${currentPage}?csrf_token=${CSRF_TOKEN}&q=${searchInput.value}&filter=${filterInput.value}&sort=${sortInput.value}` - ); - - xhr.send(); - - xhr.onreadystatechange = function () { - if (this.readyState === XMLHttpRequest.DONE) { - data = JSON.parse(this.responseText); - updateData(data); - } - }; - }); - - -nextButton && - nextButton.addEventListener("click", async () => { - if (currentPage === PAGES) { - return; - } - currentPage += 1; - const xhr = new XMLHttpRequest(); - xhr.open( - "GET", - `/public/song/fetch/${currentPage}?csrf_token=${CSRF_TOKEN}&q=${searchInput.value}&filter=${filterInput.value}&sort=${sortInput.value}` - ); - - xhr.send(); - - xhr.onreadystatechange = function () { - if (this.readyState === XMLHttpRequest.DONE) { - data = JSON.parse(this.responseText); - updateData(data); - } - }; - }); - searchInput && searchInput.addEventListener("keyup", debounce( @@ -141,12 +90,23 @@ const updateData = (data) => { <div class="album" id="${album.album_id}" > <img src="presentation/music/info/img/defalbum.jpg" alt="Playlist 1"> <h3>${album.name}</h3> - <p>${album.year}</p> + <p>By : ${album.username}</p> + <p>Released : ${album.year}</p> <p>ID : ${album.album_id}</p> </div> `; }); - songsResult.innerHTML = newHTML; + albumResult.innerHTML = newHTML; + albumResult.addEventListener("click", function (e) { + const clickedElement = e.target; + const albumElement = clickedElement.closest(".album"); + if (albumElement) { + const albumId = albumElement.id; + // Redirect + window.location.href = `/album?id=${albumId}`; + } + }); + pageNumber.innerHTML = currentPage; if (currentPage == 1) { prevButton.disabled = true; @@ -161,32 +121,10 @@ const updateData = (data) => { } }; -const newData = (data) => { - pages = data.pages; - let newHTML = ""; - if (pages === 0) { - newHTML += ` - <p class="no-result"> - No album found! - </p> - `; - songsResult.innerHTML = newHTML; - pageText.innerHTML = `Page <span id="page-number">0</span> out of <span id="pages">0</span> pages`; - prevButton.disabled = true; - nextButton.disabled = true; - pagination.style.display = "none"; - } else { - pagination.style.display = "block"; - currentPage = 1; - pageText.innerHTML = `Page <span id="page-number">1</span> out of <span id="pages">${pages}</span> pages`; - updateData(data); - } -}; albums.forEach((album) => { album.addEventListener("click", async (e) => { e.preventDefault(); - console.log(album.id); // Redirect to album page window.location.href = `/album?id=${album.id}`; diff --git a/src/web/presentation/music/list/js/musicList.js b/src/web/presentation/music/list/js/musicList.js index 726fe762e4020e98a11a3ee85bc1496d568242ee..c8f366a5506b6521465c54f10299b9aa848debe1 100644 --- a/src/web/presentation/music/list/js/musicList.js +++ b/src/web/presentation/music/list/js/musicList.js @@ -1,25 +1,15 @@ const searchInput = document.querySelector(".input-search"); -// const filterInput = document.querySelector("#filter"); -// const sortInput = document.querySelector("#sort"); - const prevButton = document.querySelector("#previous"); const nextButton = document.querySelector("#next"); const buttonSearch = document.querySelector(".search"); -const pageNumber = document.querySelector("#page-number"); - -const pageText = document.querySelector("#pagination-text"); const songsResult = document.querySelector(".music-wrapper"); const pagination = document.querySelector(".pagination"); // Sorting const sortInput = document.querySelector(".sort-select"); -console.log(sortInput.value); const orderInput = document.querySelector(".order-select"); -console.log(orderInput.value); const genreInput = document.querySelector(".genre-select"); -console.log(genreInput.value); const creatorInput = document.querySelector(".creator-select"); -console.log(creatorInput.value); const debounce = (func, delay) => { let timer; @@ -32,49 +22,6 @@ const debounce = (func, delay) => { }; let currentPage = 1; -prevButton && - prevButton.addEventListener("click", async () => { - if (currentPage === 1) { - return; - } - currentPage -= 1; - const xhr = new XMLHttpRequest(); - xhr.open( - "GET", - `/public/song/fetch/${currentPage}?csrf_token=${CSRF_TOKEN}&q=${searchInput.value}&filter=${filterInput.value}&sort=${sortInput.value}` - ); - - xhr.send(); - - xhr.onreadystatechange = function () { - if (this.readyState === XMLHttpRequest.DONE) { - data = JSON.parse(this.responseText); - updateData(data); - } - }; - }); - -nextButton && - nextButton.addEventListener("click", async () => { - if (currentPage === PAGES) { - return; - } - currentPage += 1; - const xhr = new XMLHttpRequest(); - xhr.open( - "GET", - `/public/song/fetch/${currentPage}?csrf_token=${CSRF_TOKEN}&q=${searchInput.value}&filter=${filterInput.value}&sort=${sortInput.value}` - ); - - xhr.send(); - - xhr.onreadystatechange = function () { - if (this.readyState === XMLHttpRequest.DONE) { - data = JSON.parse(this.responseText); - updateData(data); - } - }; - }); searchInput && searchInput.addEventListener("keyup", @@ -141,12 +88,23 @@ const updateData = (data) => { <div class="music" id=${music.album_id} > <img src="presentation/music/info/img/defalbum.jpg" alt="Playlist 1"> <h3>${music.title}</h3> - <p>${music.year}dsf</p> + <p>By : ${music.username}</p> + <p>Released : ${music.year}dsf</p> <p>ID : ${music.music_id}</p> </div> `; }); songsResult.innerHTML = newHTML; + songsResult.addEventListener("click", function (e) { + const clickedElement = e.target; + const musicElement = clickedElement.closest(".music"); + if (musicElement) { + const musicId = musicElement.id; + // Redirect + window.location.href = `/music?id=${musicId}`; + } + }); + pageNumber.innerHTML = currentPage; if (currentPage == 1) { prevButton.disabled = true; @@ -161,28 +119,6 @@ const updateData = (data) => { } }; -const newData = (data) => { - pages = data.pages; - let newHTML = ""; - if (pages === 0) { - newHTML += ` - <p class="no-result"> - Your search did not match any songs in our database! - </p> - `; - songsResult.innerHTML = newHTML; - pageText.innerHTML = `Page <span id="page-number">0</span> out of 0 pages`; - prevButton.disabled = true; - nextButton.disabled = true; - pagination.style.display = "none"; - } else { - pagination.style.display = "block"; - currentPage = 1; - pageText.innerHTML = `Page <span id="page-number">1</span> out of ${data.pages} pages`; - updateData(data); - } -}; - const albums = document.querySelectorAll(".music"); albums.forEach((album) => { diff --git a/src/web/presentation/music/list/musicList.view.php b/src/web/presentation/music/list/musicList.view.php index 5282f4c72bb189c81e31b83aa962c4c76c34ab72..31d6f07ae9773e3f20e723d45942a7c11b7b6afd 100644 --- a/src/web/presentation/music/list/musicList.view.php +++ b/src/web/presentation/music/list/musicList.view.php @@ -1,3 +1,4 @@ +<?php require_once 'util/album-finder.php'; ?> <!DOCTYPE html> <html lang="en"> <head> @@ -25,7 +26,7 @@ <section class="container-music"> <div class="category"> <form class="search" method="GET"> - <input class="input-search" type="text" placeholder="Search title or creator" value="<?php echo (isset($searchInput) ? $searchInput : null)?>"> + <input class="input-search" type="text" placeholder="Search title or genre" value="<?php echo (isset($searchInput) ? $searchInput : null)?>"> <button class="search-button" type="submit"><img src="presentation\template\images\search.png" alt="Search"></button> </form> <!-- Sort --> @@ -64,7 +65,8 @@ <div class="music" id=<?php echo $row['music_id']?> > <img src="presentation/music/info/img/defalbum.jpg" alt="Playlist 1"> <h3><?php echo $row['title'] ?></h3> - <p><?php echo $row['year'] ?></p> + <p>By : <? echo getAlbumCreator($row['album_id']) ?></p> + <p>Released : <?php echo $row['year'] ?></p> <p>ID : <?php echo $row['music_id'] ?></p> </div> <?php } ?> diff --git a/src/web/presentation/template/sidebar.view.php b/src/web/presentation/template/sidebar.view.php index a44a7da11b26b6b5e995868010ee980258954552..fd64a18d0021ada083b99d11a6516c43ddcf6a02 100644 --- a/src/web/presentation/template/sidebar.view.php +++ b/src/web/presentation/template/sidebar.view.php @@ -1,7 +1,7 @@ <!-- Sidebar --> <aside class="sidebar"> <a class="logo" href="/"> - <img src="presentation\template\images\logo.png" alt="Logo"> + <img src="./presentation/template/images/logo.png" alt="Logo"> </a> <ul> <a href="/" <?php if ($currentUrl == "/") { ?>class="currentMenu"<?php } ?>> diff --git a/src/web/util/album-finder.php b/src/web/util/album-finder.php index 422d8ae8f291f6a9b950a9e701d8b0fedb737084..828ec5b3ffb11ec6026e7db5f754e57ba45f7ceb 100644 --- a/src/web/util/album-finder.php +++ b/src/web/util/album-finder.php @@ -5,6 +5,11 @@ function getAlbumName(mixed $album_id) { return $result[0]['name']; } +function getAlbumCreator(mixed $album_id) { + $result = execSelect("SELECT username FROM account WHERE account_id = (SELECT owner_account_id FROM album WHERE album_id = :id)", ['id' => $album_id]); + return $result[0]['username']; +} + function getAlbumImage(): string { $image = '/presentation/music/edit/img/defalbum.jpg'; @@ -76,38 +81,3 @@ function getAlbumImageByID($id): string { return $image; } - -function getAlbumImageByID($ID): string { - $image = '/presentation/music/edit/img/defalbum.jpg'; - - // get album cover filename from db - $q_result = execSelect("SELECT album_cover_filename, owner_account_id FROM album WHERE album_id = :id", ['id' => $ID]); - echo $q_result[0]['album_cover_filename']; - - if (count($q_result) != 0) { - $filename = $q_result[0]['album_cover_filename']; - $accountId = $q_result[0]['owner_account_id']; - - // prepare curl request - $url = 'object-storage:80/object'; - - $data = http_build_query(array( - 'owner' => $accountId, // account id, - 'fileType' => 'album-cover', - 'fileName' => $filename - )); - $getUrl = $url.'?'.$data; - - $curl = curl_init($getUrl); - curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); - $result = curl_exec($curl); - - if (!curl_errno($curl) && curl_getinfo($curl, CURLINFO_HTTP_CODE) == 200) { - $contentType = curl_getinfo($curl, CURLINFO_CONTENT_TYPE); - $image = 'data:'.$contentType.';base64,'.base64_encode($result); - } - curl_close($curl); - } - - return $image; -}