/** * @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(" ", " ", $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"); } } }
/** * @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; } } }
/** * @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 :) }
/** * @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; }
/** * @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; } } }
/** */ public function highlightBenachrichtigung() { if ($this->seiten_anzahl >= 100) { RISTools::send_email(Yii::app()->params["adminEmail"], "[RIS] Highlight?", $this->getOriginalLink(), null, "system"); } }
/** * @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]; }
/** * @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"); }
/** * @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"); }
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")]); } }