feedback forms updated
parent
78f97c32a1
commit
8fb69c7539
|
|
@ -0,0 +1,20 @@
|
|||
<?php
|
||||
|
||||
namespace App\Events\Feedback;
|
||||
|
||||
use App\Models\Objects\NirObject;
|
||||
use Illuminate\Broadcasting\InteractsWithSockets;
|
||||
use Illuminate\Foundation\Events\Dispatchable;
|
||||
use Illuminate\Queue\SerializesModels;
|
||||
|
||||
class FeedbackFormSubmitted {
|
||||
use Dispatchable, InteractsWithSockets, SerializesModels;
|
||||
|
||||
public NirObject $object;
|
||||
public string $mailto;
|
||||
|
||||
public function __construct(NirObject $object, string $mailto) {
|
||||
$this->object = $object;
|
||||
$this->mailto = $mailto;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,19 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Events;
|
||||
|
||||
use Illuminate\Broadcasting\InteractsWithSockets;
|
||||
use Illuminate\Foundation\Events\Dispatchable;
|
||||
use Illuminate\Queue\SerializesModels;
|
||||
|
||||
class FeedbackSender {
|
||||
use Dispatchable, InteractsWithSockets, SerializesModels;
|
||||
|
||||
public string $email;
|
||||
public array $data;
|
||||
|
||||
public function __construct(string $email, array $data) {
|
||||
$this->email = $email;
|
||||
$this->data = $data;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
<?php
|
||||
|
||||
namespace App\Listeners\Feedback;
|
||||
|
||||
use App\Events\Feedback\FeedbackFormSubmitted;
|
||||
use App\Mail\Feedback\NotifyFeedbackFormSubmitted;
|
||||
use Illuminate\Support\Facades\Mail;
|
||||
|
||||
class SendFeedbackFormNotifications {
|
||||
public function __construct() {
|
||||
}
|
||||
|
||||
public function handle(FeedbackFormSubmitted $event) {
|
||||
try {
|
||||
Mail::to($event->mailto)->send(new NotifyFeedbackFormSubmitted($event->object));
|
||||
} catch (\Exception $exception) {
|
||||
var_dump($exception);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,19 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Listeners;
|
||||
|
||||
use App\Mail\FeedbackSender;
|
||||
use Illuminate\Support\Facades\Mail;
|
||||
|
||||
class SendFeedbackMessage {
|
||||
public function __construct() {
|
||||
}
|
||||
|
||||
public function handle(object $event) {
|
||||
try {
|
||||
Mail::to($event->email)->send(new FeedbackSender($event->data));
|
||||
} catch (\Exception $exception) {
|
||||
var_dump($exception);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
<?php
|
||||
|
||||
namespace App\Mail\Feedback;
|
||||
|
||||
use App\Models\Objects\NirObject;
|
||||
use Illuminate\Bus\Queueable;
|
||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||
use Illuminate\Mail\Mailable;
|
||||
use Illuminate\Queue\SerializesModels;
|
||||
|
||||
class NotifyFeedbackFormSubmitted extends Mailable implements ShouldQueue {
|
||||
use Queueable, SerializesModels;
|
||||
|
||||
public NirObject $object;
|
||||
|
||||
public function __construct(NirObject $object) {
|
||||
$this->object = $object;
|
||||
}
|
||||
|
||||
public function build(): NotifyFeedbackFormSubmitted {
|
||||
$this->subject('Поступило новое обращение')->view('mail.feedback.submitted');
|
||||
$this->object->attachedFiles->each(function($asset) {
|
||||
$this->attachFromStorage($asset->path);
|
||||
});
|
||||
return $this;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,22 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Mail;
|
||||
|
||||
use Illuminate\Bus\Queueable;
|
||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||
use Illuminate\Mail\Mailable;
|
||||
use Illuminate\Queue\SerializesModels;
|
||||
|
||||
class FeedbackSender extends Mailable implements ShouldQueue {
|
||||
use Queueable, SerializesModels;
|
||||
|
||||
public array $data;
|
||||
|
||||
public function __construct(array $data) {
|
||||
$this->data = $data;
|
||||
}
|
||||
|
||||
public function build() {
|
||||
return $this->subject('Поступило новое обращение')->view('mail.feedback.support');
|
||||
}
|
||||
}
|
||||
|
|
@ -89,6 +89,10 @@ class Field extends Model {
|
|||
return new $transformer;
|
||||
}
|
||||
|
||||
public function getIsFileAttribute(): bool {
|
||||
return in_array($this->type, [FieldType::DOCUMENT, FieldType::IMAGE]);
|
||||
}
|
||||
|
||||
|
||||
|
||||
public function getRepresented($filters = [], ?FiltersService $service = null): ?Collection {
|
||||
|
|
|
|||
|
|
@ -148,6 +148,28 @@ class NirObject extends Model {
|
|||
return $result;
|
||||
}
|
||||
|
||||
public function parsedValue($fieldName): ?string {
|
||||
if ($field = $this->type->getField($fieldName)) return $field->getValue($this->id)->map(function($val) use($field) {
|
||||
if ($field->type === FieldType::BOOLEAN) return $val ? 'Да' : 'Нет';
|
||||
elseif ($field->type === FieldType::DATE) return $val ? $val->format('d.m.Y') : null;
|
||||
elseif ($field->type === FieldType::TIME) return $val ? $val->format('H:i') : null;
|
||||
elseif ($field->type === FieldType::DATETIME) return $val ? $val->format('d.m.Y H:i') : null;
|
||||
else return $val->caption ?? $val->title ?? $val->name ?? $val;
|
||||
})->implode('; ');
|
||||
return null;
|
||||
}
|
||||
|
||||
public function getAttachedFilesAttribute(): Collection {
|
||||
$result = collect();
|
||||
$this->properties->each(function($group) use(&$result) {
|
||||
$group->fields->each(function($field) use(&$result) {
|
||||
if ($field->isFile) $this->getValue($field->name)->each(function($asset) use(&$result) {$result->push($asset);});
|
||||
});
|
||||
});
|
||||
return $result;
|
||||
}
|
||||
|
||||
|
||||
public function setValues(array $values): Collection {
|
||||
return collect($values)->map(function($value, $fieldName) {
|
||||
return $this->setValue($fieldName, $value);
|
||||
|
|
|
|||
|
|
@ -4,12 +4,12 @@ namespace App\Providers;
|
|||
|
||||
use App\Events\Applications\ApplicationExpertChanged;
|
||||
use App\Events\Applications\ApplicationStatusChanged;
|
||||
use App\Events\FeedbackSender;
|
||||
use App\Events\Feedback\FeedbackFormSubmitted;
|
||||
use App\Events\PasswordRecovered;
|
||||
use App\Events\UserRegistered;
|
||||
use App\Listeners\Applications\SendApplicationExpertChangedNotifications;
|
||||
use App\Listeners\Applications\SendApplicationStatusChangedNotifications;
|
||||
use App\Listeners\SendFeedbackMessage;
|
||||
use App\Listeners\Feedback\SendFeedbackFormNotifications;
|
||||
use App\Listeners\SendPasswordRecoveredNotification;
|
||||
use App\Listeners\SendRegistrationNotification;
|
||||
use Illuminate\Auth\Events\Registered;
|
||||
|
|
@ -27,8 +27,8 @@ class EventServiceProvider extends ServiceProvider {
|
|||
PasswordRecovered::class => [
|
||||
SendPasswordRecoveredNotification::class
|
||||
],
|
||||
FeedbackSender::class => [
|
||||
SendFeedbackMessage::class
|
||||
FeedbackFormSubmitted::class => [
|
||||
SendFeedbackFormNotifications::class
|
||||
],
|
||||
|
||||
ApplicationStatusChanged::class => [
|
||||
|
|
|
|||
|
|
@ -2,32 +2,20 @@
|
|||
|
||||
namespace App\Services\Forms\Feedback;
|
||||
|
||||
use App\Events\FeedbackSender;
|
||||
use App\Models\Objects\NirObject;
|
||||
use App\Events\Feedback\FeedbackFormSubmitted;
|
||||
use App\Models\Objects\ObjectType;
|
||||
use App\Services\Forms\FormsService;
|
||||
use App\Transformers\Objects\ObjectTransformer;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
|
||||
class FeedbackForms extends FormsService {
|
||||
public array $formTitles = ['create' => 'Создание операции', 'update' => 'Редактирование операции'];
|
||||
|
||||
public function form(?string $id = null, array $data = []): array {
|
||||
$model = NirObject::byUuid($id)->first();
|
||||
$groups = [
|
||||
['name' => 'common', 'fields' => $this->commonGroupFields($model)]
|
||||
];
|
||||
return ['title' => $this->formTitle($model), 'data' => $groups];
|
||||
}
|
||||
|
||||
public function commonGroupFields(?NirObject $model): array {
|
||||
return [];
|
||||
}
|
||||
|
||||
|
||||
public function store(array $data) {
|
||||
event(new FeedbackSender($data['mailto'], $data));
|
||||
return null;
|
||||
}
|
||||
|
||||
public function update(string $id, array $data) {
|
||||
public function store(array $data): ?JsonResponse {
|
||||
if ($objectType = ObjectType::byUuid($data['type'] ?? null)->first()) {
|
||||
$object = $objectType->objects()->create();
|
||||
$object->setValues($data);
|
||||
if (!empty($data['mailto'])) event(new FeedbackFormSubmitted($object, $data['mailto']));
|
||||
return fractal($object, new ObjectTransformer())->respond();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,10 @@
|
|||
@extends('mail.layouts.layout')
|
||||
|
||||
@section('content')
|
||||
<p>Поступило обращение с сайта {{env('APP_URL')}}.</p>
|
||||
@foreach($object->properties as $group)
|
||||
@foreach($group->fields as $field)
|
||||
@if(!$field->isFile)<p>{{$field->title}}: {{$object->parsedValue($field->name)}}</p>@endif
|
||||
@endforeach
|
||||
@endforeach
|
||||
@endsection
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
@extends('mail.layouts.layout')
|
||||
|
||||
@section('content')
|
||||
<p>Поступило обращение с сайта {{env('APP_URL')}}.</p>
|
||||
<p class="mb-10">Email отправителя: {{$data['feedback-email'] ?? '-'}}</p>
|
||||
<p class="mb-10">Имя отправителя: {{$data['feedback-name'] ?? '-'}}</p>
|
||||
<p class="mb-10">Сообщение: {!! nl2br($data['feedback-message'] ?? '-') !!}</p>
|
||||
@endsection
|
||||
Loading…
Reference in New Issue