/** * @param Antrag $antrag * @param int $anz_absaetze_neu * @param array $absatz_mapping * @return Aenderungsantrag */ public function aufrechterhaltenBeiNeuemAntrag($antrag, $anz_absaetze_neu, $absatz_mapping) { $neuer_ae = new Aenderungsantrag(); $neuer_ae->antrag_id = $antrag->id; $neuer_ae->revision_name = $this->revision_name; $neuer_ae->name_neu = $this->name_neu; $neuer_ae->begruendung_neu = $this->begruendung_neu; $neuer_ae->aenderung_begruendung = $this->aenderung_begruendung; $neuer_ae->datum_einreichung = $this->datum_einreichung; $neuer_ae->aenderung_first_line_cache = -1; $neuer_ae->status_string = ""; $neuer_ae->status = IAntrag::$STATUS_EINGEREICHT_GEPRUEFT; $text_neu = array(); for ($i = 0; $i < $anz_absaetze_neu; $i++) { $text_neu[$i] = ""; } $old_abs = json_decode($this->text_neu); foreach ($old_abs as $abs => $str) { $text_neu[$absatz_mapping[$abs]] = $str; } $neuer_ae->setDiffParagraphs($text_neu); $neuer_ae->calcDiffText(); if (!$neuer_ae->save()) { var_dump($neuer_ae->attributes); } foreach ($this->aenderungsantragUnterstuetzerInnen as $init) { if ($init->rolle == IUnterstuetzerInnen::$ROLLE_INITIATORIN) { $in = new AenderungsantragUnterstuetzerInnen(); $in->rolle = IUnterstuetzerInnen::$ROLLE_INITIATORIN; $in->position = $init->position; $in->aenderungsantrag_id = $neuer_ae->id; $in->unterstuetzerIn_id = $init->unterstuetzerIn_id; $in->kommentar = ""; $in->save(); } } }
/** * @param string $veranstaltungsreihe_id * @param string $veranstaltung_id * @param int $antrag_id * @param int $adoptInitiators */ public function actionNeu($veranstaltungsreihe_id = "", $veranstaltung_id, $antrag_id, $adoptInitiators = 0) { $this->layout = '//layouts/column2'; $this->testeWartungsmodus(); $antrag_id = IntVal($antrag_id); /** @var Antrag $antrag */ $antrag = Antrag::model()->findByPk($antrag_id); $this->loadVeranstaltung($veranstaltungsreihe_id, $veranstaltung_id, $antrag); if (!$antrag->veranstaltung->getPolicyAenderungsantraege()->checkCurUserHeuristically()) { $msg = $antrag->veranstaltung->getPolicyAenderungsantraege()->getPermissionDeniedMsg(); Yii::app()->user->setFlash("error", "Es kann kein Änderungsantrag werden: " . $msg); $this->redirect($this->createUrl("antrag/anzeige", array("antrag_id" => $antrag->id))); } $aenderungsantrag = new Aenderungsantrag(); $aenderungsantrag->aenderung_first_line_cache = -1; $aenderungsantrag->antrag = $antrag; $aenderungsantrag->antrag_id = $antrag->id; $aenderungsantrag->status = Aenderungsantrag::$STATUS_UNBESTAETIGT; $aenderungsantrag->status_string = ""; $unterstuetzerInnen = array(); $changed = false; if (AntiXSS::isTokenSet("antragneu")) { $aenderungsantrag->name_neu = $_REQUEST["Aenderungsantrag"]["name_neu"]; $aenderungsantrag->begruendung_neu = ""; $aenderungsantrag->aenderung_metatext = HtmlBBcodeUtils::html_normalize($_REQUEST["ae_metatext"]); if ($aenderungsantrag->antrag->veranstaltung->getEinstellungen()->begruendung_in_html && isset($_REQUEST["ae_begruendung_html"])) { $aenderungsantrag->aenderung_begruendung_html = 1; $aenderungsantrag->aenderung_begruendung = HtmlBBcodeUtils::html_normalize($_REQUEST["ae_begruendung"]); } else { $aenderungsantrag->aenderung_begruendung_html = 0; $aenderungsantrag->aenderung_begruendung = HtmlBBcodeUtils::bbcode_normalize($_REQUEST["ae_begruendung"]); } if ($aenderungsantrag->name_neu != $antrag->name) { $changed = true; } if (trim($aenderungsantrag->aenderung_metatext) != "") { $changed = true; } $orig_absaetze = $antrag->getParagraphs(); $neue_absaetze = array(); $neuer_text = ""; for ($i = 0; $i < count($orig_absaetze); $i++) { /** @var AntragAbsatz $abs */ $abs = $orig_absaetze[$i]; if (isset($_REQUEST["change_text"][$i])) { $abs_text = HtmlBBcodeUtils::bbcode_normalize($_REQUEST["neu_text"][$i]); $neue_absaetze[$i] = $abs_text; $neuer_text .= $abs_text . "\n\n"; $changed = true; } else { $neue_absaetze[$i] = ""; $neuer_text .= $abs->str_bbcode . "\n\n"; } } if ($changed) { $aenderungsantrag->setDiffParagraphs($neue_absaetze); $diff = DiffUtils::getTextDiffMitZeilennummern($antrag->text, $neuer_text, $antrag->veranstaltung->getEinstellungen()->zeilenlaenge); $diff_text = ""; if ($aenderungsantrag->name_neu != $antrag->name) { $diff_text .= "Neuer Titel des Antrags:\n[QUOTE]" . $aenderungsantrag->name_neu . "[/QUOTE]\n\n"; } if (trim($aenderungsantrag->aenderung_metatext) != "") { $diff_text = $aenderungsantrag->aenderung_metatext . "\n\n"; } $diff_text .= DiffUtils::diff2text($diff, $antrag->getFirstLineNo()); $aenderungsantrag->aenderung_text = $diff_text; $aenderungsantrag->datum_einreichung = new CDbExpression('NOW()'); } else { Yii::app()->user->setFlash("error", "Es wurde nichts am Text geändert."); } if (!$this->veranstaltung->getPolicyAenderungsantraege()->checkAenderungsantragSubmit()) { Yii::app()->user->setFlash("error", "Keine Berechtigung zum Anlegen von Änderungsanträgen."); $changed = false; } } $hiddens = array("antrag_id" => $antrag->id); $js_protection = Yii::app()->user->isGuest; if ($js_protection) { $hiddens["form_token"] = AntiXSS::createToken("antragneu"); } else { $hiddens[AntiXSS::createToken("antragneu")] = "1"; } if ($changed) { if (!$aenderungsantrag->save()) { foreach ($aenderungsantrag->getErrors() as $val) { foreach ($val as $val2) { Yii::app()->user->setFlash("error", "Änderungsantrag konnte nicht angelegt werden: " . $val2); } } $antragstellerIn = Yii::app()->user->isGuest ? null : Person::model()->findByAttributes(array("auth" => Yii::app()->user->id)); if ($antragstellerIn === null) { $antragstellerIn = new Person(); } $this->render('bearbeiten_form', array("mode" => "neu", "antrag" => $antrag, "aenderungsantrag" => $aenderungsantrag, "antragstellerIn" => $antragstellerIn, "unterstuetzerInnen" => $unterstuetzerInnen, "hiddens" => $hiddens, "js_protection" => $js_protection, "sprache" => $aenderungsantrag->antrag->veranstaltung->getSprache())); return; } $this->veranstaltung->getPolicyAenderungsantraege()->submitAntragsstellerInView_Aenderungsantrag($aenderungsantrag); $this->redirect($this->createUrl("aenderungsantrag/neuConfirm", array("antrag_id" => $antrag_id, "aenderungsantrag_id" => $aenderungsantrag->id))); } else { if (Yii::app()->user->isGuest || $this->veranstaltung->isAdminCurUser()) { $antragstellerIn = new Person(); $antragstellerIn->typ = Person::$TYP_PERSON; } else { $antragstellerIn = Person::model()->findByAttributes(array("auth" => Yii::app()->user->id)); } if ($adoptInitiators > 0 && $this->veranstaltung->isAdminCurUser()) { $templateAmendment = $this->veranstaltung->getAmendment($adoptInitiators); if ($templateAmendment) { foreach ($templateAmendment->aenderungsantragUnterstuetzerInnen as $unt) { if ($unt->rolle == AenderungsantragUnterstuetzerInnen::$ROLLE_INITIATORIN) { $antragstellerIn = $unt->person; } if ($unt->rolle == AenderungsantragUnterstuetzerInnen::$ROLLE_UNTERSTUETZERIN) { $unterstuetzerInnen[] = $unt->person; } } } } $aenderungsantrag->name_neu = $antrag->name; $this->render('bearbeiten_form', array("mode" => "neu", "antrag" => $antrag, "aenderungsantrag" => $aenderungsantrag, "antragstellerIn" => $antragstellerIn, "unterstuetzerInnen" => $unterstuetzerInnen, "hiddens" => $hiddens, "js_protection" => $js_protection, "sprache" => $aenderungsantrag->antrag->veranstaltung->getSprache())); } }