isLoggedIn()) throw new NotAllowedException(); $photo = Asset::fromSlug($_GET['slug']); if (empty($photo)) throw new NotFoundException(); $this->photo = $photo->getImage(); Session::resetSessionToken(); parent::__construct($this->photo->getTitle() . ' - ' . SITE_TITLE); if (!empty($_POST)) $this->handleTagging(); else $this->handleViewPhoto(); } private function handleViewPhoto() { $page = new PhotoPage($this->photo); // Any (EXIF) meta data? $metaData = $this->prepareMetaData(); $page->setMetaData($metaData); // What tag are we browsing? $tag = isset($_GET['in']) ? Tag::fromId($_GET['in']) : null; if (isset($tag)) $page->setTag($tag); // Keeping tabs on a filter? if (isset($_GET['by'])) { // Let's first verify that the filter is valid $user = Member::fromSlug($_GET['by']); if (!$user) throw new UnexpectedValueException('Invalid filter for this album or tag.'); // Alright, let's run with it then $page->setActiveFilter($user->getSlug()); } $this->page->adopt($page); $this->page->setCanonicalUrl($this->photo->getPageUrl()); } private function handleTagging() { 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'])) { $this->photo->linkTags([(int) $_POST['id_tag']]); echo json_encode(['success' => true]); exit; } // ... deleting, that is. else { $this->photo->unlinkTags([(int) $_POST['id_tag']]); echo json_encode(['success' => true]); exit; } } private function prepareMetaData() { if (!($exif = EXIF::fromFile($this->photo->getFullPath()))) throw new UnexpectedValueException('Photo file not found!'); $metaData = []; if (!empty($exif->created_timestamp)) $metaData['Date Taken'] = date("j M Y, H:i:s", $exif->created_timestamp); if ($author = $this->photo->getAuthor()) $metaData['Uploaded by'] = $author->getfullName(); if (!empty($exif->camera)) $metaData['Camera Model'] = $exif->camera; if (!empty($exif->shutter_speed)) $metaData['Shutter Speed'] = $exif->shutterSpeedFraction(); if (!empty($exif->aperture)) $metaData['Aperture'] = 'f/' . number_format($exif->aperture, 1); if (!empty($exif->focal_length)) $metaData['Focal Length'] = $exif->focal_length . ' mm'; if (!empty($exif->iso)) $metaData['ISO Speed'] = $exif->iso; if (!empty($exif->software)) $metaData['Software'] = $exif->software; return $metaData; } }