FaZeBookSocialNetwork / www / src / FaZeBook / Page / ViewProfile.php
ViewProfile.php
Raw
<?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;
        }
    }
}