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