public function run($args)
 {
     if (count($args) == 0) {
         die("./yii recalc_ort2ba [Orts-ID|alle]\n");
     }
     if ($args[0] == "alle") {
         /** @var OrtGeo[] $orte */
         $orte = OrtGeo::model()->findAll(["order" => "id"]);
     } else {
         /** @var OrtGeo[] $orte */
         $orte = OrtGeo::model()->findAll(["condition" => "id = " . IntVal($args[0])]);
     }
     /** @var Bezirksausschuss[] $bas */
     $bas = Bezirksausschuss::model()->findAll();
     foreach ($orte as $ort) {
         $found_ba = null;
         foreach ($bas as $ba) {
             if ($ba->pointInBA($ort->lon, $ort->lat)) {
                 echo $ort->id . " - " . $ort->ort . ": " . $ba->ba_nr . "\n";
                 $found_ba = $ba->ba_nr;
             }
         }
         if ($found_ba) {
             $ort->ba_nr = $found_ba;
             $ort->save();
         }
     }
 }
 public function getAssetsBase()
 {
     if ($this->_assetsBase === null) {
         /** @var CWebApplication $app */
         $app = Yii::app();
         $this->_assetsBase = $app->assetManager->publish(Yii::getPathOfAlias('application.assets'), false, -1, defined('YII_DEBUG') && YII_DEBUG);
         $path = getcwd() . $this->_assetsBase . "/";
         if (!file_exists($path . "ba_grenzen_geojson.js")) {
             $BAGrenzenGeoJSON = [];
             /** @var array|Bezirksausschuss[] $BAs */
             $BAs = Bezirksausschuss::model()->findAll();
             foreach ($BAs as $ba) {
                 $BAGrenzenGeoJSON[] = $ba->toGeoJSONArray();
             }
             file_put_contents($path . "ba_grenzen_geojson.js", "BA_GRENZEN_GEOJSON = " . json_encode($BAGrenzenGeoJSON) . ";");
         }
     }
     return $this->_assetsBase;
 }
 public function actionBaListe()
 {
     $this->render('ba_liste', ["bas" => Bezirksausschuss::model()->findAll()]);
 }
 public function setzeBA()
 {
     /** @var Bezirksausschuss[] $bas */
     $bas = Bezirksausschuss::model()->findAll();
     $this->ba_nr = null;
     foreach ($bas as $ba) {
         if ($this->ba_nr === null && $ba->pointInBA($this->lon, $this->lat)) {
             $this->ba_nr = $ba->ba_nr;
         }
     }
 }
 public function actionBaTermineAlle($ba_nr)
 {
     /** @var Termin[] $termine */
     $termine = Termin::model()->findAllByAttributes(["ba_nr" => $ba_nr], ["order" => "termin DESC"]);
     $termin_arr = [];
     foreach ($termine as $t) {
         $termin_arr[] = $t->toArr();
     }
     /** @var Bezirksausschuss $ba */
     $ba = Bezirksausschuss::model()->findByPk($ba_nr);
     $this->render("ba_termine_alle", ["ba" => $ba, "termine" => $termin_arr]);
 }
 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";
         }
     }
 }
 * @var array $geodata_overflow
 * @var Antrag[] $antraege_stadtrat
 * @var Antrag[] $antraege_sonstige
 * @var string $datum
 * @var bool $explizites_datum
 * @var string $neuere_url_ajax
 * @var string $neuere_url_std
 * @var string $aeltere_url_ajax
 * @var string $aeltere_url_std
 * @var array $statistiken
 * @var Rathausumschau[] $rathausumschauen
 */
$this->pageTitle = Yii::app()->name;
$ba_links = [];
/** @var Bezirksausschuss[] $bas */
$bas = Bezirksausschuss::model()->findAll();
foreach ($bas as $ba) {
    $ba_links["ba_" . $ba->ba_nr] = $ba->getLink();
}
?>

<section class="well">
    <h1 class="sr-only"><?php 
echo CHtml::encode($this->pageTitle);
?>
</h1>

    <?php 
