/** * @param int $id */ public function actionBinIch($id) { $this->top_menu = "personen"; $this->requireLogin($this->createUrl("personen/binIch", ["id" => $id])); /** @var StadtraetIn $person */ $person = StadtraetIn::model()->findByPk($id); if ($person->benutzerIn_id !== null) { $this->errorMessageAndDie(403, "Diese Person ist schon einem Account zugeordnet. Falls das ein Fehler ist, schreiben Sie uns bitte per Mail (" . Yii::app()->params["adminEmail"] . ")"); } $this->render("person-binich", ["person" => $person]); }
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(" ", " ", $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"); } } }
public function actionQuickSearchPrefetch() { header('Cache-Control: max-age=' . 7 * 24 * 3600); /** @var StadtraetIn[] $stadtraetInnen */ $stadtraetInnen = StadtraetIn::model()->findAll(); $this->render('quicksearch_prefetch', ['stadtraetInnen' => $stadtraetInnen]); }
public function run($args) { $sitemap_files = []; $datumformat = function ($datum) { $x = explode(" ", $datum); $y = explode("-", $x[0]); if ($y[0] < 2000) { $y[0] = "2000"; } if ($y[1] < 1 || $y[1] > 12) { $y[1] = "01"; } if ($y[2] < 1 || $y[2] > 31) { $y[2] = "01"; } return $y[0] . "-" . $y[1] . "-" . $y[2]; }; $sitemap_basepath = Yii::app()->getBasePath() . DIRECTORY_SEPARATOR . ".." . DIRECTORY_SEPARATOR . "html" . DIRECTORY_SEPARATOR; // Dokumente $sql = Yii::app()->db->createCommand(); $dokumente = $sql->select("id, datum")->from("dokumente")->where("deleted = 0")->order("id")->queryAll(); $sm_num = Ceil(count($dokumente) / 30000); for ($sm_page = 0; $sm_page < $sm_num; $sm_page++) { echo "Dokumente - Seite {$sm_page}\n"; $sitemap_file = "sitemap-dokumente-" . $sm_page . ".xml"; $fp = fopen($sitemap_basepath . $sitemap_file, "w"); fwrite($fp, '<?xml version="1.0" encoding="UTF-8"?>' . "\n"); fwrite($fp, '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' . "\n"); for ($i = $sm_page * 30000; $i < ($sm_page + 1) * 30000 && $i < count($dokumente); $i++) { $dok = $dokumente[$i]; fwrite($fp, "<url>\n<loc>" . SITE_BASE_URL . "/dokumente/" . $dok["id"] . "/</loc>\n"); fwrite($fp, "<changefreq>monthly</changefreq>\n"); fwrite($fp, "<lastmod>" . $datumformat($dok["datum"]) . "</lastmod>\n"); fwrite($fp, "</url>\n"); } fwrite($fp, "</urlset>\n"); fclose($fp); $sitemap_files[] = SITE_BASE_URL . "/" . $sitemap_file; } // Anträge $sql = Yii::app()->db->createCommand(); $antraege = $sql->select("id, datum_letzte_aenderung")->from("antraege")->order("id")->queryAll(); $sm_num = Ceil(count($antraege) / 30000); for ($sm_page = 0; $sm_page < $sm_num; $sm_page++) { echo "Anträge - Seite {$sm_page}\n"; $sitemap_file = "sitemap-antraege-" . $sm_page . ".xml"; $fp = fopen($sitemap_basepath . $sitemap_file, "w"); fwrite($fp, '<?xml version="1.0" encoding="UTF-8"?>' . "\n"); fwrite($fp, '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' . "\n"); for ($i = $sm_page * 30000; $i < ($sm_page + 1) * 30000 && $i < count($antraege); $i++) { $dok = $antraege[$i]; fwrite($fp, "<url>\n<loc>" . SITE_BASE_URL . "/antraege/" . $dok["id"] . "/</loc>\n"); fwrite($fp, "<changefreq>weekly</changefreq>\n"); fwrite($fp, "<lastmod>" . $datumformat($dok["datum_letzte_aenderung"]) . "</lastmod>\n"); fwrite($fp, "</url>\n"); } fwrite($fp, "</urlset>\n"); fclose($fp); $sitemap_files[] = SITE_BASE_URL . "/" . $sitemap_file; } // Termine $sql = Yii::app()->db->createCommand(); $termine = $sql->select("id, datum_letzte_aenderung")->from("termine")->where("typ = " . Termin::$TYP_AUTO)->order("id")->queryAll(); $sm_num = Ceil(count($termine) / 30000); for ($sm_page = 0; $sm_page < $sm_num; $sm_page++) { echo "Termine - Seite {$sm_page}\n"; $sitemap_file = "sitemap-termine-" . $sm_page . ".xml"; $fp = fopen($sitemap_basepath . $sitemap_file, "w"); fwrite($fp, '<?xml version="1.0" encoding="UTF-8"?>' . "\n"); fwrite($fp, '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' . "\n"); for ($i = $sm_page * 30000; $i < ($sm_page + 1) * 30000 && $i < count($termine); $i++) { $dok = $termine[$i]; fwrite($fp, "<url>\n<loc>" . SITE_BASE_URL . "/termine/" . $dok["id"] . "/</loc>\n"); fwrite($fp, "<changefreq>weekly</changefreq>\n"); fwrite($fp, "<lastmod>" . $datumformat($dok["datum_letzte_aenderung"]) . "</lastmod>\n"); fwrite($fp, "</url>\n"); } fwrite($fp, "</urlset>\n"); fclose($fp); $sitemap_files[] = SITE_BASE_URL . "/" . $sitemap_file; } // StadträtInnen echo "StadträtInnen\n"; /** @var StadtraetIn[] $strs */ $strs = StadtraetIn::model()->findAll(); $sitemap_file = "sitemap-stadtraetinnen.xml"; $fp = fopen($sitemap_basepath . $sitemap_file, "w"); fwrite($fp, '<?xml version="1.0" encoding="UTF-8"?>' . "\n"); fwrite($fp, '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' . "\n"); foreach ($strs as $str) { fwrite($fp, "<url>\n<loc>" . $str->getLink() . "</loc>\n"); fwrite($fp, "<changefreq>weekly</changefreq>\n"); fwrite($fp, "<lastmod>" . date("Y-m-d") . "</lastmod>\n"); fwrite($fp, "</url>\n"); } fwrite($fp, "</urlset>\n"); fclose($fp); $sitemap_files[] = SITE_BASE_URL . "/" . $sitemap_file; $fp = fopen($sitemap_basepath . "sitemap-index.xml", "w"); fwrite($fp, '<?xml version="1.0" encoding="UTF-8"?>' . "\n" . '<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">'); foreach ($sitemap_files as $file) { fwrite($fp, '<sitemap> <loc>' . CHtml::encode($file) . '</loc> <lastmod>' . date("Y-m-d") . '</lastmod> </sitemap>' . "\n"); } fwrite($fp, '</sitemapindex>'); fclose($fp); }
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]+)&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(" ", " ", $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"; } } }
public function actionStadtraetInnenBenutzerInnen() { $ich = $this->aktuelleBenutzerIn(); if (!$ich) { $this->errorMessageAndDie(403, ""); } if (!$ich->hatBerechtigung(BenutzerIn::$BERECHTIGUNG_USER)) { $this->errorMessageAndDie(403, ""); } $this->top_menu = "admin"; if (AntiXSS::isTokenSet("save") && isset($_REQUEST["BenutzerIn"])) { foreach ($_REQUEST["BenutzerIn"] as $strIn_id => $benutzerIn_id) { /** @var StadtraetIn $strIn */ $strIn = StadtraetIn::model()->findByPk($strIn_id); if ($benutzerIn_id > 0) { $strIn->benutzerIn_id = IntVal($benutzerIn_id); } else { $strIn->benutzerIn_id = null; } $strIn->save(); } $this->msg_ok = "Gespeichert"; } /** @var StadtraetIn[] $stadtraetInnen */ $stadtraetInnen = StadtraetIn::model()->findAll(); $stadtraetInnen = StadtraetIn::sortByName($stadtraetInnen); $this->render("stadtraetInnenBenutzerInnen", ["stadtraetInnen" => $stadtraetInnen]); }
public function parse($stadtraetIn_id) { $stadtraetIn_id = IntVal($stadtraetIn_id); if (SITE_CALL_MODE != "cron") { echo "- StadträtIn {$stadtraetIn_id}\n"; } $html_details = RISTools::load_file("http://www.ris-muenchen.de/RII/RII/ris_mitglieder_detail_fraktion.jsp?risid={$stadtraetIn_id}"); $daten = new StadtraetIn(); $daten->id = $stadtraetIn_id; $daten->referentIn = 0; if (preg_match("/introheadline\">(.*)<\\/h3/siU", $html_details, $matches)) { $daten->name = trim(str_replace(" ", " ", $matches[1])); } if (preg_match("/Gewählt am:.*detail_div\">([0-9\\.]+)<\\/div/siU", $html_details, $matches)) { $x = explode(".", $matches[1]); $daten->gewaehlt_am = $x[2] . "-" . $x[1] . "-" . $x[0]; } if (preg_match("/Lebenslauf.*detail_div\">(.*)<\\/di/siU", $html_details, $matches)) { $daten->bio = str_replace("<br />", "", $matches[1]); } $aenderungen = ""; /** @var StadtraetIn $alter_eintrag */ $alter_eintrag = StadtraetIn::model()->findByPk($stadtraetIn_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->gewaehlt_am != $daten->gewaehlt_am) { $aenderungen .= "Gewählt am: " . $alter_eintrag->gewaehlt_am . " => " . $daten->gewaehlt_am . "\n"; } if ($alter_eintrag->bio != $daten->bio) { $aenderungen .= "Biografie: " . $alter_eintrag->bio . " => " . $daten->bio . "\n"; } if ($aenderungen != "") { $changed = true; } $daten->web = $alter_eintrag->web; $daten->twitter = $alter_eintrag->twitter; $daten->facebook = $alter_eintrag->facebook; $daten->abgeordnetenwatch = $alter_eintrag->abgeordnetenwatch; $daten->quellen = $alter_eintrag->quellen; $daten->geburtstag = $alter_eintrag->geburtstag; $daten->geschlecht = $alter_eintrag->geschlecht; $daten->beschreibung = $alter_eintrag->beschreibung; $daten->beruf = $alter_eintrag->beruf; $daten->kontaktdaten = $alter_eintrag->kontaktdaten; } if ($changed) { if ($aenderungen == "") { $aenderungen = "Neu angelegt\n"; } } if ($alter_eintrag) { $alter_eintrag->setAttributes($daten->getAttributes(), false); if (!$alter_eintrag->save()) { echo "StadträtInnen 1\n"; var_dump($alter_eintrag->getErrors()); die("Fehler"); } $daten = $alter_eintrag; } else { if (!$daten->save()) { echo "StadträtInnen 2\n"; var_dump($daten->getErrors()); die("Fehler"); } } $unten = explode("Tabellarische Übersicht der Zugehörigkei", $html_details); $unten = $unten[1]; preg_match_all("/ris_fraktionen_detail\\.jsp\\?risid=(?<fraktion_id>[0-9]+)&periodeid=(?<wahlperiode>[0-9]+)[\"'& ].*tdborder\">(?<mitgliedschaft>[^<]*)<\\/td>.*Funktion[^>]*>(?<funktion>[^<]*) *<.*<\\/tr/siU", $unten, $matches); for ($i = 0; $i < count($matches[1]); $i++) { $str_fraktion = new StadtraetInFraktion(); 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[3][$i], $mitgliedschaft_matches)) { $str_fraktion->datum_von = $mitgliedschaft_matches["von_jahr"] . "-" . $mitgliedschaft_matches["von_monat"] . "-" . $mitgliedschaft_matches["von_tag"]; $str_fraktion->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[3][$i], $mitgliedschaft_matches)) { $str_fraktion->datum_von = $mitgliedschaft_matches["von_jahr"] . "-" . $mitgliedschaft_matches["von_monat"] . "-" . $mitgliedschaft_matches["von_tag"]; $str_fraktion->datum_bis = null; } $str_fraktion->fraktion_id = $matches["fraktion_id"][$i]; $str_fraktion->stadtraetIn_id = $stadtraetIn_id; $str_fraktion->wahlperiode = $matches["wahlperiode"][$i]; $str_fraktion->funktion = $matches["funktion"][$i]; $str_fraktion->mitgliedschaft = $matches["mitgliedschaft"][$i]; /** @var array|StadtraetInFraktion[] $bisherige_fraktionen */ $bisherige_fraktionen = StadtraetInFraktion::model()->findAllByAttributes(["stadtraetIn_id" => $stadtraetIn_id]); /** @var null|StadtraetInFraktion $bisherige */ $bisherige = null; foreach ($bisherige_fraktionen as $fr) { if ($fr->fraktion_id == $str_fraktion->fraktion_id && $fr->wahlperiode == $str_fraktion->wahlperiode && $fr->funktion == $str_fraktion->funktion) { $bisherige = $fr; } } if ($bisherige === null) { $fraktion = Fraktion::model()->findByPk($str_fraktion->fraktion_id); if (is_null($fraktion)) { $frakt_parser = new StadtratsfraktionParser(); $frakt_parser->parse($str_fraktion->fraktion_id, $str_fraktion->wahlperiode); } $str_fraktion->save(); $aenderungen = "Neue Fraktionszugehörigkeit: " . $str_fraktion->fraktion->name . "\n"; } else { if ($bisherige->wahlperiode != $matches["wahlperiode"][$i]) { $aenderungen .= "Neue Wahlperiode: " . $bisherige->wahlperiode . " => " . $matches["wahlperiode"][$i] . "\n"; } if ($bisherige->funktion != $matches["funktion"][$i]) { $aenderungen .= "Neue Funktion in der Fraktion: " . $bisherige->funktion . " => " . $matches["funktion"][$i] . "\n"; } if ($bisherige->mitgliedschaft != $matches["mitgliedschaft"][$i]) { $aenderungen .= "Mitgliedschaft in der Fraktion: " . $bisherige->mitgliedschaft . " => " . $matches["mitgliedschaft"][$i] . "\n"; } if ($bisherige->datum_von != $str_fraktion->datum_von) { $aenderungen .= "Fraktionsmitgliedschaft Start: " . $bisherige->datum_von . " => " . $str_fraktion->datum_von . "\n"; } if ($bisherige->datum_bis != $str_fraktion->datum_bis) { $aenderungen .= "Fraktionsmitgliedschaft Ende: " . $bisherige->datum_bis . " => " . $str_fraktion->datum_bis . "\n"; } $bisherige->setAttributes($str_fraktion->getAttributes()); $bisherige->save(); } } if ($aenderungen != "") { echo "StadträtIn {$stadtraetIn_id}: Verändert: " . $aenderungen . "\n"; } if ($aenderungen != "") { $aend = new RISAenderung(); $aend->ris_id = $daten->id; $aend->ba_nr = null; $aend->typ = RISAenderung::$TYP_STADTRAETIN; $aend->datum = new CDbExpression("NOW()"); $aend->aenderungen = $aenderungen; $aend->save(); } if ($this->antraege_alle) { $text = RISTools::load_file("http://www.ris-muenchen.de/RII/RII/ris_antrag_trefferliste.jsp?nav=2&selWahlperiode=0&steller={$stadtraetIn_id}&txtPosition=0"); if (preg_match("/Suchergebnisse:.* ([0-9]+)<\\/p>/siU", $text, $matches)) { $seiten = Ceil($matches[1] / 10); for ($i = 0; $i < $seiten; $i++) { $this->parse_antraege($stadtraetIn_id, $i); } } else { if (SITE_CALL_MODE != "cron") { echo "Keine Anträge gefunden\n"; } } } else { for ($i = 0; $i < 2; $i++) { $this->parse_antraege($stadtraetIn_id, $i); } } }
public function parse($gremien_id, $wahlperiode_id = 0) { $wahlperiode_id = IntVal($wahlperiode_id > 0 ? $wahlperiode_id : static::$WAHLPERIODE_ID); $gremien_id = IntVal($gremien_id); if (SITE_CALL_MODE != "cron") { echo "- Gremium {$gremien_id}\n"; } $html_details = RISTools::load_file("http://www.ris-muenchen.de/RII/BA-RII/ba_gremien_details.jsp?Id=" . $gremien_id . "&Wahlperiode=" . $wahlperiode_id); $daten = new Gremium(); $daten->id = $gremien_id; $daten->datum_letzte_aenderung = new CDbExpression('NOW()'); if (preg_match("/introheadline\">([^>]+)<\\/h3/siU", $html_details, $matches)) { $daten->name = trim($matches[1]); } if (preg_match("/<a href=\"ba_bezirksausschuesse_details[^>]+>(?<ba>[0-9]+ )/siU", $html_details, $matches)) { $daten->ba_nr = trim($matches["ba"]); } if (preg_match("/rzel:.*detail_div\">([^>]*)<\\//siU", $html_details, $matches)) { $daten->kuerzel = trim($matches[1]); } if (preg_match("/Gremiumtyp:.*detail_div\">([^>]*)<\\//siU", $html_details, $matches)) { $daten->gremientyp = $matches[1]; } $aenderungen = ""; foreach ($daten as $key => $val) { $daten[$key] = $val === null ? null : html_entity_decode(trim($val), ENT_COMPAT, "UTF-8"); } /** @var Gremium $alter_eintrag */ $alter_eintrag = Gremium::model()->findByPk($gremien_id); if ($alter_eintrag) { $changed = false; if ($alter_eintrag->name != $daten->name) { $aenderungen .= "Name: " . $alter_eintrag->name . " => " . $daten->name . "\n"; } if ($alter_eintrag->ba_nr != $daten->ba_nr) { $aenderungen .= "BA: " . $alter_eintrag->ba_nr . " => " . $daten->ba_nr . "\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 ($aenderungen != "") { $changed = true; } } else { $aenderungen = "Neu angelegt\n"; $changed = true; } if ($changed) { if ($alter_eintrag) { $alter_eintrag->copyToHistory(); $alter_eintrag->setAttributes($daten->getAttributes()); if (!$alter_eintrag->save()) { echo "Gremium 3"; var_dump($alter_eintrag->getErrors()); die("Fehler"); } $daten = $alter_eintrag; } else { if (!$daten->save()) { echo "Gremium 4"; var_dump($daten->getErrors()); die("Fehler"); } } } /** @var StadtraetInGremium[] $mitglieder_pre */ $mitglieder_pre = []; if ($alter_eintrag) { foreach ($alter_eintrag->mitgliedschaften as $mitgliedschaft) { $mitglieder_pre[$mitgliedschaft->stadtraetIn_id] = $mitgliedschaft; } } $mitglieder_post = []; preg_match_all("/ergebnistab_tr.*<\\/tr/siU", $html_details, $matches); foreach ($matches[0] as $str) { preg_match("/<a[^>]*Id=(?<id>[0-9]+)&[^>]*>(?<name>[^<]*)<\\/a>.*<td[^>]*>(?<partei>[^<]*)<\\/td.*<td[^>]*>(?<datum>[^<]*)<\\/td.*<td[^>]*>(?<funktion>[^<]*)<\\/td/siU", $str, $match2); if ($match2) { /** @var StadtraetIn $stadtraetIn */ $stadtraetIn = StadtraetIn::model()->findByPk($match2["id"]); if (!$stadtraetIn) { $par = new BAMitgliederParser(); $kuerzel = preg_replace("/^ua ?/siu", "", $daten->kuerzel); $par->parse(IntVal($kuerzel)); $stadtraetIn = StadtraetIn::model()->findByPk($match2["id"]); if (!$stadtraetIn) { $name = trim(str_replace([" ", "Herr", "Frau"], [" ", " ", " "], $match2["name"])); $stadtraetIn = StadtraetIn::model()->findByAttributes(["name" => $name]); if (!$stadtraetIn) { RISTools::send_email(Yii::app()->params['adminEmail'], "BA-Gremium nicht zuordbar", "Gremium: {$gremien_id}\nMitglieds-ID: " . $match2["id"], null, "system"); return; } } } $datum = trim(str_ireplace("von ", "", $match2["datum"])); $datum = str_replace("seit ", "", $datum); $datum = explode(" bis ", $datum); $x = explode(".", $datum[0]); $datum_von = $x[2] . "-" . $x[1] . "-" . $x[0]; if (count($datum) == 2) { $x = explode(".", $datum[1]); $datum_bis = $x[2] . "-" . $x[1] . "-" . $x[0]; } else { $datum_bis = null; } if (isset($mitglieder_pre[$stadtraetIn->id])) { $mitgliedschaft = $mitglieder_pre[$stadtraetIn->id]; if ($mitgliedschaft->datum_von != $datum_von || $mitgliedschaft->datum_bis != $datum_bis) { $mitgliedschaft->funktion = $match2["funktion"]; $aenderungen .= "Mitgliedschaft von " . $mitgliedschaft->stadtraetIn->name . ": "; $aenderungen .= $mitgliedschaft->datum_von . "/" . $mitgliedschaft->datum_bis . " => "; $aenderungen .= $datum_von . "/" . $datum_bis . "\n"; $mitgliedschaft->datum_von = $datum_von; $mitgliedschaft->datum_bis = $datum_bis; $mitgliedschaft->save(); } if ($mitgliedschaft->funktion != $match2["funktion"]) { $mitgliedschaft->funktion = $match2["funktion"]; $aenderungen .= "Funktion von " . $mitgliedschaft->stadtraetIn->name . ": " . $mitgliedschaft->funktion . " => " . $match2["funktion"] . "\n"; $mitgliedschaft->save(); } } else { $mitgliedschaft = new StadtraetInGremium(); $mitgliedschaft->datum_von = $datum_von; $mitgliedschaft->datum_bis = $datum_bis; $mitgliedschaft->funktion = trim($match2["funktion"]); $mitgliedschaft->gremium_id = $gremien_id; $mitgliedschaft->stadtraetIn_id = $stadtraetIn->id; $mitgliedschaft->save(); $mitgliedschaft->refresh(); $aenderungen .= "Neues Mitglied: " . $mitgliedschaft->stadtraetIn->name . "\n"; } $mitglieder_post[$stadtraetIn->id] = $mitgliedschaft; } } foreach ($mitglieder_pre as $strIn_id => $mitgliedschaft_pre) { if (!isset($mitglieder_post[$strIn_id])) { $aenderungen .= "Mitglied nicht mehr dabei: " . $strIn_id . " - " . $mitgliedschaft_pre->stadtraetIn->getName() . "\n"; $mitgliedschaft_pre->delete(); } } if ($aenderungen != "") { echo $aenderungen . "\n"; $aend = new RISAenderung(); $aend->ris_id = $daten->id; $aend->ba_nr = null; $aend->typ = RISAenderung::$TYP_BA_GREMIUM; $aend->datum = new CDbExpression("NOW()"); $aend->aenderungen = $aenderungen; $aend->save(); } }
/** * @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 $datum * @param int|null $ba_nr * @return StadtraetIn[] */ public static function getByFraktion($datum, $ba_nr) { if ($ba_nr === null) { $ba_where = "c.ba_nr IS NULL"; } else { $ba_where = "c.ba_nr = " . IntVal($ba_nr); } /** @var StadtraetIn[] $strs_in */ $strs_in = StadtraetIn::model()->findAll(['alias' => 'a', 'order' => 'a.name ASC', 'with' => ['stadtraetInnenFraktionen' => ['alias' => 'b', 'condition' => 'b.datum_von <= "' . addslashes($datum) . '" AND (b.datum_bis IS NULL OR b.datum_bis >= "' . addslashes($datum) . '")'], 'stadtraetInnenFraktionen.fraktion' => ['alias' => 'c', 'condition' => $ba_where]]]); foreach ($strs_in as $key => $strIn) { $strIn->overrideFraktionsMitgliedschaften(); } /** @var StadtraetIn[] $strs_out */ $strs_out = []; foreach ($strs_in as $strs) { if ($strs->id == 3425214) { continue; } // Seltsamer ristestuser http://www.ris-muenchen.de/RII/RII/ris_mitglieder_detail_fraktion.jsp?risid=3425214&periodeid=null o_O $strs_out[] = $strs; } return $strs_out; }