コード例 #1
0
 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);
     }
 }
コード例 #2
0
 /**
  * @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));
 }
コード例 #3
0
ファイル: Veranstaltung.php プロジェクト: andi98/antragsgruen
 /**
  * @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;
 }
コード例 #4
0
ファイル: Person.php プロジェクト: andi98/antragsgruen
 /**
  * @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);
 }
コード例 #5
0
ファイル: Antrag.php プロジェクト: andi98/antragsgruen
 /**
  * @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;
 }
コード例 #6
0
ファイル: index.php プロジェクト: andi98/antragsgruen
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 
コード例 #7
0
 /**
  * @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) . ")");
 }
コード例 #8
0
ファイル: index.php プロジェクト: andi98/antragsgruen
<?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";
コード例 #9
0
 /**
  * @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()));
 }
コード例 #10
0
 /**
  * @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()));
     }
 }
コード例 #11
0
 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()));
 }