MailController.php 9.93 KB
Newer Older
1 2 3 4
<?php

namespace App\Http\Controllers;

5 6 7
use App\Mail\Kontakt;
use App\Mail\Spende;
use App\Mail\Sprachdatei;
8
use Illuminate\Http\Request;
9
use Illuminate\Http\Response;
10
use LaravelLocalization;
11
use Mail;
12
use Validator;
13 14 15 16 17 18 19 20 21

class MailController extends Controller
{
    /**
     * Load Startpage accordingly to the given URL-Parameter and Mobile
     *
     * @param  int  $id
     * @return Response
     */
Dominik Hebeler's avatar
Dominik Hebeler committed
22 23
    public function contactMail(Request $request)
    {
24 25

        # Nachricht, die wir an den Nutzer weiterleiten:
Dominik Hebeler's avatar
Dominik Hebeler committed
26
        $messageType   = ""; # [success|error]
27
        $returnMessage = '';
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44

        # 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(
            [
                'email' => $request->input('email')
            ],
            [
                'email' => 'required|email'
            ]
        );

        if($validator->fails()){
            return view('kontakt.kontakt')->with('formerrors', $validator)->with('title', trans('titles.kontakt'))->with('navbarFocus', 'kontakt');
        }

        $name = $request->input('name', '');

Dominik Hebeler's avatar
Dominik Hebeler committed
45 46
        $replyTo       = $request->input('email', 'noreply@metager.de');
        if ($replyTo === "") {
47
            $replyTo = "noreply@metager.de";
Dominik Hebeler's avatar
Dominik Hebeler committed
48
        } else {
49 50 51
            $replyTo = $request->input('email');
        }

52
        if (!$request->has('message') || !$request->has('subject')) {
Dominik Hebeler's avatar
Dominik Hebeler committed
53
            $messageType   = "error";
54
            $returnMessage = "Tut uns leid, aber leider haben wir mit Ihrer Kontaktanfrage keine Daten erhalten. Die Nachricht wurde nicht versandt.";
Dominik Hebeler's avatar
Dominik Hebeler committed
55
        } else {
56 57
            # Wir versenden die Mail des Benutzers an uns:
            $message = $request->input('message');
58 59 60
            $subject = $request->input('subject');
            Mail::to("support@suma-ev.de")
                ->send(new Kontakt($name, $replyTo, $subject, $message));
61

62
            $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.';
63
            $messageType   = "success";
64 65 66
        }

        return view('kontakt.kontakt')
Dominik Hebeler's avatar
Dominik Hebeler committed
67
            ->with('title', 'Kontakt')
68
            ->with('js', ['lib.js'])
Dominik Hebeler's avatar
Dominik Hebeler committed
69
            ->with($messageType, $returnMessage);
70
    }
Dominik Hebeler's avatar
Dominik Hebeler committed
71 72 73

    public function donation(Request $request)
    {
74

Dominik Hebeler's avatar
Dominik Hebeler committed
75 76
        # Der enthaltene String wird dem Benutzer nach der Spende ausgegeben
        $messageToUser = "";
Dominik Hebeler's avatar
Dominik Hebeler committed
77
        $messageType   = ""; # [success|error]
Dominik Hebeler's avatar
Dominik Hebeler committed
78

79
        #Sicherheitsüberprüfung (Wir wurden in letzter Zeit ziemlich mit Mails zugespammt
80 81 82 83 84 85 86 87
        # Wir überprüfen also, ob das Feld für die Kontonummer tatsächlich eine Kontonummer, oder eine IBAN enthält:
        $iban = $request->input('Kontonummer', '');
        $iban = preg_replace("/\s/s", "", $iban);
        # Eine Kontonummer besteht nur aus Zahlen
        # Eine IBAN besteht aus einem Ländercode (2 Buchstaben), einer 2 stelligen Prüfsumme (2 Ziffern) gefolgt von
        # einer Kombination aus Buchstaben und Zahlen
        if (!preg_match("/^\d+$/s", $iban) && !preg_match("/^[a-zA-Z]{2}\d{2}[a-zA-Z0-9]+$/s", $iban)) {
            $messageToUser = "Die eingegebene IBAN/Kontonummer scheint nicht Korrekt zu sein. Nachricht wurde nicht gesendet";
Dominik Hebeler's avatar
Dominik Hebeler committed
88 89
            $messageType   = "error";
        } else {
Dominik Hebeler's avatar
Dominik Hebeler committed
90

91 92 93 94 95 96 97
            # Folgende Felder werden vom Spendenformular als Input übergeben:
            # Name
            # Telefon
            # email
            # Kontonummer ( IBAN )
            # Bankleitzahl ( BIC )
            # Nachricht
98
            if (!$request->has('Kontonummer') || !$request->has('Bankleitzahl') || !$request->has('Betrag')) {
99 100 101 102 103 104
                $messageToUser = "Sie haben eins der folgenden Felder nicht ausgefüllt: IBAN, BIC, Nachricht. Bitte korrigieren Sie Ihre Eingabe und versuchen es erneut.\n";
                $messageType   = "error";
            } else {
                $message = "\r\nName: " . $request->input('Name', 'Keine Angabe');
                $message .= "\r\nKontonummer: " . $request->input('Kontonummer');
                $message .= "\r\nBankleitzahl: " . $request->input('Bankleitzahl');
105
                $message .= "\r\nBetrag: " . $request->input('Betrag');
106 107
                $message .= "\r\nNachricht: " . $request->input('Nachricht');

108 109 110
                $message .= "\r\n\r\nIP: " . $request->ip();
                $message .= "\r\nUser-Agent: " . $request->header('User-Agent', "");

111
                $replyTo = $request->input('email', 'anonymous-user@metager.de');
Dominik Hebeler's avatar
Dominik Hebeler committed
112 113 114
                if($replyTo == ""){
                    $replyTo = "noreply@metager.de";
                }
115 116 117 118 119
                if (!filter_var($replyTo, FILTER_VALIDATE_EMAIL)) {
                    $messageToUser .= "Die eingegebene Email-Addresse ($replyTo) scheint nicht korrekt zu sein.";
                }

                try {
Dominik Hebeler's avatar
Dominik Hebeler committed
120
                    Mail::to("spenden@suma-ev.de")
121 122
                        ->send(new Spende($replyTo, $message));

Dominik Hebeler's avatar
Dominik Hebeler committed
123 124
                    $messageType   = "success";
                    $messageToUser = "Herzlichen Dank!! Wir haben Ihre Spendenbenachrichtigung erhalten.";
125
                } catch (\Swift_TransportException $e) {
Dominik Hebeler's avatar
Dominik Hebeler committed
126
                    $messageType   = "error";
Dominik Hebeler's avatar
Dominik Hebeler committed
127 128 129 130 131
                    $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.';
                }
            }
        }

132
        if ($messageType === "error") {
133 134
            $request->flash();
            return view('spende.spende')
135 136 137
                ->with('title', 'Kontakt')
                ->with($messageType, $messageToUser);
        } else {
Dominik Hebeler's avatar
Dominik Hebeler committed
138
            $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')];
139
            $data = base64_encode(serialize($data));
140
            return redirect(LaravelLocalization::getLocalizedURL(LaravelLocalization::getCurrentLocale(), route("danke", ['data' => $data])));
141 142
        }

Dominik Hebeler's avatar
Dominik Hebeler committed
143
    }
