public function run($args)
 {
     if (!isset($args[0]) || $args[0] != "alle" && $args[0] <= 1) {
         die("./yiic reindex_ba_mitglied [BA-Nr]|alle\n");
     }
     $parser = new BAMitgliederParser();
     if ($args[0] == "alle") {
         $parser->parseAlle();
     } elseif ($args[0] > 0) {
         $parser->parse($args[0]);
     }
 }
 public function run($args)
 {
     $parser = new BAMitgliederParser();
     $parser->parseAlle();
     $parser = new BAGremienParser();
     $parser->parseAlle();
     $parser = new BATerminParser();
     $parser->parseAlle();
     $parser = new BAAntragParser();
     $parser->parseAlle();
     $parser = new BAInitiativeParser();
     $parser->parseAlle();
 }
 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(["&nbsp;", "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();
     }
 }