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

namespace App\Http\Controllers;

5
6
use App\Mail\Kontakt;
use App\Mail\Sprachdatei;
7
use Illuminate\Http\Request;
8
use Illuminate\Http\Response;
9
use LaravelLocalization;
10
use Mail;
Dominik Hebeler's avatar
Dominik Hebeler committed
11
use Log;
12
use Validator;
Dominik Hebeler's avatar
Dominik Hebeler committed
13
14
use \IBAN;
use \IBANCountry;
15
16
17
18
19
20
21
22
23

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
24
25
    public function contactMail(Request $request)
    {
26
        # Nachricht, die wir an den Nutzer weiterleiten:
Dominik Hebeler's avatar
Dominik Hebeler committed
27
        $messageType = ""; # [success|error]
28
        $returnMessage = '';
29
30
31
32

        # 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(
            [
Dominik Hebeler's avatar
Dominik Hebeler committed
33
                'email' => $request->input('email'),
Dominik Hebeler's avatar
Dominik Hebeler committed
34
                'pcsrf' => $request->input('pcsrf'),
35
36
            ],
            [
Dominik Hebeler's avatar
Dominik Hebeler committed
37
                'email' => 'required|email',
Dominik Hebeler's avatar
Dominik Hebeler committed
38
                'pcsrf' => ['required', 'string', new \App\Rules\PCSRF],
39
40
41
            ]
        );

Dominik Hebeler's avatar
Dominik Hebeler committed
42
        if ($validator->fails()) {
43
44
45
46
47
            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
48
        $replyTo = $request->input('email', 'noreply@metager.de');
Dominik Hebeler's avatar
Dominik Hebeler committed
49
        if ($replyTo === "") {
50
            $replyTo = "noreply@metager.de";
Dominik Hebeler's avatar
Dominik Hebeler committed
51
        } else {
52
53
54
            $replyTo = $request->input('email');
        }

Dominik Hebeler's avatar
Dominik Hebeler committed
55
        if (!$request->filled('message') || !$request->filled('subject')) {
Dominik Hebeler's avatar
Dominik Hebeler committed
56
            $messageType = "error";
57
            $returnMessage = trans('kontakt.error.1');
Dominik Hebeler's avatar
Dominik Hebeler committed
58
        } else {
59
            # Wir versenden die Mail des Benutzers an uns:
60
            $mailto = "support@metager.org";
Dominik Hebeler's avatar
Dominik Hebeler committed
61
            if (LaravelLocalization::getCurrentLocale() === "de") {
62
63
                $mailto = "support@suma-ev.de";
            }
64
            $message = $request->input('message');
65
            $subject = $request->input('subject');
66
            Mail::to($mailto)
67
                ->send(new Kontakt($name, $replyTo, $subject, $message));
68

69
            $returnMessage = trans('kontakt.success.1');
Dominik Hebeler's avatar
Dominik Hebeler committed
70
            $messageType = "success";
71
72
73
        }

        return view('kontakt.kontakt')
Dominik Hebeler's avatar
Dominik Hebeler committed
74
            ->with('title', 'Kontakt')
75
            ->with('js', ['lib.js'])
Dominik Hebeler's avatar
Dominik Hebeler committed
76
            ->with($messageType, $returnMessage);
77
    }
Dominik Hebeler's avatar
Dominik Hebeler committed
78
79
80

    public function donation(Request $request)
    {
Dominik Hebeler's avatar
Dominik Hebeler committed
81
82
83
84
85
        $data = [
            'name' => $request->input('Name', ''),
            'iban' => $request->input('iban', ''),
            'bic' => $request->input('bic', ''),
            'email' => $request->input('email', ''),
86
87
            'betrag' => $request->input('amount', ''),
            'betrag' => $request->input('frequency', ''),
Dominik Hebeler's avatar
Dominik Hebeler committed
88
89
90
91
92
93
            'nachricht' => $request->input('Nachricht', ''),
        ];
        $name = $request->input('Name', '');
        $iban = $request->input('iban', '');
        $bic = $request->input('bic', '');
        $email = $request->input('email', '');
94
        $frequency = $request->input('frequency', '');
Phil Höfer's avatar
Phil Höfer committed
95
        $betrag = $request->input('amount', '');
Dominik Hebeler's avatar
Dominik Hebeler committed
96
        $nachricht = $request->input('Nachricht', '');
97

Phil Höfer's avatar
Phil Höfer committed
98
99
100
101
102
103
        # Allow custom amounts
        if ($betrag == "custom") {
            $betrag = $request->input('custom-amount', '');
            $data['betrag'] = $betrag;
        }

Dominik Hebeler's avatar
Dominik Hebeler committed
104
105
        # Der enthaltene String wird dem Benutzer nach der Spende ausgegeben
        $messageToUser = "";
Dominik Hebeler's avatar
Dominik Hebeler committed
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
        $messageType = ""; # [success|error]

        # Check the IBAN
        $iban = new IBAN($iban);
        $bic = $request->input('Bankleitzahl', '');
        $country = new IBANCountry($iban->Country());
        $isSEPA = filter_var($country->IsSEPA(), FILTER_VALIDATE_BOOLEAN);

        # Check the amount
        $validBetrag = is_numeric($betrag) && $betrag > 0;

        # 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";
Dominik Hebeler's avatar
Dominik Hebeler committed
131
        } else {
Dominik Hebeler's avatar
Dominik Hebeler committed
132

Dominik Hebeler's avatar
Dominik Hebeler committed
133
134
135
            # The value has to have a maximum of 2 decimal digits
            $betrag = round($betrag, 2, PHP_ROUND_HALF_DOWN);

136
137
138
139
140
141
142
            # Folgende Felder werden vom Spendenformular als Input übergeben:
            # Name
            # Telefon
            # email
            # Kontonummer ( IBAN )
            # Bankleitzahl ( BIC )
            # Nachricht
Dominik Hebeler's avatar
Dominik Hebeler committed
143
144
145
146
147
148
149
150

            $message = "\r\nName: " . $name;
            $message .= "\r\nIBAN: " . $iban->HumanFormat();
            if ($bic !== "") {
                $message .= "\r\nBIC: " . $bic;
            }

            $message .= "\r\nBetrag: " . $betrag;
151
            $message .= "\r\nHäufigkeit: " . $frequency;
Dominik Hebeler's avatar
Dominik Hebeler committed
152
153
154
155
156
157
158
159
160
            $message .= "\r\nNachricht: " . $nachricht;

            try {
                Mail::to("spenden@suma-ev.de")
                    ->send(new \App\Mail\Spende($email, $message, $name));

                $messageType = "success";
                $messageToUser = "Herzlichen Dank!! Wir haben Ihre Spendenbenachrichtigung erhalten.";
            } catch (\Swift_TransportException $e) {
Dominik Hebeler's avatar
Dominik Hebeler committed
161
                Log::error($e->getMessage());
Dominik Hebeler's avatar
Dominik Hebeler committed
162
163
                $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.';
Dominik Hebeler's avatar
Dominik Hebeler committed
164
165
166
            }
        }

