public function run($args) { if (count($args) != 1) { echo "Aufruf: ./yiic recalc_diff_text [Änderungsantrags-ID|alle]\n"; return; } if ($args[0] == "alle") { /** @var Aenderungsantrag[] $aenderungsantrag */ $aenderungsantrag = Aenderungsantrag::model()->findAll(array("order" => "id DESC")); foreach ($aenderungsantrag as $ae) { try { echo "Recalculating: " . $ae->id . "\n"; $this->recalcAeText($ae->id, false); } catch (Exception $e) { echo "AE inkonsistent!\n"; } } } else { $this->recalcAeText($args[0], true); } }
/** * @param string $veranstaltungsreihe_id * @param string $veranstaltung_id */ public function actionAdmin($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))); } $model = new Aenderungsantrag('search'); $model->unsetAttributes(); if (isset($_GET['Aenderungsantrag'])) { $model->setAttributes($_GET['Aenderungsantrag']); } $this->render('admin', array('model' => $model)); }
/** * @return array|array[] */ public function antraegeSortiert() { $antraege = $this->antraege; $antraege_sorted = array(); $unsichtbar = $this->getAntragUnsichtbarStati(); $unsichtbar[] = IAntrag::$STATUS_MODIFIZIERT; foreach ($antraege as $ant) { if (!in_array($ant->status, $unsichtbar)) { if (!isset($antraege_sorted[$ant->typ])) { $antraege_sorted[$ant->typ] = array(); } $key = $ant->revision_name; if (!$this->getEinstellungen()->zeilen_nummerierung_global) { if ($this->getEinstellungen()->ae_nummerierung_nach_zeile || veranstaltungsspezifisch_ae_sortierung_zeilennummer($this)) { $ant->aenderungsantraege = Aenderungsantrag::sortiereSichtbareNachZeilennummer($ant->aenderungsantraege); } } $antraege_sorted[$ant->typ][$key] = $ant; } } if (veranstaltungsspezifisch_hat_tags_startseite($this) && isset($_REQUEST["test"])) { $tags = array(); foreach ($antraege as $antrag) { if (count($antrag->tags) == 0) { if (!isset($tags[0])) { $tags[0] = array("name" => "Keines", "antraege" => array()); } $tags[0]["antraege"][] = $antrag; } else { foreach ($antrag->tags as $tag) { if (!isset($tags[$tag->id])) { $tags[$tag->id] = array("name" => $tag->name, "antraege" => array()); } $tags[$tag->id]["antraege"][] = $antrag; } } } $sortedTags = $this->getSortedTags(); $out = array(); foreach ($sortedTags as $tag) { if (isset($tags[$tag->id])) { foreach ($tags[$tag->id]["antraege"] as $antrag) { $out[] = $antrag; } } } if (isset($tags[0])) { foreach ($tags[0]["antraege"] as $antrag) { $out[] = $antrag; } } return array("Tag" => $out); } $cmp = veranstaltungsspezifisch_antrag_sort($this); if (!is_callable($cmp)) { $cmp = function ($str1, $str2, $num1, $num2) { if ($str1 == $str2) { if ($num1 < $num2) { return -1; } if ($num1 > $num2) { return 1; } return 0; } else { if ($str1 < $str2) { return -1; } if ($str1 > $str2) { return 1; } return 0; } }; } foreach ($antraege_sorted as $key => $val) { uksort($antraege_sorted[$key], function ($k1, $k2) use($cmp) { if ($k1 == "" && $k2 == "") { return 0; } if ($k1 == "") { return -1; } if ($k2 == "") { return 1; } $k1 = preg_replace("/neu\$/siu", "neu1", $k1); $k2 = preg_replace("/neu\$/siu", "neu1", $k2); $pat1 = "/^(?<str1>[^0-9]*)(?<num1>[0-9]*)/siu"; $pat2 = "/^(?<str1>[^0-9]*)(?<num1>[0-9]+)(?<str2>[^0-9]+)(?<num2>[0-9]+)\$/siu"; if (preg_match($pat2, $k1, $matches1) && preg_match($pat2, $k2, $matches2)) { if ($matches1["str1"] == $matches2["str1"] && $matches1["num1"] == $matches2["num1"]) { return $cmp($matches1["str2"], $matches2["str2"], $matches1["num2"], $matches2["num2"]); } else { return $cmp($matches1["str1"], $matches2["str1"], $matches1["num1"], $matches2["num1"]); } } elseif (preg_match($pat2, $k1, $matches1) && preg_match($pat1, $k2, $matches2)) { if ($matches1["str1"] == $matches2["str1"] && $matches1["num1"] == $matches2["num1"]) { return 1; } else { return $cmp($matches1["str1"], $matches2["str1"], $matches1["num1"], $matches2["num1"]); } } elseif (preg_match($pat1, $k1, $matches1) && preg_match($pat2, $k2, $matches2)) { if ($matches1["str1"] == $matches2["str1"] && $matches1["num1"] == $matches2["num1"]) { return -1; } else { return $cmp($matches1["str1"], $matches2["str1"], $matches1["num1"], $matches2["num1"]); } } else { preg_match($pat1, $k1, $matches1); preg_match($pat1, $k2, $matches2); $str1 = isset($matches1["str1"]) ? $matches1["str1"] : ""; $str2 = isset($matches2["str1"]) ? $matches2["str1"] : ""; $num1 = isset($matches1["num1"]) ? $matches1["num1"] : ""; $num2 = isset($matches2["num1"]) ? $matches2["num1"] : ""; return $cmp($str1, $str2, $num1, $num2); } }); } $antraege_sorted_by_name = array(); foreach (Antrag::$TYPEN_SORTED as $typ_id) { if (isset($antraege_sorted[$typ_id])) { $antraege_sorted_by_name[Antrag::$TYPEN[$typ_id]] = $antraege_sorted[$typ_id]; } } return $antraege_sorted_by_name; }
/** * @param Aenderungsantrag $aenderungsantrag */ public function benachrichtigenAenderungsantrag($aenderungsantrag) { $betreff = "[Antragsgrün] Neuer Änderungsantrag zu " . $aenderungsantrag->antrag->nameMitRev(); $text = "Es wurde ein neuer Änderungsantrag eingereicht:\nAnlass: " . $aenderungsantrag->antrag->veranstaltung->name . "\nAntrag: " . $aenderungsantrag->antrag->nameMitRev() . "\nLink: " . $aenderungsantrag->getLink(true); $this->benachrichtigen($aenderungsantrag->antrag->veranstaltung, $betreff, $text); }
/** * @param int $ae_id * @return Aenderungsantrag */ public function getAenderungsAntragById($ae_id) { $ae = Aenderungsantrag::model()->findAll("id = " . InTVal($ae_id) . " AND antrag_id = " . IntVal($this->id)); return count($ae) > 0 ? $ae[0] : null; }
echo $this->createUrl("admin/index/antragExcelList"); ?> ">Antragstext und Begründung getrennt</a></li> <li><a href="<?php echo $this->createUrl("admin/index/antragExcelList", array("text_begruendung_zusammen" => 1)); ?> ">Antragstext und Begründung in einer Spalte</a></li> </ul> </li> <li style="margin-top: 10px; font-weight: bold;"><a href="<?php echo $this->createUrl("admin/aenderungsantraege"); ?> "><?php echo Aenderungsantrag::label(2); ?> </a> </li> <li style="margin-left: 20px;"><a href="<?php echo $this->createUrl("admin/index/aePDFList"); ?> ">Liste aller PDFs</a></li> <li style="margin-left: 20px;"> <a href="#ae_excel_export" onClick="$('#ae_excel_export').toggle(); return false;">Export: Änderungsanträge als Excel-Datei</a> <ul id="ae_excel_export" style="display: none;"> <li><a href="<?php echo $this->createUrl("admin/index/aeExcelList"); ?> ">Änderungsantragstext und Begründung getrennt</a></li> <li><a href="<?php
/** * @param int $veranstaltung_id * @param string $suchbegriff * @return array|Aenderungsantrag[] */ public static function suche($veranstaltung_id, $suchbegriff) { $ids = array(); /** @var array|Antrag[] $antraege */ $antraege = Antrag::model()->findAllByAttributes(array("veranstaltung_id" => $veranstaltung_id)); foreach ($antraege as $ant) { $ids[] = $ant->id; } if (count($ids) == 0) { return array(); } return Aenderungsantrag::model()->findAll("(`aenderung_text` LIKE '%" . addslashes($suchbegriff) . "%' OR `aenderung_text2` LIKE '%" . addslashes($suchbegriff) . "%' OR `aenderung_begruendung` LIKE '%" . addslashes($suchbegriff) . "%') AND status NOT IN (" . implode(", ", IAntrag::$STATI_UNSICHTBAR) . ") AND antrag_id IN (" . implode(", ", $ids) . ")"); }
<?php /** * @var AenderungsantraegeController $this * @var CActiveDataProvider $dataProvider * @var int[] $anzahl_stati * @var int $anzahl_gesamt * @var int|null $status_curr */ $this->breadcrumbs = array(Yii::t('app', 'Administration') => $this->createUrl('/admin/index'), Aenderungsantrag::label(2)); $this->menu = array(array('label' => "Durchsuchen", 'url' => array('admin'), "icon" => "th-list")); echo '<h1>' . GxHtml::encode(Aenderungsantrag::label(2)) . '</h1>'; if ($anzahl_gesamt > 0) { echo '<div>'; if ($status_curr === null) { echo '[<strong>Alle (' . $anzahl_gesamt . ')</strong>]'; } else { echo '[' . CHtml::link('Alle (' . $anzahl_gesamt . ')', array('/admin/aenderungsantraege/index', array())) . ']'; } foreach ($anzahl_stati as $key => $anz) { $name = CHtml::encode(IAntrag::$STATI[$key] . ' (' . $anz . ')'); if ($status_curr !== null && $status_curr == $key) { echo ' - [<strong>' . $name . '</strong>]'; } else { echo ' - [' . CHtml::link($name, $this->createUrl("/admin/aenderungsantraege/index", array("status" => $key))) . ']'; } } echo '</div>'; } $dataProvider->criteria->condition = "status != " . IAntrag::$STATUS_GELOESCHT; $dataProvider->sort->defaultOrder = "datum_einreichung DESC";
/** * @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 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())); } }
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())); }