public function run($args)
 {
     $TESTS_TITEL = [['input' => 'Welche Schäden hat der Aufbau des ?Cotton Club? verursacht?', 'korrigiert' => 'Welche Schäden hat der Aufbau des „Cotton Club“ verursacht?'], ['input' => 'Fortschreibung des Standortkonzepts "Kulturstrand" 2015 ff.', 'korrigiert' => 'Fortschreibung des Standortkonzepts „Kulturstrand“ 2015 ff.']];
     $TESTS_DOKUMENT = [['input' => 'Neuer Titel', 'korrigiert' => 'Neuer Titel'], ['input' => 'Hinweis fuer Internet', 'korrigiert' => 'Hinweis für Internet']];
     $allesok = true;
     foreach ($TESTS_TITEL as $test) {
         $korrektur = RISTools::korrigiereTitelZeichen($test["input"]);
         if ($korrektur != $test["korrigiert"]) {
             echo "Fehlerhaft:\n";
             echo "- Input: " . $test["input"] . "\n";
             echo "- Erwartet: " . $test["korrigiert"] . "\n";
             echo "- Tatsächlich: " . $korrektur . "\n";
             $allesok = false;
         }
     }
     foreach ($TESTS_DOKUMENT as $test) {
         $korrektur = RISTools::korrigiereDokumentenTitel($test["input"]);
         if ($korrektur != $test["korrigiert"]) {
             echo "Fehlerhaft:\n";
             echo "- Input: " . $test["input"] . "\n";
             echo "- Erwartet: " . $test["korrigiert"] . "\n";
             echo "- Tatsächlich: " . $korrektur . "\n";
             $allesok = false;
         }
     }
     if ($allesok) {
         echo "Alles Ok! 😁\n";
     }
 }
Пример #2
0
 /**
  * @param string $url_to_read
  * @param string $username
  * @param string $password
  * @param int $timeout
  * @return string
  */
 public static function load_file($url_to_read, $username = "", $password = "", $timeout = 30)
 {
     $i = 0;
     do {
         $ch = curl_init();
         if ($username != "" || $password != "") {
             curl_setopt($ch, CURLOPT_USERPWD, "{$username}:{$password}");
         }
         curl_setopt($ch, CURLOPT_URL, $url_to_read);
         curl_setopt($ch, CURLOPT_HEADER, 0);
         curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
         curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
         curl_setopt($ch, CURLOPT_USERAGENT, RISTools::STD_USER_AGENT);
         curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
         curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
         curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
         $text = curl_exec($ch);
         $text = str_replace(chr(13), "\n", $text);
         //$info = curl_getinfo($ch);
         curl_close($ch);
         $text = RISTools::toutf8($text);
         if (!defined("VERYFAST")) {
             sleep(1);
         }
         $i++;
     } while (strpos($text, "localhost:8118") !== false && $i < 10);
     return $text;
 }
