Changes
This commit is contained in:
@@ -28,13 +28,13 @@ class RegisterRoutes extends Command
|
|||||||
'code' => 200,
|
'code' => 200,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$this->info("Route registered: " . $route->uri);
|
$this->info("Маршрут зарегистрирован: " . $route->uri);
|
||||||
} else {
|
} else {
|
||||||
$this->info("Route already registered: " . $route->uri);
|
$this->info("Маршрут уже существует: " . $route->uri);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->info('All routes have been processed.');
|
$this->info('Все маршруты успешно проверены.');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,397 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Filament\Components\Forms\ItemForm\Pages;
|
||||||
|
|
||||||
|
use App\Enums\CustomFormStatus;
|
||||||
|
use App\Enums\PostStatus;
|
||||||
|
use App\Helpers\ByteConverter;
|
||||||
|
use App\Models\Category;
|
||||||
|
use App\Models\CustomForm;
|
||||||
|
use App\Models\Page;
|
||||||
|
use App\Models\PageReferenceList;
|
||||||
|
use App\Models\Post;
|
||||||
|
use Filament\Forms;
|
||||||
|
use Filament\Forms\Components\Builder;
|
||||||
|
use Filament\Forms\Components\FileUpload;
|
||||||
|
use Filament\Forms\Components\Hidden;
|
||||||
|
use Filament\Forms\Components\RichEditor;
|
||||||
|
use Filament\Forms\Components\Section;
|
||||||
|
use Filament\Forms\Components\Select;
|
||||||
|
use Filament\Forms\Components\TextInput;
|
||||||
|
use Filament\Forms\Components\Toggle;
|
||||||
|
use Filament\Forms\Form;
|
||||||
|
use Illuminate\Support\Carbon;
|
||||||
|
use Illuminate\Support\Str;
|
||||||
|
use Livewire\Features\SupportFileUploads\TemporaryUploadedFile;
|
||||||
|
use Mohamedsabil83\FilamentFormsTinyeditor\Components\TinyEditor;
|
||||||
|
|
||||||
|
class ContentBuilderItem
|
||||||
|
{
|
||||||
|
public static function getItem(string $name)
|
||||||
|
{
|
||||||
|
return
|
||||||
|
Builder::make($name)->label('')->blocks([
|
||||||
|
Builder\Block::make('heading')->label('Заголовок')
|
||||||
|
->schema([
|
||||||
|
TextInput::make('id')->hidden()->integer()->default(rand(2335235,324634264263426)),
|
||||||
|
TextInput::make('content')
|
||||||
|
->label('')
|
||||||
|
->live(onBlur: true)
|
||||||
|
->afterStateUpdated(function (string $operation, string $state, Forms\Set $set, $get) {
|
||||||
|
}),
|
||||||
|
]),
|
||||||
|
Builder\Block::make('paragraph')
|
||||||
|
->schema([
|
||||||
|
TinyEditor::make('content')
|
||||||
|
->label('')
|
||||||
|
->profile('test')
|
||||||
|
->required(),
|
||||||
|
])->label('Текст'),
|
||||||
|
Builder\Block::make('files')
|
||||||
|
->label('Файл(-ы)')
|
||||||
|
->schema([
|
||||||
|
Forms\Components\Repeater::make('file')->schema([
|
||||||
|
Hidden::make('expansion')->required(),
|
||||||
|
Hidden::make('size')->required(),
|
||||||
|
TextInput::make('title')
|
||||||
|
->required()
|
||||||
|
->maxLength(255)
|
||||||
|
->autofocus(),
|
||||||
|
FileUpload::make('path')
|
||||||
|
->required()
|
||||||
|
->getUploadedFileNameForStorageUsing(
|
||||||
|
fn (TemporaryUploadedFile $file): string =>
|
||||||
|
str(Str::slug(pathinfo($file->getClientOriginalName(), PATHINFO_FILENAME) . '-' . Carbon::now()->timestamp ) . '.' . $file->getClientOriginalExtension())
|
||||||
|
)
|
||||||
|
->acceptedFileTypes([
|
||||||
|
'application/pdf',
|
||||||
|
'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
|
||||||
|
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
|
||||||
|
'application/vnd.openxmlformats-officedocument.presentationml.presentation',
|
||||||
|
'application/zip'
|
||||||
|
])
|
||||||
|
->maxSize(512000)
|
||||||
|
->disk('public')
|
||||||
|
->directory('files')
|
||||||
|
->downloadable()
|
||||||
|
->afterStateUpdated(function ($set, $state) {
|
||||||
|
$set('expansion', $state?->getClientOriginalExtension());
|
||||||
|
$set('size', ByteConverter::bytesToHuman($state?->getSize()));
|
||||||
|
})
|
||||||
|
->visibility('public')
|
||||||
|
]),
|
||||||
|
]),
|
||||||
|
Builder\Block::make('person')
|
||||||
|
->label('Персона')
|
||||||
|
->schema([
|
||||||
|
TextInput::make('name')
|
||||||
|
->label('Имя')
|
||||||
|
->required()
|
||||||
|
->maxLength(255),
|
||||||
|
FileUpload::make('photo')
|
||||||
|
->label('Фотография')
|
||||||
|
->image()
|
||||||
|
->optimize('webp')
|
||||||
|
->resize(50)
|
||||||
|
->disk('public')
|
||||||
|
->directory('images')
|
||||||
|
->imageEditor(),
|
||||||
|
Forms\Components\Repeater::make('info')->schema([
|
||||||
|
TextInput::make('column')
|
||||||
|
->label('Название колонки')
|
||||||
|
->required()
|
||||||
|
->maxLength(255),
|
||||||
|
Forms\Components\Textarea::make('content')
|
||||||
|
->label('Содержание')
|
||||||
|
->required()
|
||||||
|
->maxLength(1000),
|
||||||
|
])->minItems(1)->label('Информация о персоне'),
|
||||||
|
]),
|
||||||
|
Builder\Block::make('stepper')
|
||||||
|
->label('Строитель этапов')
|
||||||
|
->schema([
|
||||||
|
TextInput::make('step_name')
|
||||||
|
->label('Название шага')
|
||||||
|
->required()
|
||||||
|
->maxLength(255),
|
||||||
|
Forms\Components\Repeater::make('steps')->schema([
|
||||||
|
TextInput::make('title')
|
||||||
|
->required()
|
||||||
|
->maxLength(255)->columnSpanFull(),
|
||||||
|
RichEditor::make('content')->required(),
|
||||||
|
])->minItems(1),
|
||||||
|
]),
|
||||||
|
Builder\Block::make('tabs')
|
||||||
|
->label('Вкладки')
|
||||||
|
->schema([
|
||||||
|
Forms\Components\Repeater::make('tab')->schema([
|
||||||
|
TextInput::make('title')
|
||||||
|
->required()
|
||||||
|
->maxLength(255)->columnSpanFull(),
|
||||||
|
\Filament\Forms\Components\Builder::make('content')->label('')->blocks([
|
||||||
|
Builder\Block::make('heading')->label('Заголовок')
|
||||||
|
->schema([
|
||||||
|
TextInput::make('id')->hidden()->integer()->default(rand(2335235,324634264263426)),
|
||||||
|
TextInput::make('content')
|
||||||
|
->label('')
|
||||||
|
->live(onBlur: true)
|
||||||
|
->afterStateUpdated(function (string $operation, string $state, Forms\Set $set, $get) {
|
||||||
|
}),
|
||||||
|
]),
|
||||||
|
Builder\Block::make('paragraph')
|
||||||
|
->schema([
|
||||||
|
RichEditor::make('content')
|
||||||
|
->toolbarButtons([
|
||||||
|
'blockquote',
|
||||||
|
'bold',
|
||||||
|
'bulletList',
|
||||||
|
'italic',
|
||||||
|
'link',
|
||||||
|
'orderedList',
|
||||||
|
'redo',
|
||||||
|
'strike',
|
||||||
|
'underline',
|
||||||
|
'undo',
|
||||||
|
])
|
||||||
|
->label(''),
|
||||||
|
])->label('Текст'),
|
||||||
|
Builder\Block::make('files')
|
||||||
|
->schema([
|
||||||
|
Forms\Components\Repeater::make('file')->schema([
|
||||||
|
TextInput::make('title')
|
||||||
|
->required()
|
||||||
|
->maxLength(255)
|
||||||
|
->autofocus(),
|
||||||
|
FileUpload::make('path')
|
||||||
|
->required()
|
||||||
|
->acceptedFileTypes([
|
||||||
|
'application/pdf',
|
||||||
|
'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
|
||||||
|
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
|
||||||
|
'application/vnd.openxmlformats-officedocument.presentationml.presentation',
|
||||||
|
'application/zip'
|
||||||
|
])
|
||||||
|
->maxSize(512000)
|
||||||
|
->disk('public')
|
||||||
|
->directory('files')
|
||||||
|
->downloadable()
|
||||||
|
->visibility('public')
|
||||||
|
]),
|
||||||
|
]),
|
||||||
|
Builder\Block::make('person')
|
||||||
|
->schema([
|
||||||
|
TextInput::make('name')
|
||||||
|
->label('Имя')
|
||||||
|
->required()
|
||||||
|
->maxLength(255),
|
||||||
|
FileUpload::make('photo')
|
||||||
|
->label('Фотография')
|
||||||
|
->image()
|
||||||
|
->disk('public')
|
||||||
|
->directory('images')
|
||||||
|
->imageEditor(),
|
||||||
|
Forms\Components\Repeater::make('info')->schema([
|
||||||
|
Forms\Components\Grid::make(2)->schema([
|
||||||
|
TextInput::make('column')
|
||||||
|
->required()
|
||||||
|
->maxLength(255),
|
||||||
|
TextInput::make('content')
|
||||||
|
->required()
|
||||||
|
->maxLength(255),
|
||||||
|
]),
|
||||||
|
])->minItems(1),
|
||||||
|
]),
|
||||||
|
Builder\Block::make('stepper')
|
||||||
|
->schema([
|
||||||
|
TextInput::make('step_name')
|
||||||
|
->label('Название шага')
|
||||||
|
->required()
|
||||||
|
->maxLength(255),
|
||||||
|
Forms\Components\Repeater::make('steps')->schema([
|
||||||
|
TextInput::make('title')
|
||||||
|
->required()
|
||||||
|
->maxLength(255)->columnSpanFull(),
|
||||||
|
RichEditor::make('content')->required(),
|
||||||
|
])->minItems(1),
|
||||||
|
]),
|
||||||
|
Builder\Block::make('images')
|
||||||
|
->schema([
|
||||||
|
FileUpload::make('url')
|
||||||
|
->label('Изображение(-я)')
|
||||||
|
->image()
|
||||||
|
->multiple()
|
||||||
|
->reorderable()
|
||||||
|
->maxFiles(5)
|
||||||
|
->disk('public')
|
||||||
|
->directory('images')
|
||||||
|
->imageEditor()
|
||||||
|
->required(),
|
||||||
|
TextInput::make('alt')
|
||||||
|
->label('Описание')
|
||||||
|
->placeholder('Необязяательно')
|
||||||
|
])->label('Слайдер изображений'),
|
||||||
|
Builder\Block::make('image')
|
||||||
|
->schema([
|
||||||
|
FileUpload::make('url')
|
||||||
|
->label('Изображение(-я)')
|
||||||
|
->image()
|
||||||
|
->multiple()
|
||||||
|
->reorderable()
|
||||||
|
->maxFiles(5)
|
||||||
|
->disk('public')
|
||||||
|
->directory('images')
|
||||||
|
->imageEditor()
|
||||||
|
->required(),
|
||||||
|
TextInput::make('alt')
|
||||||
|
->label('Описание')
|
||||||
|
->placeholder('Необязяательно')
|
||||||
|
])->label('Изображение'),
|
||||||
|
Builder\Block::make('video')
|
||||||
|
->schema([
|
||||||
|
TextInput::make('mime')->readOnly(),
|
||||||
|
TextInput::make('title')
|
||||||
|
->required()
|
||||||
|
->maxLength(255)
|
||||||
|
->autofocus(),
|
||||||
|
FileUpload::make('path')
|
||||||
|
->required()
|
||||||
|
->acceptedFileTypes([
|
||||||
|
'video/mp4',
|
||||||
|
'video/quicktime',
|
||||||
|
'video/x-msvideo',
|
||||||
|
'video/x-ms-wmv',
|
||||||
|
'video/avi',
|
||||||
|
'video/webm',
|
||||||
|
'video/ogg',
|
||||||
|
'video/3gpp',
|
||||||
|
'video/3gpp2',
|
||||||
|
'video/x-m4v',
|
||||||
|
])
|
||||||
|
->disk('public')
|
||||||
|
->directory('videos')
|
||||||
|
->afterStateUpdated(fn (callable $set, $state) => $set('mime', $state?->getMimeType())),
|
||||||
|
]),
|
||||||
|
Builder\Block::make('postsList')
|
||||||
|
->schema([
|
||||||
|
Forms\Components\Grid::make(2)->schema([
|
||||||
|
TextInput::make('count')
|
||||||
|
->label('Количество запией')
|
||||||
|
->integer(),
|
||||||
|
Select::make('category')
|
||||||
|
->options(Category::all()->pluck('title', 'id'))
|
||||||
|
]),
|
||||||
|
])->label('Список новостей'),
|
||||||
|
])
|
||||||
|
->collapsed()
|
||||||
|
->blockNumbers(false)
|
||||||
|
->collapsible()
|
||||||
|
->addActionLabel('Добавить новый блок'),
|
||||||
|
])->minItems(1),
|
||||||
|
]),
|
||||||
|
Builder\Block::make('images')
|
||||||
|
->schema([
|
||||||
|
FileUpload::make('url')
|
||||||
|
->label('Изображение(-я)')
|
||||||
|
->image()
|
||||||
|
->multiple()
|
||||||
|
->reorderable()
|
||||||
|
->maxFiles(5)
|
||||||
|
->disk('public')
|
||||||
|
->directory('images')
|
||||||
|
->imageEditor()
|
||||||
|
->required(),
|
||||||
|
TextInput::make('alt')
|
||||||
|
->label('Описание')
|
||||||
|
->placeholder('Необязяательно')
|
||||||
|
])->label('Слайдер изображений'),
|
||||||
|
Builder\Block::make('image')
|
||||||
|
->schema([
|
||||||
|
FileUpload::make('url')
|
||||||
|
->label('Изображение(-я)')
|
||||||
|
->image()
|
||||||
|
->multiple()
|
||||||
|
->reorderable()
|
||||||
|
->maxFiles(5)
|
||||||
|
->disk('public')
|
||||||
|
->directory('images')
|
||||||
|
->imageEditor()
|
||||||
|
->required(),
|
||||||
|
TextInput::make('alt')
|
||||||
|
->label('Описание')
|
||||||
|
->placeholder('Необязяательно')
|
||||||
|
])->label('Изображение'),
|
||||||
|
Builder\Block::make('video')
|
||||||
|
->label('Видео (Не стабильно)')
|
||||||
|
->schema([
|
||||||
|
TextInput::make('mime')->readOnly(),
|
||||||
|
TextInput::make('title')
|
||||||
|
->required()
|
||||||
|
->maxLength(255)
|
||||||
|
->autofocus(),
|
||||||
|
FileUpload::make('path')
|
||||||
|
->required()
|
||||||
|
->acceptedFileTypes([
|
||||||
|
'video/mp4',
|
||||||
|
'video/quicktime',
|
||||||
|
'video/x-msvideo',
|
||||||
|
'video/x-ms-wmv',
|
||||||
|
'video/avi',
|
||||||
|
'video/webm',
|
||||||
|
'video/ogg',
|
||||||
|
'video/3gpp',
|
||||||
|
'video/3gpp2',
|
||||||
|
'video/x-m4v',
|
||||||
|
])
|
||||||
|
->disk('public')
|
||||||
|
->directory('videos')
|
||||||
|
->afterStateUpdated(fn (callable $set, $state) => $set('mime', $state?->getMimeType())),
|
||||||
|
]),
|
||||||
|
Builder\Block::make('postsList')
|
||||||
|
->schema([
|
||||||
|
Forms\Components\Grid::make(2)->schema([
|
||||||
|
TextInput::make('count')
|
||||||
|
->label('Количество запией')
|
||||||
|
->integer(),
|
||||||
|
Select::make('category')
|
||||||
|
->options(Category::all()->pluck('title', 'id'))
|
||||||
|
]),
|
||||||
|
])->label('Список новостей'),
|
||||||
|
Builder\Block::make('postItem')
|
||||||
|
->schema([
|
||||||
|
Select::make('post')
|
||||||
|
->options(Post::query()->where('status', PostStatus::PUBLISHED)->pluck('title', 'id'))
|
||||||
|
->searchable()
|
||||||
|
->required(),
|
||||||
|
])->label('Новость'),
|
||||||
|
Builder\Block::make('pageItem')
|
||||||
|
->schema([
|
||||||
|
Select::make('page')
|
||||||
|
->options(Page::query()->where('title', '!=' , null)->where('is_visible', true)->pluck('title', 'id'))
|
||||||
|
->searchable()
|
||||||
|
->required(),
|
||||||
|
])->label('Страница'),
|
||||||
|
Builder\Block::make('customForm')
|
||||||
|
->schema([
|
||||||
|
Select::make('form')
|
||||||
|
->options(CustomForm::query()->where('status', CustomFormStatus::PUBLISHED)->pluck('title', 'form_id'))
|
||||||
|
->searchable()
|
||||||
|
->required(),
|
||||||
|
])->label('Форма'),
|
||||||
|
Builder\Block::make('pageResourceList')
|
||||||
|
->schema([
|
||||||
|
Select::make('resource')
|
||||||
|
->options(PageReferenceList::query()->where('is_active', true)->pluck('title', 'slug'))
|
||||||
|
->searchable()
|
||||||
|
->required(),
|
||||||
|
])->label('Ресурсы'),
|
||||||
|
])
|
||||||
|
->collapsed()
|
||||||
|
->blockNumbers(false)
|
||||||
|
->collapsible()
|
||||||
|
->blockPickerColumns(3)
|
||||||
|
->blockPickerWidth('2xl')
|
||||||
|
->addActionLabel('Добавить новый блок');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,239 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Filament\Components\Forms\ItemForm\Pages;
|
||||||
|
|
||||||
|
use App\Enums\CustomFormStatus;
|
||||||
|
use App\Enums\PostStatus;
|
||||||
|
use App\Helpers\ByteConverter;
|
||||||
|
use App\Models\Category;
|
||||||
|
use App\Models\CustomForm;
|
||||||
|
use App\Models\Page;
|
||||||
|
use App\Models\PageReferenceList;
|
||||||
|
use App\Models\Post;
|
||||||
|
use Filament\Forms;
|
||||||
|
use Filament\Forms\Components\Builder;
|
||||||
|
use Filament\Forms\Components\FileUpload;
|
||||||
|
use Filament\Forms\Components\Hidden;
|
||||||
|
use Filament\Forms\Components\RichEditor;
|
||||||
|
use Filament\Forms\Components\Section;
|
||||||
|
use Filament\Forms\Components\Select;
|
||||||
|
use Filament\Forms\Components\TextInput;
|
||||||
|
use Filament\Forms\Components\Toggle;
|
||||||
|
use Filament\Forms\Form;
|
||||||
|
use Illuminate\Support\Carbon;
|
||||||
|
use Illuminate\Support\Str;
|
||||||
|
use Livewire\Features\SupportFileUploads\TemporaryUploadedFile;
|
||||||
|
use Mohamedsabil83\FilamentFormsTinyeditor\Components\TinyEditor;
|
||||||
|
|
||||||
|
class ContentBuilderItem
|
||||||
|
{
|
||||||
|
public static function getItem()
|
||||||
|
{
|
||||||
|
return
|
||||||
|
Builder\Block::make('tabs')
|
||||||
|
->label('Вкладки')
|
||||||
|
->schema([
|
||||||
|
Forms\Components\Repeater::make('tab')->schema([
|
||||||
|
TextInput::make('title')
|
||||||
|
->required()
|
||||||
|
->maxLength(255)->columnSpanFull(),
|
||||||
|
Builder::make('content')->label('')->blocks([
|
||||||
|
Builder\Block::make('heading')->label('Заголовок')
|
||||||
|
->schema([
|
||||||
|
TextInput::make('id')->hidden()->integer()->default(rand(2335235,324634264263426)),
|
||||||
|
TextInput::make('content')
|
||||||
|
->label('')
|
||||||
|
->live(onBlur: true)
|
||||||
|
->afterStateUpdated(function (string $operation, string $state, Forms\Set $set, $get) {
|
||||||
|
}),
|
||||||
|
]),
|
||||||
|
Builder\Block::make('paragraph')
|
||||||
|
->schema([
|
||||||
|
TinyEditor::make('content')
|
||||||
|
->label('')
|
||||||
|
->profile('test')
|
||||||
|
->required(),
|
||||||
|
])->label('Текст'),
|
||||||
|
Builder\Block::make('files')
|
||||||
|
->label('Файл(-ы)')
|
||||||
|
->schema([
|
||||||
|
Forms\Components\Repeater::make('file')->schema([
|
||||||
|
Hidden::make('expansion')->required(),
|
||||||
|
Hidden::make('size')->required(),
|
||||||
|
TextInput::make('title')
|
||||||
|
->required()
|
||||||
|
->maxLength(255)
|
||||||
|
->autofocus(),
|
||||||
|
FileUpload::make('path')
|
||||||
|
->required()
|
||||||
|
->getUploadedFileNameForStorageUsing(
|
||||||
|
fn (TemporaryUploadedFile $file): string =>
|
||||||
|
str(Str::slug(pathinfo($file->getClientOriginalName(), PATHINFO_FILENAME) . '-' . Carbon::now()->timestamp ) . '.' . $file->getClientOriginalExtension())
|
||||||
|
)
|
||||||
|
->acceptedFileTypes([
|
||||||
|
'application/pdf',
|
||||||
|
'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
|
||||||
|
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
|
||||||
|
'application/vnd.openxmlformats-officedocument.presentationml.presentation',
|
||||||
|
'application/zip'
|
||||||
|
])
|
||||||
|
->maxSize(512000)
|
||||||
|
->disk('public')
|
||||||
|
->directory('files')
|
||||||
|
->downloadable()
|
||||||
|
->afterStateUpdated(function ($set, $state) {
|
||||||
|
$set('expansion', $state?->getClientOriginalExtension());
|
||||||
|
$set('size', ByteConverter::bytesToHuman($state?->getSize()));
|
||||||
|
})
|
||||||
|
->visibility('public')
|
||||||
|
]),
|
||||||
|
]),
|
||||||
|
Builder\Block::make('person')
|
||||||
|
->label('Персона')
|
||||||
|
->schema([
|
||||||
|
TextInput::make('name')
|
||||||
|
->label('Имя')
|
||||||
|
->required()
|
||||||
|
->maxLength(255),
|
||||||
|
FileUpload::make('photo')
|
||||||
|
->label('Фотография')
|
||||||
|
->image()
|
||||||
|
->optimize('webp')
|
||||||
|
->resize(50)
|
||||||
|
->disk('public')
|
||||||
|
->directory('images')
|
||||||
|
->imageEditor(),
|
||||||
|
Forms\Components\Repeater::make('info')->schema([
|
||||||
|
TextInput::make('column')
|
||||||
|
->label('Название колонки')
|
||||||
|
->required()
|
||||||
|
->maxLength(255),
|
||||||
|
Forms\Components\Textarea::make('content')
|
||||||
|
->label('Содержание')
|
||||||
|
->required()
|
||||||
|
->maxLength(1000),
|
||||||
|
])->minItems(1)->label('Информация о персоне'),
|
||||||
|
]),
|
||||||
|
Builder\Block::make('stepper')
|
||||||
|
->label('Строитель этапов')
|
||||||
|
->schema([
|
||||||
|
TextInput::make('step_name')
|
||||||
|
->label('Название шага')
|
||||||
|
->required()
|
||||||
|
->maxLength(255),
|
||||||
|
Forms\Components\Repeater::make('steps')->schema([
|
||||||
|
TextInput::make('title')
|
||||||
|
->required()
|
||||||
|
->maxLength(255)->columnSpanFull(),
|
||||||
|
RichEditor::make('content')->required(),
|
||||||
|
])->minItems(1),
|
||||||
|
]),
|
||||||
|
Builder\Block::make('images')
|
||||||
|
->schema([
|
||||||
|
FileUpload::make('url')
|
||||||
|
->label('Изображение(-я)')
|
||||||
|
->image()
|
||||||
|
->multiple()
|
||||||
|
->reorderable()
|
||||||
|
->maxFiles(5)
|
||||||
|
->disk('public')
|
||||||
|
->directory('images')
|
||||||
|
->imageEditor()
|
||||||
|
->required(),
|
||||||
|
TextInput::make('alt')
|
||||||
|
->label('Описание')
|
||||||
|
->placeholder('Необязяательно')
|
||||||
|
])->label('Слайдер изображений'),
|
||||||
|
Builder\Block::make('image')
|
||||||
|
->schema([
|
||||||
|
FileUpload::make('url')
|
||||||
|
->label('Изображение(-я)')
|
||||||
|
->image()
|
||||||
|
->multiple()
|
||||||
|
->reorderable()
|
||||||
|
->maxFiles(5)
|
||||||
|
->disk('public')
|
||||||
|
->directory('images')
|
||||||
|
->imageEditor()
|
||||||
|
->required(),
|
||||||
|
TextInput::make('alt')
|
||||||
|
->label('Описание')
|
||||||
|
->placeholder('Необязяательно')
|
||||||
|
])->label('Изображение'),
|
||||||
|
Builder\Block::make('video')
|
||||||
|
->label('Видео (Не стабильно)')
|
||||||
|
->schema([
|
||||||
|
TextInput::make('mime')->readOnly(),
|
||||||
|
TextInput::make('title')
|
||||||
|
->required()
|
||||||
|
->maxLength(255)
|
||||||
|
->autofocus(),
|
||||||
|
FileUpload::make('path')
|
||||||
|
->required()
|
||||||
|
->acceptedFileTypes([
|
||||||
|
'video/mp4',
|
||||||
|
'video/quicktime',
|
||||||
|
'video/x-msvideo',
|
||||||
|
'video/x-ms-wmv',
|
||||||
|
'video/avi',
|
||||||
|
'video/webm',
|
||||||
|
'video/ogg',
|
||||||
|
'video/3gpp',
|
||||||
|
'video/3gpp2',
|
||||||
|
'video/x-m4v',
|
||||||
|
])
|
||||||
|
->disk('public')
|
||||||
|
->directory('videos')
|
||||||
|
->afterStateUpdated(fn (callable $set, $state) => $set('mime', $state?->getMimeType())),
|
||||||
|
]),
|
||||||
|
Builder\Block::make('postsList')
|
||||||
|
->schema([
|
||||||
|
Forms\Components\Grid::make(2)->schema([
|
||||||
|
TextInput::make('count')
|
||||||
|
->label('Количество запией')
|
||||||
|
->integer(),
|
||||||
|
Select::make('category')
|
||||||
|
->options(Category::all()->pluck('title', 'id'))
|
||||||
|
]),
|
||||||
|
])->label('Список новостей'),
|
||||||
|
Builder\Block::make('postItem')
|
||||||
|
->schema([
|
||||||
|
Select::make('post')
|
||||||
|
->options(Post::query()->where('status', PostStatus::PUBLISHED)->pluck('title', 'id'))
|
||||||
|
->searchable()
|
||||||
|
->required(),
|
||||||
|
])->label('Новость'),
|
||||||
|
Builder\Block::make('pageItem')
|
||||||
|
->schema([
|
||||||
|
Select::make('page')
|
||||||
|
->options(Page::query()->where('title', '!=' , null)->where('is_visible', true)->pluck('title', 'id'))
|
||||||
|
->searchable()
|
||||||
|
->required(),
|
||||||
|
])->label('Страница'),
|
||||||
|
Builder\Block::make('customForm')
|
||||||
|
->schema([
|
||||||
|
Select::make('form')
|
||||||
|
->options(CustomForm::query()->where('status', CustomFormStatus::PUBLISHED)->pluck('title', 'form_id'))
|
||||||
|
->searchable()
|
||||||
|
->required(),
|
||||||
|
])->label('Форма'),
|
||||||
|
Builder\Block::make('pageResourceList')
|
||||||
|
->schema([
|
||||||
|
Select::make('resource')
|
||||||
|
->options(PageReferenceList::query()->where('is_active', true)->pluck('title', 'slug'))
|
||||||
|
->searchable()
|
||||||
|
->required(),
|
||||||
|
])->label('Ресурсы'),
|
||||||
|
])
|
||||||
|
->collapsed()
|
||||||
|
->blockNumbers(false)
|
||||||
|
->collapsible()
|
||||||
|
->blockPickerColumns(3)
|
||||||
|
->blockPickerWidth('2xl')
|
||||||
|
->addActionLabel('Добавить новый блок'),
|
||||||
|
])->minItems(1),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -42,20 +42,10 @@ class ContentBuilderItem
|
|||||||
]),
|
]),
|
||||||
Builder\Block::make('paragraph')
|
Builder\Block::make('paragraph')
|
||||||
->schema([
|
->schema([
|
||||||
RichEditor::make('content')
|
TinyEditor::make('content')
|
||||||
->toolbarButtons([
|
->label('')
|
||||||
'blockquote',
|
->profile('test')
|
||||||
'bold',
|
->required(),
|
||||||
'bulletList',
|
|
||||||
'italic',
|
|
||||||
'link',
|
|
||||||
'orderedList',
|
|
||||||
'redo',
|
|
||||||
'strike',
|
|
||||||
'underline',
|
|
||||||
'undo',
|
|
||||||
])
|
|
||||||
->label(''),
|
|
||||||
])->label('Текст'),
|
])->label('Текст'),
|
||||||
Builder\Block::make('files')
|
Builder\Block::make('files')
|
||||||
->label('Файл(-ы)')
|
->label('Файл(-ы)')
|
||||||
|
|||||||
@@ -74,20 +74,9 @@ class DivisionResource extends Resource
|
|||||||
]),
|
]),
|
||||||
Builder\Block::make('paragraph')->label('Текст')
|
Builder\Block::make('paragraph')->label('Текст')
|
||||||
->schema([
|
->schema([
|
||||||
RichEditor::make('content')
|
TinyEditor::make('content')
|
||||||
->toolbarButtons([
|
->label('')
|
||||||
'blockquote',
|
->profile('test')
|
||||||
'bold',
|
|
||||||
'bulletList',
|
|
||||||
'italic',
|
|
||||||
'link',
|
|
||||||
'orderedList',
|
|
||||||
'redo',
|
|
||||||
'strike',
|
|
||||||
'underline',
|
|
||||||
'undo',
|
|
||||||
])
|
|
||||||
->label(''),
|
|
||||||
]),
|
]),
|
||||||
Builder\Block::make('files')->label('Файлы')
|
Builder\Block::make('files')->label('Файлы')
|
||||||
->schema([
|
->schema([
|
||||||
@@ -146,8 +135,10 @@ class DivisionResource extends Resource
|
|||||||
->required()
|
->required()
|
||||||
->live()
|
->live()
|
||||||
->maxLength(255)->columnSpanFull(),
|
->maxLength(255)->columnSpanFull(),
|
||||||
RichEditor::make('content')->required(),
|
TinyEditor::make('content')
|
||||||
])
|
->label('')
|
||||||
|
->profile('test')
|
||||||
|
->required(), ])
|
||||||
->itemLabel(fn (array $state): ?string => $state['title'] ?? null)
|
->itemLabel(fn (array $state): ?string => $state['title'] ?? null)
|
||||||
->minItems(1)
|
->minItems(1)
|
||||||
->collapsible()
|
->collapsible()
|
||||||
|
|||||||
@@ -70,21 +70,10 @@ class EventResource extends Resource
|
|||||||
]),
|
]),
|
||||||
Builder\Block::make('paragraph')
|
Builder\Block::make('paragraph')
|
||||||
->schema([
|
->schema([
|
||||||
RichEditor::make('content')
|
TinyEditor::make('content')
|
||||||
->toolbarButtons([
|
|
||||||
'blockquote',
|
|
||||||
'bold',
|
|
||||||
'bulletList',
|
|
||||||
'italic',
|
|
||||||
'link',
|
|
||||||
'orderedList',
|
|
||||||
'redo',
|
|
||||||
'strike',
|
|
||||||
'underline',
|
|
||||||
'undo',
|
|
||||||
])
|
|
||||||
->label('')
|
->label('')
|
||||||
->required()
|
->profile('test')
|
||||||
|
->required(),
|
||||||
])->label('Текст'),
|
])->label('Текст'),
|
||||||
Builder\Block::make('image')
|
Builder\Block::make('image')
|
||||||
->schema([
|
->schema([
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ use Illuminate\Database\Eloquent\SoftDeletingScope;
|
|||||||
use Illuminate\Support\Carbon;
|
use Illuminate\Support\Carbon;
|
||||||
use Illuminate\Support\Str;
|
use Illuminate\Support\Str;
|
||||||
use Livewire\Features\SupportFileUploads\TemporaryUploadedFile;
|
use Livewire\Features\SupportFileUploads\TemporaryUploadedFile;
|
||||||
|
use Mohamedsabil83\FilamentFormsTinyeditor\Components\TinyEditor;
|
||||||
|
|
||||||
class FacultyResource extends Resource
|
class FacultyResource extends Resource
|
||||||
{
|
{
|
||||||
@@ -83,20 +84,10 @@ class FacultyResource extends Resource
|
|||||||
]),
|
]),
|
||||||
Builder\Block::make('paragraph')
|
Builder\Block::make('paragraph')
|
||||||
->schema([
|
->schema([
|
||||||
RichEditor::make('content')
|
TinyEditor::make('content')
|
||||||
->toolbarButtons([
|
->label('')
|
||||||
'blockquote',
|
->profile('test')
|
||||||
'bold',
|
->required(),
|
||||||
'bulletList',
|
|
||||||
'italic',
|
|
||||||
'link',
|
|
||||||
'orderedList',
|
|
||||||
'redo',
|
|
||||||
'strike',
|
|
||||||
'underline',
|
|
||||||
'undo',
|
|
||||||
])
|
|
||||||
->label(''),
|
|
||||||
])->label('Текст'),
|
])->label('Текст'),
|
||||||
Builder\Block::make('files')
|
Builder\Block::make('files')
|
||||||
->schema([
|
->schema([
|
||||||
@@ -164,7 +155,10 @@ class FacultyResource extends Resource
|
|||||||
TextInput::make('title')
|
TextInput::make('title')
|
||||||
->required()
|
->required()
|
||||||
->maxLength(255)->columnSpanFull(),
|
->maxLength(255)->columnSpanFull(),
|
||||||
RichEditor::make('content')->required(),
|
TinyEditor::make('content')
|
||||||
|
->label('')
|
||||||
|
->profile('test')
|
||||||
|
->required(),
|
||||||
])->minItems(1),
|
])->minItems(1),
|
||||||
]),
|
]),
|
||||||
Builder\Block::make('tabs')
|
Builder\Block::make('tabs')
|
||||||
|
|||||||
@@ -37,7 +37,6 @@ class MainController extends Controller
|
|||||||
{
|
{
|
||||||
public function index()
|
public function index()
|
||||||
{
|
{
|
||||||
|
|
||||||
$admissionCampaign = $this->getAdmissionCampaign();
|
$admissionCampaign = $this->getAdmissionCampaign();
|
||||||
$educations = $this->getEducationsData();
|
$educations = $this->getEducationsData();
|
||||||
$sliders = $this->getActiveSliders();
|
$sliders = $this->getActiveSliders();
|
||||||
|
|||||||
@@ -59,11 +59,12 @@ class SearchController extends Controller
|
|||||||
->add(EducationalProgram::where('status', '=', true)->whereHas('admission_plans'), 'name')
|
->add(EducationalProgram::where('status', '=', true)->whereHas('admission_plans'), 'name')
|
||||||
->add(Faculty::where('is_active', '=', true), 'title')
|
->add(Faculty::where('is_active', '=', true), 'title')
|
||||||
->add(User::whereHas('userDetail'), 'name')
|
->add(User::whereHas('userDetail'), 'name')
|
||||||
->beginWithWildcard()
|
->orderByDesc()
|
||||||
->orderByRelevance()
|
// ->beginWithWildcard()
|
||||||
|
// ->orderByRelevance()
|
||||||
->includeModelType()
|
->includeModelType()
|
||||||
->ignoreCase(true)
|
->ignoreCase(true)
|
||||||
->search($req);
|
->search("$req");
|
||||||
|
|
||||||
$resourceMap = $this->resourceMap;
|
$resourceMap = $this->resourceMap;
|
||||||
$resources = collect($results)->map(function ($result) use ($resourceMap) {
|
$resources = collect($results)->map(function ($result) use ($resourceMap) {
|
||||||
|
|||||||
@@ -17,27 +17,21 @@ class AccessCheck
|
|||||||
*/
|
*/
|
||||||
public function handle(Request $request, Closure $next): Response
|
public function handle(Request $request, Closure $next): Response
|
||||||
{
|
{
|
||||||
|
|
||||||
// Проверяем, существует ли запись для текущего маршрута
|
// Проверяем, существует ли запись для текущего маршрута
|
||||||
$registeredRoute = Page::where('path', '=', $request->route()->uri)
|
$registeredRoute = Page::where('path', '=', $request->route()->uri)
|
||||||
->where('is_registered', '=', true)
|
->where('is_registered', '=', true)
|
||||||
->first();
|
->first();
|
||||||
|
|
||||||
|
|
||||||
// Если запись не найдена, пропускаем запрос
|
// Если запись не найдена, пропускаем запрос
|
||||||
if (!$registeredRoute) {
|
if (!$registeredRoute) {
|
||||||
return $next($request);
|
return $next($request);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Если код не 200, возвращаем соответствующий код ошибки
|
// Если код не 200, возвращаем соответствующий код ошибки
|
||||||
if ($registeredRoute->code != 200) {
|
if ($registeredRoute->code != 200) {
|
||||||
abort($registeredRoute->code);
|
abort($registeredRoute->code);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Если все проверки пройдены, продолжаем выполнение запроса
|
// Если все проверки пройдены, продолжаем выполнение запроса
|
||||||
return $next($request);
|
return $next($request);
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -7,6 +7,7 @@
|
|||||||
"require": {
|
"require": {
|
||||||
"php": "^8.1",
|
"php": "^8.1",
|
||||||
"ext-curl": "*",
|
"ext-curl": "*",
|
||||||
|
"ext-zip": "*",
|
||||||
"askerakbar/checkpoint": "^0.0.1",
|
"askerakbar/checkpoint": "^0.0.1",
|
||||||
"awcodes/filament-tiptap-editor": "^3.0",
|
"awcodes/filament-tiptap-editor": "^3.0",
|
||||||
"bezhansalleh/filament-shield": "^3.2",
|
"bezhansalleh/filament-shield": "^3.2",
|
||||||
@@ -29,8 +30,7 @@
|
|||||||
"symfony/filesystem": "^6.3",
|
"symfony/filesystem": "^6.3",
|
||||||
"tightenco/ziggy": "^1.0",
|
"tightenco/ziggy": "^1.0",
|
||||||
"vkcom/vk-php-sdk": "^5.131",
|
"vkcom/vk-php-sdk": "^5.131",
|
||||||
"xvladqt/faker-lorem-flickr": "^1.0",
|
"xvladqt/faker-lorem-flickr": "^1.0"
|
||||||
"ext-zip": "*"
|
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"fakerphp/faker": "^1.9.1",
|
"fakerphp/faker": "^1.9.1",
|
||||||
|
|||||||
Generated
+7
-7
@@ -4,7 +4,7 @@
|
|||||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||||
"This file is @generated automatically"
|
"This file is @generated automatically"
|
||||||
],
|
],
|
||||||
"content-hash": "ef31a80806504be14997f8fbefdae657",
|
"content-hash": "20a76642d9e13d900e9f37fc61f7db80",
|
||||||
"packages": [
|
"packages": [
|
||||||
{
|
{
|
||||||
"name": "anourvalar/eloquent-serialize",
|
"name": "anourvalar/eloquent-serialize",
|
||||||
@@ -4600,16 +4600,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "mohamedsabil83/filament-forms-tinyeditor",
|
"name": "mohamedsabil83/filament-forms-tinyeditor",
|
||||||
"version": "v2.3.2",
|
"version": "v2.3.3",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/mohamedsabil83/filament-forms-tinyeditor.git",
|
"url": "https://github.com/mohamedsabil83/filament-forms-tinyeditor.git",
|
||||||
"reference": "659fe09fb11e5c0913900a32bd16cef01715f56e"
|
"reference": "e2d85ba1a7360a8d633f9546bf60434b57f082fe"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/mohamedsabil83/filament-forms-tinyeditor/zipball/659fe09fb11e5c0913900a32bd16cef01715f56e",
|
"url": "https://api.github.com/repos/mohamedsabil83/filament-forms-tinyeditor/zipball/e2d85ba1a7360a8d633f9546bf60434b57f082fe",
|
||||||
"reference": "659fe09fb11e5c0913900a32bd16cef01715f56e",
|
"reference": "e2d85ba1a7360a8d633f9546bf60434b57f082fe",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -4666,7 +4666,7 @@
|
|||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/mohamedsabil83/filament-forms-tinyeditor/issues",
|
"issues": "https://github.com/mohamedsabil83/filament-forms-tinyeditor/issues",
|
||||||
"source": "https://github.com/mohamedsabil83/filament-forms-tinyeditor/tree/v2.3.2"
|
"source": "https://github.com/mohamedsabil83/filament-forms-tinyeditor/tree/v2.3.3"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -4678,7 +4678,7 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2024-03-28T11:10:35+00:00"
|
"time": "2024-10-13T12:50:56+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "monolog/monolog",
|
"name": "monolog/monolog",
|
||||||
|
|||||||
@@ -11,7 +11,6 @@
|
|||||||
</template>
|
</template>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div class="flex justify-center">
|
<div class="flex justify-center">
|
||||||
<a :href="route('client.post.index')" class="group mt-3 inline-flex items-center gap-x-1 text-sm font-semibold text-primaryBlue">
|
<a :href="route('client.post.index')" class="group mt-3 inline-flex items-center gap-x-1 text-sm font-semibold text-primaryBlue">
|
||||||
Все новости
|
Все новости
|
||||||
@@ -164,8 +163,6 @@
|
|||||||
<!-- End Grid -->
|
<!-- End Grid -->
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<!-- End Card Blog -->
|
<!-- End Card Blog -->
|
||||||
</section>
|
</section>
|
||||||
<PageResourceList resource-id="glavnaia-stranica-resurs" />
|
<PageResourceList resource-id="glavnaia-stranica-resurs" />
|
||||||
@@ -223,8 +220,6 @@
|
|||||||
</section>
|
</section>
|
||||||
<ClientFooterDown />
|
<ClientFooterDown />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
|||||||
@@ -26,20 +26,23 @@ export const linksReform = {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
updated() {
|
updated() {
|
||||||
const hostname = window.location.hostname;
|
|
||||||
const defaultLinks = Array.from(this.getDefaultLinks());
|
|
||||||
|
|
||||||
const reactiveLinks = this.createReactiveLinks(defaultLinks, hostname);
|
|
||||||
|
|
||||||
reactiveLinks.forEach(link => {
|
|
||||||
link.addEventListener('click', (event) => {
|
|
||||||
event.preventDefault();
|
|
||||||
this.clearBodyStyles();
|
this.clearBodyStyles();
|
||||||
const url = link.getAttribute('href');
|
|
||||||
this.$inertia.visit(url, {
|
// const hostname = window.location.hostname;
|
||||||
preserveScroll: false,
|
// const defaultLinks = Array.from(this.getDefaultLinks());
|
||||||
});
|
//
|
||||||
});
|
// const reactiveLinks = this.createReactiveLinks(defaultLinks, hostname);
|
||||||
});
|
//
|
||||||
|
// reactiveLinks.forEach(link => {
|
||||||
|
// link.addEventListener('click', (event) => {
|
||||||
|
// event.preventDefault();
|
||||||
|
// this.clearBodyStyles();
|
||||||
|
// const url = link.getAttribute('href');
|
||||||
|
// this.$inertia.visit(url, {
|
||||||
|
// preserveScroll: false,
|
||||||
|
// });
|
||||||
|
// });
|
||||||
|
// });
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -49,7 +49,6 @@ Route::middleware('access-check')->group(function () {
|
|||||||
Route::get('/schedule/{id}', [ClientScheduleController::class, 'show'])->name('client.schedule.show');
|
Route::get('/schedule/{id}', [ClientScheduleController::class, 'show'])->name('client.schedule.show');
|
||||||
|
|
||||||
Route::get('/persons/{slug}', [PersonController::class, 'show'])->name('client.person.show');
|
Route::get('/persons/{slug}', [PersonController::class, 'show'])->name('client.person.show');
|
||||||
// Route::get('/students/{student}', [StudentController::class, 'show'])->name('client.student.show')->middleware('auth');
|
|
||||||
|
|
||||||
// Новости
|
// Новости
|
||||||
Route::get('/news', [ClientPostController::class, 'index'])->name('client.post.index');
|
Route::get('/news', [ClientPostController::class, 'index'])->name('client.post.index');
|
||||||
@@ -98,7 +97,6 @@ Route::middleware('access-check')->group(function () {
|
|||||||
|
|
||||||
Route::get('/get-data', [UpdateEduDataApiController::class, 'index']);
|
Route::get('/get-data', [UpdateEduDataApiController::class, 'index']);
|
||||||
|
|
||||||
|
|
||||||
Route::get('{path}', [PageController::class, 'render'])->where('path', '[0-9,a-z,/,-]+')->name('page.view');
|
Route::get('{path}', [PageController::class, 'render'])->where('path', '[0-9,a-z,/,-]+')->name('page.view');
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user