/** * @param float $lat * @param float $lng * @param float $radius * @param int $seite */ public function actionAntraegeAjaxGeo($lat, $lng, $radius, $seite = 0) { $krits = new RISSucheKrits(); $krits->addGeoKrit($lng, $lat, $radius); $solr = RISSolrHelper::getSolrClient("ris"); $select = $solr->createSelect(); $krits->addKritsToSolr($select); $select->setStart(30 * $seite); $select->setRows(30); $select->addSort('sort_datum', $select::SORT_DESC); $ergebnisse = $solr->select($select); /** @var Antrag[] $antraege */ $antraege = []; /** @var RISSolrDocument[] $solr_dokumente */ $solr_dokumente = $ergebnisse->getDocuments(); $dokument_ids = []; foreach ($solr_dokumente as $dokument) { $x = explode(":", $dokument->id); $dokument_ids[] = IntVal($x[1]); } foreach ($dokument_ids as $dok_id) { /** @var Dokument $ant */ $ant = Dokument::model()->with(["antrag" => [], "antrag.dokumente" => ["alias" => "dokumente_2", "condition" => "dokumente_2.id IN (" . implode(", ", $dokument_ids) . ")"]])->findByPk($dok_id); if ($ant && $ant->antrag) { $antraege[$ant->antrag_id] = $ant->antrag; } } $geodata = $this->getJSGeodata($krits, $ergebnisse); $naechster_ort = OrtGeo::findClosest($lng, $lat); ob_start(); $this->renderPartial('index_antraege_liste', ["aeltere_url_ajax" => $this->createUrl("index/antraegeAjaxGeo", ["lat" => $lat, "lng" => $lng, "radius" => $radius, "seite" => $seite + 1]), "aeltere_url_std" => $this->createUrl("index/antraegeStdGeo", ["lat" => $lat, "lng" => $lng, "radius" => $radius, "seite" => $seite + 1]), "neuere_url_ajax" => null, "neuere_url_std" => null, "antraege" => $antraege, "geo_lng" => $lng, "geo_lat" => $lat, "radius" => $radius, "naechster_ort" => $naechster_ort, "weiter_links_oben" => true, "zeige_jahr" => true]); Header("Content-Type: application/json; charset=UTF-8"); echo json_encode(["datum" => date("Y-m-d"), "html" => ob_get_clean(), "geodata" => $geodata, "krit_str" => $krits->getJson(), "naechster_ort" => $naechster_ort->ort]); Yii::app()->end(); }
/** * @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); }