/**
  * @param BenutzerIn $benutzerIn
  * @param int $zeitspanne
  */
 private function benachrichtigeBenutzerIn($benutzerIn, $zeitspanne = 0)
 {
     $ergebnisse = $benutzerIn->benachrichtigungsErgebnisse($zeitspanne);
     if (count($ergebnisse["antraege"]) == 0 && count($ergebnisse["termine"]) == 0 && count($ergebnisse["vorgaenge"]) == 0) {
         return;
     }
     $mail_txt = $this->verschickeNeueBenachrichtigungen_txt($benutzerIn, $ergebnisse);
     $mail_html = $this->verschickeNeueBenachrichtigungen_html($benutzerIn, $ergebnisse);
     RISTools::send_email($benutzerIn->email, "Neues auf München Transparent", $mail_txt, $mail_html, "newsletter");
     $benutzerIn->datum_letzte_benachrichtigung = new CDbExpression("NOW()");
     $benutzerIn->save();
 }
 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");
         }
     }
 }
Esempio n. 3
0
 /**
  * @throws CDbException|Exception
  */
 public function copyToHistory()
 {
     $history = new GremiumHistory();
     $history->setAttributes($this->getAttributes(), false);
     try {
         if (!$history->save(false)) {
             RISTools::send_email(Yii::app()->params['adminEmail'], "Gremium:moveToHistory Error", print_r($history->getErrors(), true), null, "system");
             throw new Exception("Fehler");
         }
     } catch (CDbException $e) {
         if (strpos($e->getMessage(), "Duplicate entry") === false) {
             throw $e;
         }
     }
 }
