diff --git a/src/Controllers/DormController.php b/src/Controllers/DormController.php index a23b45b309bf646161ec5021335039b581a27eb5..86dcbd81da8587eb9b45e3933c52eec692ca40e0 100644 --- a/src/Controllers/DormController.php +++ b/src/Controllers/DormController.php @@ -114,6 +114,19 @@ class DormController extends Controller ]); } + public function deleteMedia($params) + { + $form = new Validation([ + [new Field("media_id"), [new Number()]] + ]); + if ($form->validate(Request::getBody())) { + $media = Media::findById($form->data["media_id"]); + $dormId = $media->dorm_id; + $media->delete(); + } + Response::redirect("/dorms/{$dormId}/media"); + } + private function uploadMedia($files, $dorm_id) { foreach ($files["name"] as $index => $name) { diff --git a/src/Core/Application.php b/src/Core/Application.php index f969a3003c61fdbebaf5d3196f2c79317978b083..27f4350194d455ea685dfdfa0b1a581e2fe050ab 100644 --- a/src/Core/Application.php +++ b/src/Core/Application.php @@ -49,16 +49,17 @@ class Application $this->router->methods(["GET", "POST"], "/dorms/create", [AdminOnly::class], DormController::class, 'create'); $this->router->methods(["GET", "POST"], "/dorms/{dormId}", [AuthRequired::class], DormController::class, 'view'); $this->router->methods(["GET", "POST"], "/dorms/{dormId}/media", [AdminOnly::class], DormController::class, 'media'); + $this->router->delete("/dorms/{dormId}/media", [AdminOnly::class], DormController::class, 'deleteMedia'); $this->router->methods(["GET", "POST"], "/dorms/{dormId}/edit", [AdminOnly::class], DormController::class, 'edit'); $this->router->methods(["GET", "POST"], "/dorms/{dormId}/reviews", [AuthRequired::class], ReviewController::class, 'getAllByDormId'); $this->router->methods(["GET", "POST"], "/dorms/{dormId}/add-review", [AuthRequired::class], ReviewController::class, 'create'); - + $this->router->methods(["GET", "POST"], "/account/edit", [AuthRequired::class], UserController::class, 'edit'); $this->router->methods(["GET", "POST"], "/account/editPassword", [AuthRequired::class], UserController::class, 'editPassword'); - + $this->router->methods(["GET", "POST"], "/reviews/{reviewId}", [AuthRequired::class], ReviewController::class, 'edit'); $this->router->delete("/dorms/{dormId}", [AuthRequired::class], ReviewController::class, 'delete'); - + $this->router->methods(["GET"], "/wishlist", [AuthRequired::class], WishlistController::class, 'index'); $this->router->methods(["GET"], "/dorms/{dormId}/add-to-wishlist", [AuthRequired::class], WishlistController::class, 'add'); $this->router->delete("/wishlist", [AuthRequired::class], WishlistController::class, 'delete'); diff --git a/src/Views/dorm/media.php b/src/Views/dorm/media.php index 61f5538572fd531bac8918e464b0b254e701043a..d3c73c597cab3a8627394b80d4044dddae1ee6d1 100644 --- a/src/Views/dorm/media.php +++ b/src/Views/dorm/media.php @@ -5,28 +5,50 @@ <div class="container"> <h1 class="">Media "<?= $dorm->name ?>"</h1> <? if (count($medias) > 0) : ?> - <section class="slider-wrapper"> - <button class="slide-arrow slide-arrow-prev"> - ‹ - </button> + <section class="slider-wrapper"> + <button class="slide-arrow slide-arrow-prev"> + ‹ + </button> - <button class="slide-arrow slide-arrow-next"> - › - </button> + <button class="slide-arrow slide-arrow-next"> + › + </button> - <ul class="slides-container"> - <? foreach ($medias as $media) : ?> - <li class="slide"> - <? if ($media->type == "video") : ?> - <video src="<?= $media->endpoint ?>" alt="<?= $media->alt_text ?>" controls></video> - <? else : ?> - <img src="<?= $media->endpoint ?>" alt="<?= $media->alt_text ?>"> - <? endif; ?> - </li> - <?php endforeach; ?> - </ul> - </section> + <ul class="slides-container"> + <? foreach ($medias as $media) : ?> + <li class="slide"> + <? if ($media->type == "video") : ?> + <video src="<?= $media->endpoint ?>" alt="<?= $media->alt_text ?>" controls></video> + <? else : ?> + <img src="<?= $media->endpoint ?>" alt="<?= $media->alt_text ?>"> + <? endif; ?> + + <form method="POST"> + <button type="button" class="btn btn-danger dialog-btn action-btn delete-btn" + data-dialog="delete-<?= $media->media_id ?>"><svg xmlns="http://www.w3.org/2000/svg" fill="none" + viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="20" height="20"> + <path stroke-linecap="round" stroke-linejoin="round" + d="M14.74 9l-.346 9m-4.788 0L9.26 9m9.968-3.21c.342.052.682.107 1.022.166m-1.022-.165L18.16 19.673a2.25 2.25 0 01-2.244 2.077H8.084a2.25 2.25 0 01-2.244-2.077L4.772 5.79m14.456 0a48.108 48.108 0 00-3.478-.397m-12 .562c.34-.059.68-.114 1.022-.165m0 0a48.11 48.11 0 013.478-.397m7.5 0v-.916c0-1.18-.91-2.164-2.09-2.201a51.964 51.964 0 00-3.32 0c-1.18.037-2.09 1.022-2.09 2.201v.916m7.5 0a48.667 48.667 0 00-7.5 0" /> + </svg> + </button> + <input type="hidden" name="media_id" value="<?= $media->media_id ?>" /> + <input type="hidden" name="_method" value="DELETE" /> + <div class="dialog-wrapper delete-<?= $media->media_id ?>"> + <div class="dialog-content"> + <h4 class="confirm-title">Apakah Anda yakin ingin menghapus media ini?</h4> + <div class="confirm-action"> + <button type="button" class="btn btn-outlined dialog-btn" + data-dialog="delete-<?= $media->media_id ?>">Batal</button> + <button type="submit" class="btn btn-danger">Hapus</button> + </div> + </div> + </div> + </form> + </li> + <?php endforeach; ?> + </ul> + </section> <? endif; ?> <form method="post" enctype="multipart/form-data"> <input type="file" name="medias[]" multiple accept="image/*, video/*" /> diff --git a/src/public/static/styles/dorm-media.css b/src/public/static/styles/dorm-media.css index d94b583a0081f54a71d982875be419b0defa6238..79947e030fa3f3d523415a3026dad37f538e5f9d 100644 --- a/src/public/static/styles/dorm-media.css +++ b/src/public/static/styles/dorm-media.css @@ -3,3 +3,15 @@ width: 100%; margin: 0 auto; } + +.slide .delete-btn { + position: absolute; + top: 0; + right: 0; + z-index: 1; + background: #fff; + display: flex; + justify-content: center; + align-items: center; + cursor: pointer; +}