Пример #3
0
 /**
  * @param \Solarium\QueryType\Select\Result\Result $ergebnisse
  * @return array();
  */
 public static function ergebnisse2FeedData($ergebnisse)
 {
     $data = array();
     $dokumente = $ergebnisse->getDocuments();
     $highlighting = $ergebnisse->getHighlighting();
     $purifier = new CHtmlPurifier();
     $purifier->options = array('URI.AllowedSchemes' => array('http' => true, 'https' => true));
     foreach ($dokumente as $dokument) {
         $model = Dokument::getDocumentBySolrId($dokument->id);
         $risitem = $model->getRISItem();
         if (!$risitem) {
             continue;
         }
         $link = $risitem->getLink();
         $highlightedDoc = $highlighting->getResult($dokument->id);
         $item = array("title" => $model->name . " (zu " . $risitem->getTypName() . " \"" . $risitem->getName() . "\"", "link" => $link, "content" => "", "dateCreated" => RISTools::date_iso2timestamp(str_replace("T", " ", str_replace("Z", "", $dokument->sort_datum))), "aenderung_guid" => $link);
         if ($highlightedDoc && count($highlightedDoc) > 0) {
             foreach ($highlightedDoc as $highlight) {
                 $item["content"] .= $purifier->purify(implode(' (...) ', $highlight)) . '<br/>';
             }
         }
         $data[] = $item;
     }
     return $data;
 }
 public function parse($fraktion_id, $wahlperiode_id)
 {
     $fraktion_id = IntVal($fraktion_id);
     $wahlperiode_id = IntVal($wahlperiode_id);
     if (SITE_CALL_MODE != "cron") {
         echo "- Fraktion {$fraktion_id}\n";
     }
     $html_details = RISTools::load_file("http://www.ris-muenchen.de/RII/RII/ris_fraktionen_detail.jsp?risid={$fraktion_id}&periodeid={$wahlperiode_id}");
     $daten = new Fraktion();
     $daten->id = $fraktion_id;
     if (preg_match("/introheadline\">(.*)<\\/h3/siU", $html_details, $matches)) {
         var_dump($matches);
         $daten->name = trim(str_replace("&nbsp;", " ", $matches[1]));
     }
     $aenderungen = "";
     /** @var Fraktion $alter_eintrag */
     $alter_eintrag = Fraktion::model()->findByPk($fraktion_id);
     $changed = true;
     if ($alter_eintrag) {
         $changed = false;
         if ($alter_eintrag->name != $daten->name) {
             $aenderungen .= "Name: " . $alter_eintrag->name . " => " . $daten->name . "\n";
         }
         if ($aenderungen != "") {
             $changed = true;
         }
     }
     if ($changed) {
         if ($aenderungen == "") {
             $aenderungen = "Neu angelegt\n";
         }
     }
     if ($alter_eintrag) {
         $alter_eintrag->setAttributes($daten->getAttributes(), false);
         if (!$alter_eintrag->save()) {
             echo "Fraktion 1\n";
             var_dump($alter_eintrag->getErrors());
             die("Fehler");
         }
         $daten = $alter_eintrag;
     } else {
         if (!$daten->save()) {
             echo "Fraktion 2\n";
             var_dump($daten->getErrors());
             die("Fehler");
         }
     }
     if ($aenderungen != "") {
         echo "Fraktion {$fraktion_id}: Verändert: " . $aenderungen . "\n";
     }
     if ($aenderungen != "") {
         $aend = new RISAenderung();
         $aend->ris_id = $daten->id;
         $aend->ba_nr = null;
         $aend->typ = RISAenderung::$TYP_STADTRAT_FRAKTION;
         $aend->datum = new CDbExpression("NOW()");
         $aend->aenderungen = $aenderungen;
         $aend->save();
     }
 }
 public function run($args)
 {
     for ($i = ord('A'); $i <= ord('Z'); $i++) {
         $txt = RISTools::load_file('http://stadt-muenchen.net/strassen/index.php?name=' . chr($i));
         $txt = explode("<table class='full' border='0'>", $txt);
         $txt = explode("</table>", $txt[1]);
         preg_match_all("/<tr><td>(.*)<\\/tr>/siuU", $txt[0], $matches);
         foreach ($matches[1] as $match) {
             $y = explode('</a></td><td>', $match);
             $strassenname = preg_replace("/(s)tra(ß|ss)e\$/siu", "\\1tr.", trim(strip_tags($y[0])));
             $plz = trim(strip_tags($y[1]));
             $str = Strasse::model()->findByAttributes(["name" => $strassenname]);
             if (!$str) {
                 echo "Neu: " . $plz . " - " . $strassenname . "\n";
                 $str = new Strasse();
                 $str->name = $strassenname;
                 $str->plz = $plz;
                 $str->osm_ref = 0;
                 if (!$str->save()) {
                     var_dump($str->getErrors());
                 }
             }
         }
     }
 }
 /**
  * @param bool $kurzfassung
  * @return string
  */
 public function getName($kurzfassung = false)
 {
     if ($kurzfassung) {
         $betreff = str_replace(["\n", "\r"], [" ", " "], $this->top_betreff);
         $x = explode(" Antrag Nr.", $betreff);
         return RISTools::korrigiereTitelZeichen($x[0]);
     } else {
         return RISTools::korrigiereTitelZeichen($this->top_betreff);
     }
 }
 /**
  * @param BenutzerIn $benutzerIn
  * @param int $zeitspanne
  */
 private function benachrichtigeBenutzerIn($benutzerIn, $zeitspanne = 0)
 {
     $ergebnisse = $benutzerIn->benachrichtigungsErgebnisse($zeitspanne);
     if (count($ergebnisse["antraege"]) == 0 && count($ergebnisse["termine"]) == 0 && count($ergebnisse["vorgaenge"]) == 0) {
         return;
     }
     $mail_txt = $this->verschickeNeueBenachrichtigungen_txt($benutzerIn, $ergebnisse);
     $mail_html = $this->verschickeNeueBenachrichtigungen_html($benutzerIn, $ergebnisse);
     RISTools::send_email($benutzerIn->email, "Neues auf München Transparent", $mail_txt, $mail_html, "newsletter");
     $benutzerIn->datum_letzte_benachrichtigung = new CDbExpression("NOW()");
     $benutzerIn->save();
 }
 public function parseAlle()
 {
     $text = RISTools::load_file("http://www.ris-muenchen.de/RII/RII/ris_referenten_trefferliste.jsp?nav=1");
     $txt = explode("<!-- ergebnisreihen -->", $text);
     $txt = explode("<div class=\"ergebnisfuss\">", $txt[1]);
     preg_match_all("/ris_referenten_detail\\.jsp\\?risid=(?<id>[0-9]+)[\"'& ][^>]*>(?<name>[^<]+)<.*target=\"_blank\">(?<referat>[^<]+)</siU", $txt[0], $matches);
     for ($i = 0; $i < count($matches["name"]); $i++) {
         $name = trim($matches["name"][$i]);
         $name = str_replace("&nbsp;", " ", $name);
         $name = preg_replace("/ *(\n *)+/siu", "\n", $name);
         $x = explode("\n", $name);
         $y = explode(", ", $x[1]);
         $name = trim($x[0]) . " " . trim($y[1]) . " " . trim($y[0]);
         $id = IntVal($matches["id"][$i]);
         $referat_name = $matches["referat"][$i];
         /** @var StadtraetIn $str */
         $str = StadtraetIn::model()->findByPk($id);
         if ($str) {
             if ($str->name != $name) {
                 RISTools::send_email(Yii::app()->params['adminEmail'], "ReferentIn Änderung", $str->name . " => " . $name, null, "system");
                 $str->name = $name;
                 $str->save();
             }
         } else {
             $str = new StadtraetIn();
             $str->name = $name;
             $str->id = $id;
             $str->referentIn = 1;
             $str->save();
         }
         /** @var Referat $referat */
         $referat = Referat::model()->findByAttributes(["name" => $referat_name]);
         if (!$referat) {
             RISTools::send_email(Yii::app()->params['adminEmail'], "Referat nicht gefunden", $referat_name, null, "system");
             return;
         }
         $gefunden = false;
         foreach ($str->stadtraetInnenReferate as $ref) {
             if ($ref->referat_id == $referat->id) {
                 $gefunden = true;
             }
         }
         if (!$gefunden) {
             $zuo = new StadtraetInReferat();
             $zuo->referat_id = $referat->id;
             $zuo->stadtraetIn_id = $str->id;
             $zuo->save();
             RISTools::send_email(Yii::app()->params['adminEmail'], "Neue ReferentInnen/Referat-Zuordnung", $referat_name . " / " . $str->name, null, "system");
         }
     }
 }
Пример #9
0
 /**
  * @param string $name
  * @param string $name_normalized
  * @return Person
  * @throws Exception
  */
 public static function getOrCreate($name, $name_normalized)
 {
     /** @var Person|null $pers */
     $pers = Person::model()->findByAttributes(["name_normalized" => $name_normalized]);
     if (is_null($pers)) {
         $pers = new Person();
         $pers->name = $name;
         $pers->name_normalized = $name_normalized;
         $pers->typ = static::$TYP_SONSTIGES;
         if (!$pers->save()) {
             RISTools::send_email(Yii::app()->params['adminEmail'], "Person:getOrCreate Error", print_r($pers->getErrors(), true), null, "system");
             throw new Exception("Fehler beim Speichern: Person");
         }
     }
     return $pers;
 }
