Commit c7a8030e authored by Dominik Hebeler's avatar Dominik Hebeler
Browse files

Updated the donation form

parent 64780f51
...@@ -3,13 +3,15 @@ ...@@ -3,13 +3,15 @@
namespace App\Http\Controllers; namespace App\Http\Controllers;
use App\Mail\Kontakt; use App\Mail\Kontakt;
use App\Mail\Spende;
use App\Mail\Sprachdatei; use App\Mail\Sprachdatei;
use DB;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Http\Response; use Illuminate\Http\Response;
use LaravelLocalization; use LaravelLocalization;
use Mail; use Mail;
use Validator; use Validator;
use \IBAN;
use \IBANCountry;
class MailController extends Controller class MailController extends Controller
{ {
...@@ -23,26 +25,26 @@ class MailController extends Controller ...@@ -23,26 +25,26 @@ class MailController extends Controller
{ {
# Nachricht, die wir an den Nutzer weiterleiten: # Nachricht, die wir an den Nutzer weiterleiten:
$messageType = ""; # [success|error] $messageType = ""; # [success|error]
$returnMessage = ''; $returnMessage = '';
# Wir benötigen 3 Felder von dem Benutzer wenn diese nicht übermittelt wurden, oder nicht korrekt sind geben wir einen Error zurück # Wir benötigen 3 Felder von dem Benutzer wenn diese nicht übermittelt wurden, oder nicht korrekt sind geben wir einen Error zurück
$validator = Validator::make( $validator = Validator::make(
[ [
'email' => $request->input('email') 'email' => $request->input('email'),
], ],
[ [
'email' => 'required|email' 'email' => 'required|email',
] ]
); );
if($validator->fails()){ if ($validator->fails()) {
return view('kontakt.kontakt')->with('formerrors', $validator)->with('title', trans('titles.kontakt'))->with('navbarFocus', 'kontakt'); return view('kontakt.kontakt')->with('formerrors', $validator)->with('title', trans('titles.kontakt'))->with('navbarFocus', 'kontakt');
} }
$name = $request->input('name', ''); $name = $request->input('name', '');
$replyTo = $request->input('email', 'noreply@metager.de'); $replyTo = $request->input('email', 'noreply@metager.de');
if ($replyTo === "") { if ($replyTo === "") {
$replyTo = "noreply@metager.de"; $replyTo = "noreply@metager.de";
} else { } else {
...@@ -50,7 +52,7 @@ class MailController extends Controller ...@@ -50,7 +52,7 @@ class MailController extends Controller
} }
if (!$request->filled('message') || !$request->filled('subject')) { if (!$request->filled('message') || !$request->filled('subject')) {
$messageType = "error"; $messageType = "error";
$returnMessage = "Tut uns leid, aber leider haben wir mit Ihrer Kontaktanfrage keine Daten erhalten. Die Nachricht wurde nicht versandt."; $returnMessage = "Tut uns leid, aber leider haben wir mit Ihrer Kontaktanfrage keine Daten erhalten. Die Nachricht wurde nicht versandt.";
} else { } else {
# Wir versenden die Mail des Benutzers an uns: # Wir versenden die Mail des Benutzers an uns:
...@@ -60,7 +62,7 @@ class MailController extends Controller ...@@ -60,7 +62,7 @@ class MailController extends Controller
->send(new Kontakt($name, $replyTo, $subject, $message)); ->send(new Kontakt($name, $replyTo, $subject, $message));
$returnMessage = 'Ihre Nachricht wurde uns erfolgreich zugestellt. Vielen Dank dafür! Wir werden diese schnellstmöglich bearbeiten und uns dann ggf. wieder bei Ihnen melden.'; $returnMessage = 'Ihre Nachricht wurde uns erfolgreich zugestellt. Vielen Dank dafür! Wir werden diese schnellstmöglich bearbeiten und uns dann ggf. wieder bei Ihnen melden.';
$messageType = "success"; $messageType = "success";
} }
return view('kontakt.kontakt') return view('kontakt.kontakt')
...@@ -71,23 +73,53 @@ class MailController extends Controller ...@@ -71,23 +73,53 @@ class MailController extends Controller
public function donation(Request $request) public function donation(Request $request)
{ {
$data = [
'name' => $request->input('Name', ''),
'iban' => $request->input('iban', ''),
'bic' => $request->input('bic', ''),
'email' => $request->input('email', ''),
'betrag' => $request->input('Betrag', ''),
'nachricht' => $request->input('Nachricht', ''),
];
$name = $request->input('Name', '');
$iban = $request->input('iban', '');
$bic = $request->input('bic', '');
$email = $request->input('email', '');
$betrag = $request->input('Betrag', '');
$nachricht = $request->input('Nachricht', '');
# Der enthaltene String wird dem Benutzer nach der Spende ausgegeben # Der enthaltene String wird dem Benutzer nach der Spende ausgegeben
$messageToUser = ""; $messageToUser = "";
$messageType = ""; # [success|error] $messageType = ""; # [success|error]
#Sicherheitsüberprüfung (Wir wurden in letzter Zeit ziemlich mit Mails zugespammt # Check the IBAN
# Wir überprüfen also, ob das Feld für die Kontonummer tatsächlich eine Kontonummer, oder eine IBAN enthält: $iban = new IBAN($iban);
$iban = $request->input('Kontonummer', ''); $bic = $request->input('Bankleitzahl', '');
$iban = preg_replace("/\s/s", "", $iban); $country = new IBANCountry($iban->Country());
# Eine Kontonummer besteht nur aus Zahlen $isSEPA = filter_var($country->IsSEPA(), FILTER_VALIDATE_BOOLEAN);
# Eine IBAN besteht aus einem Ländercode (2 Buchstaben), einer 2 stelligen Prüfsumme (2 Ziffern) gefolgt von
# einer Kombination aus Buchstaben und Zahlen # Check the amount
if (!preg_match("/^\d+$/s", $iban) && !preg_match("/^[a-zA-Z]{2}\d{2}[a-zA-Z0-9]+$/s", $iban)) { $validBetrag = is_numeric($betrag) && $betrag > 0;
$messageToUser = "Die eingegebene IBAN/Kontonummer scheint nicht Korrekt zu sein. Nachricht wurde nicht gesendet";
$messageType = "error"; # Validate Email
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$email = "anonymous@suma-ev.de";
}
if (!$iban->Verify()) {
$messageToUser = "Die eingegebene IBAN scheint nicht Korrekt zu sein. Nachricht wurde nicht gesendet";
$messageType = "error";
} else if (!$isSEPA && $bic === '') {
$messageToUser = "Die eingegebene IBAN gehört nicht zu einem Land aus dem SEPA Raum. Für einen Bankeinzug benötigen wir eine BIC von Ihnen.";
$messageType = "error";
} else if (!$validBetrag) {
$messageToUser = "Der eingegebene Spendenbetrag ist ungültig. Bitte korrigieren Sie Ihre Eingabe und versuchen es erneut.\n";
$messageType = "error";
} else { } else {
# The value has to have a maximum of 2 decimal digits
$betrag = round($betrag, 2, PHP_ROUND_HALF_DOWN);
# Folgende Felder werden vom Spendenformular als Input übergeben: # Folgende Felder werden vom Spendenformular als Input übergeben:
# Name # Name
# Telefon # Telefon
...@@ -95,47 +127,52 @@ class MailController extends Controller ...@@ -95,47 +127,52 @@ class MailController extends Controller
# Kontonummer ( IBAN ) # Kontonummer ( IBAN )
# Bankleitzahl ( BIC ) # Bankleitzahl ( BIC )
# Nachricht # Nachricht
if (!$request->filled('Kontonummer') || !$request->filled('Bankleitzahl') || !$request->filled('Betrag')) {
$messageToUser = "Sie haben eins der folgenden Felder nicht ausgefüllt: IBAN, BIC, Nachricht. Bitte korrigieren Sie Ihre Eingabe und versuchen es erneut.\n"; $message = "\r\nName: " . $name;
$messageType = "error"; $message .= "\r\nIBAN: " . $iban->HumanFormat();
} else { if ($bic !== "") {
$message = "\r\nName: " . $request->input('Name', 'Keine Angabe'); $message .= "\r\nBIC: " . $bic;
$message .= "\r\nKontonummer: " . $request->input('Kontonummer'); }
$message .= "\r\nBankleitzahl: " . $request->input('Bankleitzahl');
$message .= "\r\nBetrag: " . $request->input('Betrag'); $message .= "\r\nBetrag: " . $betrag;
$message .= "\r\nNachricht: " . $request->input('Nachricht'); $message .= "\r\nNachricht: " . $nachricht;
$message .= "\r\n\r\nIP: " . $request->ip(); try {
$message .= "\r\nUser-Agent: " . $request->header('User-Agent', ""); Mail::to("spenden@suma-ev.de")
->send(new \App\Mail\Spende($email, $message, $name));
$replyTo = $request->input('email', 'anonymous-user@metager.de');
if($replyTo == ""){ $messageType = "success";
$replyTo = "noreply@metager.de"; $messageToUser = "Herzlichen Dank!! Wir haben Ihre Spendenbenachrichtigung erhalten.";
}
if (!filter_var($replyTo, FILTER_VALIDATE_EMAIL)) {
$messageToUser .= "Die eingegebene Email-Addresse ($replyTo) scheint nicht korrekt zu sein.";
}
try { try {
Mail::to("spenden@suma-ev.de") // Add the donation to our database
->send(new Spende($replyTo, $message)); $spenden = DB::connection('spenden')->table('debits')->insert(
['name' => $name,
$messageType = "success"; 'iban' => $iban->MachineFormat(),
$messageToUser = "Herzlichen Dank!! Wir haben Ihre Spendenbenachrichtigung erhalten."; 'bic' => $bic,
} catch (\Swift_TransportException $e) { 'amount' => $betrag,
$messageType = "error"; 'message' => $nachricht,
$messageToUser = 'Beim Senden Ihrer Spendenbenachrichtigung ist ein Fehler auf unserer Seite aufgetreten. Bitte schicken Sie eine Email an: office@suma-ev.de, damit wir uns darum kümmern können.'; ]
);
DB::disconnect('spenden');
} catch (\Illuminate\Database\QueryException $e) {
} }
} catch (\Swift_TransportException $e) {
$messageType = "error";
$messageToUser = 'Beim Senden Ihrer Spendenbenachrichtigung ist ein Fehler auf unserer Seite aufgetreten. Bitte schicken Sie eine E-Mail an: office@suma-ev.de, damit wir uns darum kümmern können.';
} }
} }
if ($messageType === "error") { if ($messageType === "error") {
$request->flash();
return view('spende.spende') return view('spende.spende')
->with('title', 'Kontakt') ->with('title', 'Kontakt')
->with($messageType, $messageToUser); ->with($messageType, $messageToUser)
->with('data', $data);
} else { } else {
$data = ['name' => $request->input('Name', 'Keine Angabe'), 'kontonummer' => $request->input('Kontonummer'), 'bankleitzahl' => $request->input('Bankleitzahl'), 'email' => $request->input('email', 'anonymous-user@metager.de'), 'betrag' => $request->input('Betrag'), 'nachricht' => $request->input('Nachricht')]; $data['iban'] = $iban->HumanFormat();
$data = base64_encode(serialize($data)); $data = base64_encode(serialize($data));
return redirect(LaravelLocalization::getLocalizedURL(LaravelLocalization::getCurrentLocale(), route("danke", ['data' => $data]))); return redirect(LaravelLocalization::getLocalizedURL(LaravelLocalization::getCurrentLocale(), route("danke", ['data' => $data])));
} }
...@@ -146,12 +183,12 @@ class MailController extends Controller ...@@ -146,12 +183,12 @@ class MailController extends Controller
public static function isEdited($k, $v, $filename) public static function isEdited($k, $v, $filename)
{ {
try { try {
$temp = include resource_path()."/".$filename; $temp = include resource_path() . "/" . $filename;
foreach ($temp as $key => $value) { foreach ($temp as $key => $value) {
if($k === $key && $v !== $value) { if ($k === $key && $v !== $value) {
return true; return true;
} }
} }
} catch (\ErrorException $e) { } catch (\ErrorException $e) {
#Datei existiert noch nicht #Datei existiert noch nicht
return true; return true;
...@@ -159,12 +196,12 @@ class MailController extends Controller ...@@ -159,12 +196,12 @@ class MailController extends Controller
return false; return false;
} }
public function sendLanguageFile(Request $request, $from, $to, $exclude = "", $email ="") public function sendLanguageFile(Request $request, $from, $to, $exclude = "", $email = "")
{ {
$filename = $request->input('filename'); $filename = $request->input('filename');
# Wir erstellen nun zunächst den Inhalt der Datei: # Wir erstellen nun zunächst den Inhalt der Datei:
$data = []; $data = [];
$new = 0; $new = 0;
$emailAddress = ""; $emailAddress = "";
$editedKeys = ""; $editedKeys = "";
foreach ($request->all() as $key => $value) { foreach ($request->all() as $key => $value) {
...@@ -172,7 +209,7 @@ class MailController extends Controller ...@@ -172,7 +209,7 @@ class MailController extends Controller
if ($key === "filename" || $value === "") { if ($key === "filename" || $value === "") {
continue; continue;
} }
if($key === "email") { if ($key === "email") {
$emailAddress = $value; $emailAddress = $value;
continue; continue;
} }
...@@ -180,11 +217,11 @@ class MailController extends Controller ...@@ -180,11 +217,11 @@ class MailController extends Controller
if (strpos($key, "_new_") === 0 && $value !== "") { if (strpos($key, "_new_") === 0 && $value !== "") {
$new++; $new++;
$key = substr($key, strpos($key, "_new_") + 5); $key = substr($key, strpos($key, "_new_") + 5);
$editedKeys = $editedKeys."\n".$key; $editedKeys = $editedKeys . "\n" . $key;
} else if ($this->isEdited($key, $value, $filename)) { } else if ($this->isEdited($key, $value, $filename)) {
$new++; $new++;
$editedKeys = $editedKeys."\n".$key; $editedKeys = $editedKeys . "\n" . $key;
} }
$key = trim($key); $key = trim($key);
...@@ -205,7 +242,7 @@ class MailController extends Controller ...@@ -205,7 +242,7 @@ class MailController extends Controller
$output = preg_replace("/\{/si", "[", $output); $output = preg_replace("/\{/si", "[", $output);
$output = preg_replace("/\}/si", "]", $output); $output = preg_replace("/\}/si", "]", $output);
$output = preg_replace("/\": ([\"\[])/si", "\"\t=>\t$1", $output); $output = preg_replace("/\": ([\"\[])/si", "\"\t=>\t$1", $output);
$output = "<?php\n\nreturn $output;\n"; $output = "<?php\n\nreturn $output;\n";
$message = "Moin moin,\n\nein Benutzer hat eine Sprachdatei aktualisiert.\nBearbeitet wurden die Einträge: $editedKeys\n\nSollten die Texte so in Ordnung sein, ersetzt, oder erstellt die Datei aus dem Anhang in folgendem Pfad:\n$filename\n\nFolgend zusätzlich der Inhalt der Datei:\n\n$output"; $message = "Moin moin,\n\nein Benutzer hat eine Sprachdatei aktualisiert.\nBearbeitet wurden die Einträge: $editedKeys\n\nSollten die Texte so in Ordnung sein, ersetzt, oder erstellt die Datei aus dem Anhang in folgendem Pfad:\n$filename\n\nFolgend zusätzlich der Inhalt der Datei:\n\n$output";
...@@ -231,12 +268,12 @@ class MailController extends Controller ...@@ -231,12 +268,12 @@ class MailController extends Controller
$ex["new"] += $new; $ex["new"] += $new;
if ($new > 0) { if ($new > 0) {
if($emailAddress !== "") { if ($emailAddress !== "") {
Mail::to("dev@suma-ev.de") Mail::to("dev@suma-ev.de")
->send(new Sprachdatei($message, $output, basename($filename), $emailAddress)); ->send(new Sprachdatei($message, $output, basename($filename), $emailAddress));
} else { } else {
Mail::to("dev@suma-ev.de") Mail::to("dev@suma-ev.de")
->send(new Sprachdatei($message, $output, basename($filename))); ->send(new Sprachdatei($message, $output, basename($filename)));
} }
} }
$ex = base64_encode(serialize($ex)); $ex = base64_encode(serialize($ex));
......
...@@ -15,11 +15,12 @@ class Spende extends Mailable ...@@ -15,11 +15,12 @@ class Spende extends Mailable
* *
* @return void * @return void
*/ */
public function __construct($from, $message) public function __construct($from, $message, $name)
{ {
$this->subject = "MetaGer - Spende"; $this->subject = "MetaGer - Spende";
$this->reply = $from; $this->reply = $from;
$this->message = $message; $this->message = $message;
$this->name = $name;
} }
/** /**
...@@ -29,7 +30,7 @@ class Spende extends Mailable ...@@ -29,7 +30,7 @@ class Spende extends Mailable
*/ */
public function build() public function build()
{ {
return $this->from($this->reply) return $this->from($this->reply, $this->name)
->subject($this->subject) ->subject($this->subject)
->text('kontakt.mail') ->text('kontakt.mail')
->with('messageText', $this->message); ->with('messageText', $this->message);
......
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
"require": { "require": {
"php": "^7.1.3", "php": "^7.1.3",
"fideloper/proxy": "^4.0", "fideloper/proxy": "^4.0",
"globalcitizen/php-iban": "^2.6",
"jenssegers/agent": "^2.6", "jenssegers/agent": "^2.6",
"laravel/framework": "5.7.*", "laravel/framework": "5.7.*",
"laravel/tinker": "^1.0", "laravel/tinker": "^1.0",
...@@ -64,4 +65,4 @@ ...@@ -64,4 +65,4 @@
"@php artisan key:generate --ansi" "@php artisan key:generate --ansi"
] ]
} }
} }
\ No newline at end of file
...@@ -13,7 +13,7 @@ return [ ...@@ -13,7 +13,7 @@ return [
| |
*/ */
'fetch' => PDO::FETCH_OBJ, 'fetch' => PDO::FETCH_OBJ,
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
...@@ -26,7 +26,7 @@ return [ ...@@ -26,7 +26,7 @@ return [
| |
*/ */
'default' => env('DB_CONNECTION', 'mysql'), 'default' => env('DB_CONNECTION', 'mysql'),
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
...@@ -47,36 +47,52 @@ return [ ...@@ -47,36 +47,52 @@ return [
'connections' => [ 'connections' => [
'sqlite' => [ 'sqlite' => [
'driver' => 'sqlite', 'driver' => 'sqlite',
'database' => database_path(env('DB_DATABASE', 'database.sqlite')), 'database' => database_path(env('DB_DATABASE', 'database.sqlite')),
'prefix' => '', 'prefix' => '',
], ],
'mysql' => [ 'mysql' => [
'driver' => 'mysql', 'driver' => 'mysql',
'host' => env('DB_HOST', 'localhost'), 'host' => env('DB_HOST', 'localhost'),
'port' => env('DB_PORT', '3306'), 'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'), 'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'), 'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''), 'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8', 'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => true,
'engine' => null,
],
'spenden' => [
'driver' => 'mysql',
'host' => env('DB_HOST_SPENDEN', 'localhost'),
'port' => env('DB_PORT_SPENDEN', '3306'),
'database' => env('DB_DATABASE_SPENDEN', 'forge'),
'username' => env('DB_USERNAME_SPENDEN', 'forge'),
'password' => env('DB_PASSWORD_SPENDEN', ''),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci', 'collation' => 'utf8_unicode_ci',
'prefix' => '', 'prefix' => '',
'strict' => true, 'strict' => true,
'engine' => null, 'engine' => null,
], ],
'pgsql' => [ 'pgsql' => [
'driver' => 'pgsql', 'driver' => 'pgsql',
'host' => env('DB_HOST', 'localhost'), 'host' => env('DB_HOST', 'localhost'),
'port' => env('DB_PORT', '5432'), 'port' => env('DB_PORT', '5432'),
'database' => env('DB_DATABASE', 'forge'), 'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'), 'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''), 'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8', 'charset' => 'utf8',
'prefix' => '', 'prefix' => '',
'schema' => 'public', 'schema' => 'public',
'sslmode' => 'prefer', 'sslmode' => 'prefer',
], ],
], ],
...@@ -92,7 +108,7 @@ return [ ...@@ -92,7 +108,7 @@ return [
| |
*/ */
'migrations' => 'migrations', 'migrations' => 'migrations',
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
...@@ -105,26 +121,26 @@ return [ ...@@ -105,26 +121,26 @@ return [
| |
*/ */
'redis' => [ 'redis' => [
'cluster' => false, 'cluster' => false,
'default' => [ 'default' => [
'host' => env('REDIS_HOST', 'localhost'), 'host' => env('REDIS_HOST', 'localhost'),
'password' => env('REDIS_PASSWORD', null), 'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379), 'port' => env('REDIS_PORT', 6379),
'database' => 0, 'database' => 0,
], ],
'redisLogs' => [ 'redisLogs' => [
'host' => env('REDIS_LOGS_HOST', 'localhost'), 'host' => env('REDIS_LOGS_HOST', 'localhost'),
'password' => env('REDIS_LOGS_PASSWORD', env('REDIS_PASSWORD', null)), 'password' => env('REDIS_LOGS_PASSWORD', env('REDIS_PASSWORD', null)),
'port' => env('REDIS_LOGS_PORT', 6379), 'port' => env('REDIS_LOGS_PORT', 6379),
'database' => 1, 'database' => 1,
], ],
'redisCache' => [ 'redisCache' => [
'host' => env('REDIS_CACHE_HOST', 'localhost'), 'host' => env('REDIS_CACHE_HOST', 'localhost'),
'password' => env('REDIS_CACHE_PASSWORD', env('REDIS_PASSWORD', null)), 'password' => env('REDIS_CACHE_PASSWORD', env('REDIS_PASSWORD', null)),
'port' => env('REDIS_CACHE_PORT', 6379), 'port' => env('REDIS_CACHE_PORT', 6379),
'database' => 2, 'database' => 2,
], ],
......