Esempio n. 4
0
 /**
  * @param string $name
  * @param string $name_normalized
  * @return Person
  * @throws Exception
  */
 public static function getOrCreate($name, $name_normalized)
 {
     /** @var Person|null $pers */
     $pers = Person::model()->findByAttributes(["name_normalized" => $name_normalized]);
     if (is_null($pers)) {
         $pers = new Person();
         $pers->name = $name;
         $pers->name_normalized = $name_normalized;
         $pers->typ = static::$TYP_SONSTIGES;
         if (!$pers->save()) {
             RISTools::send_email(Yii::app()->params['adminEmail'], "Person:getOrCreate Error", print_r($pers->getErrors(), true), null, "system");
             throw new Exception("Fehler beim Speichern: Person");
         }
     }
     return $pers;
 }
 public function run($args)
 {
     echo "Gestartet: " . date("Y-m-d H:i:s") . "\n";
     try {
         $parser = new ReferentInnenParser();
         $parser->parseQuickUpdate();
         echo "Done ReferentInnen: " . date("Y-m-d H:i:s") . "\n";
     } catch (Exception $e) {
         RISTools::send_email(Yii::app()->params['adminEmail'], "RIS Exception ReferentIn", print_r($e, true), null, "system");
     }
     try {
         $parser = new StadtratTerminParser();
         $parser->parseQuickUpdate();
         echo "Done Termine: " . date("Y-m-d H:i:s") . "\n";
     } catch (Exception $e) {
         RISTools::send_email(Yii::app()->params['adminEmail'], "RIS Exception Stadtrattermin", print_r($e, true), null, "system");
     }
     try {
         $parser = new StadtratsvorlageParser();
         $parser->parseQuickUpdate();
         echo "Done Vorlagen: " . date("Y-m-d H:i:s") . "\n";
     } catch (Exception $e) {
         RISTools::send_email(Yii::app()->params['adminEmail'], "RIS Exception Vorlagen", print_r($e, true), null, "system");
     }
     try {
         $parser = new StadtratsantragParser();
         $parser->parseQuickUpdate();
         echo "Done Stadtratsanträge: " . date("Y-m-d H:i:s") . "\n";
     } catch (Exception $e) {
         RISTools::send_email(Yii::app()->params['adminEmail'], "RIS Exception StR-Anträge", print_r($e, true), null, "system");
     }
     try {
         $parser = new StadtraetInnenParser();
         //$parser->setParseAlleAntraege(true);
         $parser->parseQuickUpdate();
         echo "Done StadträtInnen: " . date("Y-m-d H:i:s") . "\n";
     } catch (Exception $e) {
         RISTools::send_email(Yii::app()->params['adminEmail'], "RIS Exception StadträtInnen", print_r($e, true), null, "system");
     }
     try {
         $parser = new BATerminParser();
         $parser->parseQuickUpdate();
         echo "Done BA Termine: " . date("Y-m-d H:i:s") . "\n";
     } catch (Exception $e) {
         RISTools::send_email(Yii::app()->params['adminEmail'], "RIS Exception BA-Termine", print_r($e, true), null, "system");
     }
     try {
         $parser = new BAInitiativeParser();
         $parser->parseQuickUpdate();
         echo "Done BA Initiative: " . date("Y-m-d H:i:s") . "\n";
     } catch (Exception $e) {
         RISTools::send_email(Yii::app()->params['adminEmail'], "RIS Exception BA-Initiative", print_r($e, true), null, "system");
     }
     try {
         $parser = new BAAntragParser();
         $parser->parseQuickUpdate();
         echo "Done BA Anträge: " . date("Y-m-d H:i:s") . "\n";
     } catch (Exception $e) {
         RISTools::send_email(Yii::app()->params['adminEmail'], "RIS Exception BA-Anträge", print_r($e, true), null, "system");
     }
     RISMetadaten::setzeLetzteAktualisierung(date("Y-m-d H:i:s"));
     RISMetadaten::recalcStats();
     echo "Done: " . date("Y-m-d H:i:s") . "\n";
 }
 public function parseSeite($seite, $first, $alle = false)
 {
     $add = $alle ? "" : "&txtVon=" . date("d.m.Y", time() - 24 * 3600 * 180) . "&txtBis=" . date("d.m.Y", time() + 24 * 3600 * 356 * 2);
     $text = RISTools::load_file("http://www.ris-muenchen.de/RII/RII/ris_sitzung_trefferliste.jsp?txtPosition={$seite}" . $add);
     $txt = explode("<!-- ergebnistabellen-bereich -->", $text);
     if ($seite > 4790 && count($txt) == 1) {
         return;
     }
     if (count($txt) == 1) {
         var_dump($txt);
     }
     $txt = explode("<!-- tabellenfuss", $txt[1]);
     preg_match_all("/ris_sitzung_detail\\.jsp\\?risid=([0-9]+)[\"'& ]/siU", $txt[0], $matches);
     if ($first && count($matches[1]) > 0) {
         RISTools::send_email(Yii::app()->params['adminEmail'], "Stadtratstermin VOLL", "Erste Seite voll: {$seite}", null, "system");
     }
     for ($i = count($matches[1]) - 1; $i >= 0; $i--) {
         $this->parse($matches[1][$i]);
     }
     sleep(5);
     // Scheint ziemlich aufwändig auf der RIS-Seite zu sein, mal lieber nicht überlasten :)
 }
Esempio n. 7
0
 /**
  * @param string $name
  * @throws Exception
  * @return OrtGeo|null
  */
 public static function getOrCreate($name)
 {
     /** @var null|OrtGeo */
     $ort = OrtGeo::model()->findByAttributes(["ort" => $name]);
     if ($ort) {
         return $ort;
     }
     $data = RISGeo::addressToGeo("Deutschland", "", "München", $name);
     if (($data === false || $data["lat"] == 0) && mb_strpos($name, "-") !== false) {
         $data = RISGeo::addressToGeo("Deutschland", "", "München", str_replace("-", "", $name));
     }
     if (($data === false || $data["lat"] == 0) && mb_stripos($name, "Str.") !== false) {
         $data = RISGeo::addressToGeo("Deutschland", "", "München", str_ireplace("Str.", "Straße", $name));
     }
     if ($data["lat"] <= 0 || $data["lon"] <= 0) {
         return null;
     }
     $ort = new OrtGeo();
     $ort->ort = $name;
     $ort->lat = $data["lat"];
     $ort->lon = $data["lon"];
     $ort->setzeBA();
     $ort->source = "auto";
     $ort->to_hide = 0;
     $ort->to_hide_kommentar = "";
     $ort->datum = new CDbExpression('NOW()');
     if (!$ort->save()) {
         RISTools::send_email(Yii::app()->params['adminEmail'], "OrtGeo:getOrCreate Error", print_r($ort->getErrors(), true), null, "system");
         throw new Exception("Fehler beim Speichern: Geo");
     }
     return $ort;
 }