Пример #10
0
 /**
  * @param bool $kurzfassung
  * @return string
  */
 public function getName($kurzfassung = false)
 {
     $name = RISTools::korrigiereTitelZeichen($this->name);
     if ($name == "&nbsp;" || trim($name) == "") {
         return "fraktionslos";
     }
     if ($kurzfassung) {
         if (in_array($this->id, [3339564, 2988265, 3312425])) {
             return "Bürgerliche Mitte";
         }
         if ($this->id == 3312427) {
             return "Freiheitsrechte Transparenz Bürgerbeteiligung";
         }
         if (in_array($this->id, [3312426, 1431959, 33])) {
             return "Die Grünen / RL";
         }
     }
     return $name;
 }
 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)
 {
     RISTools::send_email("*****@*****.**", "Test", "Abc", "<strong>Test 123</strong>", "test");
 }
 public function run($args)
 {
     echo "Gestartet: " . date("Y-m-d H:i:s") . "\n";
     try {
         $parser = new ReferentInnenParser();
         $parser->parseQuickUpdate();
         echo "Done ReferentInnen: " . date("Y-m-d H:i:s") . "\n";
     } catch (Exception $e) {
         RISTools::send_email(Yii::app()->params['adminEmail'], "RIS Exception ReferentIn", print_r($e, true), null, "system");
     }
     try {
         $parser = new StadtratTerminParser();
         $parser->parseQuickUpdate();
         echo "Done Termine: " . date("Y-m-d H:i:s") . "\n";
     } catch (Exception $e) {
         RISTools::send_email(Yii::app()->params['adminEmail'], "RIS Exception Stadtrattermin", print_r($e, true), null, "system");
     }
     try {
         $parser = new StadtratsvorlageParser();
         $parser->parseQuickUpdate();
         echo "Done Vorlagen: " . date("Y-m-d H:i:s") . "\n";
     } catch (Exception $e) {
         RISTools::send_email(Yii::app()->params['adminEmail'], "RIS Exception Vorlagen", print_r($e, true), null, "system");
     }
     try {
         $parser = new StadtratsantragParser();
         $parser->parseQuickUpdate();
         echo "Done Stadtratsanträge: " . date("Y-m-d H:i:s") . "\n";
     } catch (Exception $e) {
         RISTools::send_email(Yii::app()->params['adminEmail'], "RIS Exception StR-Anträge", print_r($e, true), null, "system");
     }
     try {
         $parser = new StadtraetInnenParser();
         //$parser->setParseAlleAntraege(true);
         $parser->parseQuickUpdate();
         echo "Done StadträtInnen: " . date("Y-m-d H:i:s") . "\n";
     } catch (Exception $e) {
         RISTools::send_email(Yii::app()->params['adminEmail'], "RIS Exception StadträtInnen", print_r($e, true), null, "system");
     }
     try {
         $parser = new BATerminParser();
         $parser->parseQuickUpdate();
         echo "Done BA Termine: " . date("Y-m-d H:i:s") . "\n";
     } catch (Exception $e) {
         RISTools::send_email(Yii::app()->params['adminEmail'], "RIS Exception BA-Termine", print_r($e, true), null, "system");
     }
     try {
         $parser = new BAInitiativeParser();
         $parser->parseQuickUpdate();
         echo "Done BA Initiative: " . date("Y-m-d H:i:s") . "\n";
     } catch (Exception $e) {
         RISTools::send_email(Yii::app()->params['adminEmail'], "RIS Exception BA-Initiative", print_r($e, true), null, "system");
     }
     try {
         $parser = new BAAntragParser();
         $parser->parseQuickUpdate();
         echo "Done BA Anträge: " . date("Y-m-d H:i:s") . "\n";
     } catch (Exception $e) {
         RISTools::send_email(Yii::app()->params['adminEmail'], "RIS Exception BA-Anträge", print_r($e, true), null, "system");
     }
     RISMetadaten::setzeLetzteAktualisierung(date("Y-m-d H:i:s"));
     RISMetadaten::recalcStats();
     echo "Done: " . date("Y-m-d H:i:s") . "\n";
 }
Пример #14
0
</link>
			</image>
			<?php 
foreach ($data as $dat) {
    ?>
				<item>
					<title><?php 
    echo CHtml::encode($dat["title"]);
    ?>
</title>
					<link><?php 
    echo RISTools::bracketEscape(CHtml::encode(yii::app()->getBaseUrl(true) . $dat["link"]));
    ?>
</link>
					<guid><?php 
    echo RISTools::bracketEscape(CHtml::encode(yii::app()->getBaseUrl(true) . $dat["aenderung_guid"]));
    ?>
</guid>
					<description><![CDATA[<?php 
    echo $dat["content"];
    ?>
]]></description>
					<pubDate><?php 
    echo date(str_replace("y", "Y", DATE_RFC822), $dat["dateCreated"]);
    ?>
</pubDate>
				</item>
			<?php 
}
?>
		</channel>
Пример #15
0
            ?>
                    <a href="<?php 
            echo CHtml::encode($verw->getLink());
            ?>
" class="overflow-fadeout-white"><?php 
            echo CHtml::encode($title);
            ?>
