MailController.php 8.84 KB
Newer Older
1
2
3
4
5
6
<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
7
use Illuminate\Http\Response;
8
use LaravelLocalization;
9
10
11
12
13
14
15
16
17
18
use Mail;

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
19
20
    public function contactMail(Request $request)
    {
21
22

        # Nachricht, die wir an den Nutzer weiterleiten:
Dominik Hebeler's avatar
Dominik Hebeler committed
23
        $messageType   = ""; # [success|error]
24
        $returnMessage = '';
Dominik Hebeler's avatar
Dominik Hebeler committed
25
26
        $replyTo       = $request->input('email', 'noreply@metager.de');
        if ($replyTo === "") {
27
            $replyTo = "noreply@metager.de";
Dominik Hebeler's avatar
Dominik Hebeler committed
28
        } else {
29
30
31
            $replyTo = $request->input('email');
        }

Dominik Hebeler's avatar
Dominik Hebeler committed
32
33
        if (!$request->has('message')) {
            $messageType   = "error";
34
            $returnMessage = "Tut uns leid, aber leider haben wir mit Ihrer Kontaktanfrage keine Daten erhalten. Die Email wurde nicht versand";
Dominik Hebeler's avatar
Dominik Hebeler committed
35
        } else {
36
37
            # Wir versenden die Mail des Benutzers an uns:
            $message = $request->input('message');
38
            $subject = "[Ticket " . date("Y") . date("d") . date("m") . date("H") . date("i") . date("s") . "] MetaGer - Kontaktanfrage";
Dominik Hebeler's avatar
Dominik Hebeler committed
39
            if (Mail::send(['text' => 'kontakt.mail'], ['messageText' => $message], function ($message) use ($replyTo, $subject) {
40
41
42
                $message->to("office@suma-ev.de", $name = null);
                $message->from($replyTo, $name = null);
                $message->replyTo($replyTo, $name = null);
43
                $message->subject($subject);
Dominik Hebeler's avatar
Dominik Hebeler committed
44
            })) {
45
                # Mail erfolgreich gesendet
Dominik Hebeler's avatar
Dominik Hebeler committed
46
                $messageType   = "success";
47
                $returnMessage = 'Ihre Email wurde uns erfolgreich zugestellt. Vielen Dank dafür! Wir werden diese schnellstmöglich bearbeiten und uns dann ggf. wieder bei Ihnen melden.';
Dominik Hebeler's avatar
Dominik Hebeler committed
48
            } else {
49
                # Fehler beim senden der Email
Dominik Hebeler's avatar
Dominik Hebeler committed
50
                $messageType   = "error";
Dominik Hebeler's avatar
Dominik Hebeler committed
51
                $returnMessage = 'Beim Senden Ihrer Email ist ein Fehler aufgetreten. Bitte schicken Sie eine Email an: office@suma-ev.de, damit wir uns darum kümmern können.';
52
53
54
55
56
57
            }

            $messageType = "success";
        }

        return view('kontakt.kontakt')
Dominik Hebeler's avatar
Dominik Hebeler committed
58
59
60
61
            ->with('title', 'Kontakt')
            ->with('css', 'kontakt.css')
            ->with('js', ['openpgp.min.js', 'kontakt.js'])
            ->with($messageType, $returnMessage);
62
    }
