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"); } } }
/** * @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); }
<?php } ?> </select> </div> </div> <div class="form-group"> <label for="suche_referat" class="col-sm-3 control-label">Zuständiges Referat:</label> <div class="col-sm-9"> <select id="suche_referat" name="referat" size="1" class="form-control"> <option>- egal -</option> <?php /** @var Referat[] $referate */ $referate = Referat::model()->findAll(); foreach ($referate as $ref) { ?> <option value="<?php echo $ref->id; ?> "><?php echo CHtml::encode($ref->name); ?> </option> <?php } ?> </select> </div> </div>
/** * @param string $name * @return null|Referat */ public static function getByHtmlName($name) { $name = trim(strip_tags($name)); $ref = Referat::model()->findByAttributes(["name" => $name]); return $ref; }
/** * */ public function actionIndex() { $this->top_menu = "themen"; $this->render("index", ["referate" => Referat::model()->findAll(), "highlights" => Dokument::getHighlightDokumente(5), "tags" => Tag::getTopTags(10)]); }