</a>
                    <?php 
        }
        ?>
            </h4>
            <?php 
        $max_date = 0;
        foreach ($verw->dokumente as $dokument) {
            $dat = RISTools::date_iso2timestamp($dokument->getDate());
            if ($dat > $max_date) {
                $max_date = $dat;
            }
        }
        ?>
            <p class="list-group-item-text">
                <?php 
        echo count($verw->dokumente) == 1 ? "1 Dokument" : count($verw->dokumente) . " Dokumente";
        ?>
            </p>
            <div class="metainformationen_antraege"><?php 
        $parteien = array();
        foreach ($verw->antraegePersonen as $person) {
            $name = $person->person->name;
            $partei = $person->person->ratePartei($verw->gestellt_am);
 public function parse($ba_nr)
 {
     $ba_nr = IntVal($ba_nr);
     if (SITE_CALL_MODE != "cron") {
         echo "- BA {$ba_nr}\n";
     }
     /** @var Bezirksausschuss $ba */
     $ba = Bezirksausschuss::model()->findByPk($ba_nr);
     $ba_details = RISTools::load_file("http://www.ris-muenchen.de/RII/BA-RII/ba_bezirksausschuesse_details.jsp?Id=" . $ba->ris_id);
     preg_match("/Wahlperiode.*detail_div\">(?<wahlperiode>[^<]*)</siuU", $ba_details, $matches);
     $wahlperiode = $matches["wahlperiode"];
     $x = explode('<!-- tabellenkopf -->', $ba_details);
     $x = explode('<!-- seitenfuss -->', $x[1]);
     $gefundene_fraktionen = [];
     preg_match_all("/ba_mitglieder_details_mitgliedschaft\\.jsp\\?Id=(?<mitglied_id>[0-9]+)&amp;Wahlperiode=(?<wahlperiode>[0-9]+)[\"'& ]>(?<name>[^<]*)<.*tdborder\">(?<mitgliedschaft>[^<]*)<\\/td>.*tdborder[^>]*>(?<fraktion>[^<]*) *<\\/td>.*notdborder[^>]*>(?<funktion>[^<]*) *<\\/td.*<\\/tr/siU", $x[0], $matches);
     for ($i = 0; $i < count($matches[1]); $i++) {
         $fraktion_name = trim(html_entity_decode($matches["fraktion"][$i]));
         $name = str_replace("&nbsp;", " ", $matches["name"][$i]);
         $name = trim(str_replace(["Herr", "Frau"], [" ", " "], $name));
         if ($fraktion_name == "") {
             $fraktion_name = "Parteifrei";
         }
         /** @var StadtraetIn $strIn */
         $strIn = StadtraetIn::model()->findByPk($matches["mitglied_id"][$i]);
         if (!$strIn) {
             echo "Neu anlegen: " . $matches["mitglied_id"][$i] . " - " . $name . " (" . $fraktion_name . ")\n";
             $strIn = new StadtraetIn();
             $strIn->name = $name;
             $strIn->id = $matches["mitglied_id"][$i];
             $strIn->referentIn = 0;
             $x = explode(".", $matches["mitgliedschaft"][$i]);
             $strIn->gewaehlt_am = $x[2] . "-" . $x[1] . "-" . $x[0];
             $strIn->save();
         }
         /** @var Fraktion|null $fraktion */
         $fraktion = Fraktion::model()->findByAttributes(["ba_nr" => $ba_nr, "name" => $fraktion_name]);
         if (!$fraktion) {
             echo "Lege an: " . $fraktion_name . "\n";
             $min = Yii::app()->db->createCommand()->select("MIN(id)")->from("fraktionen")->queryColumn()[0] - 1;
             if ($min > 0) {
                 $min = -1;
             }
             $fraktion = new Fraktion();
             $fraktion->id = $min;
             $fraktion->name = $fraktion_name;
             $fraktion->ba_nr = $ba_nr;
             $fraktion->save();
         }
         $gefunden = false;
         foreach ($strIn->stadtraetInnenFraktionen as $strfrakt) {
             if ($strfrakt->fraktion_id == $fraktion->id) {
                 $gefunden = true;
                 $von_pre = $strfrakt->datum_von;
                 $bis_pre = $strfrakt->datum_bis;
                 if (preg_match("/^von (?<von_tag>[0-9]+)\\.(?<von_monat>[0-9]+)\\.(?<von_jahr>[0-9]+) bis (?<bis_tag>[0-9]+)\\.(?<bis_monat>[0-9]+)\\.(?<bis_jahr>[0-9]+)\$/", $matches["mitgliedschaft"][$i], $mitgliedschaft_matches)) {
                     $strfrakt->datum_von = $mitgliedschaft_matches["von_jahr"] . "-" . $mitgliedschaft_matches["von_monat"] . "-" . $mitgliedschaft_matches["von_tag"];
                     $strfrakt->datum_bis = $mitgliedschaft_matches["bis_jahr"] . "-" . $mitgliedschaft_matches["bis_monat"] . "-" . $mitgliedschaft_matches["bis_tag"];
                 } elseif (preg_match("/^seit (?<von_tag>[0-9]+)\\.(?<von_monat>[0-9]+)\\.(?<von_jahr>[0-9]+)\$/", $matches["mitgliedschaft"][$i], $mitgliedschaft_matches)) {
                     $strfrakt->datum_von = $mitgliedschaft_matches["von_jahr"] . "-" . $mitgliedschaft_matches["von_monat"] . "-" . $mitgliedschaft_matches["von_tag"];
                     $strfrakt->datum_bis = null;
                 }
                 if ($von_pre != $strfrakt->datum_von || $bis_pre != $strfrakt->datum_bis) {
                     $strfrakt->save();
                     echo $strIn->getName() . ": " . $von_pre . "/" . $bis_pre . " => " . $strfrakt->datum_von . "/" . $strfrakt->datum_bis . "\n";
                 }
             }
         }
         if (!$gefunden) {
             $strfrakt = new StadtraetInFraktion();
             $strfrakt->fraktion_id = $fraktion->id;
             $strfrakt->stadtraetIn_id = $strIn->id;
             $strfrakt->wahlperiode = $wahlperiode;
             $strfrakt->mitgliedschaft = $matches["mitgliedschaft"][$i];
             if (preg_match("/^von (?<von_tag>[0-9]+)\\.(?<von_monat>[0-9]+)\\.(?<von_jahr>[0-9]+) bis (?<bis_tag>[0-9]+)\\.(?<bis_monat>[0-9]+)\\.(?<bis_jahr>[0-9]+)\$/", $matches["mitgliedschaft"][$i], $mitgliedschaft_matches)) {
                 $strfrakt->datum_von = $mitgliedschaft_matches["von_jahr"] . "-" . $mitgliedschaft_matches["von_monat"] . "-" . $mitgliedschaft_matches["von_tag"];
                 $strfrakt->datum_bis = $mitgliedschaft_matches["bis_jahr"] . "-" . $mitgliedschaft_matches["bis_monat"] . "-" . $mitgliedschaft_matches["bis_tag"];
             } elseif (preg_match("/^seit (?<von_tag>[0-9]+)\\.(?<von_monat>[0-9]+)\\.(?<von_jahr>[0-9]+)\$/", $matches["mitgliedschaft"][$i], $mitgliedschaft_matches)) {
                 $strfrakt->datum_von = $mitgliedschaft_matches["von_jahr"] . "-" . $mitgliedschaft_matches["von_monat"] . "-" . $mitgliedschaft_matches["von_tag"];
                 $strfrakt->datum_bis = null;
             }
             $strfrakt->save();
         }
         if (!isset($gefundene_fraktionen[$matches["mitglied_id"][$i]])) {
             $gefundene_fraktionen[$matches["mitglied_id"][$i]] = [];
         }
         $gefundene_fraktionen[$matches["mitglied_id"][$i]][] = $fraktion->id;
     }
     foreach ($gefundene_fraktionen as $strIn => $fraktionen) {
         //SELECT a.* FROM `fraktionen` a JOIN stadtraetInnen_fraktionen b ON a.id = b.fraktion_id WHERE b.stadtraetIn_id = 3314069 AND a.ba_nr = 18 AND b.fraktion_id NOT IN (-88)
         $sql = 'DELETE FROM b USING `fraktionen` a JOIN `stadtraetInnen_fraktionen` b ON a.id = b.fraktion_id WHERE ';
         $frakts = implode(", ", array_map('IntVal', $fraktionen));
         $sql .= 'b.stadtraetIn_id = ' . IntVal($strIn) . ' AND a.ba_nr = ' . IntVal($ba_nr) . ' AND b.fraktion_id NOT IN (' . $frakts . ')';
         if (Yii::app()->db->createCommand($sql)->execute() > 0) {
             echo 'Fraktionen gelöscht bei: ' . $strIn . "\n";
         }
     }
 }
Пример #17
0
 /**
  * @return array
  */
 public function getVEventParams()
 {
     $description = "Infoseite: " . SITE_BASE_URL . Yii::app()->createUrl("termine/anzeigen", ["termin_id" => $this->id]);
     foreach ($this->antraegeDokumente as $dok) {
         $description .= "\n" . $dok->getName() . ": " . $dok->getLink();
     }
     $ende = date("Y-m-d H:i:s", RISTools::date_iso2timestamp($this->termin) + 3600);
     return ['SUMMARY' => $this->getName(true), 'DTSTART' => new \DateTime($this->termin, new DateTimeZone("Europe/Berlin")), 'DTEND' => new \DateTime($ende, new DateTimeZone("Europe/Berlin")), 'LOCATION' => $this->sitzungsort, 'DESCRIPTION' => $description];
 }
Пример #18
0
    }
    echo '<dd><a href="https://twitter.com/' . CHtml::encode($twitter) . '">@' . CHtml::encode($twitter) . '</a></dd>' . "\n";
}
if ($person->facebook != "") {
    echo '<dt>Facebook:</dt>';
    echo '<dd><a href="https://www.facebook.com/' . CHtml::encode($person->facebook) . '">Facebook-Profil</a></dd>' . "\n";
}
if ($person->abgeordnetenwatch != "") {
    echo '<dt>Abgeordnetenwatch:</dt>';
    echo '<dd><a href="' . CHtml::encode($person->abgeordnetenwatch) . '">Abgeordnetenwatch-Profil</a></dd>' . "\n";
}
if ($person->geburtstag != "") {
    $datum = explode("-", $person->geburtstag);
    if ($datum[1] > 0) {
        echo '<dt>Geburtstag:</dt>';
        echo '<dd>' . RISTools::datumstring($person->geburtstag) . '</dd>' . "\n";
    } else {
        echo '<dt>Geburtsjahr:</dt>';
        echo '<dd>' . CHtml::encode($datum[0]) . '</dd>' . "\n";
    }
}
if ($person->beschreibung != "") {
    echo '<dt>Beschreibung</dt>';
    echo '<dd>' . nl2br(CHtml::encode($person->beschreibung));
    if ($person->quellen != "") {
        echo '<div class="quelle">Quelle: ' . CHtml::encode($person->quellen) . '</div>';
    }
    echo '</dd>' . "\n";
}
?>
            </dl>
