diff --git a/app/Events/FeedbackSender.php b/app/Events/FeedbackSender.php new file mode 100644 index 0000000..8298436 --- /dev/null +++ b/app/Events/FeedbackSender.php @@ -0,0 +1,19 @@ +email = $email; + $this->data = $data; + } +} diff --git a/app/Http/Controllers/Api/Publications/PublicationsController.php b/app/Http/Controllers/Api/Publications/PublicationsController.php index 05ad581..0069f89 100644 --- a/app/Http/Controllers/Api/Publications/PublicationsController.php +++ b/app/Http/Controllers/Api/Publications/PublicationsController.php @@ -28,10 +28,9 @@ class PublicationsController extends Controller { $query = $this->model->query()->orderBy('id', 'desc'); $user = Auth::user(); if (!($user->isAdmin ?? null)) $query->where(['is_published' => true]); - if ($page = Page::byUuid($request->get('page'))->first()){ - $query->where(['page_id' => $page->id]); - } - $paginator = $query->paginate(config('app.pagination_limit')); + if ($page = Page::byUuid($request->get('page_id'))->first()) $query->where(['page_id' => $page->id]); + //$paginator = $query->paginate(config('app.pagination_limit')); + $paginator = $query->paginate(1); return fractal($paginator, new PublicationTransformer())->respond(); } diff --git a/app/Listeners/SendFeedbackMessage.php b/app/Listeners/SendFeedbackMessage.php new file mode 100644 index 0000000..3a51be0 --- /dev/null +++ b/app/Listeners/SendFeedbackMessage.php @@ -0,0 +1,17 @@ +email)->send(new FeedbackSender($event->data)); + } catch (\Exception $exception) {} + } +} diff --git a/app/Mail/FeedbackSender.php b/app/Mail/FeedbackSender.php new file mode 100644 index 0000000..4735acc --- /dev/null +++ b/app/Mail/FeedbackSender.php @@ -0,0 +1,23 @@ +data = $data; + } + + public function build() { + return $this->subject('Сообщение из обратной связи')->view('mail.feedback.support'); + } +} diff --git a/app/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php index 16edf05..0c4f8b8 100644 --- a/app/Providers/EventServiceProvider.php +++ b/app/Providers/EventServiceProvider.php @@ -2,8 +2,10 @@ namespace App\Providers; +use App\Events\FeedbackSender; use App\Events\PasswordRecovered; use App\Events\UserRegistered; +use App\Listeners\SendFeedbackMessage; use App\Listeners\SendPasswordRecoveredNotification; use App\Listeners\SendRegistrationNotification; use Illuminate\Auth\Events\Registered; @@ -20,6 +22,9 @@ class EventServiceProvider extends ServiceProvider { ], PasswordRecovered::class => [ SendPasswordRecoveredNotification::class + ], + FeedbackSender::class => [ + SendFeedbackMessage::class ] ]; diff --git a/app/Services/Forms/Feedback/FeedbackForms.php b/app/Services/Forms/Feedback/FeedbackForms.php new file mode 100644 index 0000000..f492a3d --- /dev/null +++ b/app/Services/Forms/Feedback/FeedbackForms.php @@ -0,0 +1,120 @@ + 'Создание операции', '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; + } +} diff --git a/app/Services/Forms/Feedback/FeedbackFormsServices.php b/app/Services/Forms/Feedback/FeedbackFormsServices.php new file mode 100644 index 0000000..8ecea36 --- /dev/null +++ b/app/Services/Forms/Feedback/FeedbackFormsServices.php @@ -0,0 +1,9 @@ + FeedbackForms::class + ]; +} diff --git a/app/Services/Forms/FormsService.php b/app/Services/Forms/FormsService.php index 7e2e3c2..7dfcfe0 100644 --- a/app/Services/Forms/FormsService.php +++ b/app/Services/Forms/FormsService.php @@ -2,6 +2,7 @@ namespace App\Services\Forms; +use App\Services\Forms\Feedback\FeedbackFormsServices; use App\Services\Forms\Pages\PageFormsServices; use App\Services\Forms\Publications\PublicationFormsServices; use App\Services\Forms\Registries\RegistryFormsServices; @@ -14,7 +15,8 @@ class FormsService { PageFormsServices::class, PublicationFormsServices::class, RegistryFormsServices::class, - UserFormsServices::class + UserFormsServices::class, + FeedbackFormsServices::class, ]; public function __construct() { diff --git a/app/Services/Forms/Pages/PageFormsServices.php b/app/Services/Forms/Pages/PageFormsServices.php index f660866..74cb4b0 100644 --- a/app/Services/Forms/Pages/PageFormsServices.php +++ b/app/Services/Forms/Pages/PageFormsServices.php @@ -4,6 +4,5 @@ namespace App\Services\Forms\Pages; class PageFormsServices { public static array $services = [ - 'published' => PublicationForms::class ]; } diff --git a/database/seeders/Objects/FieldsTableSeeder.php b/database/seeders/Objects/FieldsTableSeeder.php index 54b077d..bdc6b38 100644 --- a/database/seeders/Objects/FieldsTableSeeder.php +++ b/database/seeders/Objects/FieldsTableSeeder.php @@ -5,7 +5,9 @@ namespace Database\Seeders\Objects; use App\Models\Dictionaries\DictionaryItem; use App\Models\Objects\Field; use App\Models\Objects\FieldType; +use App\Models\Objects\ObjectType; use App\Transformers\Dictionaries\DictionaryItemTransformer; +use App\Transformers\Objects\ObjectTypeTransformer; use Illuminate\Database\Seeder; class FieldsTableSeeder extends Seeder { @@ -127,29 +129,30 @@ class FieldsTableSeeder extends Seeder { 'type' => FieldType::HTML, ], - 'feddback-email-admin' => [ + 'feedback-support-email' => [ 'title' => 'Email кому будет отправлен ответ', 'type' => FieldType::STRING, 'required' => true, - 'params' => [ - 'showForm' => 'second', - ] ], - 'feedback-email-user' => [ - 'title' => 'Email', - 'type' => FieldType::STRING, + 'feedback-form-type' => [ + 'title' => 'Тип формы', + 'type' => FieldType::RELATION, 'required' => true, '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' => [ 'title' => 'Ваше имя', 'type' => FieldType::STRING, 'required' => true, - 'params' => [ - 'showForm' => 'second', - ] ], 'feedback-type' => [ 'title' => 'Тема обращения', @@ -158,17 +161,14 @@ class FieldsTableSeeder extends Seeder { 'params' => [ 'related' => DictionaryItem::class, 'transformer' => DictionaryItemTransformer::class, 'options' => ['show' => true, 'whereHas' => ['dictionary' => ['name' => 'feedback-types']]], - 'showForm' => 'second', ] ], 'feedback-message' => [ 'title' => 'Текст сообщения', 'type' => FieldType::TEXT, 'required' => true, - 'params' => [ - 'showForm' => 'second', - ] ], + 'operation-type' => [ 'title' => 'Вид работы', 'type' => FieldType::RELATION, @@ -194,6 +194,7 @@ class FieldsTableSeeder extends Seeder { 'type' => FieldType::DOCUMENT, 'required' => true ], + 'listings' => [ 'title' => 'Вхождение в перечень ПП', 'type' => FieldType::RELATION, @@ -204,6 +205,7 @@ class FieldsTableSeeder extends Seeder { 'options' => ['show' => true, 'whereHas' => ['dictionary' => ['name' => 'listings']]] ] ], + 'active-since' => [ 'title' => 'Дата начала действия', 'type' => FieldType::DATE, @@ -213,6 +215,7 @@ class FieldsTableSeeder extends Seeder { 'title' => 'Дата окончания действия', 'type' => FieldType::DATE ], + 'developer' => [ 'title' => 'Разработчик', 'type' => FieldType::STRING diff --git a/database/seeders/Objects/ObjectTypeFieldsTableSeeder.php b/database/seeders/Objects/ObjectTypeFieldsTableSeeder.php index 4bf7abb..14155f3 100644 --- a/database/seeders/Objects/ObjectTypeFieldsTableSeeder.php +++ b/database/seeders/Objects/ObjectTypeFieldsTableSeeder.php @@ -62,7 +62,12 @@ class ObjectTypeFieldsTableSeeder extends Seeder { ], 'page-section-feedback' => [ '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' => [ diff --git a/database/seeders/Objects/ObjectTypesTableSeeder.php b/database/seeders/Objects/ObjectTypesTableSeeder.php index c4c07bc..54eff82 100644 --- a/database/seeders/Objects/ObjectTypesTableSeeder.php +++ b/database/seeders/Objects/ObjectTypesTableSeeder.php @@ -47,6 +47,15 @@ class ObjectTypesTableSeeder extends Seeder { ] ], + 'feedback-form' => [ + 'title' => '', + 'children' => [ + 'feedback-form-support' => [ + 'title' => 'Обращение', + ], + ] + ], + 'entry-operation' => [ 'title' => 'Действие с записью в реестре' ] diff --git a/resources/views/mail/feedback/support.blade.php b/resources/views/mail/feedback/support.blade.php new file mode 100644 index 0000000..05fa84b --- /dev/null +++ b/resources/views/mail/feedback/support.blade.php @@ -0,0 +1,9 @@ +@extends('mail.layouts.layout') + +@section('content') +
Вам пришло сообщение с обратной связи.
+Email отправителя: {{$data->feedback_email}}
+Имя отправителя: {{$data->feedback_name}}
+Тема сообщения: {{$data->feedback_type}}
+Сообщение: {{$data->feedback_message}}
+@endsection \ No newline at end of file