/**
  * @return IRISItem|null
  */
 public function getRISItem()
 {
     switch ($this->typ) {
         case RISAenderung::$TYP_STADTRAT_VORLAGE:
         case RISAenderung::$TYP_STADTRAT_ANTRAG:
         case RISAenderung::$TYP_BA_ANTRAG:
         case RISAenderung::$TYP_BA_INITIATIVE:
             return Antrag::model()->findByPk($this->ris_id);
             break;
         case RISAenderung::$TYP_BA_GREMIUM:
         case RISAenderung::$TYP_STADTRAT_GREMIUM:
             return Gremium::model()->findByPk($this->ris_id);
             break;
         case RISAenderung::$TYP_STADTRAT_TERMIN:
         case RISAenderung::$TYP_BA_TERMIN:
             return Termin::model()->findByPk($this->ris_id);
             break;
         case RISAenderung::$TYP_BA_MITGLIED:
         case RISAenderung::$TYP_STADTRAETIN:
             return StadtraetIn::model()->findByPk($this->ris_id);
             break;
         case RISAenderung::$TYP_RATHAUSUMSCHAU:
             return null;
             // @TODO
             break;
         case RISAenderung::$TYP_STADTRAT_FRAKTION:
             return null;
             // @TODO
             break;
         default:
             return null;
     }
 }
 /**
  * @param string $veranstaltungsreihe_id
  * @param string $veranstaltung_id
  * @param int $id
  * @throws CException
  * @throws Exception
  */
 public function actionUpdate($veranstaltungsreihe_id = "", $veranstaltung_id, $id)
 {
     $this->loadVeranstaltung($veranstaltungsreihe_id, $veranstaltung_id);
     if (!$this->veranstaltung->isAdminCurUser()) {
         $this->redirect($this->createUrl("/veranstaltung/login", array("back" => yii::app()->getRequest()->requestUri)));
     }
     /** @var $model Antrag */
     $model = Antrag::model()->with("antragUnterstuetzerInnen", "antragUnterstuetzerInnen.person")->findByPk($id, '', array("order" => "`person`.`name"));
     if (is_null($model)) {
         Yii::app()->user->setFlash("error", "Der angegebene Antrag wurde nicht gefunden.");
         $this->redirect($this->createUrl("admin/antraege"));
     }
     if ($model->veranstaltung_id != $this->veranstaltung->id) {
         return;
     }
     $this->performAjaxValidation($model, 'antrag-form');
     $messages = array();
     if (AntiXSS::isTokenSet("antrag_freischalten")) {
         $newvar = AntiXSS::getTokenVal("antrag_freischalten");
         $model->adminFreischalten($newvar);
         Yii::app()->user->setFlash("success", "Der Antrag wurde freigeschaltet.");
     }
     if (isset($_POST['Antrag'])) {
         $fixed_fields = $fixed_fields_pre = array();
         if (!$model->kannTextUeberarbeitenAdmin()) {
             $fixed_fields = array("text_unveraenderlich", "text", "begruendung");
         }
         foreach ($fixed_fields as $field) {
             $fixed_fields_pre[$field] = $model->{$field};
         }
         if (!in_array($_POST['Antrag']['status'], $model->getMoeglicheStati())) {
             throw new Exception("Status-Übergang ungültig");
         }
         $revision_name = $model->revision_name;
         $model->setAttributes($_POST['Antrag'], false);
         if ($model->revision_name != $revision_name && $revision_name != "") {
             foreach ($this->veranstaltung->antraege as $ant) {
                 if ($ant->id != $model->id && $ant->revision_name == $model->revision_name && $ant->status != Antrag::$STATUS_GELOESCHT) {
                     // Zurücksetzen + Warnung
                     $messages[] = "Das vergebene Antragskürzel \"" . $model->revision_name . "\" wird bereits von einem anderen Antrag verwendet.";
                     $model->revision_name = $revision_name;
                 }
             }
         }
         foreach ($fixed_fields_pre as $field => $val) {
             $model->{$field} = $val;
         }
         Yii::import('ext.datetimepicker.EDateTimePicker');
         $model->datum_einreichung = EDateTimePicker::parseInput($_POST["Antrag"], "datum_einreichung");
         $model->datum_beschluss = EDateTimePicker::parseInput($_POST["Antrag"], "datum_beschluss");
         $relatedData = array();
         if ($model->saveWithRelated($relatedData)) {
             $model->veranstaltung->resetLineCache();
             UnterstuetzerInnenAdminWidget::saveUnterstuetzerInnenWidget($model, $messages, "AntragUnterstuetzerInnen", "antrag_id", $id);
             $model = Antrag::model()->with("antragUnterstuetzerInnen", "antragUnterstuetzerInnen.person")->findByPk($id, '', array("order" => "`person`.`name"));
         }
     }
     $this->render('update', array('model' => $model, 'messages' => $messages));
 }
 public function run($args)
 {
     /** @var Antrag[] $antraege */
     $antraege = Antrag::model()->findAll(["order" => "id", "offset" => 40000, "limit" => 10000]);
     for ($i = 0; $i < count($antraege); $i++) {
         echo $i . " / " . count($antraege) . ": " . $antraege[$i]->id . "\n";
         $antraege[$i]->resetPersonen();
     }
 }
 public function run($args)
 {
     foreach ($GLOBALS["TESTS"] as $test) {
         /** @var Antrag $antrag */
         $antrag = Antrag::model()->findByPk($test["antrag_id"]);
         $diffs = array();
         /** @var array|AntragAbsatz[] $pars */
         $pars = $antrag->getParagraphs();
         $diffs[$test["absatz_nr"]] = DiffUtils::renderBBCodeDiff2HTML($pars[$test["absatz_nr"]]->str_bbcode, $test["text_neu"], false, 0, "", true, true);
         var_dump($diffs);
     }
 }
 public function run($args)
 {
     if (!isset($args[0]) || $args[0] != "alle" && $args[0] != "ohnereferat" && $args[0] <= 1) {
         die("./yiic reindex_ba_initiative [BA-Initiative-ID]|alle\n");
     }
     $parser = new BAInitiativeParser();
     if ($args[0] == "ohnereferat") {
         /** @var Antrag[] $antraege */
         $antraege = Antrag::model()->findAllByAttributes(["typ" => Antrag::$TYP_BA_INITIATIVE, "referat_id" => null]);
         foreach ($antraege as $antrag) {
             $parser->parse($antrag->id);
         }
     } elseif ($args[0] == "alle") {
         $parser->parseAlle();
     } elseif ($args[0] > 0) {
         $parser->parse($args[0]);
     }
 }
 /**
  * @param int $id
  */
 public function actionAnzeigen($id)
 {
     $this->performLoginActions();
     /** @var Antrag $antrag */
     $antrag = Antrag::model()->findByPk($id);
     if (!$antrag) {
         $this->render('/index/error', ["code" => 404, "message" => "Der Antrag wurde nicht gefunden"]);
         return;
     }
     if (AntiXSS::isTokenSet("abonnieren")) {
         $this->requireLogin($this->createUrl("antraege/anzeigen", ["id" => $id]));
         $antrag->getVorgang()->abonnieren($this->aktuelleBenutzerIn());
     }
     if (AntiXSS::isTokenSet("deabonnieren")) {
         $this->requireLogin($this->createUrl("antraege/anzeigen", ["id" => $id]));
         $antrag->getVorgang()->deabonnieren($this->aktuelleBenutzerIn());
     }
     if (AntiXSS::isTokenSet("tag_add") && $this->aktuelleBenutzerIn()) {
         $tags = explode(",", $_REQUEST["tags_neu"]);
         foreach ($tags as $tag_name) {
             if (mb_strlen(trim($tag_name)) > 0) {
                 try {
                     $tag_name = trim($tag_name);
                     $tag = Tag::model()->findByAttributes(["name" => $tag_name]);
                     if (!$tag) {
                         $tag = new Tag();
                         $tag->name = $tag_name;
                         $tag->angelegt_benutzerIn_id = $this->aktuelleBenutzerIn()->id;
                         $tag->angelegt_datum = new CDbExpression('NOW()');
                         $tag->reviewed = $this->binContentAdmin() ? 1 : 0;
                         $tag->save();
                         if (count($tag->getErrors()) > 0) {
                             $this->render('/index/error', ["code" => 500, "message" => "Ein Fehler beim Anlegen des Schlagworts trat auf"]);
                         }
                     }
                     Yii::app()->db->createCommand()->insert("antraege_tags", ["antrag_id" => $antrag->id, "tag_id" => $tag->id, "zugeordnet_datum" => date("Y-m-d H:i:s"), "zugeordnet_benutzerIn_id" => $this->aktuelleBenutzerIn()->id]);
                 } catch (Exception $e) {
                     // Sind hauptsächlich doppelte Einträge -> ignorieren
                 }
             }
         }
     }
     $this->render("anzeige", ["antrag" => $antrag, "tag_mode" => isset($_REQUEST["tag_mode"]) && $_REQUEST["tag_mode"] == "1"]);
 }
 /**
  * @param Veranstaltung $veranstaltung
  * @param int $limit
  * @return array|AenderungsantragKommentar[]
  */
 public static function holeNeueste($veranstaltung, $limit = 0)
 {
     $antrag_ids = array();
     /** @var array|Antrag[] $antraege */
     $antraege = Antrag::model()->findAllByAttributes(array("veranstaltung_id" => $veranstaltung->id));
     foreach ($antraege as $a) {
         $antrag_ids[] = $a->id;
     }
     if (count($antrag_ids) == 0) {
         return array();
     }
     $condition = array("order" => "datum DESC");
     if ($limit > 0) {
         $condition["limit"] = $limit;
     }
     $unsichtbar = $veranstaltung->getAntragUnsichtbarStati();
     $arr = AenderungsantragKommentar::model()->with(array("aenderungsantrag" => array("condition" => "aenderungsantrag.status NOT IN (" . implode(", ", $unsichtbar) . ") AND aenderungsantrag.antrag_id IN (" . implode(", ", $antrag_ids) . ")")))->findAllByAttributes(array("status" => AenderungsantragKommentar::$STATUS_FREI), $condition);
     return $arr;
 }
 public function actionFraktionantraege($fraktion_id, $limit = 30, $offset = 0)
 {
     Header("Content-Type: application/json; charset=UTF-8");
     /** @var Fraktion $fraktion */
     $fraktion = Fraktion::model()->findByPk($fraktion_id);
     $strIds = [];
     foreach ($fraktion->stadtraetInnenFraktionen as $strFrakt) {
         $strIds[] = $strFrakt->stadtraetIn_id;
     }
     $strIds = implode(", ", array_map("IntVal", $strIds));
     $SQL = "SELECT a.id FROM antraege a JOIN antraege_stadtraetInnen b ON a.id = b.antrag_id " . "WHERE b.stadtraetIn_id IN ({$strIds}) GROUP BY a.id ORDER BY a.gestellt_am DESC";
     if ($limit > 0 || $offset > 0) {
         $SQL .= " LIMIT " . IntVal($offset) . "," . IntVal($limit);
     }
     $antragIds = Yii::app()->db->createCommand($SQL)->queryAll();
     $return = [];
     foreach ($antragIds as $antragId) {
         /** @var StadtraetInFraktion[] $strs */
         $antrag = Antrag::model()->findByPk($antragId);
         $antragData = ['id' => IntVal($antrag->id), 'typ' => $antrag->antrag_typ, 'betreff' => RISTools::korrigiereTitelZeichen($antrag->betreff), 'gestellt_von' => $antrag->gestellt_von, 'gestellt_am' => $antrag->gestellt_am, 'erledigt_am' => $antrag->erledigt_am, 'bearbeitungsfrist' => $antrag->bearbeitungsfrist, 'registriert_am' => $antrag->registriert_am, 'fristverlaengerung' => $antrag->fristverlaengerung, 'referat' => $antrag->referat_id, 'referent' => $antrag->referent, 'antrags_nr' => $antrag->antrags_nr, 'status' => $antrag->status, 'stadtraetInnen' => [], 'initiatorInnen' => [], 'dokumente' => []];
         foreach ($antrag->antraegePersonen as $person) {
             if ($person->person->stadtraetIn) {
                 $arr = ['id' => $person->person->stadtraetIn->id, 'name' => $person->person->stadtraetIn->name];
             } else {
                 $arr = ['id' => null, 'name' => $person->person->name];
             }
             if ($person->typ == AntragPerson::$TYP_GESTELLT_VON) {
                 $antragData['stadtraetInnen'][] = $arr;
             }
             if ($person->typ == AntragPerson::$TYP_INITIATORIN) {
                 $antragData['initiatorInnen'][] = $arr;
             }
         }
         foreach ($antrag->dokumente as $dokument) {
             $antragData['dokumente'][] = ['id' => IntVal($dokument->id), 'pdf' => $dokument->getOriginalLink(), 'datum' => $dokument->datum_dokument, 'titel' => $dokument->name_title];
         }
         $return[] = $antragData;
     }
     echo json_encode($return);
     Yii::app()->end();
 }
 public function run($args)
 {
     if (count($args) == 0) {
         die("./yii reindex_stadtrat_antrag [Antrags-ID|alle]\n");
     }
     $parser = new StadtratsantragParser();
     if ($args[0] == "ohnereferat") {
         /** @var Antrag[] $antraege */
         $antraege = Antrag::model()->findAllByAttributes(["typ" => Antrag::$TYP_STADTRAT_ANTRAG, "referat_id" => null]);
         foreach ($antraege as $antrag) {
             $parser->parse($antrag->id);
         }
     } elseif ($args[0] == "alle") {
         $parser->parseAlle();
     } else {
         $parser->parse($args[0]);
         /** @var Antrag $a */
         $a = Antrag::model()->findByPk($args[0]);
         $a->resetPersonen();
     }
 }
 public function run($args)
 {
     if (!isset($args[0])) {
         echo "./yiic rebuild_vorgaenge [id|alle]\n";
         die;
     }
     if ($args[0] == "alle") {
         $sql = Yii::app()->db->createCommand();
         //$sql->select("id")->from("antraege")->where("id < 1245865 AND (seiten_anzahl = 0 OR seiten_anzahl = 9)")->order("id");
         $sql->select("id")->from("antraege")->where("id < 10561")->order("id DESC");
         $data = $sql->queryColumn(["id"]);
         foreach ($data as $id) {
             echo $id . "\n";
             /** @var Antrag $antrag */
             $antrag = Antrag::model()->findByPk($id);
             $antrag->rebuildVorgaenge();
         }
     } else {
         /** @var Antrag $antrag */
         $antrag = Antrag::model()->findByPk($args[0]);
         $antrag->rebuildVorgaenge();
     }
 }
 public function actionReferat($referat_url)
 {
     /** @var Referat $ref */
     $ref = Referat::model()->findByAttributes(["urlpart" => $referat_url]);
     if (!$ref) {
         die("Nicht gefunden");
     }
     $this->top_menu = "themen";
     $von = date("Y-m-d H:i:s", time() - 3600 * 24 * 30);
     $bis = date("Y-m-d H:i:s", time());
     $antraege_referat = Antrag::model()->neueste_stadtratsantragsdokumente_referat($ref->id, $von, $bis)->findAll();
     $text = Text::model()->findByAttributes(["typ" => 2, "titel" => $ref->name]);
     $my_url = Yii::app()->createUrl("/themen/referat/" . $referat_url);
     if ($this->binContentAdmin() && AntiXSS::isTokenSet("save")) {
         if (strlen($_REQUEST["text"]) == 0) {
             die("Kein Text angegeben");
         }
         $text->text = $_REQUEST["text"];
         $text->save();
         $this->msg_ok = "Gespeichert.";
     }
     $this->render("referat", ["referat" => $ref, "antraege_referat" => $antraege_referat, "text" => $text, "my_url" => $my_url]);
 }
 /**
  * @param string $veranstaltungsreihe_id
  * @param string $veranstaltung_id
  * @param int $antrag_id
  */
 public function actionNeuConfirm($veranstaltungsreihe_id = "", $veranstaltung_id, $antrag_id)
 {
     $this->layout = '//layouts/column2';
     $antrag_id = IntVal($antrag_id);
     /** @var Antrag $antrag */
     $antrag = Antrag::model()->findByAttributes(array("id" => $antrag_id, "status" => Antrag::$STATUS_UNBESTAETIGT));
     $this->veranstaltung = $this->loadVeranstaltung($veranstaltungsreihe_id, $veranstaltung_id, $antrag);
     if (is_null($antrag)) {
         Yii::app()->user->setFlash("error", "Antrag nicht gefunden oder bereits bestätigt.");
         $this->redirect($this->createUrl("veranstaltung/index"));
     }
     $this->testeWartungsmodus();
     if (AntiXSS::isTokenSet("antragbestaetigen")) {
         $freischaltung = $antrag->veranstaltung->getEinstellungen()->freischaltung_antraege;
         $antrag->status = $freischaltung ? Antrag::$STATUS_EINGEREICHT_UNGEPRUEFT : Antrag::$STATUS_EINGEREICHT_GEPRUEFT;
         $braucht_revision = !$freischaltung || $antrag->veranstaltung->getEinstellungen()->freischaltung_antraege_anzeigen;
         if ($braucht_revision && $antrag->revision_name == "") {
             $antrag->revision_name = $antrag->veranstaltung->naechsteAntragRevNr($antrag->typ);
         }
         $antrag->save();
         if ($antrag->veranstaltung->admin_email != "") {
             $mails = explode(",", $antrag->veranstaltung->admin_email);
             $from_name = veranstaltungsspezifisch_email_from_name($this->veranstaltung);
             $mail_text = "Es wurde ein neuer Antrag \"" . $antrag->name . "\" eingereicht.\n" . "Link: " . yii::app()->getBaseUrl(true) . $this->createUrl("antrag/anzeige", array("antrag_id" => $antrag->id));
             foreach ($mails as $mail) {
                 if (trim($mail) != "") {
                     AntraegeUtils::send_mail_log(EmailLog::$EMAIL_TYP_ANTRAG_BENACHRICHTIGUNG_ADMIN, trim($mail), null, "Neuer Antrag", $mail_text, $from_name);
                 }
             }
         }
         if ($antrag->status == Antrag::$STATUS_EINGEREICHT_GEPRUEFT) {
             $benachrichtigt = array();
             foreach ($antrag->veranstaltung->veranstaltungsreihe->veranstaltungsreihenAbos as $abo) {
                 if ($abo->antraege && !in_array($abo->person_id, $benachrichtigt)) {
                     $abo->person->benachrichtigenAntrag($antrag);
                     $benachrichtigt[] = $abo->person_id;
                 }
             }
         }
         $this->render("neu_submitted", array("antrag" => $antrag, "sprache" => $antrag->veranstaltung->getSprache()));
     } else {
         $unterstuetzerInnen = array();
         for ($i = 0; $i < 15; $i++) {
             $unterstuetzerInnen[] = array("typ" => Person::$TYP_PERSON, "name" => "");
         }
         $this->render('neu_confirm', array("antrag" => $antrag, "unterstuetzerInnen" => $unterstuetzerInnen, "sprache" => $antrag->veranstaltung->getSprache()));
     }
 }
