From 4141c164124916df96687471ef2821e2d3cecddd Mon Sep 17 00:00:00 2001 From: HobertJ <13521079@std.stei.itb.ac.id> Date: Fri, 27 Oct 2023 13:17:43 +0700 Subject: [PATCH] feat: delete podcast from playlist --- src/app/components/library/playlist.php | 2 +- src/app/components/playlist/playlist.php | 4 +- .../components/playlist/playlist_content.php | 6 ++- src/app/controllers/library/get_library.php | 3 +- .../controllers/playlist/post_playlist.php | 36 ++++++++++++++++++ src/app/core/app.php | 1 + src/app/init.php | 1 + src/public/javascript/library/library.js | 38 +++++++++++++++++++ 8 files changed, 86 insertions(+), 5 deletions(-) create mode 100644 src/app/controllers/playlist/post_playlist.php create mode 100644 src/public/javascript/library/library.js diff --git a/src/app/components/library/playlist.php b/src/app/components/library/playlist.php index 1e9f64e..1f5c858 100644 --- a/src/app/components/library/playlist.php +++ b/src/app/components/library/playlist.php @@ -15,6 +15,6 @@ </div> <?php else : ?> <h5> - no results found. + you don't have any playlist. </h5> <?php endif;?> \ No newline at end of file diff --git a/src/app/components/playlist/playlist.php b/src/app/components/playlist/playlist.php index be04d8b..a4dd9e9 100644 --- a/src/app/components/playlist/playlist.php +++ b/src/app/components/playlist/playlist.php @@ -7,6 +7,8 @@ <link rel="stylesheet" type="text/css" href="<?= BASE_URL ?>/styles/globals.css"> <!-- Page-specific CSS --> <link rel="stylesheet" type="text/css" href="<?= BASE_URL ?>/styles/library/library.css"> + <script type="module" src="<?= BASE_URL ?>/javascript/library/library.js" defer> </script> + <title>Playlist</title> </head> <body> @@ -15,7 +17,7 @@ <main> - <div class="playlist-container"> + <div class="playlist-container" data-id="<?=$_GET["playlist_id"]?>"> <?php include(dirname(__DIR__) . "/playlist/playlist_content.php")?> </div> </main> diff --git a/src/app/components/playlist/playlist_content.php b/src/app/components/playlist/playlist_content.php index fb216c4..375f897 100644 --- a/src/app/components/playlist/playlist_content.php +++ b/src/app/components/playlist/playlist_content.php @@ -1,4 +1,5 @@ <link rel="stylesheet" type="text/css" href="<?= BASE_URL ?>/styles/library/library.css"> +<link href='https://unpkg.com/boxicons@2.1.4/css/boxicons.min.css' rel='stylesheet'> <?php if (!empty($this->data)): ?> <div class="user-playlist"> @@ -10,6 +11,7 @@ <div class="info"> <div class="sh5"><?=$podcast['title']?> </div> </div> + <i class='bx bx-trash' data-id="<?=$podcast["id_podcast"]?>"></i> </div> <?php endforeach; ?> </div> @@ -17,4 +19,6 @@ <h5> your playlist is empty. </h5> -<?php endif;?> \ No newline at end of file +<?php endif;?> + +<script type="module" src="<?= BASE_URL ?>/javascript/library/library.js" defer> </script> diff --git a/src/app/controllers/library/get_library.php b/src/app/controllers/library/get_library.php index 60363e8..466cbab 100644 --- a/src/app/controllers/library/get_library.php +++ b/src/app/controllers/library/get_library.php @@ -5,7 +5,6 @@ class GetLibraryController public function call() { require_once __DIR__ . "/../../views/library/library_view.php"; - require_once __DIR__ . "/../../models/playlist.php"; $data = []; session_start(); @@ -22,7 +21,7 @@ class GetLibraryController $view = new LibraryView($data); $view->render(); }else{ - header("Location: "); + header("Location: " . BASE_URL . "/login"); } } diff --git a/src/app/controllers/playlist/post_playlist.php b/src/app/controllers/playlist/post_playlist.php new file mode 100644 index 0000000..fada90e --- /dev/null +++ b/src/app/controllers/playlist/post_playlist.php @@ -0,0 +1,36 @@ +<?php + +class PostPlaylistController +{ + public function call() + { + + session_start(); + if(!isset($_SESSION["user_id"])){ + header("Location: " . BASE_URL . "/login"); + + return; + } + + $idPodcast = ""; + $idPlaylist = ""; + + if(isset($_POST["id_playlist"]) && isset($_POST["id_podcast"])){ + $idPlaylist = $_POST["id_playlist"]; + $idPodcast = $_POST["id_podcast"]; + } + + $model = new PlaylistModel(); + + try{ + $model->removePodcastFromPlaylist($idPodcast, $idPlaylist); + http_response_code(201); + exit; + }catch(PDOException $e){ + $e->getMessage(); + http_response_code(200); + exit; + } + + } +} diff --git a/src/app/core/app.php b/src/app/core/app.php index f9ae5cd..c4a2e71 100644 --- a/src/app/core/app.php +++ b/src/app/core/app.php @@ -41,6 +41,7 @@ class App $router->post("public/signup", new PostSignupController()); $router->get("public/library", new GetLibraryController()); $router->get("public/playlist", new GetPlaylistController()); + $router->post("public/playlist", new PostPlaylistController()); $router->directRequest($url); } diff --git a/src/app/init.php b/src/app/init.php index 7e17c3d..7171820 100644 --- a/src/app/init.php +++ b/src/app/init.php @@ -33,6 +33,7 @@ require_once __DIR__ . "/controllers/login/post_login.php"; require_once __DIR__ . "/controllers/library/get_library.php"; require_once __DIR__ . "/controllers/playlist/get_playlist.php"; +require_once __DIR__ . "/controllers/playlist/post_playlist.php"; require_once __DIR__ . "/controllers/library/get_library.php"; require_once __DIR__ . "/controllers/signup/get_signup.php"; require_once __DIR__ . "/controllers/signup/post_signup.php"; diff --git a/src/public/javascript/library/library.js b/src/public/javascript/library/library.js new file mode 100644 index 0000000..906458b --- /dev/null +++ b/src/public/javascript/library/library.js @@ -0,0 +1,38 @@ +"use strict" + +import { showErrorToast, showSuccessToast } from "../toast.mjs"; + + +document.addEventListener("DOMContentLoaded", (e) =>{ + + const trashEl = document.querySelectorAll('.bx-trash'); + const playlistContainer = document.querySelector('.playlist-container') + + if(trashEl.length !== 0){ + trashEl.forEach(function(trash){ + trash.addEventListener("click", (e) => { + e.preventDefault(); + + const data = new FormData(); + + const xhr = new XMLHttpRequest(); + + data.append("id_podcast", trash.dataset.id); + data.append("id_playlist", playlistContainer.dataset.id); + + xhr.open("POST", "/public/playlist", true); + + xhr.onload = function () { + if (xhr.readyState === XMLHttpRequest.DONE) { + if (xhr.status === 201) { + showSuccessToast("Podcast berhasil dihapus dari playlist!"); + }else{ // status code 200, some error + showErrorToast("Podcast gagal dihapus dari playlist!"); + } + } + } + xhr.send(data); + }) + }) + } +}); \ No newline at end of file -- GitLab