/** * @param string $veranstaltungsreihe_id * @param string $veranstaltung_id * @param int $antrag_id * @param int $kommentar_id */ public function actionAnzeige($veranstaltungsreihe_id = "", $veranstaltung_id, $antrag_id, $kommentar_id = 0) { $antrag_id = IntVal($antrag_id); /** @var Antrag $antrag */ $antrag = Antrag::model()->with("antragKommentare", "antragKommentare.unterstuetzerInnen")->findByPk($antrag_id); if (is_null($antrag)) { Yii::app()->user->setFlash("error", "Der angegebene Antrag wurde nicht gefunden."); $this->redirect($this->createUrl("veranstaltung/index")); } $this->veranstaltung = $this->loadVeranstaltung($veranstaltungsreihe_id, $veranstaltung_id, $antrag); $this->testeWartungsmodus(); $this->layout = '//layouts/column2'; $this->performAnzeigeActions($antrag, $kommentar_id); $kommentare_offen = array(); if (AntiXSS::isTokenSet("kommentar_schreiben") && $antrag->veranstaltung->darfEroeffnenKommentar()) { $zeile = IntVal($_REQUEST["absatz_nr"]); if ($this->veranstaltungsreihe->getEinstellungen()->antrag_neu_nur_namespaced_accounts && veranstaltungsspezifisch_erzwinge_login($this->veranstaltung)) { $person = Person::model()->findByAttributes(array("auth" => Yii::app()->user->id)); } else { $person = $_REQUEST["Person"]; $person["typ"] = Person::$TYP_PERSON; } if ($antrag->veranstaltung->getEinstellungen()->kommentar_neu_braucht_email && trim($person["email"]) == "") { Yii::app()->user->setFlash("error", "Bitte gib deine E-Mail-Adresse an."); $this->redirect($this->createUrl("antrag/anzeige", array("antrag_id" => $antrag->id))); } $model_person = static::getCurrenPersonOrCreateBySubmitData($person, Person::$STATUS_UNCONFIRMED, false); $kommentar = new AntragKommentar(); $kommentar->attributes = $_REQUEST["AntragKommentar"]; $kommentar->absatz = $zeile; $kommentar->datum = new CDbExpression('NOW()'); $kommentar->verfasserIn = $model_person; $kommentar->verfasserIn_id = $model_person->id; $kommentar->antrag = $antrag; $kommentar->antrag_id = $antrag_id; $kommentar->status = $this->veranstaltung->getEinstellungen()->freischaltung_kommentare ? IKommentar::$STATUS_NICHT_FREI : IKommentar::$STATUS_FREI; $kommentare_offen[] = $zeile; if ($kommentar->save()) { $add = $this->veranstaltung->getEinstellungen()->freischaltung_kommentare ? " Er wird nach einer kurzen Prüfung freigeschaltet und damit sichtbar." : ""; Yii::app()->user->setFlash("success", "Der Kommentar wurde gespeichert." . $add); if ($this->veranstaltung->admin_email != "" && $kommentar->status == IKommentar::$STATUS_NICHT_FREI) { $kommentar_link = $kommentar->getLink(true); $mails = explode(",", $this->veranstaltung->admin_email); $from_name = veranstaltungsspezifisch_email_from_name($this->veranstaltung); $mail_text = "Es wurde ein neuer Kommentar zum Antrag \"" . $antrag->name . "\" verfasst (nur eingeloggt sichtbar):\n" . "Link: " . $kommentar_link; foreach ($mails as $mail) { if (trim($mail) != "") { AntraegeUtils::send_mail_log(EmailLog::$EMAIL_TYP_ANTRAG_BENACHRICHTIGUNG_ADMIN, trim($mail), null, "Neuer Kommentar - bitte freischalten.", $mail_text, $from_name); } } } if ($kommentar->status == IKommentar::$STATUS_FREI) { $benachrichtigt = array(); foreach ($antrag->veranstaltung->veranstaltungsreihe->veranstaltungsreihenAbos as $abo) { if ($abo->kommentare && !in_array($abo->person_id, $benachrichtigt)) { $abo->person->benachrichtigenKommentar($kommentar); $benachrichtigt[] = $abo->person_id; } } } $this->redirect($kommentar->getLink()); } else { foreach ($model_person->getErrors() as $key => $val) { foreach ($val as $val2) { Yii::app()->user->setFlash("error", "Kommentar konnte nicht angelegt werden: {$key}: {$val2}"); } } } } if ($kommentar_id > 0) { foreach ($antrag->antragKommentare as $komm) { if ($komm->id == $kommentar_id) { $kommentare_offen[] = $komm->absatz; } } } $aenderungsantraege = array(); foreach ($antrag->aenderungsantraege as $antr) { if (!in_array($antr->status, IAntrag::$STATI_UNSICHTBAR)) { $aenderungsantraege[] = $antr; } } $hiddens = array(); $js_protection = Yii::app()->user->isGuest; if ($js_protection) { $hiddens["form_token"] = AntiXSS::createToken("kommentar_schreiben"); } else { $hiddens[AntiXSS::createToken("kommentar_schreiben")] = "1"; } if (Yii::app()->user->isGuest) { $kommentar_person = new Person(); } else { $kommentar_person = Person::model()->findByAttributes(array("auth" => Yii::app()->user->id)); } $kommentar_person->setEmailRequired($antrag->veranstaltung->getEinstellungen()->kommentar_neu_braucht_email); $support_status = ""; if (!Yii::app()->user->isGuest) { foreach ($antrag->antragUnterstuetzerInnen as $unt) { if ($unt->person->id == Yii::app()->user->getState("person_id")) { $support_status = $unt->rolle; } } } $this->render("anzeige", array("antrag" => $antrag, "aenderungsantraege" => $aenderungsantraege, "edit_link" => $antrag->kannUeberarbeiten(), "kommentare_offen" => $kommentare_offen, "kommentar_person" => $kommentar_person, "admin_edit" => $this->veranstaltung->isAdminCurUser() ? $this->createUrl("/admin/antraege/update", array("id" => $antrag_id)) : null, "komm_del_link" => $this->createUrl("antrag/anzeige", array("antrag_id" => $antrag_id, AntiXSS::createToken("komm_del") => "#komm_id#")), "hiddens" => $hiddens, "js_protection" => $js_protection, "support_status" => $support_status, "sprache" => $antrag->veranstaltung->getSprache())); }
public function actionIndex($veranstaltungsreihe_id = "", $veranstaltung_id = "") { $this->loadVeranstaltung($veranstaltungsreihe_id, $veranstaltung_id); if (!$this->veranstaltung->isAdminCurUser()) { $this->redirect($this->createUrl("/veranstaltung/login", array("back" => yii::app()->getRequest()->requestUri))); } $todo = array(); if (!is_null($this->veranstaltung)) { $standardtexte = $this->veranstaltung->getHTMLStandardtextIDs(); foreach ($standardtexte as $text) { $st = Texte::model()->findByAttributes(array("veranstaltung_id" => $this->veranstaltung->id, "text_id" => $text)); if ($st == null) { $todo[] = array("Text anlegen:", $text, array("admin/texte/create", array("key" => $text)), null); } } /** @var array|Antrag[] $antraege */ $antraege = Antrag::model()->findAllByAttributes(array("veranstaltung_id" => $this->veranstaltung->id, "status" => Antrag::$STATUS_EINGEREICHT_UNGEPRUEFT)); foreach ($antraege as $antrag) { $von = $antrag->getAntragstellerInnenStr(); $todo[] = array("Antrag prüfen:", $antrag->revision_name . " " . $antrag->name, array("admin/antraege/update", array("id" => $antrag->id)), $von); } /** @var array|Aenderungsantrag[] $aenderungs */ $aenderungs = Aenderungsantrag::model()->with(array("antrag" => array("alias" => "antrag", "condition" => "antrag.veranstaltung_id = " . IntVal($this->veranstaltung->id))))->findAllByAttributes(array("status" => Aenderungsantrag::$STATUS_EINGEREICHT_UNGEPRUEFT)); foreach ($aenderungs as $ae) { $von = $ae->getAntragstellerInnenStr(); $todo[] = array("Änderungsanträge prüfen:", $ae->revision_name . " zu " . $ae->antrag->revision_name . " " . $ae->antrag->name, array("admin/aenderungsantraege/update", array("id" => $ae->id)), $von); } /** @var AntragKommentar[] $kommentare */ $kommentare = AntragKommentar::model()->with(array("antrag" => array("alias" => "antrag", "condition" => "antrag.veranstaltung_id = " . IntVal($this->veranstaltung->id))))->findAllByAttributes(array("status" => AntragKommentar::$STATUS_NICHT_FREI)); foreach ($kommentare as $komm) { $von = $komm->verfasserIn->name; $todo[] = array("Kommentar prüfen:", $komm->verfasserIn->name . " zu " . $komm->antrag->revision_name, array("antrag/anzeige", array("antrag_id" => $komm->antrag_id, "kommentar_id" => $komm->id, "#" => "komm" . $komm->id)), $von); } /** @var AenderungsantragKommentar[] $kommentare */ $kommentare = AenderungsantragKommentar::model()->with(array("aenderungsantrag" => array("alias" => "aenderungsantrag"), "aenderungsantrag.antrag" => array("alias" => "antrag", "condition" => "antrag.veranstaltung_id = " . IntVal($this->veranstaltung->id))))->findAllByAttributes(array("status" => AntragKommentar::$STATUS_NICHT_FREI)); foreach ($kommentare as $komm) { $von = $komm->verfasserIn->name; $todo[] = array("Kommentar prüfen:", $komm->verfasserIn->name . " zu " . $komm->aenderungsantrag->revision_name, array("aenderungsantrag/anzeige", array("aenderungsantrag_id" => $komm->aenderungsantrag->id, "antrag_id" => $komm->aenderungsantrag->antrag_id, "kommentar_id" => $komm->id, "#" => "komm" . $komm->id)), $von); } } $this->render('index', array("todo" => $todo, "sprache" => $this->veranstaltung->getSprache())); }
/** * @param string $veranstaltungsreihe_id * @param string $veranstaltung_id */ public function actionSuche($veranstaltungsreihe_id = "", $veranstaltung_id = "") { $this->layout = '//layouts/column2'; $veranstaltung = $this->loadVeranstaltung($veranstaltungsreihe_id, $veranstaltung_id); $this->testeWartungsmodus(); $neueste_aenderungsantraege = Aenderungsantrag::holeNeueste($veranstaltung, 5); $neueste_antraege = Antrag::holeNeueste($veranstaltung, 5); $neueste_kommentare = AntragKommentar::holeNeueste($veranstaltung, 3); $suchbegriff = $_REQUEST["suchbegriff"]; $antraege = Antrag::suche($veranstaltung->id, $suchbegriff); $aenderungsantraege = Aenderungsantrag::suche($veranstaltung->id, $suchbegriff); $this->render('suche', array("veranstaltung" => $veranstaltung, "neueste_antraege" => $neueste_antraege, "neueste_kommentare" => $neueste_kommentare, "neueste_aenderungsantraege" => $neueste_aenderungsantraege, "suche_antraege" => $antraege, "suche_aenderungsantraege" => $aenderungsantraege, "suchbegriff" => $suchbegriff, "sprache" => $veranstaltung->getSprache())); }
/** * @param Veranstaltung $veranstaltung * @param int $limit * @return array|AntragKommentar[] */ public static function holeNeueste($veranstaltung, $limit = 0) { $condition = array("order" => "datum DESC"); if ($limit > 0) { $condition["limit"] = $limit; } $unsichtbar = $veranstaltung->getAntragUnsichtbarStati(); $arr = AntragKommentar::model()->with(array("antrag" => array("condition" => "antrag.status NOT IN (" . implode(", ", $unsichtbar) . ") AND antrag.veranstaltung_id = " . IntVal($veranstaltung->id))))->findAllByAttributes(array("status" => AntragKommentar::$STATUS_FREI), $condition); return $arr; }