Beispiel #13
0
 /**
  * @param int $veranstaltung_id
  * @param string $suchbegriff
  * @return array|Antrag[]
  */
 public static function suche($veranstaltung_id, $suchbegriff)
 {
     return Antrag::model()->findAll("(`name` LIKE '%" . addslashes($suchbegriff) . "%' OR `text` LIKE '%" . addslashes($suchbegriff) . "%' OR `text2` LIKE '%" . addslashes($suchbegriff) . "%' OR `begruendung` LIKE '%" . addslashes($suchbegriff) . "%') AND status NOT IN (" . implode(", ", IAntrag::$STATI_UNSICHTBAR) . ") AND veranstaltung_id = " . IntVal($veranstaltung_id));
 }
 public function parseUpdate()
 {
     echo "Updates: BA-Anträge\n";
     $loaded_ids = [];
     $anz = static::$MAX_OFFSET_UPDATE;
     for ($i = $anz; $i >= 0; $i -= 10) {
         $ids = $this->parseSeite($i, false);
         $loaded_ids = array_merge($loaded_ids, array_map("IntVal", $ids));
     }
     $crit = new CDbCriteria();
     $crit->condition = "typ='" . addslashes(Antrag::$TYP_BA_ANTRAG) . "' AND status != 'erledigt' AND gestellt_am > NOW() - INTERVAL 2 YEAR AND ((TO_DAYS(bearbeitungsfrist)-TO_DAYS(CURRENT_DATE()) < 14 AND TO_DAYS(bearbeitungsfrist)-TO_DAYS(CURRENT_DATE()) > -14) OR ((TO_DAYS(CURRENT_DATE()) - TO_DAYS(gestellt_am)) % 3) = 0)";
     if (count($loaded_ids) > 0) {
         $crit->addNotInCondition("id", $loaded_ids);
     }
     /** @var array|Antrag[] $antraege */
     $antraege = Antrag::model()->findAll($crit);
     foreach ($antraege as $antrag) {
         $this->parse($antrag->id);
     }
 }
 public function parseUpdate()
 {
     echo "Updates: Stadtratsvorlagen\n";
     $loaded_ids = [];
     for ($i = static::$MAX_OFFSET_UPDATE; $i >= 0; $i -= 10) {
         $ids = $this->parseSeite($i, false);
         $loaded_ids = array_merge($loaded_ids, array_map("IntVal", $ids));
     }
     $crit = new CDbCriteria();
     $crit->condition = "typ='" . addslashes(Antrag::$TYP_STADTRAT_VORLAGE) . "' AND status NOT IN ('Endgültiger Beschluss', 'abgeschlossen') AND gestellt_am > NOW() - INTERVAL 2 YEAR";
     if (count($loaded_ids) > 0) {
         $crit->addNotInCondition("id", $loaded_ids);
     }
     /** @var array|Antrag[] $antraege */
     $antraege = Antrag::model()->findAll($crit);
     foreach ($antraege as $antrag) {
         $this->parse($antrag->id);
     }
 }
