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");
         }
     }
 }
 /**
  * @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 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]+)&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";
         }
     }
 }
 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("&nbsp;", " ", $matches[1]));
     }
     if (preg_match("/Gew&auml;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 &Uuml;bersicht der Zugeh&ouml;rigkei", $html_details);
     $unten = $unten[1];
     preg_match_all("/ris_fraktionen_detail\\.jsp\\?risid=(?<fraktion_id>[0-9]+)&amp;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(["&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();
     }
 }
示例#9
0
                        </label>
                    <?php 
}
?>
                </div>

                <div class="sort_widget">
                    Sortierung:
                    <a href="#" data-sort="vorname" class="active">Vorname</a> &nbsp;
                    <a href="#" data-sort="nachname">Nachname</a>
                </div>
            </div>

            <ul class="strIn_liste">
                <?php 
$personen = StadtraetIn::sortByName($personen);
foreach ($personen as $strIn) {
    echo '<li class="strIn fraktion_';
    if (count($strIn->stadtraetInnenFraktionen) > 0) {
        echo $strIn->stadtraetInnenFraktionen[0]->fraktion_id;
    } else {
        echo "0";
    }
    if ($strIn->twitter != "") {
        echo " twitter";
    }
    if ($strIn->facebook != "") {
        echo " facebook";
    }
    if ($strIn->web != "") {
        echo " homepage";
示例#10
0
usort($fraktionen, function ($val1, $val2) {
    if (count($val1) < count($val2)) {
        return 1;
    }
    if (count($val1) > count($val2)) {
        return -1;
    }
    return 0;
});
foreach ($fraktionen as $fraktion) {
    /** @var StadtraetIn[] $fraktion */
    $fr = $fraktion[0]->stadtraetInnenFraktionen[0]->fraktion;
    echo "<li><a href='" . CHtml::encode($fr->getLink()) . "' class='name'><span class=\"glyphicon glyphicon-chevron-right\"></span>";
    echo "<span class='count'>" . count($fraktion) . "</span>";
    echo CHtml::encode($fr->getName()) . "</a><ul class='mitglieder'>";
    $mitglieder = StadtraetIn::sortByName($fraktion);
    foreach ($mitglieder as $mitglied) {
        echo "<li>";
        echo "<a href='" . CHtml::encode($mitglied->getLink()) . "' class='ris_link'>" . CHtml::encode($mitglied->getName()) . "</a>";
        if ($mitglied->abgeordnetenwatch != "") {
            echo "<a href='" . CHtml::encode($mitglied->abgeordnetenwatch) . "' title='Abgeordnetenwatch' class='abgeordnetenwatch_link'></a>";
        }
        if ($mitglied->web != "") {
            echo "<a href='" . CHtml::encode($mitglied->web) . "' title='Homepage' class='web_link'></a>";
        }
        if ($mitglied->twitter != "") {
            echo "<a href='https://twitter.com/" . CHtml::encode($mitglied->twitter) . "' title='Twitter'           class='twitter_link'>T         </a>";
        }
        if ($mitglied->facebook != "") {
            echo "<a href='https://www.facebook.com/" . CHtml::encode($mitglied->facebook) . "' title='Facebook'          class='fb_link'>     f         </a>";
        }
 /**
  * @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;
     }
 }
示例#12
0
 /**
  * @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;
 }