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(" ", " ", $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 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 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($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"; } } }
?> </ul> </div> </nav> </div> </div> <div class="col-sm-9"> <?php //echo '<h2>' . CHtml::encode($personen_typ_name) . '</h2>'; $fraktionen = array(); $twitter = $facebook = $website = false; foreach ($personen as $strIn) { if (count($strIn->stadtraetInnenFraktionen) > 0) { $frakt = $strIn->stadtraetInnenFraktionen[0]->fraktion; } else { $frakt = new Fraktion(); $frakt->id = "0"; $frakt->name = "Fraktionslos"; } if (!isset($fraktionen[$frakt->id])) { $fraktionen[$frakt->id] = $frakt->getName(true); } if ($strIn->twitter != "") { $twitter = true; } if ($strIn->facebook != "") { $facebook = true; } if ($strIn->web != "") { $website = true; }