<?php

class AdminController extends RISBaseController
{
    public function actionStadtraetInnenPersonen()
    {
        if (!$this->binContentAdmin()) $this->errorMessageAndDie(403, "");

        $this->top_menu = "admin";

        if (AntiXSS::isTokenSet("save")) {
            /** @var Person $person */
            $person = Person::model()->findByPk($_REQUEST["person"]);
            if ($person) {
                if (isset($_REQUEST["fraktion"])) {
                    $person->typ             = Person::$TYP_FRAKTION;
                    $person->ris_stadtraetIn = null;
                } else {
                    $person->typ             = Person::$TYP_PERSON;
                    $person->ris_stadtraetIn = (isset($_REQUEST["stadtraetIn"]) ? $_REQUEST["stadtraetIn"] : null);
                }
                $person->save();
            }
            $this->msg_ok = "Gespeichert";
        }

        /** @var Person[] $personen */
        $personen = Person::model()->findAll(["order" => "name"]);

        /** @var StadtraetIn[] $stadtraetInnen */
        $stadtraetInnen = StadtraetIn::model()->findAll(["order" => "name"]);

        $this->render("stadtraetInnenPersonen", [
            "personen"       => $personen,
            "stadtraetInnen" => $stadtraetInnen,
        ]);
    }


    public function actionStadtraetInnenSocialMedia()
    {
        if (!$this->binContentAdmin()) $this->errorMessageAndDie(403, "");

        $this->top_menu = "admin";

        if (AntiXSS::isTokenSet("save") && isset($_REQUEST["twitter"])) {
            foreach ($_REQUEST["twitter"] as $str_id => $twitter) {
                /** @var StadtraetIn $str */
                $str                    = StadtraetIn::model()->findByPk($str_id);
                $str->twitter           = (trim($twitter) == "" ? null : trim($twitter));
                $str->facebook          = (trim($_REQUEST["facebook"][$str_id]) == "" ? null : trim($_REQUEST["facebook"][$str_id]));
                $str->abgeordnetenwatch = (trim($_REQUEST["abgeordnetenwatch"][$str_id]) == "" ? null : trim($_REQUEST["abgeordnetenwatch"][$str_id]));
                $str->web               = (trim($_REQUEST["web"][$str_id]) == "" ? null : trim($_REQUEST["web"][$str_id]));
                $str->save();
            }
            $this->msg_ok = "Gespeichert";
        }

        $fraktionen = StadtraetIn::getGroupedByFraktion(null);

        $this->render("stadtraetInnenSocialMedia", [
            "fraktionen" => $fraktionen,
        ]);
    }


    public function actionStadtraetInnenBeschreibungen()
    {
        if (!$this->binContentAdmin()) $this->errorMessageAndDie(403, "");

        $this->top_menu = "admin";
        if (AntiXSS::isTokenSet("save") && isset($_REQUEST["geburtstag"])) {

            foreach ($_REQUEST["geburtstag"] as $str_id => $geburtstag) {
                /** @var StadtraetIn $str */
                $str               = StadtraetIn::model()->findByPk($str_id);
                $str->geburtstag   = ($geburtstag != "" ? $geburtstag : null);
                $str->beschreibung = $_REQUEST["beschreibung"][$str_id];
                $str->quellen      = $_REQUEST["quellen"][$str_id];
                $str->geschlecht   = (isset($_REQUEST["geschlecht"][$str_id]) ? $_REQUEST["geschlecht"][$str_id] : null);
                $str->save();
            }
            $this->msg_ok = "Gespeichert";
        }

        $fraktionen = StadtraetIn::getGroupedByFraktion(null);

        $this->render("stadtraetInnenBeschreibungen", [
            "fraktionen" => $fraktionen,
        ]);
    }

    public function actionStadtraetInnenBenutzerInnen()
    {
        $ich = $this->aktuelleBenutzerIn();
        if (!$ich) $this->errorMessageAndDie(403, "");
        if (!$ich->hatBerechtigung(BenutzerIn::BERECHTIGUNG_USER)) $this->errorMessageAndDie(403, "");

        $this->top_menu = "admin";

        if (AntiXSS::isTokenSet("save") && isset($_REQUEST["BenutzerIn"])) {
            foreach ($_REQUEST["BenutzerIn"] as $strIn_id => $benutzerIn_id) {
                /** @var StadtraetIn $strIn */
                $strIn = StadtraetIn::model()->findByPk($strIn_id);
                if ($benutzerIn_id > 0) $strIn->benutzerIn_id = IntVal($benutzerIn_id);
                else $strIn->benutzerIn_id = null;
                $strIn->save();
            }
            $this->msg_ok = "Gespeichert";
        }

        /** @var StadtraetIn[] $stadtraetInnen */
        $stadtraetInnen = StadtraetIn::model()->findAll();
        $stadtraetInnen = StadtraetIn::sortByName($stadtraetInnen);

        $this->render("stadtraetInnenBenutzerInnen", [
            "stadtraetInnen" => $stadtraetInnen,
        ]);
    }


    public function actionIndex()
    {
        if (!$this->binContentAdmin()) $this->errorMessageAndDie(403, "");

        $this->top_menu = "admin";

        $this->render("index");
    }

