Skip to content
This repository was archived by the owner on Oct 1, 2021. It is now read-only.

Commit ce492dc

Browse files
authored
Revert "refactor: make contact form into livewire component (#486)" (#640)
This reverts commit f1776fa.
1 parent 4926a9f commit ce492dc

File tree

8 files changed

+148
-269
lines changed

8 files changed

+148
-269
lines changed

phpunit.xml

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,13 @@
77
<testsuites>
88
<testsuite name="Test Suite">
99
<directory suffix="Test.php">./tests</directory>
10-
<exclude>./tests/Unit/Livewire/ContactFormTest.php</exclude>
1110
</testsuite>
1211
</testsuites>
1312
<coverage processUncoveredFiles="true">
1413
<include>
1514
<directory suffix=".php">./app</directory>
1615
<directory suffix=".php">./src</directory>
1716
</include>
18-
<exclude>
19-
<file>./tests/Unit/Livewire/ContactFormTest.php</file>
20-
</exclude>
2117
</coverage>
2218
<php>
2319
<server name="APP_KEY" value="AckfSECXIvnK5r28GVIWUAxmbBSjTsmF"/>

resources/lang/en/messages.php

Lines changed: 0 additions & 5 deletions
This file was deleted.

resources/views/livewire/contact-form.blade.php

Lines changed: 0 additions & 67 deletions
This file was deleted.

resources/views/pages/contact/content.blade.php

Lines changed: 85 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
@props([
22
'socialIconHoverClass' => 'hover:bg-theme-danger-400 hover:text-white',
33
'discordUrl' => trans('ui::urls.discord'),
4-
'documentationUrl' => trans('ui::urls.documentation'),
4+
'subject' => null,
5+
'message' => null,
56
'helpTitle' => trans('ui::pages.contact.let_us_help.title'),
67
'helpDescription' => trans('ui::pages.contact.let_us_help.description'),
78
'additionalTitle' => trans('ui::pages.contact.additional_support.title'),
@@ -34,11 +35,11 @@
3435
</div>
3536

3637
<div class="flex flex-col mt-6 space-y-3 sm:flex-row sm:items-center sm:space-y-0 sm:space-x-2">
37-
<a href="{{ $documentationUrl }}" target="_blank" rel="noopener noreferrer" class="button-secondary">@lang('ui::actions.documentation')</a>
38+
<a href="@lang('ui::urls.documentation')" target="_blank" rel="noopener noreferrer" class="button-secondary">@lang('ui::actions.documentation')</a>
3839

3940
<span class="font-semibold leading-none text-center">@lang('ui::general.or')</span>
4041

41-
<a href="{{ $discordUrl }}" target="_blank" rel="noopener nofollow noreferrer" class="button-secondary">
42+
<a href="{{ $discordUrl}}" target="_blank" rel="noopener nofollow noreferrer" class="button-secondary">
4243
<div class="flex justify-center items-center space-x-2 w-full">
4344
@svg('brands.outline.discord', 'w-5 h-5')
4445
<span>@lang('ui::actions.discord')</span>
@@ -58,10 +59,89 @@
5859
</div>
5960
</div>
6061

61-
<div class="flex flex-col flex-1 lg:pl-6">
62+
<div class="flex flex-col flex-1 lg:pl-6" x-data="{ subject: '{{ old('subject', $subject) }}' }">
6263
<h3>{{ $formTitle }}</h3>
6364
<div class="mt-4">{{ $formDescription }}</div>
6465

65-
<livewire:contact-form />
66+
<form id="contact-form" method="POST" action="{{ route('contact') }}#contact-form" class="flex flex-col flex-1 space-y-8" enctype="multipart/form-data">
67+
@csrf
68+
69+
@honeypot
70+
71+
<div class="flex flex-col space-y-8 sm:flex-row sm:space-y-0 sm:space-x-3">
72+
<x-ark-input
73+
name="name"
74+
:label="trans('ui::forms.name')"
75+
autocomplete="name"
76+
class="w-full"
77+
:value="old('name')"
78+
:errors="$errors"
79+
/>
80+
81+
<x-ark-input
82+
type="email"
83+
name="email"
84+
:label="trans('ui::forms.email')"
85+
autocomplete="email"
86+
class="w-full"
87+
:value="old('email')"
88+
:errors="$errors"
89+
/>
90+
</div>
91+
92+
<x-ark-select
93+
name="subject"
94+
on-change="subject = $event.target.value"
95+
:label="trans('ui::forms.subject')"
96+
:errors="$errors"
97+
>
98+
@foreach(config('web.contact.subjects') as $contactSubject)
99+
<option
100+
value="{{ $contactSubject['value'] }}"
101+
@if(old('subject', $subject) === $contactSubject['value']) selected @endif
102+
>
103+
{{ $contactSubject['label'] }}
104+
</option>
105+
@endforeach
106+
</x-ark-select>
107+
108+
<x-ark-textarea
109+
name="message"
110+
:label="trans('ui::forms.message')"
111+
rows="3"
112+
class="w-full"
113+
:errors="$errors"
114+
:placeholder="trans('ui::pages.contact.message_placeholder')"
115+
>{{ old('message', $message) }}</x-ark-textarea>
116+
117+
<div x-show="subject === 'job_application'">
118+
<x-ark-input
119+
type="file"
120+
name="attachment"
121+
:label="trans('ui::forms.attachment_pdf')"
122+
class="w-full"
123+
:errors="$errors"
124+
accept="application/pdf"
125+
/>
126+
</div>
127+
128+
<div class="flex relative flex-col flex-1 justify-end">
129+
<button
130+
type="submit"
131+
x-data="{
132+
success: {{ (flash()->level === 'success') ? 'true' : 'false' }},
133+
error: {{ (flash()->level === 'error') ? 'true' : 'false' }}
134+
}"
135+
x-bind.transition:class="{ invisible: success || error }"
136+
@if(flash()->message)
137+
x-init="livewire.emit('toastMessage', ['{{ flash()->message }}', '{{ flash()->level }}'])"
138+
@endif
139+
x-cloak
140+
class="button-primary"
141+
>
142+
@lang('ui::actions.send')
143+
</button>
144+
</div>
145+
</form>
66146
</div>
67147
</div>

src/Components/ContactForm.php

Lines changed: 0 additions & 100 deletions
This file was deleted.

src/Http/Controllers/ContactController.php

Lines changed: 63 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,72 @@
44

55
namespace ARKEcosystem\UserInterface\Http\Controllers;
66

7-
use Illuminate\Contracts\View\View;
7+
use ARKEcosystem\UserInterface\Mail\ContactFormSubmitted;
8+
use Illuminate\Http\Request;
9+
use Illuminate\Support\Arr;
10+
use Illuminate\Support\Collection;
11+
use Illuminate\Support\Facades\Mail;
12+
use Illuminate\Support\Facades\Validator;
13+
use Illuminate\Validation\Rule;
14+
use Illuminate\View\View;
15+
use Illuminate\Http\RedirectResponse;
816

917
final class ContactController extends Controller
1018
{
11-
public function __invoke(): View
19+
public function index(Request $request): View
1220
{
13-
return view('app.contact');
21+
$validator = Validator::make($request->all(), [
22+
'subject' => ['string', Rule::in($this->getSubjects())],
23+
'plugin_id' => ['string', 'max:64'],
24+
'plugin_version' => ['string', 'max:32'],
25+
]);
26+
27+
if ($validator->fails()) {
28+
abort(422);
29+
}
30+
31+
$subject = $request->subject;
32+
$message = '';
33+
34+
if ($subject === 'desktop_wallet_plugin_report') {
35+
$message .= "Hi, I would like to report a plugin. The ID is {$request->plugin_id} and version is {$request->plugin_version}. The issue I've encountered is ...";
36+
}
37+
38+
return view('app.contact', compact('message', 'subject'));
39+
}
40+
41+
public function handle(Request $request): RedirectResponse
42+
{
43+
$data = $request->validate([
44+
'name' => ['required', 'max:64'],
45+
'email' => ['required', 'email'],
46+
'subject' => ['required', 'string', Rule::in($this->getSubjects())],
47+
'message' => ['required', 'max:2048'],
48+
'attachment' => ['mimes:pdf', 'max:1024'],
49+
]);
50+
51+
$mail = new ContactFormSubmitted(Arr::except($data, ['attachment']));
52+
53+
if ('job_application' === $data['subject']) {
54+
if ($request->has('attachment')) {
55+
$attachment = $request->file('attachment');
56+
57+
$mail->attach($attachment->getRealPath(), [
58+
'as' => $attachment->getClientOriginalName(),
59+
'mime' => 'application/pdf',
60+
]);
61+
}
62+
}
63+
64+
Mail::send($mail);
65+
66+
flash()->success(trans('messages.contact'));
67+
68+
return redirect()->route('contact');
69+
}
70+
71+
private function getSubjects(): Collection
72+
{
73+
return collect(config('web.contact.subjects'))->pluck('value');
1474
}
1575
}

0 commit comments

Comments
 (0)