Dominik Hebeler's avatar
Dominik Hebeler committed
63
64
65
66
67

    public function donation(Request $request)
    {
        # Der enthaltene String wird dem Benutzer nach der Spende ausgegeben
        $messageToUser = "";
Dominik Hebeler's avatar
Dominik Hebeler committed
68
        $messageType   = ""; # [success|error]
Dominik Hebeler's avatar
Dominik Hebeler committed
69

70
71
72
73
74
75
        #Sicherheitsüberprüfung (Wir wurden in letzter Zeit ziemlich mit Mails zugespammt
        $hash = md5(date('Y') . date('m') . date('d'));
        if ($request->input('dt') !== $hash) {
            return redirect(url('spende'));
        }

Dominik Hebeler's avatar
Dominik Hebeler committed
76
77
78
79
80
81
82
        # Folgende Felder werden vom Spendenformular als Input übergeben:
        # Name
        # Telefon
        # email
        # Kontonummer ( IBAN )
        # Bankleitzahl ( BIC )
        # Nachricht
Dominik Hebeler's avatar
Dominik Hebeler committed
83
        if (!$request->has('Kontonummer') || !$request->has('Bankleitzahl') || !$request->has('Nachricht')) {
Dominik Hebeler's avatar
Dominik Hebeler committed
84
            $messageToUser = "Sie haben eins der folgenden Felder nicht ausgefüllt: IBAN, BIC, Nachricht. Bitte korrigieren Sie Ihre Eingabe und versuchen es erneut.\n";
Dominik Hebeler's avatar
Dominik Hebeler committed
85
86
            $messageType   = "error";
        } else {
87
88
89
90
91
            $message = "\r\nName: " . $request->input('Name', 'Keine Angabe');
            $message .= "\r\nTelefon: " . $request->input('Telefon', 'Keine Angabe');
            $message .= "\r\nKontonummer: " . $request->input('Kontonummer');
            $message .= "\r\nBankleitzahl: " . $request->input('Bankleitzahl');
            $message .= "\r\nNachricht: " . $request->input('Nachricht');
Dominik Hebeler's avatar
Dominik Hebeler committed
92
93
94
95
96
97

            $replyTo = $request->input('email', 'anonymous-user@metager.de');
            if (!filter_var($replyTo, FILTER_VALIDATE_EMAIL)) {
                $messageToUser .= "Die eingegebene Email-Addresse ($replyTo) scheint nicht korrekt zu sein.";
            }

Dominik Hebeler's avatar
Dominik Hebeler committed
98
99
            try {
                if (Mail::send(['text' => 'kontakt.mail'], ['messageText' => $message], function ($message) use ($replyTo) {
100
                    $message->to("office@suma-ev.de", $name = null);
Dominik Hebeler's avatar
Dominik Hebeler committed
101
102
103
104
                    $message->from($replyTo, $name = null);
                    $message->replyTo($replyTo, $name = null);
                    $message->subject("MetaGer - Spende");
                })) {
Dominik Hebeler's avatar
Dominik Hebeler committed
105
106
107
108
                    $messageType   = "success";
                    $messageToUser = "Herzlichen Dank!! Wir haben Ihre Spendenbenachrichtigung erhalten.";
                } else {
                    $messageType   = "error";
Dominik Hebeler's avatar
Dominik Hebeler committed
109
110
                    $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.';
                }
Dominik Hebeler's avatar
Dominik Hebeler committed
111
112
            } catch (\Swift_TransportException $e) {
                $messageType   = "error";
Dominik Hebeler's avatar
Dominik Hebeler committed
113
114
115
116
                $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.';
            }
        }

117
118
119
120
121
122
123
124
        if ($messageType === "error") {
            return view('spende.danke')
                ->with('title', 'Kontakt')
                ->with('css', 'donation.css')
                ->with($messageType, $messageToUser);
        } else {
            $data = ['name' => $request->input('Name', 'Keine Angabe'), 'telefon' => $request->input('Telefon', 'Keine Angabe'), 'kontonummer' => $request->input('Kontonummer'), 'bankleitzahl' => $request->input('Bankleitzahl'), 'email' => $request->input('email', 'anonymous-user@metager.de'), 'nachricht' => $request->input('Nachricht')];
            $data = base64_encode(serialize($data));
125
            return redirect(LaravelLocalization::getLocalizedURL(LaravelLocalization::getCurrentLocale(), route("danke", ['data' => $data])));
126
127
        }

Dominik Hebeler's avatar
Dominik Hebeler committed
128
    }
129
130
131
132
133
134
135
136
137

    public function sendLanguageFile(Request $request, $from, $to, $exclude = "")
    {
        $filename = $request->input('filename');

        # Wir erstellen nun zunächst den Inhalt der Datei:
        $data = [];
        $new  = 0;
        foreach ($request->all() as $key => $value) {
138

139
140
141
            if ($key === "filename" || $value === "") {
                continue;
            }
142
            $key = base64_decode($key);
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
            if (strpos($key, "_new_") === 0 && $value !== "") {
                $new++;
                $key = substr($key, strpos($key, "_new_") + 5);
            }
            $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;
            }

        }
161

162
        $output = json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
        $output = preg_replace("/\{/si", "[", $output);
        $output = preg_replace("/\}/si", "]", $output);
        $output = preg_replace("/\": ([\"\[])/si", "\"\t=>\t$1", $output);

        $output = "<?php\n\nreturn $output;\n";

        $message = "Moin moin,\n\nein Benutzer hat eine Sprachdatei aktualisiert.\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";

        # 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;
190
191
192
193
194
195
196
197
198

        if ($new > 0) {
            Mail::send(['text' => 'kontakt.mail'], ['messageText' => $message], function ($message) use ($output, $filename) {
                $message->subject('MetaGer - Sprachdatei');
                $message->from('noreply@metager.de');
                $message->to('office@suma-ev.de');
                $message->attachData($output, basename($filename));
            });
        }
199
200
201
        $ex = base64_encode(serialize($ex));
        return redirect(url('languages/edit', ['from' => $from, 'to' => $to, 'exclude' => $ex]));
    }
Dominik Hebeler's avatar
Dominik Hebeler committed
202
}