message
parent
96104fcc4e
commit
78b365b084
|
|
@ -0,0 +1,19 @@
|
||||||
|
<?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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -28,10 +28,9 @@ class PublicationsController extends Controller {
|
||||||
$query = $this->model->query()->orderBy('id', 'desc');
|
$query = $this->model->query()->orderBy('id', 'desc');
|
||||||
$user = Auth::user();
|
$user = Auth::user();
|
||||||
if (!($user->isAdmin ?? null)) $query->where(['is_published' => true]);
|
if (!($user->isAdmin ?? null)) $query->where(['is_published' => true]);
|
||||||
if ($page = Page::byUuid($request->get('page'))->first()){
|
if ($page = Page::byUuid($request->get('page_id'))->first()) $query->where(['page_id' => $page->id]);
|
||||||
$query->where(['page_id' => $page->id]);
|
//$paginator = $query->paginate(config('app.pagination_limit'));
|
||||||
}
|
$paginator = $query->paginate(1);
|
||||||
$paginator = $query->paginate(config('app.pagination_limit'));
|
|
||||||
return fractal($paginator, new PublicationTransformer())->respond();
|
return fractal($paginator, new PublicationTransformer())->respond();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
<?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) {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,23 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Mail;
|
||||||
|
|
||||||
|
use App\Models\User;
|
||||||
|
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');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -2,8 +2,10 @@
|
||||||
|
|
||||||
namespace App\Providers;
|
namespace App\Providers;
|
||||||
|
|
||||||
|
use App\Events\FeedbackSender;
|
||||||
use App\Events\PasswordRecovered;
|
use App\Events\PasswordRecovered;
|
||||||
use App\Events\UserRegistered;
|
use App\Events\UserRegistered;
|
||||||
|
use App\Listeners\SendFeedbackMessage;
|
||||||
use App\Listeners\SendPasswordRecoveredNotification;
|
use App\Listeners\SendPasswordRecoveredNotification;
|
||||||
use App\Listeners\SendRegistrationNotification;
|
use App\Listeners\SendRegistrationNotification;
|
||||||
use Illuminate\Auth\Events\Registered;
|
use Illuminate\Auth\Events\Registered;
|
||||||
|
|
@ -20,6 +22,9 @@ class EventServiceProvider extends ServiceProvider {
|
||||||
],
|
],
|
||||||
PasswordRecovered::class => [
|
PasswordRecovered::class => [
|
||||||
SendPasswordRecoveredNotification::class
|
SendPasswordRecoveredNotification::class
|
||||||
|
],
|
||||||
|
FeedbackSender::class => [
|
||||||
|
SendFeedbackMessage::class
|
||||||
]
|
]
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,120 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Services\Forms\Feedback;
|
||||||
|
|
||||||
|
use App\Events\FeedbackSender;
|
||||||
|
use App\Models\Asset;
|
||||||
|
use App\Models\Dictionaries\Dictionary;
|
||||||
|
use App\Models\Objects\FieldType;
|
||||||
|
use App\Models\Objects\NirObject;
|
||||||
|
use App\Models\Objects\ObjectType;
|
||||||
|
use App\Models\Registries\Entry;
|
||||||
|
use App\Models\Registries\Operation;
|
||||||
|
use App\Models\Registries\OperationType;
|
||||||
|
use App\Services\Forms\FormsService;
|
||||||
|
use App\Transformers\Assets\AssetTransformer;
|
||||||
|
use App\Transformers\Dictionaries\DictionaryItemTransformer;
|
||||||
|
use App\Transformers\Objects\FieldTransformer;
|
||||||
|
use App\Transformers\Objects\ObjectPropertyTransformer;
|
||||||
|
use App\Transformers\Objects\ObjectTransformer;
|
||||||
|
use App\Transformers\Registries\OperationTransformer;
|
||||||
|
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 $model ? fractal($model->groups->first()->fields, new ObjectPropertyTransformer($model))->toArray() :
|
||||||
|
// fractal(ObjectType::byName('entry-operation')->first()->groups()->first()->fields, new FieldTransformer())->toArray();
|
||||||
|
/*
|
||||||
|
$fields = [
|
||||||
|
[
|
||||||
|
'name' => 'type',
|
||||||
|
'title' => 'Вид работы',
|
||||||
|
'type' => FieldType::RELATION,
|
||||||
|
'required' => true,
|
||||||
|
'appearance' => 'radio',
|
||||||
|
'options' => $this->getRelationItems(OperationType::TITLES),
|
||||||
|
'value' => $this->getRelationValue(OperationType::TITLES, $model->type ?? null)
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'name' => 'order_name',
|
||||||
|
'title' => 'Наименование приказа',
|
||||||
|
'type' => FieldType::STRING,
|
||||||
|
'required' => true,
|
||||||
|
'value' => $model->order_name ?? null
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'name' => 'order_date',
|
||||||
|
'title' => 'Дата приказа',
|
||||||
|
'required' => true,
|
||||||
|
'type' => FieldType::DATE,
|
||||||
|
'value' => ($v = $model->order_date ?? null) ? $v->toIso8601String() : null
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'name' => 'order',
|
||||||
|
'title' => 'Документ приказа',
|
||||||
|
'type' => FieldType::DOCUMENT,
|
||||||
|
'required' => true,
|
||||||
|
'value' => ($order = $model->order ?? null) ? fractal($order, new AssetTransformer()) : null
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'name' => 'listing',
|
||||||
|
'title' => 'Вхождение в перечень ПП',
|
||||||
|
'type' => FieldType::RELATION,
|
||||||
|
'multiple' => true,
|
||||||
|
'appearance' => 'checkbox',
|
||||||
|
'options' => fractal(Dictionary::byName('listings')->first()->items, new DictionaryItemTransformer()),
|
||||||
|
'value' => null
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'name' => 'active_since',
|
||||||
|
'title' => 'Дата начала действия',
|
||||||
|
'type' => FieldType::DATE,
|
||||||
|
'required' => true,
|
||||||
|
'value' => ($v = $model->active_since ?? null) ? $v->toIso8601String() : null
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'name' => 'active_till',
|
||||||
|
'title' => 'Дата окончания действия',
|
||||||
|
'type' => FieldType::DATE,
|
||||||
|
'value' => ($v = $model->active_till ?? null) ? $v->toIso8601String() : null
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'name' => 'developer',
|
||||||
|
'title' => 'Разработчик',
|
||||||
|
'type' => FieldType::STRING,
|
||||||
|
'required' => true,
|
||||||
|
'value' => $model->developer ?? null
|
||||||
|
]
|
||||||
|
];
|
||||||
|
return ['data' => $fields];
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
public function store(array $data) {
|
||||||
|
var_dump($data);
|
||||||
|
$email = 'sergey@bodin.ru';
|
||||||
|
event(new FeedbackSender($email, $data));
|
||||||
|
// $entry = Entry::byUuid($data['entry'] ?? null)->firstOrFail();
|
||||||
|
// $model = $entry->createObject('entry-operation', null, 'operations');
|
||||||
|
// $model->setValues($data);
|
||||||
|
// return fractal($model, new ObjectTransformer())->respond();
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function update(string $id, array $data) {
|
||||||
|
// $model = NirObject::byUuid($id)->firstOrFail();
|
||||||
|
// $model->setValues($data);
|
||||||
|
// return fractal($model->fresh(), new ObjectTransformer())->respond();
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,9 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Services\Forms\Feedback;
|
||||||
|
|
||||||
|
class FeedbackFormsServices {
|
||||||
|
public static array $services = [
|
||||||
|
'feedback-form-support' => FeedbackForms::class
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
namespace App\Services\Forms;
|
namespace App\Services\Forms;
|
||||||
|
|
||||||
|
use App\Services\Forms\Feedback\FeedbackFormsServices;
|
||||||
use App\Services\Forms\Pages\PageFormsServices;
|
use App\Services\Forms\Pages\PageFormsServices;
|
||||||
use App\Services\Forms\Publications\PublicationFormsServices;
|
use App\Services\Forms\Publications\PublicationFormsServices;
|
||||||
use App\Services\Forms\Registries\RegistryFormsServices;
|
use App\Services\Forms\Registries\RegistryFormsServices;
|
||||||
|
|
@ -14,7 +15,8 @@ class FormsService {
|
||||||
PageFormsServices::class,
|
PageFormsServices::class,
|
||||||
PublicationFormsServices::class,
|
PublicationFormsServices::class,
|
||||||
RegistryFormsServices::class,
|
RegistryFormsServices::class,
|
||||||
UserFormsServices::class
|
UserFormsServices::class,
|
||||||
|
FeedbackFormsServices::class,
|
||||||
];
|
];
|
||||||
|
|
||||||
public function __construct() {
|
public function __construct() {
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,5 @@ namespace App\Services\Forms\Pages;
|
||||||
|
|
||||||
class PageFormsServices {
|
class PageFormsServices {
|
||||||
public static array $services = [
|
public static array $services = [
|
||||||
'published' => PublicationForms::class
|
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,9 @@ namespace Database\Seeders\Objects;
|
||||||
use App\Models\Dictionaries\DictionaryItem;
|
use App\Models\Dictionaries\DictionaryItem;
|
||||||
use App\Models\Objects\Field;
|
use App\Models\Objects\Field;
|
||||||
use App\Models\Objects\FieldType;
|
use App\Models\Objects\FieldType;
|
||||||
|
use App\Models\Objects\ObjectType;
|
||||||
use App\Transformers\Dictionaries\DictionaryItemTransformer;
|
use App\Transformers\Dictionaries\DictionaryItemTransformer;
|
||||||
|
use App\Transformers\Objects\ObjectTypeTransformer;
|
||||||
use Illuminate\Database\Seeder;
|
use Illuminate\Database\Seeder;
|
||||||
|
|
||||||
class FieldsTableSeeder extends Seeder {
|
class FieldsTableSeeder extends Seeder {
|
||||||
|
|
@ -127,29 +129,30 @@ class FieldsTableSeeder extends Seeder {
|
||||||
'type' => FieldType::HTML,
|
'type' => FieldType::HTML,
|
||||||
],
|
],
|
||||||
|
|
||||||
'feddback-email-admin' => [
|
'feedback-support-email' => [
|
||||||
'title' => 'Email кому будет отправлен ответ',
|
'title' => 'Email кому будет отправлен ответ',
|
||||||
'type' => FieldType::STRING,
|
'type' => FieldType::STRING,
|
||||||
'required' => true,
|
'required' => true,
|
||||||
'params' => [
|
|
||||||
'showForm' => 'second',
|
|
||||||
]
|
|
||||||
],
|
],
|
||||||
'feedback-email-user' => [
|
'feedback-form-type' => [
|
||||||
'title' => 'Email',
|
'title' => 'Тип формы',
|
||||||
'type' => FieldType::STRING,
|
'type' => FieldType::RELATION,
|
||||||
'required' => true,
|
'required' => true,
|
||||||
'params' => [
|
'params' => [
|
||||||
'showForm' => 'second',
|
'related' => ObjectType::class, 'transformer' => ObjectTypeTransformer::class,
|
||||||
|
'options' => ['show' => true, 'whereHas' => ['parent' => ['name' => 'feedback-form']]]
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
|
||||||
|
'feedback-email' => [
|
||||||
|
'title' => 'Электронная почта',
|
||||||
|
'type' => FieldType::STRING,
|
||||||
|
'required' => true,
|
||||||
|
],
|
||||||
'feedback-name' => [
|
'feedback-name' => [
|
||||||
'title' => 'Ваше имя',
|
'title' => 'Ваше имя',
|
||||||
'type' => FieldType::STRING,
|
'type' => FieldType::STRING,
|
||||||
'required' => true,
|
'required' => true,
|
||||||
'params' => [
|
|
||||||
'showForm' => 'second',
|
|
||||||
]
|
|
||||||
],
|
],
|
||||||
'feedback-type' => [
|
'feedback-type' => [
|
||||||
'title' => 'Тема обращения',
|
'title' => 'Тема обращения',
|
||||||
|
|
@ -158,17 +161,14 @@ class FieldsTableSeeder extends Seeder {
|
||||||
'params' => [
|
'params' => [
|
||||||
'related' => DictionaryItem::class, 'transformer' => DictionaryItemTransformer::class,
|
'related' => DictionaryItem::class, 'transformer' => DictionaryItemTransformer::class,
|
||||||
'options' => ['show' => true, 'whereHas' => ['dictionary' => ['name' => 'feedback-types']]],
|
'options' => ['show' => true, 'whereHas' => ['dictionary' => ['name' => 'feedback-types']]],
|
||||||
'showForm' => 'second',
|
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
'feedback-message' => [
|
'feedback-message' => [
|
||||||
'title' => 'Текст сообщения',
|
'title' => 'Текст сообщения',
|
||||||
'type' => FieldType::TEXT,
|
'type' => FieldType::TEXT,
|
||||||
'required' => true,
|
'required' => true,
|
||||||
'params' => [
|
|
||||||
'showForm' => 'second',
|
|
||||||
]
|
|
||||||
],
|
],
|
||||||
|
|
||||||
'operation-type' => [
|
'operation-type' => [
|
||||||
'title' => 'Вид работы',
|
'title' => 'Вид работы',
|
||||||
'type' => FieldType::RELATION,
|
'type' => FieldType::RELATION,
|
||||||
|
|
@ -194,6 +194,7 @@ class FieldsTableSeeder extends Seeder {
|
||||||
'type' => FieldType::DOCUMENT,
|
'type' => FieldType::DOCUMENT,
|
||||||
'required' => true
|
'required' => true
|
||||||
],
|
],
|
||||||
|
|
||||||
'listings' => [
|
'listings' => [
|
||||||
'title' => 'Вхождение в перечень ПП',
|
'title' => 'Вхождение в перечень ПП',
|
||||||
'type' => FieldType::RELATION,
|
'type' => FieldType::RELATION,
|
||||||
|
|
@ -204,6 +205,7 @@ class FieldsTableSeeder extends Seeder {
|
||||||
'options' => ['show' => true, 'whereHas' => ['dictionary' => ['name' => 'listings']]]
|
'options' => ['show' => true, 'whereHas' => ['dictionary' => ['name' => 'listings']]]
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
|
||||||
'active-since' => [
|
'active-since' => [
|
||||||
'title' => 'Дата начала действия',
|
'title' => 'Дата начала действия',
|
||||||
'type' => FieldType::DATE,
|
'type' => FieldType::DATE,
|
||||||
|
|
@ -213,6 +215,7 @@ class FieldsTableSeeder extends Seeder {
|
||||||
'title' => 'Дата окончания действия',
|
'title' => 'Дата окончания действия',
|
||||||
'type' => FieldType::DATE
|
'type' => FieldType::DATE
|
||||||
],
|
],
|
||||||
|
|
||||||
'developer' => [
|
'developer' => [
|
||||||
'title' => 'Разработчик',
|
'title' => 'Разработчик',
|
||||||
'type' => FieldType::STRING
|
'type' => FieldType::STRING
|
||||||
|
|
|
||||||
|
|
@ -62,7 +62,12 @@ class ObjectTypeFieldsTableSeeder extends Seeder {
|
||||||
],
|
],
|
||||||
'page-section-feedback' => [
|
'page-section-feedback' => [
|
||||||
'common' => [
|
'common' => [
|
||||||
'fields' => ['feddback-email-admin', 'feedback-email-user', 'feedback-name', 'feedback-type', 'feedback-message']
|
'fields' => ['feedback-support-email', 'feedback-form-type']
|
||||||
|
]
|
||||||
|
],
|
||||||
|
'feedback-form-support' => [
|
||||||
|
'common' => [
|
||||||
|
'fields' => ['feedback-email', 'feedback-name', 'feedback-type', 'feedback-message']
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
'entry-operation' => [
|
'entry-operation' => [
|
||||||
|
|
|
||||||
|
|
@ -47,6 +47,15 @@ class ObjectTypesTableSeeder extends Seeder {
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
|
||||||
|
'feedback-form' => [
|
||||||
|
'title' => '',
|
||||||
|
'children' => [
|
||||||
|
'feedback-form-support' => [
|
||||||
|
'title' => 'Обращение',
|
||||||
|
],
|
||||||
|
]
|
||||||
|
],
|
||||||
|
|
||||||
'entry-operation' => [
|
'entry-operation' => [
|
||||||
'title' => 'Действие с записью в реестре'
|
'title' => 'Действие с записью в реестре'
|
||||||
]
|
]
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,9 @@
|
||||||
|
@extends('mail.layouts.layout')
|
||||||
|
|
||||||
|
@section('content')
|
||||||
|
<p>Вам пришло сообщение с обратной связи.</p>
|
||||||
|
<p class="mb-10">Email отправителя: {{$data->feedback_email}}</p>
|
||||||
|
<p class="mb-10">Имя отправителя: {{$data->feedback_name}}</p>
|
||||||
|
<p class="mb-10">Тема сообщения: {{$data->feedback_type}}</p>
|
||||||
|
<p class="mb-10">Сообщение: {{$data->feedback_message}}</p>
|
||||||
|
@endsection
|
||||||
Loading…
Reference in New Issue