Пример #19
0
 /**
  * @param int $vorgang_von_id
  * @param int $vorgang_zu_id
  */
 public static function vorgangMerge($vorgang_von_id, $vorgang_zu_id)
 {
     $vorgang_von_id = IntVal($vorgang_von_id);
     $vorgang_zu_id = IntVal($vorgang_zu_id);
     $str = "Vorgang Merge: von {$vorgang_von_id} => {$vorgang_zu_id}\n";
     try {
         /** @var Vorgang $vorgang_von */
         $vorgang_von = Vorgang::model()->findByPk($vorgang_von_id);
         if (!$vorgang_von) {
             throw new Exception("Vorgangs-ID nicht gefunden: " . $vorgang_von_id);
         }
         foreach ($vorgang_von->antraege as $ant) {
             $ant->vorgang_id = $vorgang_zu_id;
             $ant->save(false);
             $str .= "Antrag: " . $ant->getName() . "\n";
         }
         foreach ($vorgang_von->dokumente as $dok) {
             $dok->vorgang_id = $vorgang_zu_id;
             $dok->save(false);
             $str .= "Dokument: " . $dok->name . "\n";
         }
         foreach ($vorgang_von->ergebnisse as $erg) {
             $erg->vorgang_id = $vorgang_zu_id;
             $erg->save(false);
             $str .= "Ergebnis: " . $erg->getName() . "\n";
         }
         Yii::app()->db->createCommand("UPDATE IGNORE `benutzerInnen_vorgaenge_abos` SET vorgaenge_id = :VorgangIdNeu WHERE vorgaenge_id = :VorgangIdAlt")->bindValues([':VorgangIdNeu' => $vorgang_zu_id, ':VorgangIdAlt' => $vorgang_von_id])->execute();
         Yii::app()->db->createCommand("DELETE FROM `benutzerInnen_vorgaenge_abos` WHERE vorgaenge_id = :VorgangIdAlt")->bindValues([':VorgangIdAlt' => $vorgang_von_id])->execute();
         $str .= "Gelöscht.\n";
     } catch (Exception $e) {
         $str .= $e;
     }
     RISTools::send_email(Yii::app()->params['adminEmail'], "Vorgang:vorgangMerge Error", $str, null, "system");
 }