167
        if ($messageType === "error") {
168
            return view('spende.spende')
169
                ->with('title', 'Kontakt')
Dominik Hebeler's avatar
Dominik Hebeler committed
170
171
                ->with($messageType, $messageToUser)
                ->with('data', $data);
172
        } else {
Dominik Hebeler's avatar
Dominik Hebeler committed
173
            $data['iban'] = $iban->HumanFormat();
174
            $data = base64_encode(serialize($data));
175
            return redirect(LaravelLocalization::getLocalizedURL(LaravelLocalization::getCurrentLocale(), route("danke", ['data' => $data])));
176
177
        }

Dominik Hebeler's avatar
Dominik Hebeler committed
178
    }
179

180
    #Ueberprueft ob ein bereits vorhandener Eintrag bearbeitet worden ist
181
    public static function isEdited($k, $v, $filename)
182
    {
183
        try {
Dominik Hebeler's avatar
Dominik Hebeler committed
184
            $temp = include resource_path() . "/" . $filename;
185
            foreach ($temp as $key => $value) {
Dominik Hebeler's avatar
Dominik Hebeler committed
186
                if ($k === $key && $v !== $value) {
187
188
                    return true;
                }
Dominik Hebeler's avatar
Dominik Hebeler committed
189
            }
190
191
192
        } catch (\ErrorException $e) {
            #Datei existiert noch nicht
            return true;
193
194
195
196
        }
        return false;
    }

Dominik Hebeler's avatar
Dominik Hebeler committed
197
    public function sendLanguageFile(Request $request, $from, $to, $exclude = "", $email = "")
198
199
200
201
    {
        $filename = $request->input('filename');
        # Wir erstellen nun zunächst den Inhalt der Datei:
        $data = [];
Dominik Hebeler's avatar
Dominik Hebeler committed
202
        $new = 0;
203
        $emailAddress = "";
204
        $editedKeys = "";
205
        foreach ($request->all() as $key => $value) {
206

207
208
209
            if ($key === "filename" || $value === "") {
                continue;
            }
Dominik Hebeler's avatar
Dominik Hebeler committed
210
            if ($key === "email") {
211
212
213
                $emailAddress = $value;
                continue;
            }
214
            $key = base64_decode($key);
215
216
217
            if (strpos($key, "_new_") === 0 && $value !== "") {
                $new++;
                $key = substr($key, strpos($key, "_new_") + 5);
Dominik Hebeler's avatar
Dominik Hebeler committed
218
                $editedKeys = $editedKeys . "\n" . $key;
219

220
            } else if ($this->isEdited($key, $value, $filename)) {
221
                $new++;
Dominik Hebeler's avatar
Dominik Hebeler committed
222
                $editedKeys = $editedKeys . "\n" . $key;
223
            }
224

225
226
227
228
229
230
231
232
233
234
235
236
237
            $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;
            }
        }
238

239
        $output = json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
240
241
242
        $output = preg_replace("/\{/si", "[", $output);
        $output = preg_replace("/\}/si", "]", $output);
        $output = preg_replace("/\": ([\"\[])/si", "\"\t=>\t$1", $output);
Dominik Hebeler's avatar
Dominik Hebeler committed
243

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

246
247
        $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";

248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
        # 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;
267
268

        if ($new > 0) {
Dominik Hebeler's avatar
Dominik Hebeler committed
269
            if ($emailAddress !== "") {
Aria Givi's avatar
Aria Givi committed
270
                Mail::to("dev@suma-ev.de")
Dominik Hebeler's avatar
Dominik Hebeler committed
271
                    ->send(new Sprachdatei($message, $output, basename($filename), $emailAddress));
272
            } else {
Aria Givi's avatar
Aria Givi committed
273
                Mail::to("dev@suma-ev.de")
Dominik Hebeler's avatar
Dominik Hebeler committed
274
                    ->send(new Sprachdatei($message, $output, basename($filename)));
275
            }
276
        }
277
        $ex = base64_encode(serialize($ex));
278
279

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

Dominik Hebeler's avatar
Dominik Hebeler committed
282
}