Esempio n. 8
0
 /**
  * @throws CDbException|Exception
  */
 public function copyToHistory()
 {
     $history = new TerminHistory();
     $history->setAttributes($this->getAttributes(), false);
     if ($history->wahlperiode == "") {
         $history->wahlperiode = "?";
     }
     if ($history->status == "") {
         $history->status = "?";
     }
     if ($history->sitzungsort == "") {
         $history->sitzungsort = "?";
     }
     try {
         if (!$history->save()) {
             RISTools::send_email(Yii::app()->params['adminEmail'], "Termin:moveToHistory Error", print_r($history->getErrors(), true), null, "system");
             throw new Exception("Fehler");
         }
     } catch (CDbException $e) {
         if (strpos($e->getMessage(), "Duplicate entry") === false) {
             throw $e;
         }
     }
 }
Esempio n. 9
0
 /**
  */
 public function highlightBenachrichtigung()
 {
     if ($this->seiten_anzahl >= 100) {
         RISTools::send_email(Yii::app()->params["adminEmail"], "[RIS] Highlight?", $this->getOriginalLink(), null, "system");
     }
 }
Esempio n. 10
0
 /**
  * @throws Exception
  */
 public function resetPersonen()
 {
     /** @var array|AntragPerson[] $alte */
     $alte = AntragPerson::model()->findAllByAttributes(["antrag_id" => $this->id]);
     foreach ($alte as $alt) {
         $alt->delete();
     }
     $indexed = [];
     $gestellt_von = RISTools::normalize_antragvon($this->gestellt_von);
     foreach ($gestellt_von as $x) {
         if (!in_array($x["name_normalized"], $indexed)) {
             $indexed[] = $x["name_normalized"];
             $person = Person::getOrCreate($x["name"], $x["name_normalized"]);
             $ap = new AntragPerson();
             $ap->antrag_id = $this->id;
             $ap->person_id = $person->id;
             $ap->typ = AntragPerson::$TYP_GESTELLT_VON;
             if (!$ap->save()) {
                 RISTools::send_email(Yii::app()->params['adminEmail'], "Antrag:resetPersonen Error", print_r($ap->getErrors(), true), null, "system");
                 throw new Exception("Fehler");
             }
         }
     }
     $initiatorInnen = RISTools::normalize_antragvon($this->initiatorInnen);
     foreach ($initiatorInnen as $x) {
         if (!in_array($x["name_normalized"], $indexed)) {
             $indexed[] = $x["name_normalized"];
             $person = Person::getOrCreate($x["name"], $x["name_normalized"]);
             $ap = new AntragPerson();
             $ap->antrag_id = $this->id;
             $ap->person_id = $person->id;
             $ap->typ = AntragPerson::$TYP_INITIATORIN;
             if (!$ap->save()) {
                 RISTools::send_email(Yii::app()->params['adminEmail'], "Antrag:resetPersonen Error", print_r($ap->getErrors(), true), null, "system");
                 throw new Exception("Fehler");
             }
         }
     }
 }
 public function parseSeite($seite, $first)
 {
     $text = RISTools::load_file("http://www.ris-muenchen.de/RII/RII/ris_mitglieder_trefferliste.jsp?txtPosition={$seite}");
     $txt = explode("<!-- tabellenkopf -->", $text);
     if (!isset($txt[1])) {
         if (SITE_CALL_MODE != "cron") {
             echo "- leer\n";
         }
         return [];
     } elseif ($first) {
         RISTools::send_email(Yii::app()->params['adminEmail'], "StadträTinnenUpdate VOLL", "Erste Seite voll: {$seite}", null, "system");
     }
     $txt = explode("<div class=\"ergebnisfuss\">", $txt[1]);
     preg_match_all("/ris_mitglieder_detail\\.jsp\\?risid=([0-9]+)[\"'& ]/siU", $txt[0], $matches);
     for ($i = count($matches[1]) - 1; $i >= 0; $i--) {
         if (!in_array($matches[1][$i], $this->bearbeitete_stadtraetInnen)) {
             try {
                 $this->parse($matches[1][$i]);
             } catch (Exception $e) {
                 RISTools::send_email(Yii::app()->params['adminEmail'], "StadträTinnenUpdate Error", $matches[1][$i] . $e, null, "system");
             }
             $this->bearbeitete_stadtraetInnen[] = $matches[1][$i];
         }
     }
     return $matches[1];
 }