144

145
    #Ueberprueft ob ein bereits vorhandener Eintrag bearbeitet worden ist
146
    public static function isEdited($k, $v, $filename)
147
    {
148 149 150 151 152 153 154 155 156 157
        try {
            $temp = include resource_path()."/".$filename;
            foreach ($temp as $key => $value) {
                if($k === $key && $v !== $value) {
                    return true;
                }
            }  
        } catch (\ErrorException $e) {
            #Datei existiert noch nicht
            return true;
158 159 160 161
        }
        return false;
    }

Aria Givi's avatar
Aria Givi committed
162
    public function sendLanguageFile(Request $request, $from, $to, $exclude = "", $email ="")
163 164 165 166 167
    {
        $filename = $request->input('filename');
        # Wir erstellen nun zunächst den Inhalt der Datei:
        $data = [];
        $new  = 0;
168
        $emailAddress = "";
169
        $editedKeys = "";
170
        foreach ($request->all() as $key => $value) {
171

172 173 174
            if ($key === "filename" || $value === "") {
                continue;
            }
175 176 177 178
            if($key === "email") {
                $emailAddress = $value;
                continue;
            }
179
            $key = base64_decode($key);
180 181 182
            if (strpos($key, "_new_") === 0 && $value !== "") {
                $new++;
                $key = substr($key, strpos($key, "_new_") + 5);
183 184
                $editedKeys = $editedKeys."\n".$key;

185
            } else if ($this->isEdited($key, $value, $filename)) {
186 187
                $new++;
                $editedKeys = $editedKeys."\n".$key;
188
            }
189

190 191 192 193 194 195 196 197 198 199 200 201 202
            $key = trim($key);
            if (!strpos($key, "#")) {
                $data[$key] = $value;
            } else {
                $ref = &$data;
                do {
                    $ref = &$ref[substr($key, 0, strpos($key, "#"))];
                    $key = substr($key, strpos($key, "#") + 1);
                } while (strpos($key, "#"));
                $ref = &$ref[$key];
                $ref = $value;
            }
        }
203

204
        $output = json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
205 206 207
        $output = preg_replace("/\{/si", "[", $output);
        $output = preg_replace("/\}/si", "]", $output);
        $output = preg_replace("/\": ([\"\[])/si", "\"\t=>\t$1", $output);
208
        
209 210
        $output = "<?php\n\nreturn $output;\n";

211 212
        $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";

213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231
        # Wir haben nun eine Mail an uns geschickt, welche die entsprechende Datei beinhaltet.
        # Nun müssen wir den Nutzer eigentlich nur noch zurück leiten und die Letzte bearbeitete Datei ausschließen:
        $ex = [];
        if ($exclude !== "") {
            try {
                $ex = unserialize(base64_decode($exclude));
            } catch (\ErrorException $e) {
                $ex = [];
            }

            if (!isset($ex["files"])) {
                $ex["files"] = [];
            }
        }
        if (!isset($ex["new"])) {
            $ex["new"] = 0;
        }
        $ex['files'][] = basename($filename);
        $ex["new"] += $new;
232 233

        if ($new > 0) {
234
            if($emailAddress !== "") { 
Aria Givi's avatar
Aria Givi committed
235
                Mail::to("dev@suma-ev.de")
236
                ->send(new Sprachdatei($message, $output, basename($filename), $emailAddress));
237
            } else {
Aria Givi's avatar
Aria Givi committed
238
                Mail::to("dev@suma-ev.de")
239
                ->send(new Sprachdatei($message, $output, basename($filename)));
240
            }
241
        }
242
        $ex = base64_encode(serialize($ex));
243 244

        return redirect(url('languages/edit', ['from' => $from, 'to' => $to, 'exclude' => $ex, 'email' => $emailAddress]));
245
    }
246

Dominik Hebeler's avatar
Dominik Hebeler committed
247
}