    public function actionTags()
    {
        $ich = $this->aktuelleBenutzerIn();
        if (!$ich || !$ich->hatBerechtigung(BenutzerIn::BERECHTIGUNG_TAG)) $this->errorMessageAndDie(403, "");

        $this->top_menu = "admin";

        if (AntiXSS::isTokenSet("tag_umbennen")) {
            $tag_alt     = Tag::model()->findByAttributes(["id" => $_REQUEST["tag_id"]]);
            $gleichnamig = Tag::model()->findByAttributes(["name" => $_REQUEST["neuer_name"]]);

            if ($gleichnamig != null) { // Tag mit neuem Namen existiert bereits-> merge
                // Zuerst bei allen Anträgen mit beiden tags den Eintrag für den alten tag löschen
                Yii::app()->db->createCommand('DELETE t1 FROM antraege_tags t1 INNER JOIN antraege_tags t2 ON t1.antrag_id=t2.antrag_id WHERE t1.tag_id=:tag_id_alt AND t2.tag_id=:tag_id_neu')
                    ->bindValues([':tag_id_neu' => $gleichnamig->id, ':tag_id_alt' => $tag_alt->id])
                    ->execute();

                Yii::app()->db->createCommand('UPDATE antraege_tags SET tag_id=:tag_id_neu WHERE tag_id=:tag_id_alt')
                    ->bindValues([':tag_id_neu' => $gleichnamig->id, ':tag_id_alt' => $tag_alt->id])
                    ->execute();

                $tag_alt->delete();

                $this->msg_ok = "Tags zusammengeführt";
            } else {
                $tag_alt->name = $_REQUEST["neuer_name"];
                $tag_alt->save();

                $this->msg_ok = "Tag umbenannt";
            }
        }

        if (AntiXSS::isTokenSet("tag_loeschen")) {
            $tag = Tag::model()->findByAttributes(["id" => $_REQUEST["tag_id"]]);

            Yii::app()->db->createCommand('DELETE FROM antraege_tags WHERE tag_id=:tag_id')
                ->bindValues([':tag_id' => $tag->id])
                ->execute();

            $tag->delete();

            $this->msg_ok = "Tag gelöscht";
        }

        if (AntiXSS::isTokenSet("einzelnen_tag_loeschen")) {
            $tag = Tag::model()->findByAttributes(["name" => $_REQUEST["tag_name"]]);

            Yii::app()->db->createCommand('DELETE FROM antraege_tags WHERE tag_id=:tag_id AND antrag_id=:antrag_id')
                ->bindValues([':tag_id' => $tag->id, ':antrag_id' => $_REQUEST["antrag_id"]])
                ->execute();

            $this->msg_ok = "Einzelner Tag gelöscht";
        }

        $tags = Tag::model()->findAll();
        usort($tags, function (Tag $tag1, Tag $tag2) {
            return strtolower($tag1->name) <=>  strtolower($tag2->name);
        });

        $this->render("tags", [
            "tags" => $tags,
        ]);
    }

    public function actionBuergerInnenversammlungen()
    {
        if (!$this->binContentAdmin()) $this->errorMessageAndDie(403, "");

        $this->top_menu = "admin";

        if (AntiXSS::isTokenSet("delete")) {
            /** @var Termin $termin */
            $termin = Termin::model()->findByPk(AntiXSS::getTokenVal("delete"));
            $termin->delete();
            $this->msg_ok = "Gelöscht.";
        }

        if (AntiXSS::isTokenSet("save")) {
            if (isset($_REQUEST["neu"]) && $_REQUEST["neu"]["datum"] != "" && $_REQUEST["neu"]["ba_nr"] > 0) {
                $result = Yii::app()->db->createCommand("SELECT MIN(id) minid FROM termine")->queryAll();
                $id     = $result[0]["minid"];
                if ($id >= 0) $id = 0;
                $id--;

                $termin                         = new Termin();
                $termin->id                     = $id;
                $termin->ba_nr                  = IntVal($_REQUEST["neu"]["ba_nr"]);
                $termin->typ                    = Termin::TYP_BUERGERVERSAMMLUNG;
                $termin->sitzungsort            = $_REQUEST["neu"]["ort"];
                $termin->termin                 = $_REQUEST["neu"]["datum"];
                $termin->datum_letzte_aenderung = new CDbExpression('NOW()');
                if (!$termin->save()) {
                    $this->msg_err = print_r($termin->getErrors(), true);
                }
            }
            if (isset($_REQUEST["termin"])) foreach ($_REQUEST["termin"] as $id => $save) {
                /** @var Termin $termin */
                $termin              = Termin::model()->findByPk($id);
                $termin->sitzungsort = $save["ort"];
                $termin->termin      = $save["datum"];
                $termin->save();
            }
            $this->msg_ok = "Gespeichert";
        }

        $termine = Termin::model()->findAllByAttributes(["typ" => Termin::TYP_BUERGERVERSAMMLUNG], ["order" => "termin DESC"]);
        $this->render("buergerInnenversammlungen", [
            "termine" => $termine,
        ]);
    }
}
