isLoggedIn()) throw new NotAllowedException(); $photo = Asset::fromSlug($_GET['slug']); if (empty($photo)) throw new NotFoundException(); parent::__construct($photo->getTitle() . ' - ' . SITE_TITLE); $author = $photo->getAuthor(); if (isset($_REQUEST['confirm_delete']) || isset($_REQUEST['delete_confirmed'])) $this->handleConfirmDelete($user, $author, $photo); else $this->handleViewPhoto($user, $author, $photo); } private function handleConfirmDelete(User $user, User $author, Asset $photo) { if (!($user->isAdmin() || $user->getUserId() === $author->getUserId())) throw new NotAllowedException(); if (isset($_REQUEST['confirm_delete'])) { $page = new ConfirmDeletePage($photo->getImage()); $this->page->adopt($page); } else if (isset($_REQUEST['delete_confirmed'])) { $album_url = $photo->getSubdir(); $photo->delete(); header('Location: ' . BASEURL . '/' . $album_url); exit; } } private function handleViewPhoto(User $user, User $author, Asset $photo) { if (!empty($_POST)) $this->handleTagging($photo->getImage()); $page = new PhotoPage($photo->getImage()); // Exif data? $exif = EXIF::fromFile($photo->getFullPath()); if ($exif) $page->setExif($exif); // What tag are we browsing? $tag = isset($_GET['in']) ? Tag::fromId($_GET['in']) : null; $id_tag = isset($tag) ? $tag->id_tag : null; // Find previous photo in set. $previous_url = $photo->getUrlForPreviousInSet($id_tag); if ($previous_url) $page->setPreviousPhotoUrl($previous_url); // ... and the next photo, too. $next_url = $photo->getUrlForNextInSet($id_tag); if ($next_url) $page->setNextPhotoUrl($next_url); if ($user->isAdmin() || $user->getUserId() === $author->getUserId()) $page->setIsAssetOwner(true); $this->page->adopt($page); $this->page->setCanonicalUrl($photo->getPageUrl()); } private function handleTagging(Image $photo) { header('Content-Type: text/json; charset=utf-8'); // Are we tagging a photo? if (!isset($_POST['id_tag'])) { echo json_encode(['error' => true, 'msg' => 'Invalid tag request.']); exit; } // We are! if (!isset($_POST['delete'])) { $photo->linkTags([(int) $_POST['id_tag']]); echo json_encode(['success' => true]); exit; } // ... deleting, that is. else { $photo->unlinkTags([(int) $_POST['id_tag']]); echo json_encode(['success' => true]); exit; } } }