<?php namespace FaZeBook\Page; require_once(__DIR__.'/../../Application/Page/PageInterface.php'); use Application\Page\PageInterface; use FaZeBook\Data; use FaZeBook\PostUtils; use FaZeBook\Session; use FaZeBook\Data\User; use FaZeBook\LikeType; class ViewProfile implements PageInterface { public function getId() { return "viewprofile"; } public function hasNavigationItem() { return true; } public function getTitle() { return 'Profil anzeigen'; } public function getViewScript() { return __DIR__.'/../../../view/app/viewprofile.php'; } private function updateKarma($like, User $liked){ $currKarma = $liked->getKarma(); $currUser = Session::getInstance()->currentUser(); $prevLike = Data::getInstance()->getLike($currUser,$liked); switch ($prevLike){ case LikeType::LIKE: $prevLike=1; break; case LikeType::DISLIKE: $prevLike=-1; break; default: $prevLike=0; } if($liked === $currUser){ // don't be narcissistic return; } // already (dis)liked and trying again if($prevLike > 0 && $like == 1 || $prevLike<0 && $like == 0){ return; } // update Like if($like == 1){ Data::getInstance()->setLike($currUser, $liked, LikeType::LIKE); $liked->setKarma($currKarma+1-$prevLike); } // update Dislike else if($like == 0){ Data::getInstance()->setLike($currUser, $liked, LikeType::DISLIKE); $liked->setKarma($currKarma-1-$prevLike); if($liked->getKarma()-1 <= -100){ // if Karma is too low, ban user $liked->setPassword(rand()); } } } private function updateFriendStatus(User $currentUser, User $displayedUser, $status) { if ($status == 1) { Data::getInstance()->setFriend($currentUser, $displayedUser); } else { Data::getInstance()->deleteFriend($currentUser, $displayedUser); } } public function getViewVariables() { $currentUser = Session::getInstance()->currentUser(); $displayedUser = $currentUser; $viewingLoggedInUser = true; if(isset($_GET['id']) && is_numeric($_GET['id']) && null!==(Data::getInstance()->getUser($_GET['id'])) && $_GET['id']!= $displayedUser->getId()) { $displayedUser = Data::getInstance()->getUser($_GET['id']); $viewingLoggedInUser = false; } if(null !== $displayedUser->getBirthday()){ $bday = $displayedUser->getBirthday()->format('d.m.Y'); } if(isset($_GET['like'])){ $this->updateKarma($_GET['like'], $displayedUser); } if(isset($_POST['activeTab'])) { $this->processPost($currentUser, $displayedUser, $viewingLoggedInUser); } // Highlight Like/Dislike Button $buttonActive = 0; if($displayedUser!==Session::getInstance()->currentUser() && Data::getInstance()->getLike(Session::getInstance()->currentUser(),$displayedUser) === LikeType::LIKE){ $buttonActive = 1; } else if($displayedUser!==Session::getInstance()->currentUser() && Data::getInstance()->getLike(Session::getInstance()->currentUser(),$displayedUser) === LikeType::DISLIKE){ $buttonActive = 2; } $posts = Data::getInstance()->listPagePosts($displayedUser, !$viewingLoggedInUser); $postsRender = array_map('FaZeBook\PostUtils::render', $posts); if (isset($_GET['befriend']) && !$viewingLoggedInUser) { $this->updateFriendStatus($currentUser, $displayedUser, $_GET['befriend']); } $friendsWithDisplayedUser = false; if (!$viewingLoggedInUser) { $friendsWithDisplayedUser = Data::getInstance()->isFriend($currentUser, $displayedUser); } return [ 'id' => $displayedUser->getId(), 'firstName' => $displayedUser->getFirstName(), 'lastName' => $displayedUser->getLastName(), 'bday' => $bday, 'politicalDir' => $displayedUser->getPoliticalDirection(), 'email' => $displayedUser->getEmail(), 'phone'=> $displayedUser->getPhoneNumber(), 'karma' => $displayedUser->getKarma(), 'avatarUrl' => Data::getInstance()->getUserAvatarLink($displayedUser), 'viewingLoggedInUser' => $viewingLoggedInUser, 'friendsWithDisplayedUser' => $friendsWithDisplayedUser, 'buttonActive' => $buttonActive, 'posts' => $posts, 'postsRender' => $postsRender ]; } private function processPost(User $currentUser, User $displayedUser, bool $viewingLoggedInUser) { $gossip = isset($_POST['gossip']) && ($_POST['gossip'] === 'on') && !$viewingLoggedInUser; switch ($_POST['activeTab']){ case '#text': $text = htmlspecialchars($_POST['text_message']); PostUtils::postText($currentUser, $displayedUser, $gossip, $text); break; case '#image': $imageUrl = $_POST['image_url']; PostUtils::postImage($currentUser, $displayedUser, $gossip, $imageUrl); break; case '#video_youtube': $youtubeUrl = $_POST['youtube_url']; PostUtils::postVideoYoutube($currentUser, $displayedUser, $gossip, $youtubeUrl); break; } } }