Beispiel #16
0
/* @var $this AenderungsantraegeController */
/* @var $model Aenderungsantrag */
$this->breadcrumbs = array(Yii::t('app', 'Administration') => $this->createUrl('/admin/index'), $model->label(2) => array('index'), "Durchsuchen");
$this->menu = array(array('label' => $model->label(2), 'url' => array('index'), "icon" => "home"));
Yii::app()->clientScript->registerScript('search', "\n\$('.search-button').click(function(){\n\t\$('.search-form').toggle();\n\treturn false;\n});\n\$('.search-form form').submit(function(){\n\t\$.fn.yiiGridView.update('aenderungsantrag-grid', {\n\t\tdata: \$(this).serialize()\n\t});\n\treturn false;\n});\n");
?>

<h1><?php 
echo GxHtml::encode($model->label(2)) . ' ' . Yii::t('app', 'Manage');
?>
</h1>

<p>
	<?php 
Yii::t('app', 'You may optionally enter a comparison operator (&lt;, &lt;=, &gt;, &gt;=, &lt;&gt; or =) at the beginning of each of your search values to specify how the comparison should be done.');
?>
</p>

<?php 
echo GxHtml::link(Yii::t('app', 'Advanced Search'), '#', array('class' => 'search-button'));
?>
<div class="search-form">
	<?php 
$this->renderPartial('_search', array('model' => $model));
?>
</div><!-- search-form -->

<?php 
$this->widget('zii.widgets.grid.CGridView', array('id' => 'aenderungsantrag-grid', 'dataProvider' => $model->search($this->veranstaltung->id), 'filter' => $model, 'columns' => array('id', array('name' => 'antrag_id', 'value' => 'GxHtml::valueEx($data->antrag)', 'filter' => GxHtml::listDataEx(Antrag::model()->findAllAttributes("name", true), "id", "name")), 'aenderung_text', 'aenderung_begruendung', array('class' => 'CButtonColumn', 'template' => '{update}'))));
 /**
  * @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()));
     }
 }
 /**
  * @return array
  */
 public function zugeordneteAntraegeHeuristisch()
 {
     $betreff = str_replace(["\n", "\r"], [" ", " "], $this->top_betreff);
     preg_match_all("/[0-9]{2}\\-[0-9]{2} ?\\/ ?[A-Z] ?[0-9]+/su", $betreff, $matches);
     $antraege = [];
     foreach ($matches[0] as $match) {
         /** @var Antrag $antrag */
         $antrag = Antrag::model()->findByAttributes(["antrags_nr" => Antrag::cleanAntragNr($match)]);
         if ($antrag) {
             $antraege[] = $antrag;
         } else {
             $antraege[] = "Nr. " . $match;
         }
     }
     return $antraege;
 }
