From 77933cdd9ee1168d2c922d7b69a59aa14a0bd60e Mon Sep 17 00:00:00 2001 From: stasbilay02 Date: Tue, 8 Oct 2024 17:06:14 +0300 Subject: [PATCH] brta archive module --- .../action_column/DeleteActionColumn.php | 15 +++ .../action_column/EditActionColumn.php | 16 +++ .../tag/controllers/TagController.php | 82 +++++++++++++- kernel/app_modules/tag/models/Tag.php | 9 ++ .../tag/models/forms/CreateTagForm.php | 20 ++++ kernel/app_modules/tag/routs/tag.php | 14 +-- .../app_modules/tag/services/TagService.php | 42 ++++++++ kernel/app_modules/tag/views/form.php | 58 ++++++++++ kernel/app_modules/tag/views/index.php | 12 ++- kernel/app_modules/tag/views/view.php | 30 ++++++ .../controllers/AdminThemeController.php | 2 - .../console/controllers/ModuleController.php | 31 ++++++ kernel/console/routs/cli.php | 1 + kernel/helpers/Files.php | 41 +++++++ kernel/modules/option/views/view.php | 6 ++ kernel/modules/post/service/PostService.php | 1 - kernel/routs/admin.php | 1 + .../{modules/tag => ad/tag/app}/TagModule.php | 5 + .../ad/tag/app/controllers/TagController.php | 8 ++ resources/tmp/ad/tag/app/manifest.json | 11 ++ resources/tmp/ad/tag/app/routs/tag.php | 2 + .../tag/kernel/controllers/TagController.php | 101 ++++++++++++++++++ .../2024_10_08_093710_create_tag_table.php | 31 ++++++ resources/tmp/ad/tag/kernel/models/Tag.php | 46 ++++++++ .../tag/kernel/models/forms/CreateTagForm.php | 20 ++++ resources/tmp/ad/tag/kernel/routs/tag.php | 18 ++++ .../tmp/ad/tag/kernel/services/TagService.php | 42 ++++++++ resources/tmp/ad/tag/kernel/views/form.php | 58 ++++++++++ resources/tmp/ad/tag/kernel/views/index.php | 39 +++++++ resources/tmp/ad/tag/kernel/views/view.php | 30 ++++++ .../resources/tmp/ad/tag/app/TagModule.php | 38 +++++++ .../ad/tag/app/controllers/TagController.php | 8 ++ .../resources/tmp/ad/tag/app/manifest.json | 11 ++ .../resources/tmp/ad/tag/app/routs/tag.php | 2 + .../tag/kernel/controllers/TagController.php | 101 ++++++++++++++++++ .../2024_10_08_093710_create_tag_table.php | 31 ++++++ .../tmp/ad/tag/kernel/models/Tag.php | 46 ++++++++ .../tag/kernel/models/forms/CreateTagForm.php | 20 ++++ .../resources/tmp/ad/tag/kernel/routs/tag.php | 18 ++++ .../tmp/ad/tag/kernel/services/TagService.php | 42 ++++++++ .../tmp/ad/tag/kernel/views/form.php | 58 ++++++++++ .../tmp/ad/tag/kernel/views/index.php | 39 +++++++ .../tmp/ad/tag/kernel/views/view.php | 30 ++++++ resources/tmp/modules/tag.zip | Bin 831 -> 8694 bytes resources/tmp/modules/tag/app/TagModule.php | 38 +++++++ .../tag/app/controllers/TagController.php | 8 ++ .../tmp/modules/tag/{ => app}/manifest.json | 3 +- resources/tmp/modules/tag/app/routs/tag.php | 2 + .../tag/kernel/controllers/TagController.php | 101 ++++++++++++++++++ .../tmp/modules/tag/kernel/models/Tag.php | 11 +- .../tag/kernel/models/forms/CreateTagForm.php | 20 ++++ .../tmp/modules/tag/kernel/routs/tag.php | 18 ++++ .../tag/kernel/services/TagService.php | 42 ++++++++ .../tmp/modules/tag/kernel/views/form.php | 58 ++++++++++ .../tmp/modules/tag/kernel/views/index.php | 39 +++++++ .../tmp/modules/tag/kernel/views/view.php | 30 ++++++ 56 files changed, 1591 insertions(+), 15 deletions(-) create mode 100644 kernel/IGTabel/action_column/DeleteActionColumn.php create mode 100644 kernel/IGTabel/action_column/EditActionColumn.php create mode 100644 kernel/app_modules/tag/models/forms/CreateTagForm.php create mode 100644 kernel/app_modules/tag/services/TagService.php create mode 100644 kernel/app_modules/tag/views/form.php create mode 100644 kernel/app_modules/tag/views/view.php rename resources/tmp/{modules/tag => ad/tag/app}/TagModule.php (72%) create mode 100644 resources/tmp/ad/tag/app/controllers/TagController.php create mode 100644 resources/tmp/ad/tag/app/manifest.json create mode 100644 resources/tmp/ad/tag/app/routs/tag.php create mode 100644 resources/tmp/ad/tag/kernel/controllers/TagController.php create mode 100644 resources/tmp/ad/tag/kernel/migrations/2024_10_08_093710_create_tag_table.php create mode 100644 resources/tmp/ad/tag/kernel/models/Tag.php create mode 100644 resources/tmp/ad/tag/kernel/models/forms/CreateTagForm.php create mode 100644 resources/tmp/ad/tag/kernel/routs/tag.php create mode 100644 resources/tmp/ad/tag/kernel/services/TagService.php create mode 100644 resources/tmp/ad/tag/kernel/views/form.php create mode 100644 resources/tmp/ad/tag/kernel/views/index.php create mode 100644 resources/tmp/ad/tag/kernel/views/view.php create mode 100644 resources/tmp/modules/tag (2)/home/stas/PhpProjects/MicroFrameWork/resources/tmp/ad/tag/app/TagModule.php create mode 100644 resources/tmp/modules/tag (2)/home/stas/PhpProjects/MicroFrameWork/resources/tmp/ad/tag/app/controllers/TagController.php create mode 100644 resources/tmp/modules/tag (2)/home/stas/PhpProjects/MicroFrameWork/resources/tmp/ad/tag/app/manifest.json create mode 100644 resources/tmp/modules/tag (2)/home/stas/PhpProjects/MicroFrameWork/resources/tmp/ad/tag/app/routs/tag.php create mode 100644 resources/tmp/modules/tag (2)/home/stas/PhpProjects/MicroFrameWork/resources/tmp/ad/tag/kernel/controllers/TagController.php create mode 100644 resources/tmp/modules/tag (2)/home/stas/PhpProjects/MicroFrameWork/resources/tmp/ad/tag/kernel/migrations/2024_10_08_093710_create_tag_table.php create mode 100644 resources/tmp/modules/tag (2)/home/stas/PhpProjects/MicroFrameWork/resources/tmp/ad/tag/kernel/models/Tag.php create mode 100644 resources/tmp/modules/tag (2)/home/stas/PhpProjects/MicroFrameWork/resources/tmp/ad/tag/kernel/models/forms/CreateTagForm.php create mode 100644 resources/tmp/modules/tag (2)/home/stas/PhpProjects/MicroFrameWork/resources/tmp/ad/tag/kernel/routs/tag.php create mode 100644 resources/tmp/modules/tag (2)/home/stas/PhpProjects/MicroFrameWork/resources/tmp/ad/tag/kernel/services/TagService.php create mode 100644 resources/tmp/modules/tag (2)/home/stas/PhpProjects/MicroFrameWork/resources/tmp/ad/tag/kernel/views/form.php create mode 100644 resources/tmp/modules/tag (2)/home/stas/PhpProjects/MicroFrameWork/resources/tmp/ad/tag/kernel/views/index.php create mode 100644 resources/tmp/modules/tag (2)/home/stas/PhpProjects/MicroFrameWork/resources/tmp/ad/tag/kernel/views/view.php create mode 100644 resources/tmp/modules/tag/app/TagModule.php create mode 100644 resources/tmp/modules/tag/app/controllers/TagController.php rename resources/tmp/modules/tag/{ => app}/manifest.json (70%) create mode 100644 resources/tmp/modules/tag/app/routs/tag.php create mode 100644 resources/tmp/modules/tag/kernel/controllers/TagController.php create mode 100644 resources/tmp/modules/tag/kernel/models/forms/CreateTagForm.php create mode 100644 resources/tmp/modules/tag/kernel/routs/tag.php create mode 100644 resources/tmp/modules/tag/kernel/services/TagService.php create mode 100644 resources/tmp/modules/tag/kernel/views/form.php create mode 100644 resources/tmp/modules/tag/kernel/views/index.php create mode 100644 resources/tmp/modules/tag/kernel/views/view.php diff --git a/kernel/IGTabel/action_column/DeleteActionColumn.php b/kernel/IGTabel/action_column/DeleteActionColumn.php new file mode 100644 index 0000000..740d36a --- /dev/null +++ b/kernel/IGTabel/action_column/DeleteActionColumn.php @@ -0,0 +1,15 @@ +baseUrl . $this->prefix . $this->id; + return " Удалить "; + } +} \ No newline at end of file diff --git a/kernel/IGTabel/action_column/EditActionColumn.php b/kernel/IGTabel/action_column/EditActionColumn.php new file mode 100644 index 0000000..6747a53 --- /dev/null +++ b/kernel/IGTabel/action_column/EditActionColumn.php @@ -0,0 +1,16 @@ +baseUrl . $this->prefix . $this->id; + return " Редактировать "; + } +} \ No newline at end of file diff --git a/kernel/app_modules/tag/controllers/TagController.php b/kernel/app_modules/tag/controllers/TagController.php index 6a72046..2a72451 100644 --- a/kernel/app_modules/tag/controllers/TagController.php +++ b/kernel/app_modules/tag/controllers/TagController.php @@ -2,15 +2,41 @@ namespace kernel\app_modules\tag\controllers; +use Exception; +use JetBrains\PhpStorm\NoReturn; use kernel\AdminController; +use kernel\app_modules\tag\models\forms\CreateTagForm; +use kernel\app_modules\tag\models\Tag; +use kernel\app_modules\tag\services\TagService; +use kernel\helpers\Debug; use kernel\modules\menu\service\MenuService; class TagController extends AdminController { + private TagService $tagService; protected function init(): void { parent::init(); - $this->cgView->viewPath = KERNEL_APP_MODULES_DIR . "/tag/views/";; + $this->cgView->viewPath = KERNEL_APP_MODULES_DIR . "/tag/views/"; + $this->tagService = new TagService(); + } + + public function actionCreate(): void + { + $this->cgView->render("form.php"); + } + + #[NoReturn] public function actionAdd(): void + { + $tagForm = new CreateTagForm(); + $tagForm->load($_REQUEST); + if ($tagForm->validate()){ + $tag = $this->tagService->create($tagForm); + if ($tag){ + $this->redirect("/admin/tag/" . $tag->id); + } + } + $this->redirect("/admin/tag/create"); } public function actionIndex($page_number = 1): void @@ -18,4 +44,58 @@ class TagController extends AdminController $this->cgView->render("index.php", ['page_number' => $page_number]); } + /** + * @throws Exception + */ + public function actionView($id): void + { + $tag = Tag::find($id); + + if (!$tag){ + throw new Exception(message: "The tag not found"); + } + $this->cgView->render("view.php", ['tag' => $tag]); + } + + /** + * @throws Exception + */ + public function actionUpdate($id): void + { + $model = Tag::find($id); + if (!$model){ + throw new Exception(message: "The tag not found"); + } + + $this->cgView->render("form.php", ['model' => $model]); + } + + /** + * @throws Exception + */ + public function actionEdit($id): void + { + $tag = Tag::find($id); + if (!$tag){ + throw new Exception(message: "The tag not found"); + } + $tagForm = new CreateTagForm(); + $tagService = new TagService(); + $tagForm->load($_REQUEST); + if ($tagForm->validate()) { + $tag = $tagService->update($tagForm, $tag); + if ($tag) { + $this->redirect("/admin/tag/" . $tag->id); + } + } + $this->redirect("/admin/tag/update/" . $id); + } + + #[NoReturn] public function actionDelete($id): void + { + $post = Tag::find($id)->first(); + $post->delete(); + $this->redirect("/admin/tag/"); + } + } \ No newline at end of file diff --git a/kernel/app_modules/tag/models/Tag.php b/kernel/app_modules/tag/models/Tag.php index fb408c9..49e1bb4 100644 --- a/kernel/app_modules/tag/models/Tag.php +++ b/kernel/app_modules/tag/models/Tag.php @@ -4,6 +4,15 @@ namespace kernel\app_modules\tag\models; use Illuminate\Database\Eloquent\Model; +/** + * @property int $id + * @property string $label + * @property string $entity + * @property string $slug + * @property int $status + * @method static where(int[] $array) + * @method static find($id) + */ class Tag extends Model { const DISABLE_STATUS = 0; diff --git a/kernel/app_modules/tag/models/forms/CreateTagForm.php b/kernel/app_modules/tag/models/forms/CreateTagForm.php new file mode 100644 index 0000000..82fd893 --- /dev/null +++ b/kernel/app_modules/tag/models/forms/CreateTagForm.php @@ -0,0 +1,20 @@ + 'required|min-str-len:5|max-str-len:30', + 'entity' => 'required|min-str-len:1|max-str-len:50', + 'slug' => '', + 'status' => '' + ]; + } + +} \ No newline at end of file diff --git a/kernel/app_modules/tag/routs/tag.php b/kernel/app_modules/tag/routs/tag.php index edabefa..6ec41fe 100644 --- a/kernel/app_modules/tag/routs/tag.php +++ b/kernel/app_modules/tag/routs/tag.php @@ -7,12 +7,12 @@ use Phroute\Phroute\RouteCollector; App::$collector->group(["prefix" => "admin"], function (CgRouteCollector $router) { App::$collector->group(["prefix" => "tag"], function (CGRouteCollector $router){ App::$collector->get('/', [\app\modules\tag\controllers\TagController::class, 'actionIndex']); -// App::$collector->get('/page/{page_number}', [\kernel\modules\menu\controllers\MenuController::class, 'actionIndex']); -// App::$collector->get('/create', [\kernel\modules\menu\controllers\MenuController::class, 'actionCreate']); -// App::$collector->post("/", [\kernel\modules\menu\controllers\MenuController::class, 'actionAdd']); -// App::$collector->get('/{id}', [\kernel\modules\menu\controllers\MenuController::class, 'actionView']); -// App::$collector->any('/update/{id}', [\kernel\modules\menu\controllers\MenuController::class, 'actionUpdate']); -// App::$collector->any("/edit/{id}", [\kernel\modules\menu\controllers\MenuController::class, 'actionEdit']); -// App::$collector->get('/delete/{id}', [\kernel\modules\menu\controllers\MenuController::class, 'actionDelete']); + App::$collector->get('/page/{page_number}', [\app\modules\tag\controllers\TagController::class, 'actionIndex']); + App::$collector->get('/create', [\app\modules\tag\controllers\TagController::class, 'actionCreate']); + App::$collector->post("/", [\app\modules\tag\controllers\TagController::class, 'actionAdd']); + App::$collector->get('/{id}', [\app\modules\tag\controllers\TagController::class, 'actionView']); + App::$collector->any('/update/{id}', [\app\modules\tag\controllers\TagController::class, 'actionUpdate']); + App::$collector->any("/edit/{id}", [\app\modules\tag\controllers\TagController::class, 'actionEdit']); + App::$collector->get('/delete/{id}', [\app\modules\tag\controllers\TagController::class, 'actionDelete']); }); }); \ No newline at end of file diff --git a/kernel/app_modules/tag/services/TagService.php b/kernel/app_modules/tag/services/TagService.php new file mode 100644 index 0000000..9407f0a --- /dev/null +++ b/kernel/app_modules/tag/services/TagService.php @@ -0,0 +1,42 @@ +label = $form_model->getItem('label'); + $model->entity = $form_model->getItem('entity'); + $model->status = $form_model->getItem('status'); + $model->slug = Slug::createSlug($form_model->getItem('label'), Tag::class); + if ($model->save()){ + return $model; + } + + return false; + } + + public function update(FormModel $form_model, Tag $tag): false|Tag + { + if ($tag->label !== $form_model->getItem('label')) { + $tag->slug = Slug::createSlug($form_model->getItem('label'), Tag::class); + } + $tag->label = $form_model->getItem('label'); + $tag->entity = $form_model->getItem('entity'); + $tag->status = $form_model->getItem('status'); + + if ($tag->save()){ + return $tag; + } + + return false; + } + +} \ No newline at end of file diff --git a/kernel/app_modules/tag/views/form.php b/kernel/app_modules/tag/views/form.php new file mode 100644 index 0000000..3a37b96 --- /dev/null +++ b/kernel/app_modules/tag/views/form.php @@ -0,0 +1,58 @@ +beginForm(isset($model) ? "/admin/tag/edit/" . $model->id : "/admin/tag"); + +$form->field(class: \itguild\forms\inputs\TextInput::class, name: "label", params: [ + 'class' => "form-control", + 'placeholder' => 'Заголовок', + 'value' => $model->label ?? '' +]) + ->setLabel("Заголовок") + ->render(); + +$form->field(class: \itguild\forms\inputs\TextInput::class, name: "entity", params: [ + 'class' => "form-control", + 'placeholder' => 'Сущность', + 'value' => $model->entity ?? '' +]) + ->setLabel("Сущность") + ->render(); + +$form->field(\itguild\forms\inputs\Select::class, 'status', [ + 'class' => "form-control", + 'value' => $model->status ?? '' +]) + ->setLabel("Статус") + ->setOptions(Tag::getStatus()) + ->render(); +?> +
+
+ field(\itguild\forms\inputs\Button::class, name: "btn-submit", params: [ + 'class' => "btn btn-primary ", + 'value' => 'Отправить', + 'typeInput' => 'submit' + ]) + ->render(); + ?> +
+
+ field(\itguild\forms\inputs\Button::class, name: "btn-reset", params: [ + 'class' => "btn btn-warning", + 'value' => 'Сбросить', + 'typeInput' => 'reset' + ]) + ->render(); + ?> +
+
+endForm(); diff --git a/kernel/app_modules/tag/views/index.php b/kernel/app_modules/tag/views/index.php index c423207..0d5503f 100644 --- a/kernel/app_modules/tag/views/index.php +++ b/kernel/app_modules/tag/views/index.php @@ -24,8 +24,16 @@ $table->beforePrint(function () { return PrimaryBtn::create("Создать", "/admin/tag/create")->fetch(); //return (new PrimaryBtn("Создать", "/admin/user/create"))->fetch(); }); + +$table->columns([ + "status" => [ + "value" => function ($cell) { + return Tag::getStatus()[$cell]; + }] +]); + $table->addAction(\kernel\IGTabel\action_column\ViewActionColumn::class); -//$table->addAction(MenuEditActionColumn::class); -//$table->addAction(MenuDeleteActionColumn::class); +$table->addAction(\kernel\IGTabel\action_column\DeleteActionColumn::class); +$table->addAction(\kernel\IGTabel\action_column\EditActionColumn::class); $table->create(); $table->render(); \ No newline at end of file diff --git a/kernel/app_modules/tag/views/view.php b/kernel/app_modules/tag/views/view.php new file mode 100644 index 0000000..b09034f --- /dev/null +++ b/kernel/app_modules/tag/views/view.php @@ -0,0 +1,30 @@ + ["class" => "table table-bordered", "border" => "2"], + 'baseUrl' => "/admin/tag", +])); +$table->beforePrint(function () use ($tag) { + $btn = PrimaryBtn::create("Список", "/admin/tag")->fetch(); + $btn .= SuccessBtn::create("Редактировать", "/admin/tag/update/" . $tag->id)->fetch(); + $btn .= DangerBtn::create("Удалить", "/admin/tag/delete/" . $tag->id)->fetch(); + return $btn; +}); +$table->rows([ + 'status' => (function ($data) { + return \kernel\app_modules\tag\models\Tag::getStatus()[$data]; + }) +]); +$table->create(); +$table->render(); \ No newline at end of file diff --git a/kernel/console/controllers/AdminThemeController.php b/kernel/console/controllers/AdminThemeController.php index 585bc30..2fc1739 100644 --- a/kernel/console/controllers/AdminThemeController.php +++ b/kernel/console/controllers/AdminThemeController.php @@ -55,8 +55,6 @@ class AdminThemeController extends ConsoleController if (file_exists(ROOT_DIR . $this->argv['path'])) { $themeName = basename($this->argv['path']); $active_admin_theme = Option::where("key", "active_admin_theme")->first(); - var_dump($active_admin_theme->value); - var_dump(ROOT_DIR . $this->argv['path']); if ($active_admin_theme->value === ROOT_DIR . $this->argv['path']) { $this->out->r("Меняем тему на базовую", 'green'); $adminThemeService = new AdminThemeService(); diff --git a/kernel/console/controllers/ModuleController.php b/kernel/console/controllers/ModuleController.php index 4201f5f..d9e3aac 100644 --- a/kernel/console/controllers/ModuleController.php +++ b/kernel/console/controllers/ModuleController.php @@ -3,6 +3,7 @@ namespace kernel\console\controllers; use kernel\console\ConsoleController; +use kernel\helpers\Debug; use kernel\helpers\Files; use kernel\helpers\Manifest; use kernel\models\Option; @@ -75,4 +76,34 @@ class ModuleController extends ConsoleController } } + public function actionPackModule(): void + { + if (!isset($this->argv['path'])) { + throw new \Exception('Missing module path "--path" specified'); + } + + if (file_exists(ROOT_DIR . $this->argv['path'])) { + $moduleName = basename($this->argv['path']); + + $tmpModuleDirFull = RESOURCES_DIR . '/tmp/ad/' . $moduleName . "/"; + + $fileHelper = new Files(); + $fileHelper->copy_folder(APP_DIR . '/modules/' . $moduleName, $tmpModuleDirFull . 'app/'); + $fileHelper->copy_folder(KERNEL_APP_MODULES_DIR . '/' . $moduleName, $tmpModuleDirFull . 'kernel/'); + + $this->out->r("Модуль собран в одну папку", 'green'); + + +// $fileHelper->pack($zip, RESOURCES_DIR . '/tmp/modules/' . $moduleName . '.zip'); + $fileHelper->pack($tmpModuleDirFull, RESOURCES_DIR . '/tmp/modules/' . $moduleName . '.zip'); + +// $zip->addEmptyDir($moduleName); +// $zip->close(); +// $this->out->r("zip закрыт", 'green'); + + $this->out->r("Архив создан", 'green'); + + } + } + } \ No newline at end of file diff --git a/kernel/console/routs/cli.php b/kernel/console/routs/cli.php index 5976755..ba24d43 100644 --- a/kernel/console/routs/cli.php +++ b/kernel/console/routs/cli.php @@ -24,5 +24,6 @@ App::$collector->group(["prefix" => "admin"], callback: function (RouteCollector App::$collector->group(["prefix" => "module"], callback: function (RouteCollector $router){ App::$collector->console('install', [\kernel\console\controllers\ModuleController::class, 'actionInstallModule']); App::$collector->console('uninstall', [\kernel\console\controllers\ModuleController::class, 'actionUninstallModule']); + App::$collector->console('pack', [\kernel\console\controllers\ModuleController::class, 'actionPackModule']); }); diff --git a/kernel/helpers/Files.php b/kernel/helpers/Files.php index 7294d71..f70ef16 100644 --- a/kernel/helpers/Files.php +++ b/kernel/helpers/Files.php @@ -3,6 +3,7 @@ namespace kernel\helpers; use FilesystemIterator; +use ZipArchive; class Files { @@ -41,4 +42,44 @@ class Files } rmdir($dir); } + + public function pack(string $source, string $destination, bool $include_source = true): void + { + $zip = new ZipArchive(); + $zip->open($destination, ZipArchive::CREATE | ZipArchive::OVERWRITE); + if ($include_source) { + $zip->addEmptyDir(basename($source)); + } + + if (is_file($source)) { + $zip->addFile(basename($source)); + } + + if (is_dir($source)) { + $this->recursiveAddFile($zip, $source); + } + + $zip->close(); + } + + private function recursiveAddFile(ZipArchive $zip, string $dir): void + { + $includes = new FilesystemIterator($dir); +// Debug::prn($includes); + foreach ($includes as $include) { +// var_dump($include->getFilename()); + if(is_dir($include)/* && !is_link($include)*/) { + var_dump('ЭТО ПАПКА'); +// $d = dir($include); +// $entry = $d->read(); +// if ($entry == '.' || $entry == '..') continue; + $zip->addEmptyDir(basename($include)); + $this->recursiveAddFile($zip, $include); + } + else { + var_dump("ЭТО ФАЙЛ"); + $zip->addFile($include); + } + } + } } \ No newline at end of file diff --git a/kernel/modules/option/views/view.php b/kernel/modules/option/views/view.php index d8068c2..b0e77b0 100644 --- a/kernel/modules/option/views/view.php +++ b/kernel/modules/option/views/view.php @@ -19,5 +19,11 @@ $table->beforePrint(function () use ($option) { $btn .= DangerBtn::create("Удалить", "/admin/option/delete/" . $option->id)->fetch(); return $btn; }); + +$table->rows([ + 'status' => (function ($data) { + return \kernel\modules\option\models\Option::getStatus()[$data]; + }) +]); $table->create(); $table->render(); \ No newline at end of file diff --git a/kernel/modules/post/service/PostService.php b/kernel/modules/post/service/PostService.php index 7b3abad..2294ce2 100644 --- a/kernel/modules/post/service/PostService.php +++ b/kernel/modules/post/service/PostService.php @@ -15,7 +15,6 @@ class PostService $model->content = $form_model->getItem('content'); $model->user_id = $form_model->getItem('user_id'); $model->title = $form_model->getItem('title'); -// $model->slug = Slug::recursiveCreateSlug(Post::class, $this->createSlug($form_model)); $model->slug = Slug::createSlug($form_model->getItem('title'), Post::class); if ($model->save()){ return $model; diff --git a/kernel/routs/admin.php b/kernel/routs/admin.php index d638d15..7e238d7 100644 --- a/kernel/routs/admin.php +++ b/kernel/routs/admin.php @@ -9,6 +9,7 @@ App::$collector->group(["prefix" => "admin"], function (RouteCollector $router){ App::$collector->group(["prefix" => "module"], function (RouteCollector $router){ App::$collector->get('/', [\kernel\controllers\ModuleController::class, 'actionIndex']); App::$collector->get('/activate', [\kernel\controllers\ModuleController::class, 'actionActivate']); + App::$collector->get('/view', [\kernel\controllers\ModuleController::class, 'actionView']); }); }); }); \ No newline at end of file diff --git a/resources/tmp/modules/tag/TagModule.php b/resources/tmp/ad/tag/app/TagModule.php similarity index 72% rename from resources/tmp/modules/tag/TagModule.php rename to resources/tmp/ad/tag/app/TagModule.php index ee01d77..b2f0ffd 100644 --- a/resources/tmp/modules/tag/TagModule.php +++ b/resources/tmp/ad/tag/app/TagModule.php @@ -4,14 +4,17 @@ namespace app\modules\tag; use kernel\Module; use kernel\modules\menu\service\MenuService; +use kernel\services\MigrationService; class TagModule extends Module { public MenuService $menuService; + public MigrationService $migrationService; public function __construct() { $this->menuService = new MenuService(); + $this->migrationService = new MigrationService(); } /** @@ -19,6 +22,8 @@ class TagModule extends Module */ public function init(): void { + $this->migrationService->runAtPath("{KERNEL_APP_MODULES}/tag/migrations"); + $this->menuService->createItem([ "label" => "Тэги", "url" => "/admin/tag", diff --git a/resources/tmp/ad/tag/app/controllers/TagController.php b/resources/tmp/ad/tag/app/controllers/TagController.php new file mode 100644 index 0000000..4598872 --- /dev/null +++ b/resources/tmp/ad/tag/app/controllers/TagController.php @@ -0,0 +1,8 @@ +cgView->viewPath = KERNEL_APP_MODULES_DIR . "/tag/views/"; + $this->tagService = new TagService(); + } + + public function actionCreate(): void + { + $this->cgView->render("form.php"); + } + + #[NoReturn] public function actionAdd(): void + { + $tagForm = new CreateTagForm(); + $tagForm->load($_REQUEST); + if ($tagForm->validate()){ + $tag = $this->tagService->create($tagForm); + if ($tag){ + $this->redirect("/admin/tag/" . $tag->id); + } + } + $this->redirect("/admin/tag/create"); + } + + public function actionIndex($page_number = 1): void + { + $this->cgView->render("index.php", ['page_number' => $page_number]); + } + + /** + * @throws Exception + */ + public function actionView($id): void + { + $tag = Tag::find($id); + + if (!$tag){ + throw new Exception(message: "The tag not found"); + } + $this->cgView->render("view.php", ['tag' => $tag]); + } + + /** + * @throws Exception + */ + public function actionUpdate($id): void + { + $model = Tag::find($id); + if (!$model){ + throw new Exception(message: "The tag not found"); + } + + $this->cgView->render("form.php", ['model' => $model]); + } + + /** + * @throws Exception + */ + public function actionEdit($id): void + { + $tag = Tag::find($id); + if (!$tag){ + throw new Exception(message: "The tag not found"); + } + $tagForm = new CreateTagForm(); + $tagService = new TagService(); + $tagForm->load($_REQUEST); + if ($tagForm->validate()) { + $tag = $tagService->update($tagForm, $tag); + if ($tag) { + $this->redirect("/admin/tag/" . $tag->id); + } + } + $this->redirect("/admin/tag/update/" . $id); + } + + #[NoReturn] public function actionDelete($id): void + { + $post = Tag::find($id)->first(); + $post->delete(); + $this->redirect("/admin/tag/"); + } + +} \ No newline at end of file diff --git a/resources/tmp/ad/tag/kernel/migrations/2024_10_08_093710_create_tag_table.php b/resources/tmp/ad/tag/kernel/migrations/2024_10_08_093710_create_tag_table.php new file mode 100644 index 0000000..37c4be5 --- /dev/null +++ b/resources/tmp/ad/tag/kernel/migrations/2024_10_08_093710_create_tag_table.php @@ -0,0 +1,31 @@ +schema->create('tag', function (Blueprint $table) { + $table->increments('id'); + $table->string('label', 255)->nullable(false); + $table->string('entity', 255)->nullable(false); + $table->string('slug', 255)->unique(); + $table->integer('status')->default(1); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + \kernel\App::$db->schema->dropIfExists('tag'); + } +}; diff --git a/resources/tmp/ad/tag/kernel/models/Tag.php b/resources/tmp/ad/tag/kernel/models/Tag.php new file mode 100644 index 0000000..49e1bb4 --- /dev/null +++ b/resources/tmp/ad/tag/kernel/models/Tag.php @@ -0,0 +1,46 @@ + 'Заголовок', + 'entity' => 'Сущность', + 'slug' => 'Slug', + 'status' => 'Статус', + ]; + } + + /** + * @return string[] + */ + public static function getStatus(): array + { + return [ + self::DISABLE_STATUS => "Не активный", + self::ACTIVE_STATUS => "Активный", + ]; + } + +} \ No newline at end of file diff --git a/resources/tmp/ad/tag/kernel/models/forms/CreateTagForm.php b/resources/tmp/ad/tag/kernel/models/forms/CreateTagForm.php new file mode 100644 index 0000000..82fd893 --- /dev/null +++ b/resources/tmp/ad/tag/kernel/models/forms/CreateTagForm.php @@ -0,0 +1,20 @@ + 'required|min-str-len:5|max-str-len:30', + 'entity' => 'required|min-str-len:1|max-str-len:50', + 'slug' => '', + 'status' => '' + ]; + } + +} \ No newline at end of file diff --git a/resources/tmp/ad/tag/kernel/routs/tag.php b/resources/tmp/ad/tag/kernel/routs/tag.php new file mode 100644 index 0000000..6ec41fe --- /dev/null +++ b/resources/tmp/ad/tag/kernel/routs/tag.php @@ -0,0 +1,18 @@ +group(["prefix" => "admin"], function (CgRouteCollector $router) { + App::$collector->group(["prefix" => "tag"], function (CGRouteCollector $router){ + App::$collector->get('/', [\app\modules\tag\controllers\TagController::class, 'actionIndex']); + App::$collector->get('/page/{page_number}', [\app\modules\tag\controllers\TagController::class, 'actionIndex']); + App::$collector->get('/create', [\app\modules\tag\controllers\TagController::class, 'actionCreate']); + App::$collector->post("/", [\app\modules\tag\controllers\TagController::class, 'actionAdd']); + App::$collector->get('/{id}', [\app\modules\tag\controllers\TagController::class, 'actionView']); + App::$collector->any('/update/{id}', [\app\modules\tag\controllers\TagController::class, 'actionUpdate']); + App::$collector->any("/edit/{id}", [\app\modules\tag\controllers\TagController::class, 'actionEdit']); + App::$collector->get('/delete/{id}', [\app\modules\tag\controllers\TagController::class, 'actionDelete']); + }); +}); \ No newline at end of file diff --git a/resources/tmp/ad/tag/kernel/services/TagService.php b/resources/tmp/ad/tag/kernel/services/TagService.php new file mode 100644 index 0000000..9407f0a --- /dev/null +++ b/resources/tmp/ad/tag/kernel/services/TagService.php @@ -0,0 +1,42 @@ +label = $form_model->getItem('label'); + $model->entity = $form_model->getItem('entity'); + $model->status = $form_model->getItem('status'); + $model->slug = Slug::createSlug($form_model->getItem('label'), Tag::class); + if ($model->save()){ + return $model; + } + + return false; + } + + public function update(FormModel $form_model, Tag $tag): false|Tag + { + if ($tag->label !== $form_model->getItem('label')) { + $tag->slug = Slug::createSlug($form_model->getItem('label'), Tag::class); + } + $tag->label = $form_model->getItem('label'); + $tag->entity = $form_model->getItem('entity'); + $tag->status = $form_model->getItem('status'); + + if ($tag->save()){ + return $tag; + } + + return false; + } + +} \ No newline at end of file diff --git a/resources/tmp/ad/tag/kernel/views/form.php b/resources/tmp/ad/tag/kernel/views/form.php new file mode 100644 index 0000000..3a37b96 --- /dev/null +++ b/resources/tmp/ad/tag/kernel/views/form.php @@ -0,0 +1,58 @@ +beginForm(isset($model) ? "/admin/tag/edit/" . $model->id : "/admin/tag"); + +$form->field(class: \itguild\forms\inputs\TextInput::class, name: "label", params: [ + 'class' => "form-control", + 'placeholder' => 'Заголовок', + 'value' => $model->label ?? '' +]) + ->setLabel("Заголовок") + ->render(); + +$form->field(class: \itguild\forms\inputs\TextInput::class, name: "entity", params: [ + 'class' => "form-control", + 'placeholder' => 'Сущность', + 'value' => $model->entity ?? '' +]) + ->setLabel("Сущность") + ->render(); + +$form->field(\itguild\forms\inputs\Select::class, 'status', [ + 'class' => "form-control", + 'value' => $model->status ?? '' +]) + ->setLabel("Статус") + ->setOptions(Tag::getStatus()) + ->render(); +?> +
+
+ field(\itguild\forms\inputs\Button::class, name: "btn-submit", params: [ + 'class' => "btn btn-primary ", + 'value' => 'Отправить', + 'typeInput' => 'submit' + ]) + ->render(); + ?> +
+
+ field(\itguild\forms\inputs\Button::class, name: "btn-reset", params: [ + 'class' => "btn btn-warning", + 'value' => 'Сбросить', + 'typeInput' => 'reset' + ]) + ->render(); + ?> +
+
+endForm(); diff --git a/resources/tmp/ad/tag/kernel/views/index.php b/resources/tmp/ad/tag/kernel/views/index.php new file mode 100644 index 0000000..0d5503f --- /dev/null +++ b/resources/tmp/ad/tag/kernel/views/index.php @@ -0,0 +1,39 @@ + $page_number, + 'perPage' => 8, + 'params' => ["class" => "table table-bordered", "border" => "2"], + 'baseUrl' => "/admin/tag", +])); + +$table->beforePrint(function () { + return PrimaryBtn::create("Создать", "/admin/tag/create")->fetch(); + //return (new PrimaryBtn("Создать", "/admin/user/create"))->fetch(); +}); + +$table->columns([ + "status" => [ + "value" => function ($cell) { + return Tag::getStatus()[$cell]; + }] +]); + +$table->addAction(\kernel\IGTabel\action_column\ViewActionColumn::class); +$table->addAction(\kernel\IGTabel\action_column\DeleteActionColumn::class); +$table->addAction(\kernel\IGTabel\action_column\EditActionColumn::class); +$table->create(); +$table->render(); \ No newline at end of file diff --git a/resources/tmp/ad/tag/kernel/views/view.php b/resources/tmp/ad/tag/kernel/views/view.php new file mode 100644 index 0000000..b09034f --- /dev/null +++ b/resources/tmp/ad/tag/kernel/views/view.php @@ -0,0 +1,30 @@ + ["class" => "table table-bordered", "border" => "2"], + 'baseUrl' => "/admin/tag", +])); +$table->beforePrint(function () use ($tag) { + $btn = PrimaryBtn::create("Список", "/admin/tag")->fetch(); + $btn .= SuccessBtn::create("Редактировать", "/admin/tag/update/" . $tag->id)->fetch(); + $btn .= DangerBtn::create("Удалить", "/admin/tag/delete/" . $tag->id)->fetch(); + return $btn; +}); +$table->rows([ + 'status' => (function ($data) { + return \kernel\app_modules\tag\models\Tag::getStatus()[$data]; + }) +]); +$table->create(); +$table->render(); \ No newline at end of file diff --git a/resources/tmp/modules/tag (2)/home/stas/PhpProjects/MicroFrameWork/resources/tmp/ad/tag/app/TagModule.php b/resources/tmp/modules/tag (2)/home/stas/PhpProjects/MicroFrameWork/resources/tmp/ad/tag/app/TagModule.php new file mode 100644 index 0000000..b2f0ffd --- /dev/null +++ b/resources/tmp/modules/tag (2)/home/stas/PhpProjects/MicroFrameWork/resources/tmp/ad/tag/app/TagModule.php @@ -0,0 +1,38 @@ +menuService = new MenuService(); + $this->migrationService = new MigrationService(); + } + + /** + * @throws \Exception + */ + public function init(): void + { + $this->migrationService->runAtPath("{KERNEL_APP_MODULES}/tag/migrations"); + + $this->menuService->createItem([ + "label" => "Тэги", + "url" => "/admin/tag", + "slug" => "tag", + ]); + } + + public function deactivate(): void + { + $this->menuService->removeItemBySlug("tag"); + } +} \ No newline at end of file diff --git a/resources/tmp/modules/tag (2)/home/stas/PhpProjects/MicroFrameWork/resources/tmp/ad/tag/app/controllers/TagController.php b/resources/tmp/modules/tag (2)/home/stas/PhpProjects/MicroFrameWork/resources/tmp/ad/tag/app/controllers/TagController.php new file mode 100644 index 0000000..4598872 --- /dev/null +++ b/resources/tmp/modules/tag (2)/home/stas/PhpProjects/MicroFrameWork/resources/tmp/ad/tag/app/controllers/TagController.php @@ -0,0 +1,8 @@ +cgView->viewPath = KERNEL_APP_MODULES_DIR . "/tag/views/"; + $this->tagService = new TagService(); + } + + public function actionCreate(): void + { + $this->cgView->render("form.php"); + } + + #[NoReturn] public function actionAdd(): void + { + $tagForm = new CreateTagForm(); + $tagForm->load($_REQUEST); + if ($tagForm->validate()){ + $tag = $this->tagService->create($tagForm); + if ($tag){ + $this->redirect("/admin/tag/" . $tag->id); + } + } + $this->redirect("/admin/tag/create"); + } + + public function actionIndex($page_number = 1): void + { + $this->cgView->render("index.php", ['page_number' => $page_number]); + } + + /** + * @throws Exception + */ + public function actionView($id): void + { + $tag = Tag::find($id); + + if (!$tag){ + throw new Exception(message: "The tag not found"); + } + $this->cgView->render("view.php", ['tag' => $tag]); + } + + /** + * @throws Exception + */ + public function actionUpdate($id): void + { + $model = Tag::find($id); + if (!$model){ + throw new Exception(message: "The tag not found"); + } + + $this->cgView->render("form.php", ['model' => $model]); + } + + /** + * @throws Exception + */ + public function actionEdit($id): void + { + $tag = Tag::find($id); + if (!$tag){ + throw new Exception(message: "The tag not found"); + } + $tagForm = new CreateTagForm(); + $tagService = new TagService(); + $tagForm->load($_REQUEST); + if ($tagForm->validate()) { + $tag = $tagService->update($tagForm, $tag); + if ($tag) { + $this->redirect("/admin/tag/" . $tag->id); + } + } + $this->redirect("/admin/tag/update/" . $id); + } + + #[NoReturn] public function actionDelete($id): void + { + $post = Tag::find($id)->first(); + $post->delete(); + $this->redirect("/admin/tag/"); + } + +} \ No newline at end of file diff --git a/resources/tmp/modules/tag (2)/home/stas/PhpProjects/MicroFrameWork/resources/tmp/ad/tag/kernel/migrations/2024_10_08_093710_create_tag_table.php b/resources/tmp/modules/tag (2)/home/stas/PhpProjects/MicroFrameWork/resources/tmp/ad/tag/kernel/migrations/2024_10_08_093710_create_tag_table.php new file mode 100644 index 0000000..37c4be5 --- /dev/null +++ b/resources/tmp/modules/tag (2)/home/stas/PhpProjects/MicroFrameWork/resources/tmp/ad/tag/kernel/migrations/2024_10_08_093710_create_tag_table.php @@ -0,0 +1,31 @@ +schema->create('tag', function (Blueprint $table) { + $table->increments('id'); + $table->string('label', 255)->nullable(false); + $table->string('entity', 255)->nullable(false); + $table->string('slug', 255)->unique(); + $table->integer('status')->default(1); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + \kernel\App::$db->schema->dropIfExists('tag'); + } +}; diff --git a/resources/tmp/modules/tag (2)/home/stas/PhpProjects/MicroFrameWork/resources/tmp/ad/tag/kernel/models/Tag.php b/resources/tmp/modules/tag (2)/home/stas/PhpProjects/MicroFrameWork/resources/tmp/ad/tag/kernel/models/Tag.php new file mode 100644 index 0000000..49e1bb4 --- /dev/null +++ b/resources/tmp/modules/tag (2)/home/stas/PhpProjects/MicroFrameWork/resources/tmp/ad/tag/kernel/models/Tag.php @@ -0,0 +1,46 @@ + 'Заголовок', + 'entity' => 'Сущность', + 'slug' => 'Slug', + 'status' => 'Статус', + ]; + } + + /** + * @return string[] + */ + public static function getStatus(): array + { + return [ + self::DISABLE_STATUS => "Не активный", + self::ACTIVE_STATUS => "Активный", + ]; + } + +} \ No newline at end of file diff --git a/resources/tmp/modules/tag (2)/home/stas/PhpProjects/MicroFrameWork/resources/tmp/ad/tag/kernel/models/forms/CreateTagForm.php b/resources/tmp/modules/tag (2)/home/stas/PhpProjects/MicroFrameWork/resources/tmp/ad/tag/kernel/models/forms/CreateTagForm.php new file mode 100644 index 0000000..82fd893 --- /dev/null +++ b/resources/tmp/modules/tag (2)/home/stas/PhpProjects/MicroFrameWork/resources/tmp/ad/tag/kernel/models/forms/CreateTagForm.php @@ -0,0 +1,20 @@ + 'required|min-str-len:5|max-str-len:30', + 'entity' => 'required|min-str-len:1|max-str-len:50', + 'slug' => '', + 'status' => '' + ]; + } + +} \ No newline at end of file diff --git a/resources/tmp/modules/tag (2)/home/stas/PhpProjects/MicroFrameWork/resources/tmp/ad/tag/kernel/routs/tag.php b/resources/tmp/modules/tag (2)/home/stas/PhpProjects/MicroFrameWork/resources/tmp/ad/tag/kernel/routs/tag.php new file mode 100644 index 0000000..6ec41fe --- /dev/null +++ b/resources/tmp/modules/tag (2)/home/stas/PhpProjects/MicroFrameWork/resources/tmp/ad/tag/kernel/routs/tag.php @@ -0,0 +1,18 @@ +group(["prefix" => "admin"], function (CgRouteCollector $router) { + App::$collector->group(["prefix" => "tag"], function (CGRouteCollector $router){ + App::$collector->get('/', [\app\modules\tag\controllers\TagController::class, 'actionIndex']); + App::$collector->get('/page/{page_number}', [\app\modules\tag\controllers\TagController::class, 'actionIndex']); + App::$collector->get('/create', [\app\modules\tag\controllers\TagController::class, 'actionCreate']); + App::$collector->post("/", [\app\modules\tag\controllers\TagController::class, 'actionAdd']); + App::$collector->get('/{id}', [\app\modules\tag\controllers\TagController::class, 'actionView']); + App::$collector->any('/update/{id}', [\app\modules\tag\controllers\TagController::class, 'actionUpdate']); + App::$collector->any("/edit/{id}", [\app\modules\tag\controllers\TagController::class, 'actionEdit']); + App::$collector->get('/delete/{id}', [\app\modules\tag\controllers\TagController::class, 'actionDelete']); + }); +}); \ No newline at end of file diff --git a/resources/tmp/modules/tag (2)/home/stas/PhpProjects/MicroFrameWork/resources/tmp/ad/tag/kernel/services/TagService.php b/resources/tmp/modules/tag (2)/home/stas/PhpProjects/MicroFrameWork/resources/tmp/ad/tag/kernel/services/TagService.php new file mode 100644 index 0000000..9407f0a --- /dev/null +++ b/resources/tmp/modules/tag (2)/home/stas/PhpProjects/MicroFrameWork/resources/tmp/ad/tag/kernel/services/TagService.php @@ -0,0 +1,42 @@ +label = $form_model->getItem('label'); + $model->entity = $form_model->getItem('entity'); + $model->status = $form_model->getItem('status'); + $model->slug = Slug::createSlug($form_model->getItem('label'), Tag::class); + if ($model->save()){ + return $model; + } + + return false; + } + + public function update(FormModel $form_model, Tag $tag): false|Tag + { + if ($tag->label !== $form_model->getItem('label')) { + $tag->slug = Slug::createSlug($form_model->getItem('label'), Tag::class); + } + $tag->label = $form_model->getItem('label'); + $tag->entity = $form_model->getItem('entity'); + $tag->status = $form_model->getItem('status'); + + if ($tag->save()){ + return $tag; + } + + return false; + } + +} \ No newline at end of file diff --git a/resources/tmp/modules/tag (2)/home/stas/PhpProjects/MicroFrameWork/resources/tmp/ad/tag/kernel/views/form.php b/resources/tmp/modules/tag (2)/home/stas/PhpProjects/MicroFrameWork/resources/tmp/ad/tag/kernel/views/form.php new file mode 100644 index 0000000..3a37b96 --- /dev/null +++ b/resources/tmp/modules/tag (2)/home/stas/PhpProjects/MicroFrameWork/resources/tmp/ad/tag/kernel/views/form.php @@ -0,0 +1,58 @@ +beginForm(isset($model) ? "/admin/tag/edit/" . $model->id : "/admin/tag"); + +$form->field(class: \itguild\forms\inputs\TextInput::class, name: "label", params: [ + 'class' => "form-control", + 'placeholder' => 'Заголовок', + 'value' => $model->label ?? '' +]) + ->setLabel("Заголовок") + ->render(); + +$form->field(class: \itguild\forms\inputs\TextInput::class, name: "entity", params: [ + 'class' => "form-control", + 'placeholder' => 'Сущность', + 'value' => $model->entity ?? '' +]) + ->setLabel("Сущность") + ->render(); + +$form->field(\itguild\forms\inputs\Select::class, 'status', [ + 'class' => "form-control", + 'value' => $model->status ?? '' +]) + ->setLabel("Статус") + ->setOptions(Tag::getStatus()) + ->render(); +?> +
+
+ field(\itguild\forms\inputs\Button::class, name: "btn-submit", params: [ + 'class' => "btn btn-primary ", + 'value' => 'Отправить', + 'typeInput' => 'submit' + ]) + ->render(); + ?> +
+
+ field(\itguild\forms\inputs\Button::class, name: "btn-reset", params: [ + 'class' => "btn btn-warning", + 'value' => 'Сбросить', + 'typeInput' => 'reset' + ]) + ->render(); + ?> +
+
+endForm(); diff --git a/resources/tmp/modules/tag (2)/home/stas/PhpProjects/MicroFrameWork/resources/tmp/ad/tag/kernel/views/index.php b/resources/tmp/modules/tag (2)/home/stas/PhpProjects/MicroFrameWork/resources/tmp/ad/tag/kernel/views/index.php new file mode 100644 index 0000000..0d5503f --- /dev/null +++ b/resources/tmp/modules/tag (2)/home/stas/PhpProjects/MicroFrameWork/resources/tmp/ad/tag/kernel/views/index.php @@ -0,0 +1,39 @@ + $page_number, + 'perPage' => 8, + 'params' => ["class" => "table table-bordered", "border" => "2"], + 'baseUrl' => "/admin/tag", +])); + +$table->beforePrint(function () { + return PrimaryBtn::create("Создать", "/admin/tag/create")->fetch(); + //return (new PrimaryBtn("Создать", "/admin/user/create"))->fetch(); +}); + +$table->columns([ + "status" => [ + "value" => function ($cell) { + return Tag::getStatus()[$cell]; + }] +]); + +$table->addAction(\kernel\IGTabel\action_column\ViewActionColumn::class); +$table->addAction(\kernel\IGTabel\action_column\DeleteActionColumn::class); +$table->addAction(\kernel\IGTabel\action_column\EditActionColumn::class); +$table->create(); +$table->render(); \ No newline at end of file diff --git a/resources/tmp/modules/tag (2)/home/stas/PhpProjects/MicroFrameWork/resources/tmp/ad/tag/kernel/views/view.php b/resources/tmp/modules/tag (2)/home/stas/PhpProjects/MicroFrameWork/resources/tmp/ad/tag/kernel/views/view.php new file mode 100644 index 0000000..b09034f --- /dev/null +++ b/resources/tmp/modules/tag (2)/home/stas/PhpProjects/MicroFrameWork/resources/tmp/ad/tag/kernel/views/view.php @@ -0,0 +1,30 @@ + ["class" => "table table-bordered", "border" => "2"], + 'baseUrl' => "/admin/tag", +])); +$table->beforePrint(function () use ($tag) { + $btn = PrimaryBtn::create("Список", "/admin/tag")->fetch(); + $btn .= SuccessBtn::create("Редактировать", "/admin/tag/update/" . $tag->id)->fetch(); + $btn .= DangerBtn::create("Удалить", "/admin/tag/delete/" . $tag->id)->fetch(); + return $btn; +}); +$table->rows([ + 'status' => (function ($data) { + return \kernel\app_modules\tag\models\Tag::getStatus()[$data]; + }) +]); +$table->create(); +$table->render(); \ No newline at end of file diff --git a/resources/tmp/modules/tag.zip b/resources/tmp/modules/tag.zip index 940a046a6aecbf8be89b4ca3a2cbf777f1be8135..0bfc347d812f25cabc5715059c21cc3619b1685c 100644 GIT binary patch literal 8694 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 = new MenuService(); + $this->migrationService = new MigrationService(); + } + + /** + * @throws \Exception + */ + public function init(): void + { + $this->migrationService->runAtPath("{KERNEL_APP_MODULES}/tag/migrations"); + + $this->menuService->createItem([ + "label" => "Тэги", + "url" => "/admin/tag", + "slug" => "tag", + ]); + } + + public function deactivate(): void + { + $this->menuService->removeItemBySlug("tag"); + } +} \ No newline at end of file diff --git a/resources/tmp/modules/tag/app/controllers/TagController.php b/resources/tmp/modules/tag/app/controllers/TagController.php new file mode 100644 index 0000000..4598872 --- /dev/null +++ b/resources/tmp/modules/tag/app/controllers/TagController.php @@ -0,0 +1,8 @@ +cgView->viewPath = KERNEL_APP_MODULES_DIR . "/tag/views/"; + $this->tagService = new TagService(); + } + + public function actionCreate(): void + { + $this->cgView->render("form.php"); + } + + #[NoReturn] public function actionAdd(): void + { + $tagForm = new CreateTagForm(); + $tagForm->load($_REQUEST); + if ($tagForm->validate()){ + $tag = $this->tagService->create($tagForm); + if ($tag){ + $this->redirect("/admin/tag/" . $tag->id); + } + } + $this->redirect("/admin/tag/create"); + } + + public function actionIndex($page_number = 1): void + { + $this->cgView->render("index.php", ['page_number' => $page_number]); + } + + /** + * @throws Exception + */ + public function actionView($id): void + { + $tag = Tag::find($id); + + if (!$tag){ + throw new Exception(message: "The tag not found"); + } + $this->cgView->render("view.php", ['tag' => $tag]); + } + + /** + * @throws Exception + */ + public function actionUpdate($id): void + { + $model = Tag::find($id); + if (!$model){ + throw new Exception(message: "The tag not found"); + } + + $this->cgView->render("form.php", ['model' => $model]); + } + + /** + * @throws Exception + */ + public function actionEdit($id): void + { + $tag = Tag::find($id); + if (!$tag){ + throw new Exception(message: "The tag not found"); + } + $tagForm = new CreateTagForm(); + $tagService = new TagService(); + $tagForm->load($_REQUEST); + if ($tagForm->validate()) { + $tag = $tagService->update($tagForm, $tag); + if ($tag) { + $this->redirect("/admin/tag/" . $tag->id); + } + } + $this->redirect("/admin/tag/update/" . $id); + } + + #[NoReturn] public function actionDelete($id): void + { + $post = Tag::find($id)->first(); + $post->delete(); + $this->redirect("/admin/tag/"); + } + +} \ No newline at end of file diff --git a/resources/tmp/modules/tag/kernel/models/Tag.php b/resources/tmp/modules/tag/kernel/models/Tag.php index 55042a3..49e1bb4 100644 --- a/resources/tmp/modules/tag/kernel/models/Tag.php +++ b/resources/tmp/modules/tag/kernel/models/Tag.php @@ -1,9 +1,18 @@ 'required|min-str-len:5|max-str-len:30', + 'entity' => 'required|min-str-len:1|max-str-len:50', + 'slug' => '', + 'status' => '' + ]; + } + +} \ No newline at end of file diff --git a/resources/tmp/modules/tag/kernel/routs/tag.php b/resources/tmp/modules/tag/kernel/routs/tag.php new file mode 100644 index 0000000..6ec41fe --- /dev/null +++ b/resources/tmp/modules/tag/kernel/routs/tag.php @@ -0,0 +1,18 @@ +group(["prefix" => "admin"], function (CgRouteCollector $router) { + App::$collector->group(["prefix" => "tag"], function (CGRouteCollector $router){ + App::$collector->get('/', [\app\modules\tag\controllers\TagController::class, 'actionIndex']); + App::$collector->get('/page/{page_number}', [\app\modules\tag\controllers\TagController::class, 'actionIndex']); + App::$collector->get('/create', [\app\modules\tag\controllers\TagController::class, 'actionCreate']); + App::$collector->post("/", [\app\modules\tag\controllers\TagController::class, 'actionAdd']); + App::$collector->get('/{id}', [\app\modules\tag\controllers\TagController::class, 'actionView']); + App::$collector->any('/update/{id}', [\app\modules\tag\controllers\TagController::class, 'actionUpdate']); + App::$collector->any("/edit/{id}", [\app\modules\tag\controllers\TagController::class, 'actionEdit']); + App::$collector->get('/delete/{id}', [\app\modules\tag\controllers\TagController::class, 'actionDelete']); + }); +}); \ No newline at end of file diff --git a/resources/tmp/modules/tag/kernel/services/TagService.php b/resources/tmp/modules/tag/kernel/services/TagService.php new file mode 100644 index 0000000..9407f0a --- /dev/null +++ b/resources/tmp/modules/tag/kernel/services/TagService.php @@ -0,0 +1,42 @@ +label = $form_model->getItem('label'); + $model->entity = $form_model->getItem('entity'); + $model->status = $form_model->getItem('status'); + $model->slug = Slug::createSlug($form_model->getItem('label'), Tag::class); + if ($model->save()){ + return $model; + } + + return false; + } + + public function update(FormModel $form_model, Tag $tag): false|Tag + { + if ($tag->label !== $form_model->getItem('label')) { + $tag->slug = Slug::createSlug($form_model->getItem('label'), Tag::class); + } + $tag->label = $form_model->getItem('label'); + $tag->entity = $form_model->getItem('entity'); + $tag->status = $form_model->getItem('status'); + + if ($tag->save()){ + return $tag; + } + + return false; + } + +} \ No newline at end of file diff --git a/resources/tmp/modules/tag/kernel/views/form.php b/resources/tmp/modules/tag/kernel/views/form.php new file mode 100644 index 0000000..3a37b96 --- /dev/null +++ b/resources/tmp/modules/tag/kernel/views/form.php @@ -0,0 +1,58 @@ +beginForm(isset($model) ? "/admin/tag/edit/" . $model->id : "/admin/tag"); + +$form->field(class: \itguild\forms\inputs\TextInput::class, name: "label", params: [ + 'class' => "form-control", + 'placeholder' => 'Заголовок', + 'value' => $model->label ?? '' +]) + ->setLabel("Заголовок") + ->render(); + +$form->field(class: \itguild\forms\inputs\TextInput::class, name: "entity", params: [ + 'class' => "form-control", + 'placeholder' => 'Сущность', + 'value' => $model->entity ?? '' +]) + ->setLabel("Сущность") + ->render(); + +$form->field(\itguild\forms\inputs\Select::class, 'status', [ + 'class' => "form-control", + 'value' => $model->status ?? '' +]) + ->setLabel("Статус") + ->setOptions(Tag::getStatus()) + ->render(); +?> +
+
+ field(\itguild\forms\inputs\Button::class, name: "btn-submit", params: [ + 'class' => "btn btn-primary ", + 'value' => 'Отправить', + 'typeInput' => 'submit' + ]) + ->render(); + ?> +
+
+ field(\itguild\forms\inputs\Button::class, name: "btn-reset", params: [ + 'class' => "btn btn-warning", + 'value' => 'Сбросить', + 'typeInput' => 'reset' + ]) + ->render(); + ?> +
+
+endForm(); diff --git a/resources/tmp/modules/tag/kernel/views/index.php b/resources/tmp/modules/tag/kernel/views/index.php new file mode 100644 index 0000000..0d5503f --- /dev/null +++ b/resources/tmp/modules/tag/kernel/views/index.php @@ -0,0 +1,39 @@ + $page_number, + 'perPage' => 8, + 'params' => ["class" => "table table-bordered", "border" => "2"], + 'baseUrl' => "/admin/tag", +])); + +$table->beforePrint(function () { + return PrimaryBtn::create("Создать", "/admin/tag/create")->fetch(); + //return (new PrimaryBtn("Создать", "/admin/user/create"))->fetch(); +}); + +$table->columns([ + "status" => [ + "value" => function ($cell) { + return Tag::getStatus()[$cell]; + }] +]); + +$table->addAction(\kernel\IGTabel\action_column\ViewActionColumn::class); +$table->addAction(\kernel\IGTabel\action_column\DeleteActionColumn::class); +$table->addAction(\kernel\IGTabel\action_column\EditActionColumn::class); +$table->create(); +$table->render(); \ No newline at end of file diff --git a/resources/tmp/modules/tag/kernel/views/view.php b/resources/tmp/modules/tag/kernel/views/view.php new file mode 100644 index 0000000..b09034f --- /dev/null +++ b/resources/tmp/modules/tag/kernel/views/view.php @@ -0,0 +1,30 @@ + ["class" => "table table-bordered", "border" => "2"], + 'baseUrl' => "/admin/tag", +])); +$table->beforePrint(function () use ($tag) { + $btn = PrimaryBtn::create("Список", "/admin/tag")->fetch(); + $btn .= SuccessBtn::create("Редактировать", "/admin/tag/update/" . $tag->id)->fetch(); + $btn .= DangerBtn::create("Удалить", "/admin/tag/delete/" . $tag->id)->fetch(); + return $btn; +}); +$table->rows([ + 'status' => (function ($data) { + return \kernel\app_modules\tag\models\Tag::getStatus()[$data]; + }) +]); +$table->create(); +$table->render(); \ No newline at end of file