Пример #20
0
 public static function document_text_pdf($pdf)
 {
     $tmp_file_name = TMP_PATH . "pdf.txt." . rand(0, 10000000);
     exec(PATH_JAVA . " -jar " . PATH_PDFBOX . " ExtractText -encoding UTF-8 {$pdf} {$tmp_file_name}", $ret);
     if (file_exists($tmp_file_name)) {
         $text = file_get_contents($tmp_file_name);
         unlink($tmp_file_name);
     } else {
         RISTools::send_email(Yii::app()->params['adminEmail'], "PDFParse Error", $pdf . "\n" . print_r($ret, true), null, "system");
         $text = "";
     }
     return $text;
 }
Пример #21
0
 public static function parse_stadtrat_gremien($ris_id)
 {
     $ris_id = IntVal($ris_id);
     echo "- Gremium {$ris_id}\n";
     $html_details = RISTools::load_file("http://www.ris-muenchen.de/RII/RII/ris_gremien_detail.jsp?risid=" . $ris_id);
     $daten = new Gremium();
     $daten->id = $ris_id;
     $daten->datum_letzte_aenderung = new CDbExpression('NOW()');
     $daten->ba_nr = null;
     if (preg_match("/introheadline\">([^>]+)<\\/h3/siU", $html_details, $matches)) {
         $daten->name = $matches[1];
     }
     if (preg_match("/rzel:.*detail_div\">([^>]*)<\\//siU", $html_details, $matches)) {
         $daten->kuerzel = $matches[1];
     }
     if (preg_match("/Gremientyp:.*detail_div\">([^>]*)<\\//siU", $html_details, $matches)) {
         $daten->gremientyp = $matches[1];
     }
     if (preg_match("/Referat:.*detail_div\">([^>]*)<\\//siU", $html_details, $matches)) {
         $daten->referat = $matches[1];
     }
     foreach ($daten as $key => $val) {
         $daten[$key] = $val === null ? null : html_entity_decode(trim($val), ENT_COMPAT, "UTF-8");
     }
     $aenderungen = "";
     /** @var Gremium $alter_eintrag */
     $alter_eintrag = Gremium::model()->findByPk($ris_id);
     $changed = true;
     if ($alter_eintrag) {
         $changed = false;
         if ($alter_eintrag->name != $daten->name) {
             $aenderungen .= "Name: " . $alter_eintrag->name . " => " . $daten->name . "\n";
         }
         if ($alter_eintrag->kuerzel != $daten->kuerzel) {
             $aenderungen .= "Kürzel: " . $alter_eintrag->kuerzel . " => " . $daten->kuerzel . "\n";
         }
         if ($alter_eintrag->gremientyp != $daten->gremientyp) {
             $aenderungen .= "Gremientyp: " . $alter_eintrag->gremientyp . " => " . $daten->gremientyp . "\n";
         }
         if ($alter_eintrag->referat != $daten->referat) {
             $aenderungen .= "Referat: " . $alter_eintrag->referat . " => " . $daten->referat . "\n";
         }
         if ($aenderungen != "") {
             $changed = true;
         }
     }
     if ($changed) {
         if ($alter_eintrag) {
             $alter_eintrag->copyToHistory();
             $alter_eintrag->setAttributes($daten->getAttributes());
             if (!$alter_eintrag->save()) {
                 echo "Gremium 1";
                 var_dump($alter_eintrag->getErrors());
                 die("Fehler");
             }
             $daten = $alter_eintrag;
         } else {
             if (!$daten->save()) {
                 echo "Gremium 2";
                 var_dump($daten->getErrors());
                 die("Fehler");
             }
         }
         $aend = new RISAenderung();
         $aend->ris_id = $daten->id;
         $aend->ba_nr = null;
         $aend->typ = RISAenderung::$TYP_STADTRAT_GREMIUM;
         $aend->datum = new CDbExpression("NOW()");
         $aend->aenderungen = $aenderungen;
         $aend->save();
     }
 }
 public function parseSeite($seite, $first)
 {
     if (SITE_CALL_MODE != "cron") {
         echo "BA-Initiativen Seite {$seite}\n";
     }
     $text = RISTools::load_file("http://www.ris-muenchen.de/RII/BA-RII/ba_initiativen.jsp?Trf=n&Start={$seite}");
     $txt = explode("<!-- tabellenkopf -->", $text);
     $txt = explode("<div class=\"ergebnisfuss\">", $txt[1]);
     preg_match_all("/ba_initiativen_details\\.jsp\\?Id=([0-9]+)[\"'& ]/siU", $txt[0], $matches);
     if ($first && count($matches[1]) > 0) {
         RISTools::send_email(Yii::app()->params['adminEmail'], "BA-Initiativen VOLL", "Erste Seite voll: {$seite}", null, "system");
     }
     for ($i = count($matches[1]) - 1; $i >= 0; $i--) {
         try {
             $this->parse($matches[1][$i]);
         } catch (Exception $e) {
             echo " EXCEPTION! " . $e . "\n";
         }
     }
     return $matches[1];
 }