<span class="caret"></span></a>
                    <ul class="dropdown-menu">
                        <?php 
        foreach ($uebergruppe->getDokumente() as $dok) {
            echo "<li>" . CHtml::link($dok->getName(), $dok->getLinkZumDokument()) . "</li>\n";
        }
        ?>
                    </ul>
                </li> <?php 
    } else {
        echo "<li>" . CHtml::link($dokument->getName(), $dokument->getLinkZumDokument()) . "</li>\n";
    }
}
if ($dokument != null) {
    if ($dokument->antrag_id) {
        dokumentenliste(Antrag::model()->findByPk($dokument->antrag_id), "Antragsseite", $dokument, true);
    } else {
        if ($dokument->tagesordnungspunkt_id) {
            dokumentenliste(Tagesordnungspunkt::model()->findByPk($dokument->tagesordnungspunkt_id), "Ergebnisseite", $dokument, true);
        } else {
            if ($dokument->termin_id) {
                dokumentenliste(Termin::model()->findByPk($dokument->termin_id), "Terminseite", $dokument, true);
            } else {
                if ($dokument->vorgang_id) {
                    dokumentenliste(Vorgang::model()->findByPk($dokument->vorgang_id), "Vorgangsseite", $dokument, false);
                } else {
                    echo "<li class=\"active\">" . CHtml::encode($dokument->getName()) . "</li>";
                }
            }
        }
    }
 public function parse($antrag_id)
 {
     $antrag_id = IntVal($antrag_id);
     if (SITE_CALL_MODE != "cron") {
         echo "- Initiative {$antrag_id}\n";
     }
     if ($antrag_id == 0) {
         RISTools::send_email(Yii::app()->params['adminEmail'], "Fehler BAInitiativeParser", "Initiative-ID 0\n" . print_r(debug_backtrace(), true), null, "system");
         return;
     }
     $html_details = RISTools::load_file("http://www.ris-muenchen.de/RII/BA-RII/ba_initiativen_details.jsp?Id={$antrag_id}");
     $html_dokumente = RISTools::load_file("http://www.ris-muenchen.de/RII/BA-RII/ba_initiativen_dokumente.jsp?Id={$antrag_id}");
     //$html_ergebnisse = load_file("http://www.ris-muenchen.de/RII/RII/ris_antrag_ergebnisse.jsp?risid=" . $antrag_id);
     $daten = new Antrag();
     $daten->id = $antrag_id;
     $daten->datum_letzte_aenderung = new CDbExpression('NOW()');
     $daten->typ = Antrag::$TYP_BA_INITIATIVE;
     $dokumente = [];
     //$ergebnisse = array();
     preg_match("/<h3.*>.* +(.*)<\\/h3/siU", $html_details, $matches);
     if (count($matches) == 2) {
         $daten->antrags_nr = Antrag::cleanAntragNr($matches[1]);
     }
     $dat_details = explode("<h3 class=\"introheadline\">BA-Initiativen-Nummer", $html_details);
     $dat_details = explode("<div class=\"formularcontainer\">", $dat_details[1]);
     preg_match_all("/class=\"detail_row\">.*detail_label\">(.*)<\\/d.*detail_div\">(.*)<\\/div/siU", $dat_details[0], $matches);
     $betreff_gefunden = false;
     for ($i = 0; $i < count($matches[1]); $i++) {
         switch (trim($matches[1][$i])) {
             case "Betreff:":
                 $betreff_gefunden = true;
                 $daten->betreff = html_entity_decode($this->text_simple_clean($matches[2][$i]), ENT_COMPAT, "UTF-8");
                 break;
             case "Status:":
                 $daten->status = $this->text_simple_clean($matches[2][$i]);
                 break;
             case "Bearbeitung:":
                 $daten->bearbeitung = trim(strip_tags($matches[2][$i]));
                 break;
         }
     }
     if (!$betreff_gefunden) {
         RISTools::send_email(Yii::app()->params['adminEmail'], "Fehler BAInitiativeParser", "Kein Betreff\n" . $html_details, null, "system");
         throw new Exception("Betreff nicht gefunden");
     }
     $dat_details = explode("<div class=\"detailborder\">", $html_details);
     $dat_details = explode("<!-- seitenfuss -->", $dat_details[1]);
     preg_match_all("/<span class=\"itext\">(.*)<\\/span.*detail_div_(left|right|left_long)\">(.*)<\\/div/siU", $dat_details[0], $matches);
     for ($i = 0; $i < count($matches[1]); $i++) {
         if ($matches[3][$i] != "&nbsp;") {
             switch ($matches[1][$i]) {
                 case "Zust&auml;ndiges Referat:":
                     $daten->referat = $matches[3][$i];
                     break;
                 case "Gestellt am:":
                     $daten->gestellt_am = $this->date_de2mysql($matches[3][$i]);
                     break;
                 case "Wahlperiode:":
                     $daten->wahlperiode = $matches[3][$i];
                     break;
                 case "Bearbeitungsfrist:":
                     $daten->bearbeitungsfrist = $this->date_de2mysql($matches[3][$i]);
                     break;
                 case "Registriert am:":
                     $daten->registriert_am = $this->date_de2mysql($matches[3][$i]);
                     break;
                 case "Bezirksausschuss:":
                     $daten->ba_nr = IntVal($matches[3][$i]);
                     break;
                 case "Typ:":
                     $daten->antrag_typ = strip_tags($matches[3][$i]);
                     break;
                 case "TO aufgenommen am:":
                     $daten->initiative_to_aufgenommen = $this->date_de2mysql($matches[3][$i]);
                     break;
             }
         }
     }
     if ($daten->wahlperiode == "") {
         $daten->wahlperiode = "?";
     }
     preg_match_all("/<li><span class=\"iconcontainer\">.*title=\"([^\"]+)\"[^>]+href=\"(.*)\".*>(.*)<\\/a>/siU", $html_dokumente, $matches);
     for ($i = 0; $i < count($matches[1]); $i++) {
         $dokumente[] = ["url" => $matches[2][$i], "name" => $matches[3][$i], "name_title" => $matches[1][$i]];
     }
     /*
     $dat_ergebnisse = explode("<!-- tabellenkopf -->", $html_ergebnisse);
     $dat_ergebnisse = explode("<!-- tabellenfuss -->", $dat_ergebnisse[1]);
     preg_match_all("<tr>.*bghell  tdborder\"><a.*\">(.*)<\/a>.*
     http://www.ris-muenchen.de/RII/RII/ris_antrag_ergebnisse.jsp?risid=6127
     */
     if ($daten->ba_nr == 0) {
         echo "BA-Initiative {$antrag_id}: " . "Keine BA-Angabe";
         $GLOBALS["RIS_PARSE_ERROR_LOG"][] = "Keine BA-Angabe (Initiative): {$antrag_id}";
         return;
     }
     $aenderungen = "";
     /** @var Antrag $alter_eintrag */
     $alter_eintrag = Antrag::model()->findByPk($antrag_id);
     $changed = true;
     if ($alter_eintrag) {
         $changed = false;
         if ($alter_eintrag->betreff != $daten->betreff) {
             $aenderungen .= "Betreff: " . $alter_eintrag->betreff . " => " . $daten->betreff . "\n";
         }
         if ($alter_eintrag->bearbeitungsfrist != $daten->bearbeitungsfrist) {
             $aenderungen .= "Bearbeitungsfrist: " . $alter_eintrag->bearbeitungsfrist . " => " . $daten->bearbeitungsfrist . "\n";
         }
         if ($alter_eintrag->status != $daten->status) {
             $aenderungen .= "Status: " . $alter_eintrag->status . " => " . $daten->status . "\n";
         }
         if ($alter_eintrag->fristverlaengerung != $daten->fristverlaengerung) {
             $aenderungen .= "Fristverlängerung: " . $alter_eintrag->fristverlaengerung . " => " . $daten->fristverlaengerung . "\n";
         }
         if ($alter_eintrag->initiative_to_aufgenommen != $daten->initiative_to_aufgenommen) {
             $aenderungen .= "In TO Aufgenommen: " . $alter_eintrag->initiative_to_aufgenommen . " => " . $daten->initiative_to_aufgenommen . "\n";
         }
         if ($aenderungen != "") {
             $changed = true;
         }
         if ($alter_eintrag->wahlperiode == "") {
             $alter_eintrag->wahlperiode = "?";
         }
     }
     if ($changed) {
         if ($aenderungen == "") {
             $aenderungen = "Neu angelegt\n";
         }
         echo "BA-Initiative {$antrag_id}: Verändert: " . $aenderungen . "\n";
         if ($alter_eintrag) {
             $alter_eintrag->copyToHistory();
             $alter_eintrag->setAttributes($daten->getAttributes());
             if (!$alter_eintrag->save()) {
                 var_dump($alter_eintrag->getErrors());
                 die("Fehler");
             }
             $daten = $alter_eintrag;
         } else {
             if (!$daten->save()) {
                 var_dump($daten->getErrors());
                 die("Fehler");
             }
         }
         $daten->resetPersonen();
     }
     foreach ($dokumente as $dok) {
         $aenderungen .= Dokument::create_if_necessary(Dokument::$TYP_BA_INITIATIVE, $daten, $dok);
     }
     if ($aenderungen != "") {
         $aend = new RISAenderung();
         $aend->ris_id = $daten->id;
         $aend->ba_nr = $daten->ba_nr;
         $aend->typ = RISAenderung::$TYP_BA_INITIATIVE;
         $aend->datum = new CDbExpression("NOW()");
         $aend->aenderungen = $aenderungen;
         $aend->save();
         /** @var Antrag $antrag */
         $antrag = Antrag::model()->findByPk($antrag_id);
         $antrag->datum_letzte_aenderung = new CDbExpression('NOW()');
         // Auch bei neuen Dokumenten
         $antrag->save();
         $antrag->rebuildVorgaenge();
     }
 }
Beispiel #21
0
$app = Yii::app();
$app->getClientScript()->registerScriptFile($this->getAssetsBase() . '/js/ckeditor/ckeditor.js');
$app->getClientScript()->registerScriptFile($this->getAssetsBase() . '/js/bbcode/plugin.js');
$form = $this->beginWidget('GxActiveForm', array('id' => 'antrag-form', 'enableAjaxValidation' => true));
?>

	<?php 
echo $form->errorSummary($model);
?>

	<div>
		<?php 
echo $form->labelEx($model, 'abgeleitet_von');
?>
		<?php 
echo $form->dropDownList($model, 'abgeleitet_von', GxHtml::listDataEx(Antrag::model()->findAllAttributes(null, true)), array("empty" => "-"));
?>
		<?php 
echo $form->error($model, 'abgeleitet_von');
?>
	</div>
	<!-- row -->
	<div>
		<?php 
echo $form->labelEx($model, 'typ');
?>
		<?php 
echo $form->dropDownList($model, "typ", Antrag::$TYPEN);
?>
		<?php 
echo $form->error($model, 'typ');
$row = 1;
foreach ($kommentare as $kommentar) {
    $row++;
    $timestamp = strtotime($kommentar->datum);
    $objPHPExcel->getActiveSheet()->SetCellValue('A' . $row, PHPExcel_Shared_Date::PHPToExcel($timestamp));
    $objPHPExcel->getActiveSheet()->getStyle('A' . $row)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_DDMMYYYY);
    $verfasserIn = $kommentar->verfasserIn->name;
    if ($kommentar->verfasserIn->email != "") {
        $verfasserIn .= " (" . $kommentar->verfasserIn->email . ")";
    }
    $objPHPExcel->getActiveSheet()->SetCellValue('B' . $row, $verfasserIn);
    $absatz_zeilen = "";
    $objPHPExcel->getActiveSheet()->getStyle('C' . $row)->getAlignment()->setWrapText(true);
    if (is_a($kommentar, "AntragKommentar")) {
        /** @var AntragKommentar $kommentar */
        $antrag = Antrag::model()->findByPk($kommentar->antrag_id);
        if ($this->veranstaltung->getEinstellungen()->revision_name_verstecken) {
            $objPHPExcel->getActiveSheet()->SetCellValue('C' . $row, $kommentar->antrag->name);
        } else {
            $objPHPExcel->getActiveSheet()->SetCellValue('C' . $row, $kommentar->antrag->revision_name . " " . $kommentar->antrag->name);
        }
        /** @var Antrag $antrag */
        $absaetze = $antrag->getParagraphs();
        if (isset($absaetze[$kommentar->absatz])) {
            $html = $absaetze[$kommentar->absatz]->str_html;
            preg_match_all("/<span class='zeilennummer'>([0-9]+)<\\/span>/siu", $html, $matches);
            $zeile_von = isset($matches[1][0]) ? IntVal($matches[1][0]) : "????";
            $zeile_bis = isset($matches[1]) ? $matches[1][count($matches[1]) - 1] : "???";
            $absatz_zeilen = $kommentar->absatz + 1 . " / Z. {$zeile_von} - {$zeile_bis}";
        } else {
            $absatz_zeilen = "???";
 /**
  * @param int $date_ts
  * @return array
  */
 private function getStadtratsDokumenteByDate($date_ts)
 {
     $heute = date("Y-m-d", $date_ts) == date("Y-m-d");
     if ($heute) {
         $i = 1;
     } else {
         $i = 0;
     }
     $rus = [];
     do {
         if ($heute) {
             $datum_von = date("Y-m-d", $date_ts - 3600 * 24 * $i) . " 00:00:00";
             $datum_bis = date("Y-m-d H:i:s");
             if ($i == 1) {
                 $ru = Rathausumschau::model()->findByAttributes(["datum" => date("Y-m-d")]);
                 if ($ru) {
                     $rus[] = $ru;
                 }
             }
         } else {
             $datum_von = date("Y-m-d", $date_ts - 3600 * 24 * $i) . " 00:00:00";
             $datum_bis = date("Y-m-d", $date_ts - 3600 * 24 * $i) . " 23:59:59";
         }
         $ru = Rathausumschau::model()->findByAttributes(["datum" => date("Y-m-d", $date_ts - 3600 * 24 * $i)]);
         if ($ru) {
             $rus[] = $ru;
         }
         /** @var array|Antrag[] $antraege */
         $antraege = Antrag::model()->neueste_stadtratsantragsdokumente(null, $datum_von, $datum_bis)->findAll();
         $antraege_stadtrat = $antraege_sonstige = [];
         foreach ($antraege as $ant) {
             if ($ant->ba_nr === null) {
                 $antraege_stadtrat[] = $ant;
             } else {
                 $antraege_sonstige[] = $ant;
             }
         }
         $i++;
     } while (count($antraege) == 0 && $i < 10);
     return [$antraege, $antraege_stadtrat, $antraege_sonstige, $rus, $datum_von, $datum_bis];
 }
 public function parse($termin_id)
 {
     $termin_id = IntVal($termin_id);
     if (SITE_CALL_MODE != "cron") {
         echo "- Termin {$termin_id}\n";
     }
     $html_details = RISTools::load_file("http://www.ris-muenchen.de/RII/RII/ris_sitzung_detail.jsp?risid={$termin_id}");
     $html_dokumente = RISTools::load_file("http://www.ris-muenchen.de/RII/RII/ris_sitzung_dokumente.jsp?risid={$termin_id}");
     $html_to = RISTools::load_file("http://www.ris-muenchen.de/RII/RII/ris_sitzung_to.jsp?risid={$termin_id}");
     $html_to_geheim = RISTools::load_file("http://www.ris-muenchen.de/RII/RII/ris_sitzung_nto.jsp?risid={$termin_id}");
     $daten = new Termin();
     $daten->typ = Termin::$TYP_AUTO;
     $daten->id = $termin_id;
     $daten->datum_letzte_aenderung = new CDbExpression('NOW()');
     $daten->gremium_id = NULL;
     $daten->ba_nr = NULL;
     $daten->sitzungsstand = "";
     $daten->sitzungsort = "";
     $daten->referat = "";
     $daten->referent = "";
     $daten->vorsitz = "";
     $daten->wahlperiode = "";
     $daten->status = "";
     if (preg_match("/ris_gremien_detail\\.jsp\\?risid=([0-9]+)[\"'& ]/siU", $html_details, $matches)) {
         $daten->gremium_id = IntVal($matches[1]);
     }
     if ($daten->gremium_id) {
         $gr = Gremium::model()->findByPk($daten->gremium_id);
         if (!$gr) {
             echo "Lege Gremium an: " . $daten->gremium_id . "\n";
             Gremium::parse_stadtrat_gremien($daten->gremium_id);
         }
     }
     $geloescht = false;
     $sitzungsort_gefunden = false;
     if (preg_match("/Sitzungsort:.*detail_div\">([^<]*)[<]/siU", $html_details, $matches)) {
         $sitzungsort_gefunden = true;
         $daten->sitzungsort = trim(str_replace("&nbsp;", "", $matches[1]));
     }
     if (preg_match("/Sitzungsstand:.*detail_div\">([^<]*)[<]/siU", $html_details, $matches)) {
         $sitzungsort_gefunden = true;
         $daten->sitzungsstand = trim(str_replace("&nbsp;", "", $matches[1]));
     }
     if (preg_match("/chste Sitzung:.*ris_sitzung_detail\\.jsp\\?risid=([0-9]+)[\"'& ]/siU", $html_details, $matches)) {
         $daten->termin_next_id = trim(str_replace("&nbsp;", "", $matches[1]));
     }
     if (preg_match("/Letzte Sitzung:.*ris_sitzung_detail\\.jsp\\?risid=([0-9]+)[\"'& ]/siU", $html_details, $matches)) {
         $daten->termin_prev_id = trim(str_replace("&nbsp;", "", $matches[1]));
     }
     if (preg_match("/Wahlperiode:.*detail_div_left_long\">([^>]*)<\\//siU", $html_details, $matches)) {
         $daten->wahlperiode = trim(str_replace("&nbsp;", "", $matches[1]));
     }
     if (preg_match("/Status:.*detail_div_left_long\">([^>]*)<\\//siU", $html_details, $matches)) {
         $daten->status = trim(str_replace("&nbsp;", "", $matches[1]));
     }
     if (preg_match("/diges Referat:.*detail_div_left_long\">(<a[^>]+>)?([^>]*)<\\//siU", $html_details, $matches)) {
         $daten->referat = trim(str_replace("&nbsp;", "", $matches[2]));
     }
     if (preg_match("/Referent\\/in:.*detail_div_left_long\">([^>]*)<\\//siU", $html_details, $matches)) {
         $daten->referent = trim(str_replace("&nbsp;", "", $matches[1]));
     }
     if (preg_match("/Vorsitz:.*detail_div_left_long\">([^>]*)<\\//siU", $html_details, $matches)) {
         $daten->vorsitz = trim(str_replace("&nbsp;", "", $matches[1]));
     }
     if (preg_match("/Termin:.*detail_div\">([^&<]+)[&<]/siU", $html_details, $matches)) {
         $termin = $matches[1];
         $MONATE = ["januar" => "01", "februar" => "02", "märz" => "03", "april" => "04", "mai" => "05", "juni" => "06", "juli" => "07", "august" => "08", "september" => "09", "oktober" => "10", "november" => "11", "dezember" => "12"];
         $x = explode(" ", trim($termin));
         if (isset($x[1])) {
             $tag = IntVal($x[1]);
             if ($tag < 10) {
                 $tag = "0" . IntVal($tag);
             }
             $jahr = IntVal($x[2]);
             $y = explode(".", $x[1]);
             $monat = $MONATE[mb_strtolower($y[1])];
             if ($monat < 10) {
                 $monat = "0" . IntVal($monat);
             }
             $zeit = $x[3];
             $daten->termin = "{$jahr}-{$monat}-{$tag} {$zeit}:00";
         } else {
             if ($sitzungsort_gefunden && $daten->gremium === null && $daten->sitzungsort == "" && $daten->status == "") {
                 $geloescht = true;
             } else {
                 RISTools::send_email(Yii::app()->params['adminEmail'], "Stadtratstermin: Unbekanntes Datum", "ID: {$termin_id}\n" . print_r($matches, true), null, "system");
                 die;
             }
         }
     }
     $dokumente = [];
     preg_match_all("/<li><span class=\"iconcontainer\">.*href=\"(.*)\".*>(.*)<\\/a>/siU", $html_dokumente, $matches);
     for ($i = 0; $i < count($matches[1]); $i++) {
         $dokumente[] = ["url" => $matches[1][$i], "name" => $matches[2][$i], "name_title" => ""];
     }
     $aenderungen = "";
     /** @var Termin $alter_eintrag */
     $alter_eintrag = Termin::model()->findByPk($termin_id);
     $changed = true;
     if ($alter_eintrag) {
         $changed = false;
         if ($geloescht) {
             $aenderungen = "gelöscht";
             $changed = true;
         } else {
             if ($alter_eintrag->termin != $daten->termin) {
                 $aenderungen .= "Termin: " . $alter_eintrag->termin . " => " . $daten->termin . "\n";
             }
             if ($alter_eintrag->gremium_id != $daten->gremium_id) {
                 $aenderungen .= "Gremium-ID: " . $alter_eintrag->gremium_id . " => " . $daten->gremium_id . "\n";
             }
             if ($alter_eintrag->sitzungsort != $daten->sitzungsort) {
                 $aenderungen .= "Sitzungsort: " . $alter_eintrag->sitzungsort . " => " . $daten->sitzungsort . "\n";
             }
             if ($alter_eintrag->termin_next_id != $daten->termin_next_id) {
                 $aenderungen .= "Nächster Termin: " . $alter_eintrag->termin_next_id . " => " . $daten->termin_next_id . "\n";
             }
             if ($alter_eintrag->termin_prev_id != $daten->termin_prev_id) {
                 $aenderungen .= "Voriger Termin: " . $alter_eintrag->termin_prev_id . " => " . $daten->termin_prev_id . "\n";
             }
             if ($alter_eintrag->wahlperiode != $daten->wahlperiode) {
                 $aenderungen .= "Wahlperiode: " . $alter_eintrag->wahlperiode . " => " . $daten->wahlperiode . "\n";
             }
             if ($alter_eintrag->referat != $daten->referat) {
                 $aenderungen .= "Referat: " . $alter_eintrag->referat . " => " . $daten->referat . "\n";
             }
             if ($alter_eintrag->referent != $daten->referent) {
                 $aenderungen .= "Referent: " . $alter_eintrag->referent . " => " . $daten->referent . "\n";
             }
             if ($alter_eintrag->vorsitz != $daten->vorsitz) {
                 $aenderungen .= "Vorsitz: " . $alter_eintrag->vorsitz . " => " . $daten->vorsitz . "\n";
             }
             if ($alter_eintrag->sitzungsstand != $daten->sitzungsstand) {
                 $aenderungen .= "Sitzungsstand: " . $alter_eintrag->sitzungsstand . " => " . $daten->sitzungsstand . "\n";
             }
             if ($aenderungen != "") {
                 $changed = true;
             }
         }
     }
     if (!$alter_eintrag) {
         $daten->save();
     }
     $match_top = "tdborder\">(?<top>.*)<\\/t[hd]>";
     $match_betreff = "tdborder\">(?<betreff>.*)<\\/t[hd]>";
     $match_vorlage = "<t(?<ueberschrift>[hd])[^>]*>(?<vorlage_holder>.*)<\\/t[hd]>";
     $match_referentIn = "<t[hd][^>]*>(?<referentIn>.*)<\\/t[hd]>";
     $match_entscheidung = "<t[hd][^>]*>(?<entscheidung>.*)<\\/t[hd]>";
     preg_match_all("/<tr class=\"ergebnistab_tr\">.*{$match_top}.*{$match_betreff}.*{$match_vorlage}.*{$match_referentIn}.*{$match_entscheidung}.*<\\/tr>/siU", $html_to, $matches);
     foreach ($matches["betreff"] as $i => $val) {
         $matches["betreff"][$i] = static::text_clean_spaces($matches["betreff"][$i]);
     }
     $matches["betreff"] = RISTools::makeArrValuesUnique($matches["betreff"]);
     /** @var Tagesordnungspunkt[] $bisherige_tops */
     $bisherige_tops = $alter_eintrag ? $alter_eintrag->tagesordnungspunkte : [];
     $aenderungen_tops = "";
     //$verwendete_top_betreffs = array();
     $verwendete_top_ids = [];
     $abschnitt_nr = 0;
     for ($i = 0; $i < count($matches[0]); $i++) {
         $top = trim(str_replace(["&nbsp;", "<strong>", "</strong>"], [" ", "", ""], $matches["top"][$i]));
         $betreff = $matches["betreff"][$i];
         if ($matches["ueberschrift"][$i] == "h") {
             $abschnitt_nr = $abschnitt_nr + 1;
             $top_ueberschrift = true;
             $top_nr = $abschnitt_nr;
             $betreff = str_replace(["<strong>", "</strong>"], ["", ""], $betreff);
         } else {
             if ($abschnitt_nr == 0) {
                 $abschnitt_nr = 1;
             }
             $top_ueberschrift = false;
             $top_nr = $abschnitt_nr . "." . $top;
         }
         $vorlage_holder = trim(str_replace("&nbsp;", " ", $matches["vorlage_holder"][$i]));
         preg_match_all("/risid=(?<risid>[0-9]+)>/siU", $vorlage_holder, $matches2);
         $vorlage_id = isset($matches2["risid"][0]) ? $matches2["risid"][0] : null;
         if ($vorlage_id) {
             $vorlage = Antrag::model()->findByPk($vorlage_id);
             if (!$vorlage) {
                 echo "Creating: {$vorlage_id}\n";
                 $p = new StadtratsvorlageParser();
                 $p->parse($vorlage_id);
             }
         }
         $entscheidung_original = trim(str_replace("&nbsp;", " ", $matches["entscheidung"][$i]));
         $entscheidung = trim(preg_replace("/<a[^>]*>[^<]*<\\/a>/siU", "", $entscheidung_original));
         $top = new Tagesordnungspunkt();
         $top->datum_letzte_aenderung = new CDbExpression("NOW()");
         $top->sitzungstermin_id = $termin_id;
         $top->sitzungstermin_datum = substr($daten->termin, 0, 10);
         $top->top_nr = $top_nr;
         $top->antrag_id = $vorlage_id;
         $top->top_ueberschrift = $top_ueberschrift ? 1 : 0;
         $top->entscheidung = $entscheidung;
         $top->top_betreff = $betreff;
         $top->gremium_id = $daten->gremium_id;
         $top->gremium_name = $daten->gremium->name;
         $top->beschluss_text = "";
         if (!is_null($vorlage_id)) {
             $html_vorlage_ergebnis = RISTools::load_file("http://www.ris-muenchen.de/RII/RII/ris_vorlagen_ergebnisse.jsp?risid={$vorlage_id}");
             preg_match_all("/ris_sitzung_to.jsp\\?risid=" . $termin_id . ".*<\\/td>.*<\\/td>.*tdborder\">(?<beschluss>.*)<\\/td>/siU", $html_vorlage_ergebnis, $matches3);
             if (isset($matches3["beschluss"]) && count($matches3["beschluss"]) > 0) {
                 $beschluss = static::text_clean_spaces($matches3["beschluss"][0]);
             } else {
                 RISTools::send_email(Yii::app()->params["adminEmail"], "StadtratTermin Kein Beschluss", "Termin: {$termin_id}\n" . "http://www.ris-muenchen.de/RII/RII/ris_vorlagen_ergebnisse.jsp?risid={$vorlage_id}\n" . $html_vorlage_ergebnis);
                 $beschluss = "";
             }
             $top->beschluss_text = $beschluss;
         }
         /** @var Tagesordnungspunkt $alter_top */
         if (is_null($vorlage_id)) {
             $alter_top = Tagesordnungspunkt::model()->findByAttributes(["sitzungstermin_id" => $termin_id, "top_betreff" => $betreff]);
         } else {
             $alter_top = Tagesordnungspunkt::model()->findByAttributes(["sitzungstermin_id" => $termin_id, "antrag_id" => $vorlage_id]);
         }
         $top_aenderungen = "";
         if ($alter_top) {
             if ($alter_top->sitzungstermin_id != $top->sitzungstermin_id) {
                 $top_aenderungen .= "Sitzung geändert: " . $alter_top->sitzungstermin_id . " => " . $top->sitzungstermin_id . "\n";
             }
             if ($alter_top->sitzungstermin_datum != $top->sitzungstermin_datum) {
                 $top_aenderungen .= "Sitzungstermin geändert: " . $alter_top->sitzungstermin_datum . " => " . $top->sitzungstermin_datum . "\n";
             }
             if ($alter_top->top_nr != $top->top_nr) {
                 $top_aenderungen .= "TOP geändert: " . $alter_top->top_nr . " => " . $top->top_nr . "\n";
             }
             if ($alter_top->top_ueberschrift != $top->top_ueberschrift) {
                 $top_aenderungen .= "Bereich geändert: " . $alter_top->top_ueberschrift . " => " . $top->top_ueberschrift . "\n";
             }
             if ($alter_top->top_betreff != $top->top_betreff) {
                 $top_aenderungen .= "Betreff geändert: " . $alter_top->top_betreff . " => " . $top->top_betreff . "\n";
             }
             if ($alter_top->antrag_id != $top->antrag_id) {
                 $top_aenderungen .= "Antrag geändert: " . $alter_top->antrag_id . " => " . $top->antrag_id . "\n";
             }
             if ($alter_top->gremium_id != $top->gremium_id) {
                 $top_aenderungen .= "Gremium geändert: " . $alter_top->gremium_id . " => " . $top->gremium_id . "\n";
             }
             if ($alter_top->gremium_name != $top->gremium_name) {
                 $top_aenderungen .= "Gremium geändert: " . $alter_top->gremium_name . " => " . $top->gremium_name . "\n";
             }
             if ($alter_top->entscheidung != $top->entscheidung) {
                 $top_aenderungen .= "Entscheidung: " . $alter_top->entscheidung . " => " . $top->entscheidung . "\n";
             }
             if ($alter_top->beschluss_text != $top->beschluss_text) {
                 $top_aenderungen .= "Beschluss: " . $alter_top->beschluss_text . " => " . $top->beschluss_text . "\n";
             }
             if ($top_aenderungen != "") {
                 $aend = new RISAenderung();
                 $aend->ris_id = $alter_top->id;
                 $aend->ba_nr = NULL;
                 $aend->typ = RISAenderung::$TYP_STADTRAT_ERGEBNIS;
                 $aend->datum = new CDbExpression("NOW()");
                 $aend->aenderungen = $top_aenderungen;
                 $aend->save();
                 $aenderungen_tops .= "TOP geändert: " . $top->top_betreff . "\n   " . str_replace("\n", "\n   ", $top_aenderungen) . "\n";
                 $alter_top->copyToHistory();
                 $top->id = $alter_top->id;
                 $alter_top->setAttributes($top->getAttributes(), false);
                 if (!$alter_top->save()) {
                     echo "StadtratAntrag 1\n";
                     var_dump($alter_eintrag->getErrors());
                     die("Fehler");
                 }
             }
             $top = $alter_top;
         } else {
             $aenderungen .= "Neuer TOP: " . $top_nr . " - " . $betreff . "\n";
             $top->save();
         }
         //$verwendete_top_betreffs[] = $top->top_nr . "-" . $top->top_betreff;
         $verwendete_top_ids[] = $top->id;
         preg_match_all("/<a href=(?<url>[^ ]+) title=\"(?<title>[^\"]*)\"/siU", $entscheidung_original, $matches2);
         if (isset($matches2["url"]) && count($matches2["url"]) > 0) {
             $aenderungen .= Dokument::create_if_necessary(Dokument::$TYP_STADTRAT_BESCHLUSS, $top, ["url" => $matches2["url"][0], "name" => $matches2["title"][0], "name_title" => ""]);
             /** @var Dokument $dok */
             $dok = Dokument::model()->findByAttributes(["tagesordnungspunkt_id" => $top->id, "url" => $matches2["url"][0], "name" => $matches2["title"][0]]);
             if ($dok && $dok->tagesordnungspunkt_id != $top->id) {
                 echo "Korrgiere ID\n";
                 $dok->tagesordnungspunkt_id = $top->id;
                 $dok->save(false);
             }
         }
     }
     preg_match_all("/<tr class=\"ergebnistab_tr\">.*<strong>(?<top>[0-9]+)\\..*tdborder\">(?<betreff>.*)<\\/td>.*<span[^>]+>(?<vorlage_id>.*)<\\/span>.*valign=\"top\">(?<referent>.*)<\\/td>/siU", $html_to_geheim, $matches);
     foreach ($matches["betreff"] as $i => $val) {
         $matches["betreff"][$i] = static::text_clean_spaces($matches["betreff"][$i]);
     }
     $matches["betreff"] = RISTools::makeArrValuesUnique($matches["betreff"]);
     for ($i = 0; $i < count($matches[0]); $i++) {
         $betreff = $matches["betreff"][$i];
         $referent = static::text_clean_spaces($matches["referent"][$i]);
         /** @var Tagesordnungspunkt $top */
         $krits = ["sitzungstermin_id" => $termin_id, "status" => "geheim", "top_betreff" => $betreff];
         $top = Tagesordnungspunkt::model()->findByAttributes($krits);
         if (is_null($top)) {
             $top = new Tagesordnungspunkt();
             $aenderungen .= "Neuer geheimer Tagesordnungspunkt: " . $betreff . "\n";
         }
         $top->sitzungstermin_id = $termin_id;
         $top->sitzungstermin_datum = $daten->termin;
         $top->datum_letzte_aenderung = new CDbExpression("NOW()");
         $top->antrag_id = null;
         $top->status = "geheim";
         $top->beschluss_text = $matches["vorlage_id"][$i];
         $top->top_nr = $matches["top"][$i];
         $top->top_betreff = $betreff;
         $top->entscheidung = $referent;
         $top->gremium_id = $daten->gremium_id;
         $top->gremium_name = $daten->gremium->name;
         $top->save();
         //$verwendete_top_betreffs[] = "geheim-" . $top->top_nr . "-" . $top->top_betreff;
         $verwendete_top_ids[] = $top->id;
     }
     foreach ($bisherige_tops as $top) {
         //$top_key = ($top->status == "geheim" ? "geheim-" : "") . $top->top_nr . "-" . $top->top_betreff;
         if (!in_array($top->id, $verwendete_top_ids)) {
             $aenderungen_tops .= "TOP entfernt: " . $top->top_nr . ":" . $top->top_betreff . "\n";
             try {
                 $top->delete();
             } catch (CDbException $e) {
                 $str = "Vermutlich verwaiste Dokumente (war zuvor: \"" . $top->getName() . "\" in " . $daten->getLink() . ":\n";
                 /** @var Dokument[] $doks */
                 $doks = Dokument::model()->findAllByAttributes(["tagesordnungspunkt_id" => $top->id]);
                 foreach ($doks as $dok) {
                     $dok->tagesordnungspunkt_id = null;
                     $dok->save(false);
                     $str .= $dok->getOriginalLink() . "\n";
                 }
                 RISTools::send_email(Yii::app()->params["adminEmail"], "StadtratTermin Verwaist", $str, null, "system");
                 $top->delete();
             }
         }
     }
     if ($aenderungen_tops != "") {
         $changed = true;
     }
     if ($changed) {
         if (!$alter_eintrag) {
             $aenderungen = "Neu angelegt\n";
         }
         $aenderungen .= $aenderungen_tops;
         echo "StR-Termin {$termin_id}: Verändert: " . $aenderungen . "\n";
         if ($alter_eintrag) {
             $alter_eintrag->copyToHistory();
             $alter_eintrag->setAttributes($daten->getAttributes());
             if (!$alter_eintrag->save(false)) {
                 RISTools::send_email(Yii::app()->params['adminEmail'], "Stadtratstermin: Nicht gespeichert", "StadtratTerminParser 1\n" . print_r($alter_eintrag->getErrors(), true), null, "system");
                 die("Fehler");
             }
             $daten = $alter_eintrag;
             if ($geloescht) {
                 echo "Lösche";
                 if (!$daten->delete()) {
                     RISTools::send_email(Yii::app()->params['adminEmail'], "Stadtratstermin: Nicht gelöscht", "StadtratTerminParser 2\n" . print_r($daten->getErrors(), true), null, "system");
                     die("Fehler");
                 }
                 $aend = new RISAenderung();
                 $aend->ris_id = $daten->id;
                 $aend->ba_nr = NULL;
                 $aend->typ = RISAenderung::$TYP_STADTRAT_TERMIN;
                 $aend->datum = new CDbExpression("NOW()");
                 $aend->aenderungen = $aenderungen;
                 $aend->save();
                 return;
             }
         } else {
             if (!$daten->save()) {
                 RISTools::send_email(Yii::app()->params['adminEmail'], "Stadtratstermin: Nicht gespeichert", "StadtratTerminParser 3\n" . print_r($daten->getErrors(), true), null, "system");
                 die("Fehler");
             }
         }
     }
     foreach ($dokumente as $dok) {
         /** @var array $dok */
         $aenderungen .= Dokument::create_if_necessary(Dokument::$TYP_STADTRAT_TERMIN, $daten, $dok);
     }
     if ($aenderungen != "") {
         $aend = new RISAenderung();
         $aend->ris_id = $daten->id;
         $aend->ba_nr = NULL;
         $aend->typ = RISAenderung::$TYP_STADTRAT_TERMIN;
         $aend->datum = new CDbExpression("NOW()");
         $aend->aenderungen = $aenderungen;
         $aend->save();
         /** @var Termin $termin */
         $termin = Termin::model()->findByPk($termin_id);
         $termin->datum_letzte_aenderung = new CDbExpression('NOW()');
         // Auch bei neuen Dokumenten
         $termin->save();
     }
 }
 public function parse($termin_id)
 {
     $termin_id = IntVal($termin_id);
     if (SITE_CALL_MODE != "cron") {
         echo "- Termin {$termin_id}\n";
     }
     $html_details = RISTools::load_file("http://www.ris-muenchen.de/RII/BA-RII/ba_sitzungen_details.jsp?Id={$termin_id}");
     $html_dokumente = RISTools::load_file("http://www.ris-muenchen.de/RII/BA-RII/ba_sitzungen_dokumente.jsp?Id={$termin_id}");
     $html_to = RISTools::load_file("http://www.ris-muenchen.de/RII/BA-RII/ba_sitzungen_tagesordnung.jsp?Id={$termin_id}");
     $daten = new Termin();
     $daten->typ = Termin::$TYP_AUTO;
     $daten->id = $termin_id;
     $daten->datum_letzte_aenderung = new CDbExpression('NOW()');
     $daten->gremium_id = NULL;
     $daten->referat = "";
     $daten->referent = "";
     $daten->vorsitz = "";
     $daten->sitzungsstand = "";
     $dokumente = [];
     if (preg_match("/ba_gremien_details\\.jsp\\?Id=([0-9]+)[\"'& ]/siU", $html_details, $matches)) {
         $daten->gremium_id = IntVal($matches[1]);
     }
     if ($daten->gremium_id) {
         /** @var Gremium $gr */
         $gr = Gremium::model()->findByPk($daten->gremium_id);
         if (!$gr) {
             echo "Lege Gremium an: " . $daten->gremium_id . "\n";
             $parser = new BAGremienParser();
             $parser->parse($daten->gremium_id);
         }
         $daten->ba_nr = $gr->ba_nr;
     }
     if (preg_match("/Termin:.*detail_div\">([^&<]+)[&<]/siU", $html_details, $matches)) {
         $termin = $matches[1];
         $MONATE = ["januar" => "01", "februar" => "02", "märz" => "03", "april" => "04", "mai" => "05", "juni" => "06", "juli" => "07", "august" => "08", "september" => "09", "oktober" => "10", "november" => "11", "dezember" => "12"];
         $x = explode(" ", trim($termin));
         $tag = IntVal($x[1]);
         if ($tag < 10) {
             $tag = "0" . IntVal($tag);
         }
         $jahr = IntVal($x[2]);
         $y = explode(".", $x[1]);
         $monat = $MONATE[mb_strtolower($y[1])];
         if ($monat < 10) {
             $monat = "0" . IntVal($monat);
         }
         $zeit = $x[3];
         $daten->termin = "{$jahr}-{$monat}-{$tag} {$zeit}:00";
     }
     if (preg_match("/Sitzungsort:.*detail_div\">([^<]*)[<]/siU", $html_details, $matches)) {
         $daten->sitzungsort = html_entity_decode($matches[1], ENT_COMPAT, "UTF-8");
     }
     if (preg_match("/Bezirksausschuss:.*link_bold_noimg\">([0-9]+)[\"'& ]/siU", $html_details, $matches)) {
         $daten->ba_nr = IntVal($matches[1]);
     }
     if (preg_match("/chste Sitzung:.*ba_sitzungen_details\\.jsp\\?Id=([0-9]+)[\"'& ]/siU", $html_details, $matches)) {
         $daten->termin_next_id = $matches[1];
     }
     if (preg_match("/Letzte Sitzung:.*ba_sitzungen_details\\.jsp\\?Id=([0-9]+)[\"'& ]/siU", $html_details, $matches)) {
         $daten->termin_prev_id = $matches[1];
     }
     if (preg_match("/Wahlperiode:.*detail_div_left_long\">([^>]*)<\\//siU", $html_details, $matches)) {
         $daten->wahlperiode = $matches[1];
     }
     if (preg_match("/Status:.*detail_div_left_long\">([^>]*)<\\//siU", $html_details, $matches)) {
         $daten->status = $matches[1];
     }
     if (trim($daten->wahlperiode) == "") {
         $daten->wahlperiode = "?";
     }
     preg_match_all("/<li><span class=\"iconcontainer\">.*title=\"([^\"]+)\"[^>]*href=\"(.*)\".*>(.*)<\\/a>/siU", $html_dokumente, $matches);
     for ($i = 0; $i < count($matches[1]); $i++) {
         $dokumente[] = ["url" => $matches[2][$i], "name" => $matches[3][$i], "name_title" => $matches[1][$i]];
     }
     $aenderungen = "";
     /** @var Termin $alter_eintrag */
     $alter_eintrag = Termin::model()->findByPk($termin_id);
     $changed = true;
     if ($alter_eintrag) {
         $changed = false;
         if ($alter_eintrag->termin != $daten->termin) {
             $aenderungen .= "Termin: " . $alter_eintrag->termin . " => " . $daten->termin . "\n";
         }
         if ($alter_eintrag->gremium_id != $daten->gremium_id) {
             $aenderungen .= "Gremium-ID: " . $alter_eintrag->gremium_id . " => " . $daten->gremium_id . "\n";
         }
         if ($alter_eintrag->sitzungsort != $daten->sitzungsort) {
             $aenderungen .= "Sitzungsort: " . $alter_eintrag->sitzungsort . " => " . $daten->sitzungsort . "\n";
         }
         if ($alter_eintrag->ba_nr != $daten->ba_nr) {
             $aenderungen .= "BA-Nr.: " . $alter_eintrag->ba_nr . " => " . $daten->ba_nr . "\n";
         }
         if ($alter_eintrag->termin_next_id != $daten->termin_next_id) {
             $aenderungen .= "Nächster Termin: " . $alter_eintrag->termin_next_id . " => " . $daten->termin_next_id . "\n";
         }
         if ($alter_eintrag->termin_prev_id != $daten->termin_prev_id) {
             $aenderungen .= "Voriger Termin: " . $alter_eintrag->termin_prev_id . " => " . $daten->termin_prev_id . "\n";
         }
         if ($alter_eintrag->wahlperiode != $daten->wahlperiode) {
             $aenderungen .= "Wahlperiode: " . $alter_eintrag->wahlperiode . " => " . $daten->wahlperiode . "\n";
         }
         if ($alter_eintrag->status != $daten->status) {
             $aenderungen .= "Status: " . $alter_eintrag->status . " => " . $daten->status . "\n";
         }
         if ($aenderungen != "") {
             $changed = true;
         }
     }
     if (!$alter_eintrag) {
         $daten->save();
     }
     $match_top = "<strong>(?<top>(([0-9\\.]+)|(&nbsp;)))<\\/strong>";
     $match_betreff = "<t[hd][^>]*>(?<betreff>.*)<\\/t[hd]>";
     $match_vorlage = "<t[hd][^>]*>(?<vorlage_holder>.*)<\\/t[hd]>";
     $match_entscheidung = "<td[^>]*>(?<entscheidung>.*)<\\/td>";
     preg_match_all("/<tr class=\"ergebnistab_tr\">.*{$match_top}.*{$match_betreff}.*{$match_vorlage}.*{$match_entscheidung}.*<\\/tr>/siU", $html_to, $matches);
     foreach ($matches["betreff"] as $i => $val) {
         $matches["betreff"][$i] = static::text_clean_spaces($matches["betreff"][$i]);
     }
     $matches["betreff"] = RISTools::makeArrValuesUnique($matches["betreff"]);
     /** @var Tagesordnungspunkt[] $bisherige_tops */
     $bisherige_tops = $alter_eintrag ? $alter_eintrag->tagesordnungspunkte : [];
     $aenderungen_tops = "";
     $abschnitt_nr = "";
     $verwendete_top_betreffs = [];
     for ($i = 0; $i < count($matches["top"]); $i++) {
         $betreff = $matches["betreff"][$i];
         if (mb_stripos($betreff, "<strong>") !== false) {
             $abschnitt_nr = trim($matches["top"][$i], " \t\n\r\v.");
             $betreff = str_replace(["<strong>", "</strong>"], ["", ""], $betreff);
             if ($abschnitt_nr == "&nbsp;") {
                 if (preg_match("/TOP (?<top>[0-9.]+)+: (?<betreff>.*)/siu", $betreff, $matches2)) {
                     $abschnitt_nr = $matches2["top"];
                     $betreff = $matches2["betreff"];
                 } else {
                     $abschnitt_nr = "0";
                 }
             }
             $top_ueberschrift = true;
             $top_nr = $abschnitt_nr;
         } else {
             $top_ueberschrift = false;
             $top_nr = $abschnitt_nr . "." . $matches["top"][$i];
         }
         $vorlage_holder = trim(str_replace("&nbsp;", " ", $matches["vorlage_holder"][$i]));
         preg_match_all("/risid%3D(?<risid>[0-9]+)%27/siU", $vorlage_holder, $matches2);
         $vorlage_id = isset($matches2["risid"][0]) ? $matches2["risid"][0] : null;
         preg_match_all("/ba_antraege_details\\.jsp\\?Id=(?<risid>[0-9]+)\"/siU", $vorlage_holder, $matches2);
         $baantrag_id = isset($matches2["risid"][0]) ? $matches2["risid"][0] : null;
         if ($vorlage_id) {
             $vorlage = Antrag::model()->findByPk($vorlage_id);
             if (!$vorlage) {
                 echo "Creating: {$vorlage_id}\n";
                 $p = new StadtratsvorlageParser();
                 $p->parse($vorlage_id);
             }
         }
         if ($baantrag_id) {
             $baantrag = Antrag::model()->findByPk($baantrag_id);
             if (!$baantrag) {
                 echo "Creating: {$baantrag_id}\n";
                 $p = new BAAntragParser();
                 $p->parse($baantrag_id);
             }
         }
         $tagesordnungspunkt = new Tagesordnungspunkt();
         if ($vorlage_id) {
             $tagesordnungspunkt->antrag_id = $vorlage_id;
         } elseif ($baantrag_id) {
             $tagesordnungspunkt->antrag_id = $baantrag_id;
         } else {
             $tagesordnungspunkt->antrag_id = null;
         }
         $entscheidung_original = trim(str_replace("&nbsp;", " ", $matches["entscheidung"][$i]));
         $entscheidung = static::text_clean_spaces(preg_replace("/<a[^>]*>[^<]*<\\/a>/siU", "", $entscheidung_original));
         $tagesordnungspunkt->datum_letzte_aenderung = new CDbExpression("NOW()");
         $tagesordnungspunkt->sitzungstermin_id = $termin_id;
         $tagesordnungspunkt->sitzungstermin_datum = substr($daten->termin, 0, 10);
         $tagesordnungspunkt->top_nr = $top_nr;
         $tagesordnungspunkt->top_ueberschrift = $top_ueberschrift ? 1 : 0;
         $tagesordnungspunkt->entscheidung = $entscheidung;
         $tagesordnungspunkt->top_betreff = $betreff;
         $tagesordnungspunkt->gremium_id = $daten->gremium_id;
         $tagesordnungspunkt->gremium_name = $daten->gremium->name;
         $tagesordnungspunkt->beschluss_text = "";
         /** @var Tagesordnungspunkt[] $alte_tops */
         if ($vorlage_id) {
             $alte_tops = Tagesordnungspunkt::model()->findAllByAttributes(["sitzungstermin_id" => $termin_id, "antrag_id" => $vorlage_id]);
         } elseif ($baantrag_id) {
             $alte_tops = Tagesordnungspunkt::model()->findAllByAttributes(["sitzungstermin_id" => $termin_id, "antrag_id" => $baantrag_id]);
         } else {
             $alte_tops = Tagesordnungspunkt::model()->findAllByAttributes(["sitzungstermin_id" => $termin_id, "top_betreff" => $betreff]);
         }
         $alter_top = $this->loescheDoppelteTOPs($alte_tops);
         $tagesordnungspunkt_aenderungen = "";
         if ($alter_top) {
             if ($alter_top->sitzungstermin_id != $tagesordnungspunkt->sitzungstermin_id) {
                 $tagesordnungspunkt_aenderungen .= "Sitzung geändert: " . $alter_top->sitzungstermin_id . " => " . $tagesordnungspunkt->sitzungstermin_id . "\n";
             }
             if ($alter_top->sitzungstermin_datum != $tagesordnungspunkt->sitzungstermin_datum) {
                 $tagesordnungspunkt_aenderungen .= "Sitzungstermin geändert: " . $alter_top->sitzungstermin_datum . " => " . $tagesordnungspunkt->sitzungstermin_datum . "\n";
             }
             if ($alter_top->top_nr != $tagesordnungspunkt->top_nr) {
                 $tagesordnungspunkt_aenderungen .= "Position geändert: " . $alter_top->top_nr . " => " . $tagesordnungspunkt->top_nr . "\n";
             }
             if ($alter_top->top_ueberschrift != $tagesordnungspunkt->top_ueberschrift) {
                 $tagesordnungspunkt_aenderungen .= "Bereich geändert: " . $alter_top->top_ueberschrift . " => " . $tagesordnungspunkt->top_ueberschrift . "\n";
             }
             if ($alter_top->top_betreff != $tagesordnungspunkt->top_betreff) {
                 $tagesordnungspunkt_aenderungen .= "Betreff geändert: " . $alter_top->top_betreff . " => " . $tagesordnungspunkt->top_betreff . "\n";
             }
             if ($alter_top->antrag_id != $tagesordnungspunkt->antrag_id) {
                 $tagesordnungspunkt_aenderungen .= "Antrag geändert: " . $alter_top->antrag_id . " => " . $tagesordnungspunkt->antrag_id . "\n";
             }
             if ($alter_top->gremium_id != $tagesordnungspunkt->gremium_id) {
                 $tagesordnungspunkt_aenderungen .= "Gremium geändert: " . $alter_top->gremium_id . " => " . $tagesordnungspunkt->gremium_id . "\n";
             }
             if ($alter_top->gremium_name != $tagesordnungspunkt->gremium_name) {
                 $tagesordnungspunkt_aenderungen .= "Gremium geändert: " . $alter_top->gremium_name . " => " . $tagesordnungspunkt->gremium_name . "\n";
             }
             if ($alter_top->entscheidung != $tagesordnungspunkt->entscheidung) {
                 $tagesordnungspunkt_aenderungen .= "Entscheidung: " . $alter_top->entscheidung . " => " . $tagesordnungspunkt->entscheidung . "\n";
             }
             if ($alter_top->beschluss_text != $tagesordnungspunkt->beschluss_text) {
                 $tagesordnungspunkt_aenderungen .= "Beschluss: " . $alter_top->beschluss_text . " => " . $tagesordnungspunkt->beschluss_text . "\n";
             }
             if ($tagesordnungspunkt_aenderungen != "") {
                 $aend = new RISAenderung();
                 $aend->ris_id = $alter_top->id;
                 $aend->ba_nr = NULL;
                 $aend->typ = RISAenderung::$TYP_BA_ERGEBNIS;
                 $aend->datum = new CDbExpression("NOW()");
                 $aend->aenderungen = $tagesordnungspunkt_aenderungen;
                 if (!$aend->save()) {
                     var_dump($aend->getErrors());
                 }
                 $alter_top->copyToHistory();
                 $tagesordnungspunkt->id = $alter_top->id;
                 $alter_top->setAttributes($tagesordnungspunkt->getAttributes(), false);
                 if (!$alter_top->save()) {
                     echo "StadtratAntrag 1\n";
                     var_dump($alter_eintrag->getErrors());
                     die("Fehler");
                 }
                 $tagesordnungspunkt = $alter_top;
                 $aenderungen_tops .= "TOP geändert: " . $tagesordnungspunkt->top_nr . ": " . $tagesordnungspunkt->top_betreff . "\n   " . str_replace("\n", "\n   ", $tagesordnungspunkt_aenderungen) . "\n";
             }
         } else {
             $aenderungen_tops .= "Neuer TOP: " . $top_nr . " - " . $betreff . "\n";
             $tagesordnungspunkt->save();
         }
         $verwendete_top_betreffs[] = $tagesordnungspunkt->top_betreff;
         /*
         if (!is_null($vorlage_id)) {
             $html_vorlage_ergebnis = RISTools::load_file("http://www.ris-muenchen.de/RII/RII/ris_vorlagen_ergebnisse.jsp?risid=$vorlage_id");
             preg_match_all("/ris_sitzung_to.jsp\?risid=" . $termin_id . ".*<\/td>.*<\/td>.*tdborder\">(?<beschluss>.*)<\/td>/siU", $html_vorlage_ergebnis, $matches3);
             $beschluss = static::text_clean_spaces($matches3["beschluss"][0]);
             if ($tagesordnungspunkt->beschluss_text != $beschluss) {
                 $aenderungen .= "Beschluss: " . $tagesordnungspunkt->beschluss_text . " => " . $beschluss . "\n";
                 $tagesordnungspunkt->beschluss_text = $beschluss;
             }
         }
         */
         preg_match("/<a title=\"(?<title>[^\"]*)\" [^>]*href=\"(?<url>[^ ]+)\"/siU", $entscheidung_original, $matches2);
         if (isset($matches2["url"]) && $matches2["url"] != "" && $matches2["url"] != "/RII/RII/DOK/TOP/") {
             $aenderungen .= Dokument::create_if_necessary(Dokument::$TYP_BA_BESCHLUSS, $tagesordnungspunkt, ["url" => $matches2["url"], "name" => $matches2["title"], "name_title" => ""]);
         }
     }
     foreach ($bisherige_tops as $top) {
         if (!in_array($top->top_betreff, $verwendete_top_betreffs)) {
             $aenderungen_tops .= "TOP entfernt: " . $top->top_nr . ": " . $top->top_betreff . "\n";
             foreach ($top->dokumente as $dok) {
                 $dok->tagesordnungspunkt_id = null;
                 $dok->save(false);
             }
             $top->delete();
         }
     }
     if ($aenderungen_tops != "") {
         $changed = true;
     }
     if ($changed) {
         if (!$alter_eintrag) {
             $aenderungen = "Neu angelegt\n";
         }
         $aenderungen .= $aenderungen_tops;
         echo "BA-Termin {$termin_id}: Verändert: " . $aenderungen . "\n";
         if ($alter_eintrag) {
             $alter_eintrag->copyToHistory();
             $alter_eintrag->setAttributes($daten->getAttributes());
             if (!$alter_eintrag->save()) {
                 if (SITE_CALL_MODE != "cron") {
                     echo "BA-Termin 1\n";
                 }
                 var_dump($alter_eintrag->getErrors());
                 die("Fehler");
             }
             $daten = $alter_eintrag;
         } else {
             if (!$daten->save()) {
                 if (SITE_CALL_MODE != "cron") {
                     echo "BA-Termin 2\n";
                 }
                 var_dump($daten->getErrors());
                 die("Fehler");
             }
         }
     }
     foreach ($dokumente as $dok) {
         $aenderungen .= Dokument::create_if_necessary(Dokument::$TYP_BA_TERMIN, $daten, $dok);
     }
     if ($aenderungen != "") {
         $aend = new RISAenderung();
         $aend->ris_id = $daten->id;
         $aend->ba_nr = $daten->ba_nr;
         $aend->typ = RISAenderung::$TYP_BA_TERMIN;
         $aend->datum = new CDbExpression("NOW()");
         $aend->aenderungen = $aenderungen;
         $aend->save();
         /** @var Termin $termin */
         $termin = Termin::model()->findByPk($termin_id);
         $termin->datum_letzte_aenderung = new CDbExpression('NOW()');
         // Auch bei neuen Dokumenten
         $termin->save();
     }
 }
Beispiel #26
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()));
 }
