diff --git a/src/controllers/FilmController.php b/src/controllers/FilmController.php index 6dc01522e2cd85b5bd4d2270dba6c802e700c158..3c71274bda1e31efe85cde2787f545677cf40259 100644 --- a/src/controllers/FilmController.php +++ b/src/controllers/FilmController.php @@ -5,6 +5,7 @@ namespace app\controllers; use app\base\BaseController; use app\controllers\utils\response; use app\Request; +use app\services\FavoriteService; use app\services\FilmService; use app\services\ReviewService; use app\services\UserService; @@ -13,12 +14,14 @@ class FilmController extends BaseController { protected $review_handler; protected $user_handler; + protected $favorite_handler; public function __construct() { parent::__construct(FilmService::getInstance()); $this->review_handler = ReviewService::getInstance(); $this->user_handler = UserService::getInstance(); + $this->favorite_handler = FavoriteService::getInstance(); } protected function get($urlParams) @@ -39,6 +42,7 @@ class FilmController extends BaseController parent::render($data, 'films', "layouts/base"); } elseif ($uri == '/film-details') { $data['film'] = $this->service->getById($_GET['film_id']); + $data['isFavorite'] = $this->favorite_handler->isUserFavorite($_SESSION['user_id'], $_GET['film_id']); parent::render($data, 'film-details', "layouts/base"); } else { @@ -52,4 +56,25 @@ class FilmController extends BaseController response::send_json_response($data); } } + + protected function post($urlParams) + { + if (!isset($_SESSION['user_id'])) { + parent::redirect("/login"); + } + $film_id = $urlParams['film_id']; + if (isset($_POST['add_favorite'])) { + $data['film'] = $this->service->getById($film_id); + if ($_POST['add_favorite'] == 'yes') { + $this->favorite_handler->addToFavorite($_SESSION['user_id'], $film_id); + $data['isFavorite'] = true; + parent::render($data, 'film-details', "layouts/base"); + } + else { + $this->favorite_handler->removeFromFavorite($_SESSION['user_id'], $film_id); + $data['isFavorite'] = false; + parent::render($data, 'film-details', "layouts/base"); + } + } + } } diff --git a/src/repositories/FavoriteRepository.php b/src/repositories/FavoriteRepository.php index 0a20e1609d3f3847bb1adf38a2a4361768a00184..12e0ae41064b4ea32b976da715347e654c156857 100644 --- a/src/repositories/FavoriteRepository.php +++ b/src/repositories/FavoriteRepository.php @@ -20,8 +20,25 @@ class FavoriteRepository extends BaseRepository { return self::$instance; } + public function getById($user_id, $film_id) { + return $this->findAll(['user_id' => [$user_id, PDO::PARAM_INT], 'film_id' => [$film_id, PDO::PARAM_INT]]); + } + public function getUserFavorites($user_id) { return $this->findAll(['user_id' => [$user_id, PDO::PARAM_INT]]); } + public function insertFavorite($favorite) + { + $this->insert($favorite, array( + 'user_id' => PDO::PARAM_INT, + 'film_id' => PDO::PARAM_INT + )); + } + + public function deleteFavorite($favorite) + { + $this->delete($favorite); + } + } \ No newline at end of file diff --git a/src/services/FavoriteService.php b/src/services/FavoriteService.php index 687c0cf5dcf5565312f18e2c4c97e416c7e39d25..5fb8a3499676c165eecd2cf0555bfff77b5d343f 100644 --- a/src/services/FavoriteService.php +++ b/src/services/FavoriteService.php @@ -5,6 +5,7 @@ namespace app\services; use app\base\BaseService; use app\controllers\FilmController; use app\exceptions\BadRequestException; +use app\models\FavoriteModel; use app\models\ReviewModel; use app\repositories\FavoriteRepository; use app\repositories\ReviewRepository; @@ -32,4 +33,24 @@ class FavoriteService extends BaseService { return $this->repository->getUserFavorites($user_id); } + public function addToFavorite($user_id, $film_id) { + $favorite = new FavoriteModel(); + $favorite->set('user_id', $user_id)->set('film_id', $film_id); + return $this->repository->insertFavorite($favorite); + } + + public function removeFromFavorite($user_id, $film_id) { + $favorite = new FavoriteModel(); + $favorite->set('user_id', $user_id)->set('film_id', $film_id); + return $this->repository->deleteFavorite($favorite); + } + + public function isUserFavorite($user_id, $film_id) { + $favorite = $this->repository->getById($user_id, $film_id); + if (count($favorite) == 0) { + return false; + } + return true; + } + } \ No newline at end of file diff --git a/views/film-details.php b/views/film-details.php index 649fd9966fb45998742fc3f6fcfab03db4d3b966..99777d8a6b65ae607c10be06b6bf791838a931ab 100644 --- a/views/film-details.php +++ b/views/film-details.php @@ -18,11 +18,22 @@ echo "<a href='/update-film?film_id=$film->film_id '><button class='button'>Edit</button></a>"; } ?> + <?php if (isset($isFavorite) and $isFavorite): ?> + <form method='post' enctype="multipart/form-data"> + <input type='hidden' name='add_favorite' value='no'> + <button type="submit"> + <image src="/public/assets/favorite.svg"></image> + </button> + </form> + <?php else: ?> + <form method='post' enctype="multipart/form-data"> + <input type='hidden' name='add_favorite' value='yes'> + <button type="submit"> + <image src="/public/assets/no-favorite.svg"></image> + </button> + </form> + <?php endif; ?> - - <button> - <image id='fav' src="/public/assets/favorite.svg"></image> - </button> </div> </div>