Пример #23
0
 /**
  * @param int $zeitspanne
  * @return array
  */
 public function benachrichtigungsErgebnisse($zeitspanne)
 {
     $benachrichtigungen = $this->getBenachrichtigungen();
     if ($zeitspanne > 0) {
         $neu_seit_ts = time() - $zeitspanne * 24 * 3600;
         $neu_seit = date("Y-m-d H:i:s", $neu_seit_ts);
     } else {
         $neu_seit = $this->datum_letzte_benachrichtigung;
         $neu_seit_ts = RISTools::date_iso2timestamp($neu_seit);
     }
     $ergebnisse = ["antraege" => [], "termine" => [], "vorgaenge" => []];
     $sql = Yii::app()->db->createCommand();
     $sql->select("id")->from("dokumente")->where("datum >= '" . addslashes($neu_seit) . "'");
     $data = $sql->queryColumn(["id"]);
     if (count($data) > 0) {
         $document_ids = [];
         foreach ($data as $did) {
             $document_ids[] = "id:\"Document:{$did}\"";
         }
         foreach ($benachrichtigungen as $benachrichtigung) {
             $e = $this->queryBenachrichtigungen($document_ids, $benachrichtigung);
             foreach ($e as $f) {
                 $d = explode(":", $f["id"]);
                 $dokument_id = IntVal($d[1]);
                 $dokument = Dokument::getCachedByID($dokument_id);
                 if (!$dokument) {
                     continue;
                 }
                 if ($dokument->antrag_id > 0) {
                     if (!isset($ergebnisse["antraege"][$dokument->antrag_id])) {
                         $ergebnisse["antraege"][$dokument->antrag_id] = ["antrag" => $dokument->antrag, "dokumente" => []];
                     }
                     if (!isset($ergebnisse["antraege"][$dokument->antrag_id]["dokumente"][$dokument_id])) {
                         $ergebnisse["antraege"][$dokument->antrag_id]["dokumente"][$dokument_id] = ["dokument" => Dokument::model()->findByPk($dokument_id), "queries" => []];
                     }
                     $ergebnisse["antraege"][$dokument->antrag_id]["dokumente"][$dokument_id]["queries"][] = $benachrichtigung;
                 } elseif ($dokument->termin_id > 0) {
                     if (!isset($ergebnisse["termine"][$dokument->termin_id])) {
                         $ergebnisse["termine"][$dokument->termin_id] = ["termin" => $dokument->termin, "dokumente" => []];
                     }
                     if (!isset($ergebnisse["termine"][$dokument->termin_id]["dokumente"][$dokument_id])) {
                         $ergebnisse["termine"][$dokument->termin_id]["dokumente"][$dokument_id] = ["dokument" => Dokument::model()->findByPk($dokument_id), "queries" => []];
                     }
                     $ergebnisse["termine"][$dokument->termin_id]["dokumente"][$dokument_id]["queries"][] = $benachrichtigung;
                 }
             }
         }
     }
     foreach ($this->abonnierte_vorgaenge as $vorgang) {
         foreach ($vorgang->antraege as $ant) {
             if (RISTools::date_iso2timestamp($ant->datum_letzte_aenderung) < $neu_seit_ts) {
                 continue;
             }
             if (!isset($ergebnisse["vorgaenge"][$vorgang->id])) {
                 $ergebnisse["vorgaenge"][$vorgang->id] = ["vorgang" => $vorgang->wichtigstesRisItem()->getName(true), "neues" => []];
             }
             $ant->findeAenderungen(time());
             $ergebnisse["vorgaenge"][$vorgang->id]["neues"][] = $ant;
         }
         foreach ($vorgang->dokumente as $dok) {
             if (RISTools::date_iso2timestamp($dok->datum) < $neu_seit_ts) {
                 continue;
             }
             if (!isset($ergebnisse["vorgaenge"][$vorgang->id])) {
                 $ergebnisse["vorgaenge"][$vorgang->id] = ["vorgang" => $vorgang->wichtigstesRisItem()->getName(true), "neues" => []];
             }
             $ergebnisse["vorgaenge"][$vorgang->id]["neues"][] = $dok;
         }
         foreach ($vorgang->ergebnisse as $erg) {
             if (RISTools::date_iso2timestamp($erg->datum_letzte_aenderung) < $neu_seit_ts) {
                 continue;
             }
             if (!isset($ergebnisse["vorgaenge"][$vorgang->id])) {
                 $ergebnisse["vorgaenge"][$vorgang->id] = ["vorgang" => $vorgang->wichtigstesRisItem()->getName(true), "neues" => []];
             }
             $ergebnisse["vorgaenge"][$vorgang->id]["neues"][] = $erg;
         }
     }
     return $ergebnisse;
 }
Пример #24
0
 - <?php 
    echo CHtml::encode($dokument->getName());
    ?>
.pdf" title="Herunterladen: <?php 
    echo CHtml::encode($dokument->getName());
    ?>
"></a> <?php 
});
$angezeigte_dokumente = [];
foreach ($docs as $d) {
    $angezeigte_dokumente[] = $d->id;
}
zeile_anzeigen($antrag->ergebnisse, "Behandelt:", "behandelt", function ($ergebnis) {
    /** @var Tagesordnungspunkt $termin */
    $termin = $ergebnis->sitzungstermin;
    echo CHtml::link(RISTools::datumstring($termin->termin) . ', ' . $termin->gremium->getName(), $termin->getLink());
    if ($ergebnis->beschluss_text != '' || $ergebnis->entscheidung != '') {
        echo '<br>';
        $text = $ergebnis->beschluss_text;
        if ($ergebnis->beschluss_text != '' && $ergebnis->entscheidung != '') {
            $text .= ', ';
        }
        $text .= $ergebnis->entscheidung;
        if (count($ergebnis->dokumente) == 1) {
            echo "Ergebnis: " . CHtml::link($text, $ergebnis->dokumente[0]->getLink());
        } else {
            echo "Ergebnis: " . CHtml::encode($text);
            foreach ($ergebnis->dokumente as $dok) {
                echo '<br>' . CHtml::link($dok->getName(), $dok->getLink());
            }
        }
Пример #25
0
        if ($ts1 > $ts2) {
            return -1;
        }
        if ($ts1 < $ts2) {
            return 1;
        }
        return 0;
    });
    ?>
                <h3>Protokolle &amp; Tagesordnungen</h3>
                <br>
                <ul class="dokumentenliste_small">
                    <?php 
    foreach ($dokumente as $dokument) {
        $name = str_replace(" (oeff)", "", $dokument->getName(true));
        $name .= " zur Sitzung am " . date("d.m.Y", RISTools::date_iso2timestamp($dokument->termin->termin));
        echo '<li>';
        echo "<div class='metainformationen_antraege'>" . CHtml::encode($dokument->getDisplayDate()) . "</div>";
        echo CHtml::link('<span class="glyphicon glyphicon-file"></span> ' . $name, $dokument->getLinkZumDokument());
        echo '</li>';
    }
    ?>
                </ul>
            <?php 
}
?>

            <br>

            <?php 
