FaZeBookSocialNetwork / www / src / FaZeBook / Page / Administration.php
Administration.php
Raw
<?php

namespace FaZeBook\Page;

require_once(__DIR__.'/../../Application/Page/PageInterface.php');

use Application\Page\PageInterface;
use FaZeBook\Data;
use FaZeBook\Session;
use FaZeBook\Permission;
use FaZeBook\Data\User;
use FaZeBook\PostType;
use FaZeBook\Data\Post;

const EVIL_MESSAGE = 1;
const DELETE_FRIENDS = 2;
const REVEAL_GOSSIP = 3;

class Administration implements PageInterface {

    public function getId()
    {
        return "administration";
    }

    public function hasNavigationItem()
    {
        return true;
    }


    public function getTitle()
    {
        return 'Administration';
    }

    public function getViewScript()
    {
        return __DIR__.'/../../../view/app/administration.php';
    }

    private function chaos(int $mode) : string{

        switch($mode){
            case EVIL_MESSAGE:
                $messages = array(
                    "Deine PHP Kenntnisse sind eher schlecht!",
                    "Dein Kopf ist immer voll. Vorne mit Heu und hinten mit Wasser und wenn es brennt dann brauchst du nur zu nicken.",
                    "Du bist hübsch, im Dunkeln, auf 100km Entfernung, hinter einer Mauer!",
                    "Ich habe mich in dich verliebt",
                    "Ich gehe mit dir ans Ende der Welt. Und dann schubse ich dich",
                    "Deine Meinung als Unbeteiligter zum Thema Intelligenz?",
                    "Du bist so hell wie ein Tunnel",
                    "Lieber ein Schlusslicht als gar keine Leuchte...",
                    "Was macht dein Friseur denn beruflich?",
                    "Du verschönerst jeden Raum beim hinausgehen!",
                    "Du wünschst dir, dass deine Beine so braun wären wie deine Zähne",
                    "Du wünschst dir, dass deine Zähne so weiß wären wie deine Streichholzbeine",
                    "Du hast ein Gesicht wie ein Feuermelder. Reinschlagen bis es klingelt",
                    "Noch so ein Spruch - Kieferbruch",
                    "Noch so eine Aktion - Intensivstation",
                    "Dich hat man nach der Geburt wohl dreimal hochgeworfen aber nur zweimal aufgefangen...",
                    "Noch so ein Spruch und deine Zahnbürste greift morgen früh ins Leere!"
                );

                $randomList = Data::getInstance()->getRandomUsers(2);
                $randomSender = reset($randomList);
                $randomEmpfaenger = next($randomList);
                if($randomSender instanceof user && $randomEmpfaenger instanceof user){
                    $message = $messages[array_rand($messages)];
                    $this->sendEvilMessage($message, $randomSender, $randomEmpfaenger);
                    return $randomSender->getFullName() . " schreibt an " . $randomEmpfaenger->getFullName() . ": \"". $message . "\"";
                }
                break;
            case DELETE_FRIENDS:
                $randomList = Data::getInstance()->getRandomUsers(1);
                $randomUser = reset($randomList);
                if($randomUser instanceof user) {
                    $this->deleteFriends($randomUser);
                    return $randomUser->getFullName() . " hat jetzt (auch auf FaZeBook) keine Freunde";
                }
                break;
            case REVEAL_GOSSIP:
                $post = Data::getInstance()->getRandomGossip();
                if($post instanceof post){
                    $this->revealGossip($post);
                    return "Oooops. Einen Post von " . $post->getAuthor()->getFullName() . " kann jetzt jeder lesen.";
                }
                break;
            default:
        }
        return "";
    }

    private function sendEvilMessage(string $message, user $sender, user $empfaenger){
        Data::getInstance()->setFriend($sender, $empfaenger);
        Data::getInstance()->addMessage($sender, $empfaenger, $message);
    }

    private function deleteFriends(user $user){

        $friends = Data::getInstance()->listFriends($user);

        foreach($friends as $friend){
            Data::getInstance()->deleteFriend($friend, $user);
        }

    }

    private function revealGossip(post $post){
        $post->setGossip(false);
    }

