cards section and few minor updates

master
Константин 2023-11-15 15:13:56 +03:00
parent 20beb09593
commit 2bf370c473
7 changed files with 75 additions and 9 deletions

View File

@ -15,6 +15,7 @@ use App\Models\Objects\Values\TextValue;
use App\Models\Pages\Page; use App\Models\Pages\Page;
use App\Models\Registries\Entry; use App\Models\Registries\Entry;
use App\Models\User; use App\Models\User;
use App\Support\HasObjectsTrait;
use App\Support\UuidScopeTrait; use App\Support\UuidScopeTrait;
use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
@ -25,7 +26,7 @@ use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Support\Collection; use Illuminate\Support\Collection;
class NirObject extends Model { class NirObject extends Model {
use UuidScopeTrait, SoftDeletes; use UuidScopeTrait, SoftDeletes, HasObjectsTrait;
protected $table = 'objects'; protected $table = 'objects';

View File

@ -88,7 +88,7 @@ class Page extends Model {
public function getLinkAttribute(): string { public function getLinkAttribute(): string {
return '/' . $this->parents->reverse()->push($this)->pluck('slug')->implode('/'); return '/' . $this->parents->reverse()->push($this)->pluck('slug')->filter(function($v) {return $v;})->implode('/');
} }
public function getParentsAttribute(): Collection { public function getParentsAttribute(): Collection {

View File

@ -17,7 +17,7 @@ class ObjectTransformer extends TransformerAbstract {
]; ];
protected array $availableIncludes = [ protected array $availableIncludes = [
'groups', 'type', 'owner', 'pages', 'permissions' 'groups', 'type', 'owner', 'pages', 'objects', 'permissions'
]; ];
public function transform(NirObject $model): array { public function transform(NirObject $model): array {
@ -47,6 +47,10 @@ class ObjectTransformer extends TransformerAbstract {
return $this->collection($model->pages, new PageTransformer()); return $this->collection($model->pages, new PageTransformer());
} }
public function includeObjects(NirObject $model): Collection {
return $this->collection($model->objects, new ObjectTransformer());
}
public function includePermissions(NirObject $model): Primitive { public function includePermissions(NirObject $model): Primitive {
return $this->primitive((new PermissionsService($model))->get()); return $this->primitive((new PermissionsService($model))->get());
} }

View File

@ -19,7 +19,7 @@ class PageTransformer extends TransformerAbstract {
]; ];
protected array $availableIncludes = [ protected array $availableIncludes = [
'hasChildren', 'children', 'parent', 'parents', 'picture', 'sections', 'sidebars', 'publications', 'children', 'parent', 'parents', 'picture', 'sections', 'sidebars', 'publications',
'registries', 'registry', 'permissions' 'registries', 'registry', 'permissions'
]; ];
@ -35,15 +35,12 @@ class PageTransformer extends TransformerAbstract {
'description' => $model->description, 'description' => $model->description,
'keywords' => $model->keywords, 'keywords' => $model->keywords,
'h1' => $model->h1, 'h1' => $model->h1,
'has_children' => $model->children()->exists(),
'created_at' => $model->created_at ? $model->created_at->toIso8601String() : null, 'created_at' => $model->created_at ? $model->created_at->toIso8601String() : null,
'updated_at' => $model->updated_at ? $model->updated_at->toIso8601String() : null 'updated_at' => $model->updated_at ? $model->updated_at->toIso8601String() : null
]; ];
} }
public function includeHasChildren(Page $model): Primitive {
return $this->primitive($model->children()->exists());
}
public function includeChildren(Page $model): Collection { public function includeChildren(Page $model): Collection {
return $this->collection($model->children, new PageTransformer()); return $this->collection($model->children, new PageTransformer());
} }

View File

@ -55,6 +55,15 @@ class FieldsTableSeeder extends Seeder {
'required' => true 'required' => true
], ],
'image' => [
'title' => 'Изображение',
'type' => FieldType::IMAGE
],
'image-required' => [
'title' => 'Изображение',
'type' => FieldType::IMAGE,
'required' => true
],
'images' => [ 'images' => [
'title' => 'Изображения', 'title' => 'Изображения',
'type' => FieldType::IMAGE, 'type' => FieldType::IMAGE,
@ -76,6 +85,34 @@ class FieldsTableSeeder extends Seeder {
] ]
], ],
'link' => [
'title' => 'Ссылка',
'type' => FieldType::STRING
],
'link-required' => [
'title' => 'Ссылка',
'type' => FieldType::STRING,
'required' => true
],
'cards-section-type' => [
'title' => 'Тип карточек',
'type' => FieldType::RELATION,
'required' => true,
'params' => [
'related' => ObjectType::class, 'transformer' => ObjectTypeTransformer::class,
'options' => ['show' => true, 'whereHas' => ['parent' => ['name' => 'cards-section-type']]]
]
],
'person-name' => [
'title' => 'ФИО сотрудника',
'type' => FieldType::STRING
],
'person-position' => [
'title' => 'Должность',
'type' => FieldType::STRING
],
'video-url' => [ 'video-url' => [
'title' => 'Ссылка на видео', 'title' => 'Ссылка на видео',
'type' => FieldType::STRING, 'type' => FieldType::STRING,

View File

@ -31,6 +31,23 @@ class ObjectTypeFieldsTableSeeder extends Seeder {
'fields' => ['images-required', 'image-type'] 'fields' => ['images-required', 'image-type']
] ]
], ],
'page-section-cards' => [
'common' => [
'fields' => ['cards-section-type']
]
],
'cards-section-persons' => [
'common' => [
'fields' => ['image', 'person-name', 'person-position', 'contact-phone', 'contact-email', 'html']
]
],
'cards-section-partners' => [
'common' => [
'fields' => ['image-required', 'link-required']
]
],
'page-section-documents' => [ 'page-section-documents' => [
'common' => [ 'common' => [
'fields' => ['documents-required'] 'fields' => ['documents-required']

View File

@ -26,10 +26,12 @@ class ObjectTypesTableSeeder extends Seeder {
'page-section-media' => [ 'page-section-media' => [
'title' => 'Визуальные элементы', 'title' => 'Визуальные элементы',
'children' => [ 'children' => [
'page-section-images' => [ 'page-section-images' => [
'title' => 'Изображения' 'title' => 'Изображения'
], ],
'page-section-cards' => [
'title' => 'Карточки'
],
'page-section-video' => [ 'page-section-video' => [
'title' => 'Видео' 'title' => 'Видео'
], ],
@ -55,6 +57,14 @@ class ObjectTypesTableSeeder extends Seeder {
] ]
], ],
'cards-section-type' => [
'title' => 'Тип карточек',
'children' => [
'cards-section-persons' => ['title' => 'Сотрудники'],
'cards-section-partners' => ['title' => 'Партнеры']
]
],
'feedback-form' => [ 'feedback-form' => [
'title' => '', 'title' => '',
'children' => [ 'children' => [