Esempio n. 12
0
 /**
  * @return bool|string
  */
 public function resetPasswordStart()
 {
     if ($this->pwd_change_date !== null) {
         $ts = RISTools::date_iso2timestamp($this->pwd_change_date);
         if (time() - $ts < 3600 * 24) {
             return "Es kann nur eine Passwortänderung innerhalb von 24 Stunden beantragt werden.";
         }
     }
     $this->pwd_change_code = sha1(uniqid() . $this->pwd_enc);
     $this->pwd_change_date = new CDbExpression("NOW()");
     if ($this->save()) {
         $link = Yii::app()->getBaseUrl(true) . Yii::app()->createUrl("benachrichtigungen/NeuesPasswortSetzen", ["id" => $this->id, "code" => $this->pwd_change_code]);
         RISTools::send_email($this->email, "Passwort zurücksetzen", "Hallo,\n\num ein neues Passwort für deinen Zugang bei München Transparent zu setzen, klicke bitte auf folgenden Link:\n{$link}\n\n" . "Liebe Grüße,\n\tDas München Transparent-Team.", null, "password");
         return true;
     }
     return "Ein (ungewöhnlicher) Fehler ist aufgetreten.";
 }
 public function parseSeite($seite, $first)
 {
     $text = RISTools::load_file("http://www.ris-muenchen.de/RII/RII/ris_antrag_trefferliste.jsp?txtPosition={$seite}");
     $txt = explode("<!-- ergebnisreihen -->", $text);
     if (!isset($txt[1])) {
         if (SITE_CALL_MODE != "cron") {
             echo "- nichts\n";
         }
         return [];
     }
     $txt = explode("<div class=\"ergebnisfuss\">", $txt[1]);
     preg_match_all("/ris_antrag_detail.jsp\\?risid=([0-9]+)[\"'& ]/siU", $txt[0], $matches);
     if ($first && count($matches[1]) > 0) {
         RISTools::send_email(Yii::app()->params['adminEmail'], "Stadtratsantrag VOLL", "Erste Seite voll: {$seite}", null, "system");
     }
     for ($i = count($matches[1]) - 1; $i >= 0; $i--) {
         try {
             $this->parse($matches[1][$i]);
         } catch (Exception $e) {
             echo " EXCEPTION! " . $e . "\n";
         }
     }
     return $matches[1];
 }
 public function parseSeite($seite, $first)
 {
     if (SITE_CALL_MODE != "cron") {
         echo "BA-Initiativen Seite {$seite}\n";
     }
     $text = RISTools::load_file("http://www.ris-muenchen.de/RII/BA-RII/ba_initiativen.jsp?Trf=n&Start={$seite}");
     $txt = explode("<!-- tabellenkopf -->", $text);
     $txt = explode("<div class=\"ergebnisfuss\">", $txt[1]);
     preg_match_all("/ba_initiativen_details\\.jsp\\?Id=([0-9]+)[\"'& ]/siU", $txt[0], $matches);
     if ($first && count($matches[1]) > 0) {
         RISTools::send_email(Yii::app()->params['adminEmail'], "BA-Initiativen VOLL", "Erste Seite voll: {$seite}", null, "system");
     }
     for ($i = count($matches[1]) - 1; $i >= 0; $i--) {
         try {
             $this->parse($matches[1][$i]);
         } catch (Exception $e) {
             echo " EXCEPTION! " . $e . "\n";
         }
     }
     return $matches[1];
 }
 public function run($args)
 {
     RISTools::send_email("*****@*****.**", "Test", "Abc", "<strong>Test 123</strong>", "test");
 }