if (count($bvs) > 0) {
Пример #26
0
 /**
  * @param string $name
  * @throws Exception
  * @return OrtGeo|null
  */
 public static function getOrCreate($name)
 {
     /** @var null|OrtGeo */
     $ort = OrtGeo::model()->findByAttributes(["ort" => $name]);
     if ($ort) {
         return $ort;
     }
     $data = RISGeo::addressToGeo("Deutschland", "", "München", $name);
     if (($data === false || $data["lat"] == 0) && mb_strpos($name, "-") !== false) {
         $data = RISGeo::addressToGeo("Deutschland", "", "München", str_replace("-", "", $name));
     }
     if (($data === false || $data["lat"] == 0) && mb_stripos($name, "Str.") !== false) {
         $data = RISGeo::addressToGeo("Deutschland", "", "München", str_ireplace("Str.", "Straße", $name));
     }
     if ($data["lat"] <= 0 || $data["lon"] <= 0) {
         return null;
     }
     $ort = new OrtGeo();
     $ort->ort = $name;
     $ort->lat = $data["lat"];
     $ort->lon = $data["lon"];
     $ort->setzeBA();
     $ort->source = "auto";
     $ort->to_hide = 0;
     $ort->to_hide_kommentar = "";
     $ort->datum = new CDbExpression('NOW()');
     if (!$ort->save()) {
         RISTools::send_email(Yii::app()->params['adminEmail'], "OrtGeo:getOrCreate Error", print_r($ort->getErrors(), true), null, "system");
         throw new Exception("Fehler beim Speichern: Geo");
     }
     return $ort;
 }
Пример #27
0
        }
        $str .= "</a></li>";
        $antrag_typ[] = $str;
    }
}
if (count($antrag_typ) > 0) {
    $facet_groups["Dokumenttypen"] = $antrag_typ;
}
$wahlperiode = array();
$facet = $ergebnisse->getFacetSet()->getFacet('antrag_wahlperiode');
foreach ($facet as $value => $count) {
    if ($count > 0) {
        if (in_array($value, array("", "?"))) {
            continue;
        }
        $str = "<li><a href='" . RISTools::bracketEscape(CHtml::encode($krits->cloneKrits()->addWahlperiodeKrit($value)->getUrl())) . "'>";
        $str .= $value . ' (' . $count . ')';
        $str .= "</a></li>";
        $wahlperiode[] = $str;
    }
}
if (count($wahlperiode) > 0) {
    $facet_groups["Wahlperiode"] = $wahlperiode;
}
$has_facets = false;
foreach ($facet_groups as $name => $facets) {
    if (count($facets) > 1) {
        $has_facets = true;
    }
}
if ($has_facets) {
 /**
  * @param string $datum_max
  */
 public function actionStartseite($datum_max = "")
 {
     $this->top_menu = "stadtrat";
     $this->performLoginActions();
     $this->load_leaflet_css = true;
     $this->load_leaflet_draw_css = true;
     if (preg_match("/^[0-9]{4}\\-[0-9]{2}\\-[0-9]{2}\$/siu", $datum_max)) {
         $ts = RISTools::date_iso2timestamp($datum_max);
         list($antraege, $antraege_stadtrat, $antraege_sonstige, $rus, $datum_von, $datum_bis) = $this->getStadtratsDokumenteByDate($ts);
     } else {
         list($antraege, $antraege_stadtrat, $antraege_sonstige, $rus, $datum_von, $datum_bis) = $this->getStadtratsDokumenteByDate(time());
     }
     list($geodata, $geodata_overflow) = $this->antraege2geodata($antraege);
     $gestern = date("Y-m-d", RISTools::date_iso2timestamp($datum_von) - 1);
     $this->render('startseite', ["aeltere_url_ajax" => $this->createUrl("index/stadtratAntraegeAjaxDatum", ["datum_max" => $gestern]), "aeltere_url_std" => $this->createUrl("index/startseite", ["datum_max" => $gestern]) . "#stadtratsdokumente_holder", "neuere_url_ajax" => null, "neuere_url_std" => null, "antraege_sonstige" => $antraege_sonstige, "antraege_stadtrat" => $antraege_stadtrat, "geodata" => $geodata, "geodata_overflow" => $geodata_overflow, "datum" => $datum_von, "explizites_datum" => $datum_max != "", "statistiken" => RISMetadaten::getStats(), "rathausumschauen" => $rus]);
 }
Пример #29
0
 /**
  */
 public function highlightBenachrichtigung()
 {
     if ($this->seiten_anzahl >= 100) {
         RISTools::send_email(Yii::app()->params["adminEmail"], "[RIS] Highlight?", $this->getOriginalLink(), null, "system");
     }
 }
 public function parseSeite($seite, $first)
 {
     $text = RISTools::load_file("http://www.ris-muenchen.de/RII/RII/ris_mitglieder_trefferliste.jsp?txtPosition={$seite}");
     $txt = explode("<!-- tabellenkopf -->", $text);
     if (!isset($txt[1])) {
         if (SITE_CALL_MODE != "cron") {
             echo "- leer\n";
         }
         return [];
     } elseif ($first) {
         RISTools::send_email(Yii::app()->params['adminEmail'], "StadträTinnenUpdate VOLL", "Erste Seite voll: {$seite}", null, "system");
     }
     $txt = explode("<div class=\"ergebnisfuss\">", $txt[1]);
     preg_match_all("/ris_mitglieder_detail\\.jsp\\?risid=([0-9]+)[\"'& ]/siU", $txt[0], $matches);
     for ($i = count($matches[1]) - 1; $i >= 0; $i--) {
         if (!in_array($matches[1][$i], $this->bearbeitete_stadtraetInnen)) {
             try {
                 $this->parse($matches[1][$i]);
             } catch (Exception $e) {
                 RISTools::send_email(Yii::app()->params['adminEmail'], "StadträTinnenUpdate Error", $matches[1][$i] . $e, null, "system");
             }
             $this->bearbeitete_stadtraetInnen[] = $matches[1][$i];
         }
     }
     return $matches[1];
 }