Beispiel #27
0
	<div>
		<?php 
echo $form->label($model, 'id');
?>
		<?php 
echo $form->textField($model, 'id');
?>
	</div>

	<div>
		<?php 
echo $form->label($model, 'antrag_id');
?>
		<?php 
echo $form->dropDownList($model, 'antrag_id', GxHtml::listDataEx(Antrag::model()->findAllAttributes(null, true)), array('prompt' => Yii::t('app', 'All')));
?>
	</div>

	<div>
		<?php 
echo $form->label($model, 'text_neu');
?>
		<?php 
echo $form->textArea($model, 'text_neu');
?>
	</div>

	<div>
		<?php 
echo $form->label($model, 'begruendung_neu');
 /**
  * @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) . ")");
 }
Beispiel #29
0
/* @var $this AntraegeController */
/* @var $model Antrag */
$this->breadcrumbs = array(Yii::t('app', 'Administration') => $this->createUrl('/admin/index'), $model->label(2) => array('index'), "Durchsuchen");
$this->menu = array(array('label' => $model->label(2), 'url' => array('index'), "icon" => "home"));
Yii::app()->clientScript->registerScript('search', "\n\$('.search-button').click(function(){\n\t\$('.search-form').toggle();\n\treturn false;\n});\n\$('.search-form form').submit(function(){\n\t\$.fn.yiiGridView.update('antrag-grid', {\n\t\tdata: \$(this).serialize()\n\t});\n\treturn false;\n});\n");
?>

