/**
  * @param array $request
  * @return RISSucheKrits
  */
 public static function createFromUrl($request)
 {
     $x = new RISSucheKrits();
     if (isset($request["krit_typ"])) {
         for ($i = 0; $i < count($request["krit_typ"]); $i++) {
             switch ($request["krit_typ"][$i]) {
                 case "betreff":
                     $x->addBetreffKrit($request["krit_val"][$i]);
                     break;
                 case "volltext":
                     $x->addVolltextsucheKrit($request["krit_val"][$i]);
                     break;
                 case "antrag_typ":
                     $x->addAntragTypKrit($request["krit_val"][$i]);
                     break;
                 case "antrag_wahlperiode":
                     $x->addWahlperiodeKrit($request["krit_val"][$i]);
                     break;
                 case "ba":
                     $x->addBAKrit($request["krit_val"][$i]);
                     break;
                 case "geo":
                     $y = explode("-", $request["krit_val"][$i]);
                     $x->addGeoKrit($y[0], $y[1], $y[2]);
                     break;
                 case "referat":
                     $x->addReferatKrit($request["krit_val"][$i]);
                     break;
                 case "antrag_nr":
                     $x->addAntragNrKrit($request["krit_val"][$i]);
                     break;
             }
         }
     }
     return $x;
 }
 /**
  * @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();
 }
 public function actionIndex($code = "")
 {
     $this->top_menu = "benachrichtigungen";
     $this->requireLogin($this->createUrl("index/benachrichtigungen"), $code);
     /** @var BenutzerIn $ich */
     $ich = $this->aktuelleBenutzerIn();
     $this->load_leaflet_css = true;
     $this->load_leaflet_draw_css = true;
     if (AntiXSS::isTokenSet("einstellungen_speichern")) {
         $einstellungen = $ich->getEinstellungen();
         if (isset($_REQUEST["intervall"]) && $_REQUEST["intervall"] == "tag") {
             $einstellungen->benachrichtigungstag = null;
         }
         if (isset($_REQUEST["intervall"]) && $_REQUEST["intervall"] == "woche") {
             if (isset($_REQUEST["wochentag"])) {
                 $einstellungen->benachrichtigungstag = IntVal($_REQUEST["wochentag"]);
             }
         }
         $ich->setEinstellungen($einstellungen);
         $ich->save();
         $this->msg_ok = "Die Einstellung wurde gespeichert.";
     }
     if (AntiXSS::isTokenSet("del_ben")) {
         foreach ($_REQUEST[AntiXSS::createToken("del_ben")] as $ben => $_val) {
             $bena = json_decode(rawurldecode($ben), true);
             $krit = new RISSucheKrits($bena);
             $ich->delBenachrichtigung($krit);
             $this->msg_ok = "Die Benachrichtigung wurde entfernt.";
         }
     }
     if (AntiXSS::isTokenSet("ben_add_text")) {
         $suchbegriff = trim($_REQUEST["suchbegriff"]);
         if ($suchbegriff == "") {
             $this->msg_err = "Bitte gib einen Suchausdruck an.";
         } else {
             $ben = new RISSucheKrits();
             $ben->addVolltextsucheKrit($suchbegriff);
             $ich->addBenachrichtigung($ben);
             $this->msg_ok = "Die Benachrichtigung wurde hinzugefügt.";
         }
     }
     if (AntiXSS::isTokenSet("ben_add_ba")) {
         $ben = new RISSucheKrits();
         $ben->addBAKrit($_REQUEST["ba"]);
         $ich->addBenachrichtigung($ben);
         $this->msg_ok = "Die Benachrichtigung wurde hinzugefügt.";
     }
     if (AntiXSS::isTokenSet("ben_add_geo")) {
         if ($_REQUEST["geo_lng"] == 0 || $_REQUEST["geo_lat"] == 0 || $_REQUEST["geo_radius"] <= 0) {
             $this->msg_err = "Ungültige Eingabe.";
         } else {
             $ben = new RISSucheKrits();
             $ben->addGeoKrit($_REQUEST["geo_lng"], $_REQUEST["geo_lat"], $_REQUEST["geo_radius"]);
             $ich->addBenachrichtigung($ben);
             $this->msg_ok = "Die Benachrichtigung wurde hinzugefügt.";
         }
     }
     if (AntiXSS::isTokenSet("del_vorgang_abo")) {
         foreach (AntiXSS::getTokenVal("del_vorgang_abo") as $vorgang_id => $_tmp) {
             /** @var Vorgang $vorgang */
             $vorgang = Vorgang::model()->findByPk($vorgang_id);
             $vorgang->deabonnieren($ich);
             $this->msg_ok = "Der Vorgang wurde entfernt.";
         }
     }
     if (AntiXSS::isTokenSet("account_loeschen")) {
         $this->top_menu = "Accountlöschung";
         $this->requireLogin($this->createUrl("index/benachrichtigungen"));
         $ich = $this->aktuelleBenutzerIn();
         $id = $ich->id;
         if ($ich != NULL) {
             $ich->email = NULL;
             $ich->email_bestaetigt = 0;
             $ich->pwd_enc = NULL;
             $ich->datum_angelegt = NULL;
             $ich->datum_letzte_benachrichtigung = NULL;
             $ich->berechtigungen_flags = 0;
             $ich->einstellungen_object = NULL;
             $ich->einstellungen = NULL;
             $ich->save(false);
             Yii::app()->db->createCommand("DELETE FROM `benutzerInnen_vorgaenge_abos` WHERE `benutzerInnen_id` = :BenutzerInId")->bindValues([':BenutzerInId' => $ich->id])->execute();
             $this->msg_ok = "Account gelöscht";
             /** @var CWebUser $user */
             $user = Yii::app()->getUser();
             if ($user) {
                 $user->logout();
             }
         } else {
             $this->msg_err = "Sie sind nicht angemeldet";
         }
         $this->redirect(Yii::app()->createUrl("index/startseite"));
         Yii::app()->end();
     }
     if (AntiXSS::isTokenSet("passwort_aendern")) {
         /** @var null|BenutzerIn $ich  */
         $ich = $this->aktuelleBenutzerIn();
         if ($ich) {
             if ($_REQUEST["password"] == $_REQUEST["password2"]) {
                 $ich->pwd_enc = BenutzerIn::create_hash($_REQUEST["password"]);
                 $ich->save();
                 $this->msg_ok = "Passwort geändert";
             } else {
                 $this->msg_err = "Die beiden Passwörter stimmen nicht überein";
             }
         } else {
             $this->render('/index/error', ["code" => 403, "message" => "Sie sind nicht angemeldet."]);
         }
     }
     $this->render("index", ["ich" => $ich]);
 }