Esempio n. 16
0
 /**
  * @param int $vorgang_von_id
  * @param int $vorgang_zu_id
  */
 public static function vorgangMerge($vorgang_von_id, $vorgang_zu_id)
 {
     $vorgang_von_id = IntVal($vorgang_von_id);
     $vorgang_zu_id = IntVal($vorgang_zu_id);
     $str = "Vorgang Merge: von {$vorgang_von_id} => {$vorgang_zu_id}\n";
     try {
         /** @var Vorgang $vorgang_von */
         $vorgang_von = Vorgang::model()->findByPk($vorgang_von_id);
         if (!$vorgang_von) {
             throw new Exception("Vorgangs-ID nicht gefunden: " . $vorgang_von_id);
         }
         foreach ($vorgang_von->antraege as $ant) {
             $ant->vorgang_id = $vorgang_zu_id;
             $ant->save(false);
             $str .= "Antrag: " . $ant->getName() . "\n";
         }
         foreach ($vorgang_von->dokumente as $dok) {
             $dok->vorgang_id = $vorgang_zu_id;
             $dok->save(false);
             $str .= "Dokument: " . $dok->name . "\n";
         }
         foreach ($vorgang_von->ergebnisse as $erg) {
             $erg->vorgang_id = $vorgang_zu_id;
             $erg->save(false);
             $str .= "Ergebnis: " . $erg->getName() . "\n";
         }
         Yii::app()->db->createCommand("UPDATE IGNORE `benutzerInnen_vorgaenge_abos` SET vorgaenge_id = :VorgangIdNeu WHERE vorgaenge_id = :VorgangIdAlt")->bindValues([':VorgangIdNeu' => $vorgang_zu_id, ':VorgangIdAlt' => $vorgang_von_id])->execute();
         Yii::app()->db->createCommand("DELETE FROM `benutzerInnen_vorgaenge_abos` WHERE vorgaenge_id = :VorgangIdAlt")->bindValues([':VorgangIdAlt' => $vorgang_von_id])->execute();
         $str .= "Gelöscht.\n";
     } catch (Exception $e) {
         $str .= $e;
     }
     RISTools::send_email(Yii::app()->params['adminEmail'], "Vorgang:vorgangMerge Error", $str, null, "system");
 }
Esempio n. 17
0
 public static function document_text_pdf($pdf)
 {
     $tmp_file_name = TMP_PATH . "pdf.txt." . rand(0, 10000000);
     exec(PATH_JAVA . " -jar " . PATH_PDFBOX . " ExtractText -encoding UTF-8 {$pdf} {$tmp_file_name}", $ret);
     if (file_exists($tmp_file_name)) {
         $text = file_get_contents($tmp_file_name);
         unlink($tmp_file_name);
     } else {
         RISTools::send_email(Yii::app()->params['adminEmail'], "PDFParse Error", $pdf . "\n" . print_r($ret, true), null, "system");
         $text = "";
     }
     return $text;
 }
 public function parseSeite($seite, $first)
 {
     if (SITE_CALL_MODE != "cron") {
         echo "BA-Gremien Seite {$seite}\n";
     }
     $text = RISTools::load_file("http://www.ris-muenchen.de/RII/BA-RII/ba_gremien.jsp?selWahlperiode=" . static::$WAHLPERIODE_ID . "&Trf=n&Start={$seite}");
     $txt = explode("<!-- tabellenkopf -->", $text);
     $txt = explode("<div class=\"ergebnisfuss\">", $txt[1]);
     preg_match_all("/ba_gremien_details\\.jsp\\?Id=(?<id>[0-9]+)[\"'& ]/siU", $txt[0], $matches);
     if ($first && count($matches[1]) > 0) {
         RISTools::send_email(Yii::app()->params['adminEmail'], "BA-Gremien VOLL", "Erste Seite voll: {$seite}", null, "system");
     }
     for ($i = count($matches[1]) - 1; $i >= 0; $i--) {
         $this->parse($matches[1][$i], static::$WAHLPERIODE_ID);
     }
     return $matches[1];
 }
 public function actionFeedback()
 {
     $this->top_menu = "";
     if (AntiXSS::isTokenSet("send")) {
         $fp = fopen(EMAIL_LOG_FILE . "." . date("YmdHis"), "a");
         fwrite($fp, date("Y-m-d H:i:s") . "\n");
         fwrite($fp, print_r($_REQUEST, true));
         fclose($fp);
         $text = "E-Mail: " . $_REQUEST["email"] . "\n";
         $text .= "\n\n";
         $text .= $_REQUEST["message"];
         RISTools::send_email(Yii::app()->params['adminEmail'], "[München Transparent] Feedback", $text, null, "feedback");
         $this->render('feedback_done', []);
     } else {
         $this->render('feedback_form', ["current_url" => Yii::app()->createUrl("infos/feedback")]);
     }
 }