<h1><?php 
echo GxHtml::encode($model->label(2)) . ' ' . Yii::t('app', 'Manage');
?>
</h1>

<p>
	<?php 
Yii::t('app', 'You may optionally enter a comparison operator (&lt;, &lt;=, &gt;, &gt;=, &lt;&gt; or =) at the beginning of each of your search values to specify how the comparison should be done.');
?>
</p>

<?php 
echo GxHtml::link(Yii::t('app', 'Advanced Search'), '#', array('class' => 'search-button'));
?>
<div class="search-form">
	<?php 
$this->renderPartial('_search', array('model' => $model));
?>
</div><!-- search-form -->

<?php 
$this->widget('zii.widgets.grid.CGridView', array('id' => 'antrag-grid', 'dataProvider' => $model->search(), 'filter' => $model, 'columns' => array('id', array('name' => 'veranstaltung', 'value' => 'GxHtml::valueEx($data->veranstaltung)', 'filter' => GxHtml::listDataEx(Veranstaltung::model()->findAllAttributes(null, true))), array('name' => 'abgeleitet_von', 'value' => 'GxHtml::valueEx($data->abgeleitetVon)', 'filter' => GxHtml::listDataEx(Antrag::model()->findAllAttributes(null, true))), 'typ', 'name', 'revision_name', array('class' => 'CButtonColumn', 'template' => '{update}'))));
Beispiel #30
0
 <span class="required">*</span> <?php 
echo Yii::t('app', 'are required');
?>
.
	</p>

	<?php 
echo $form->errorSummary($model);
?>

	<div>
		<?php 
echo $form->labelEx($model, 'antrag_id');
?>
		<?php 
echo $form->dropDownList($model, 'antrag_id', GxHtml::listDataEx(Antrag::model()->findAllAttributes(null, true)));
?>
		<?php 
echo $form->error($model, 'antrag_id');
?>
	</div>
	<!-- row -->
	<div>
		<?php 
echo $form->labelEx($model, 'revision_name');
?>
		<?php 
echo $form->textField($model, 'revision_name');
?>
		<?php 
echo $form->error($model, 'revision_name');