    public function getViewVariables()
    {
        $admin = Session::getInstance()->currentUser();
        $chaosMessage = "";

        if(isset($_POST['chaos'])){
            $chaosMessage = $this->chaos(intval($_POST['chaos']));
        }

        $targetID = -1;

        $numberPostsAuthor = 0;
        $numberTextAuthor = 0;
        $numberPictureAuthor = 0;
        $numberVideoAuthor = 0;
        $numberGossipAuthor = 0;

        $numberPostsReceived = 0;
        $numberTextReceived = 0;
        $numberPictureReceived = 0;
        $numberVideoReceived = 0;
        $numberGossipReceived = 0;

        $numberFriends = 0;
        $numberPrivateMessages = 0;
        $numberMessagesSent = 0;
        $numberMessagesReceived = 0;

        $numberLikes = 0;
        $numberDislikes = 0;

        $maxKarma = Data::getInstance()->getMaxKarma();
        $minKarma = Data::getInstance()->getMinKarma();
        $loser = Data::getInstance()->getUserByKarma($minKarma);
        $winner = Data::getInstance()->getUserByKarma($maxKarma);
        $loserName = htmlspecialchars($loser->getFullName());
        $winnerName = htmlspecialchars($winner->getFullName());

        $vorname = "";
        $nachname = "";
        $lastseen = "";

        if(isset($_GET['id']) && is_numeric($_GET['id'])){
            $targetID = intval($_GET['id']);
        }

        if($targetID >= 0 && Data::getInstance()->getUser($targetID) !== null){
            $targetUser = Data::getInstance()->getUser($targetID);
            $targetID = $targetUser->getId();

            // Count Posts as author
            $numberPostsAuthor = Data::getInstance()->countPostsAuthor($targetID);
            $numberTextAuthor = Data::getInstance()->countPostsAuthorByType($targetID, PostType::TEXT);
            $numberPictureAuthor = Data::getInstance()->countPostsAuthorByType($targetID, PostType::IMAGE_URL);
            $numberVideoAuthor = Data::getInstance()->countPostsAuthorByType($targetID, PostType::VIDEO_YOUTUBE);
            $numberGossipAuthor = Data::getInstance()->countPostsAuthorGossip($targetID);

            // Count Posts as Recipient
            $numberPostsReceived = Data::getInstance()->countPostsReceived($targetID);
            $numberTextReceived = Data::getInstance()->countPostsReceivedByType($targetID, PostType::TEXT);
            $numberPictureReceived = Data::getInstance()->countPostsReceivedByType($targetID, PostType::IMAGE_URL);
            $numberVideoReceived = Data::getInstance()->countPostsReceivedByType($targetID, PostType::VIDEO_YOUTUBE);
            $numberGossipReceived = Data::getInstance()->countPostsReceivedGossip($targetID);

            // Count Messages & friends
            $numberMessagesSent = Data::getInstance()->countMessagesAuthor($targetID);
            $numberMessagesReceived = Data::getInstance()->countMessagesRecipient($targetID);
            $numberPrivateMessages = $numberMessagesSent + $numberMessagesReceived;
            $numberFriends = Data::getInstance()->countFriends($targetID);

            $numberLikes = Data::getInstance()->countLikes($targetID);
            $numberDislikes = Data::getInstance()->countDislikes($targetID);

            $vorname = htmlspecialchars($targetUser->getFirstName());
            $nachname = htmlspecialchars($targetUser->getLastName());
            $lastseen = $targetUser->getLastSeen()->format("d. m. Y");
        }

        return [
            'permission' => $admin->hasPermissions(Permission::ADMIN),
            'targetID' => $targetID,

            'chaosMessage' => $chaosMessage,

            'maxKarma' => $maxKarma,
            'minKarma' => $minKarma,
            'loserName' => $loserName,
            'winnerName' => $winnerName,

            'vorname' => $vorname,
            'nachname' => $nachname,
            'lastseen' => $lastseen,

            'numberPostsAuthor' => $numberPostsAuthor,
            'numberTextAuthor' => $numberTextAuthor,
            'numberPictureAuthor' => $numberPictureAuthor,
            'numberVideoAuthor' => $numberVideoAuthor,
            'numberGossipAuthor' => $numberGossipAuthor,

            'numberPostsReceived' => $numberPostsReceived,
            'numberTextReceived' => $numberTextReceived,
            'numberPictureReceived' => $numberPictureReceived,
            'numberVideoReceived' => $numberVideoReceived,
            'numberGossipReceived' => $numberGossipReceived,

            'numberPrivateMessages' => $numberPrivateMessages,
            'numberMessagesSent' => $numberMessagesSent,
            'numberMessagesReceived' => $numberMessagesReceived,

            'numberLikes' => $numberLikes,
            'numberDislikes' => $numberDislikes,

            'numberFriends' => $numberFriends

        ];
    }
}