$this->renderPartial("/index/map", array("ortsbezugszahlgrenze" => 10, "geodata_overflow" => $geodata_overflow));
?>
 /**
  * @param Dokument|null $dokument
  * @return string
  */
 public function getTitle($dokument = null)
 {
     if (count($this->krits) == 1) {
         switch ($this->krits[0]["typ"]) {
             case "betreff":
                 $such = $this->krits[0]["suchbegriff"];
                 if ($such[0] == "\"" && $such[strlen($such) - 1] == "\"") {
                     return "Dokumente mit " . $this->krits[0]["suchbegriff"] . " im Betreff";
                 }
                 return "Dokumente mit \"" . $such . "\" im Betreff";
             case "antrag_typ":
                 return "Dokumente des Typs \"" . Dokument::$TYPEN_ALLE[$this->krits[0]["suchbegriff"]] . "\"";
             case "volltext":
                 $such = $this->krits[0]["suchbegriff"];
                 if ($such[0] == "\"" && $such[strlen($such) - 1] == "\"") {
                     return "Volltextsuche nach " . $this->krits[0]["suchbegriff"];
                 }
                 return "Volltextsuche nach \"" . $such . "\"";
             case "ba":
                 /** @var Bezirksausschuss $ba */
                 $ba = Bezirksausschuss::model()->findByAttributes(["ba_nr" => $this->krits[0]["ba_nr"]]);
                 return "Bezirksausschuss " . $ba->ba_nr . ": " . $ba->name;
             case "geo":
                 $ort = OrtGeo::findClosest($this->krits[0]["lng"], $this->krits[0]["lat"]);
                 $title = "Dokumente mit Ortsbezug (ungefähr: " . IntVal($this->krits[0]["radius"]) . "m um \"" . $ort->ort . "\")";
                 if ($dokument) {
                     /** @var OrtGeo[] $gefundene_orte */
                     $gefundene_orte = [];
                     foreach ($dokument->orte as $dok_ort_ort) {
                         $dok_ort = $dok_ort_ort->ort;
                         $distance = RISGeo::getDistance($dok_ort->lat, $dok_ort->lon, $this->krits[0]["lat"], $this->krits[0]["lng"]);
                         if ($distance * 1000 <= $this->krits[0]["radius"]) {
                             $gefundene_orte[] = $dok_ort;
                         }
                     }
                     if (count($gefundene_orte) > 0) {
                         $namen = [];
                         foreach ($gefundene_orte as $gef_ort) {
                             $namen[] = $gef_ort->ort;
                         }
                         $title .= ": " . implode(", ", $namen);
                     }
                 }
                 return $title;
             case "referat":
                 /** @var Referat $ref */
                 $ref = Referat::model()->findByPk($this->krits[0]["referat_id"]);
                 return $ref->name;
                 break;
             case "antrag_wahlperiode":
                 return "Dokumente der Wahlperiode " . $this->krits[0]["suchbegriff"];
             case "antrag_nr":
                 return "Antrag Nr. " . str_replace("*", " ", $this->krits[0]["suchbegriff"]);
         }
     }
     if (count($this->krits) > 1) {
         $krits = [];
         foreach ($this->krits as $cr) {
             switch ($cr["typ"]) {
                 case "betreff":
                     $krits[] = "mit \"" . $cr["suchbegriff"] . "\" im Betreff";
                     break;
                 case "antrag_typ":
                     $krits[] = "vom Typ \"" . Dokument::$TYPEN_ALLE[$cr["suchbegriff"]] . "\"";
                     break;
                 case "volltext":
                     $krits[] = "mit dem Suchausdruck \"" . $cr["suchbegriff"] . "\"";
                     break;
                 case "ba":
                     /** @var Bezirksausschuss $ba */
                     $ba = Bezirksausschuss::model()->findByAttributes(["ba_nr" => $cr["ba_nr"]]);
                     $krits[] = "aus dem Bezirksausschuss " . $ba->ba_nr . ": " . $ba->name;
                     break;
                 case "geo":
                     $ort = OrtGeo::findClosest($cr["lng"], $cr["lat"]);
                     $krits[] = "mit einem Ortsbezug (ungefähr: " . IntVal($cr["radius"]) . "m um \"" . $ort->ort . "\")";
                     break;
                 case "antrag_nr":
                     $krits[] = "zum Antrag Nr. " . $cr["suchbegriff"];
                     break;
                 case "referat":
                     /** @var Referat $ref */
                     $ref = Referat::model()->findByPk($cr["referat_id"]);
                     $krits[] = "im Zuständigkeitsbereich des " . $ref->name;
                     break;
                 case "antrag_wahlperiode":
                     $krits[] = "aus der Wahlperiode " . CHtml::encode($cr["suchbegriff"]);
                     break;
                 default:
                     $krits[] = json_encode($cr);
             }
         }
         $text = "Dokumente ";
         for ($i = 0; $i < count($krits) - 1; $i++) {
             $text .= $krits[$i];
             if ($i < count($krits) - 2) {
                 $text .= ", ";
             }
         }
         $text .= " und " . $krits[count($krits) - 1];
         return $text;
     }
     return json_encode($this->krits);
 }
" onclick="return confirm('Wirklich löschen?');" style="color: red;">löschen</a>
                    </td>
                </tr>
            <?php 
}
?>

            <tr>
                <th colspan="3" style="font-size: 16px; padding-top: 50px;">Neuen Eintrag anlegen</th>
            </tr>
            <tr>
                <td style="padding: 5px;"><select name="neu[ba_nr]" size="1" style="max-width: 200px;">
                        <option value=""></option>
                        <?php 
/** @var Bezirksausschuss[] $bas */
$bas = Bezirksausschuss::model()->findAll(array("order" => "ba_nr"));
foreach ($bas as $ba) {
    echo '<option value="' . $ba->ba_nr . '">BA ' . $ba->ba_nr . ': ' . CHtml::encode($ba->name) . '</option>' . "\n";
}
?>
                    </select></td>
                <td style="padding: 5px;">
                    <input type="text" name="neu[datum]" placeholder="YYYY-MM-DD HH:II:SS" size="20">
                </td>
                <td style="padding: 5px;">
                    <textarea cols="50" rows="3" name="neu[ort]"></textarea>
                </td>
                <td style="padding: 5px;"></td>
            </tr>
            </tbody>
        </table>