brta archive module
This commit is contained in:
		
							
								
								
									
										38
									
								
								resources/tmp/ad/tag/app/TagModule.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								resources/tmp/ad/tag/app/TagModule.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,38 @@ | ||||
| <?php | ||||
|  | ||||
| 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(); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * @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"); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										8
									
								
								resources/tmp/ad/tag/app/controllers/TagController.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								resources/tmp/ad/tag/app/controllers/TagController.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | ||||
| <?php | ||||
|  | ||||
| namespace app\modules\tag\controllers; | ||||
|  | ||||
| class TagController extends \kernel\app_modules\tag\controllers\TagController | ||||
| { | ||||
|  | ||||
| } | ||||
							
								
								
									
										11
									
								
								resources/tmp/ad/tag/app/manifest.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								resources/tmp/ad/tag/app/manifest.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | ||||
| { | ||||
|   "name": "Tag", | ||||
|   "version": "0.1", | ||||
|   "author": "ITGuild", | ||||
|   "slug": "tag", | ||||
|   "description": "Tags module", | ||||
|   "module_path": "{APP}/modules/{slug}", | ||||
|   "module_class": "app\\modules\\tag\\TagModule", | ||||
|   "module_class_file": "{APP}/modules/tag/TagModule.php", | ||||
|   "routs": "routs/tag.php" | ||||
| } | ||||
							
								
								
									
										2
									
								
								resources/tmp/ad/tag/app/routs/tag.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								resources/tmp/ad/tag/app/routs/tag.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,2 @@ | ||||
| <?php | ||||
| include KERNEL_APP_MODULES_DIR . "/tag/routs/tag.php"; | ||||
							
								
								
									
										101
									
								
								resources/tmp/ad/tag/kernel/controllers/TagController.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										101
									
								
								resources/tmp/ad/tag/kernel/controllers/TagController.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,101 @@ | ||||
| <?php | ||||
|  | ||||
| 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->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/"); | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,31 @@ | ||||
| <?php | ||||
|  | ||||
| use Illuminate\Database\Migrations\Migration; | ||||
| use Illuminate\Database\Schema\Blueprint; | ||||
| use Illuminate\Support\Facades\Schema; | ||||
|  | ||||
| return new class extends Migration | ||||
| { | ||||
|     /** | ||||
|      * Run the migrations. | ||||
|      */ | ||||
|     public function up(): void | ||||
|     { | ||||
|         \kernel\App::$db->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'); | ||||
|     } | ||||
| }; | ||||
							
								
								
									
										46
									
								
								resources/tmp/ad/tag/kernel/models/Tag.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								resources/tmp/ad/tag/kernel/models/Tag.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,46 @@ | ||||
| <?php | ||||
|  | ||||
| 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; | ||||
|     const ACTIVE_STATUS = 1; | ||||
|  | ||||
|     protected $table = 'tag'; | ||||
|  | ||||
|     protected $fillable = ['label', 'entity', 'slug', 'status']; | ||||
|  | ||||
|     public static function labels(): array | ||||
|     { | ||||
|         return [ | ||||
|             'label' => 'Заголовок', | ||||
|             'entity' => 'Сущность', | ||||
|             'slug' => 'Slug', | ||||
|             'status' => 'Статус', | ||||
|         ]; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * @return string[] | ||||
|      */ | ||||
|     public static function getStatus(): array | ||||
|     { | ||||
|         return [ | ||||
|             self::DISABLE_STATUS => "Не активный", | ||||
|             self::ACTIVE_STATUS => "Активный", | ||||
|         ]; | ||||
|     } | ||||
|  | ||||
| } | ||||
							
								
								
									
										20
									
								
								resources/tmp/ad/tag/kernel/models/forms/CreateTagForm.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								resources/tmp/ad/tag/kernel/models/forms/CreateTagForm.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,20 @@ | ||||
| <?php | ||||
|  | ||||
| namespace kernel\app_modules\tag\models\forms; | ||||
|  | ||||
| use kernel\FormModel; | ||||
|  | ||||
| class CreateTagForm extends FormModel | ||||
| { | ||||
|  | ||||
|     public function rules(): array | ||||
|     { | ||||
|         return [ | ||||
|             'label' => 'required|min-str-len:5|max-str-len:30', | ||||
|             'entity' => 'required|min-str-len:1|max-str-len:50', | ||||
|             'slug' => '', | ||||
|             'status' => '' | ||||
|         ]; | ||||
|     } | ||||
|  | ||||
| } | ||||
							
								
								
									
										18
									
								
								resources/tmp/ad/tag/kernel/routs/tag.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								resources/tmp/ad/tag/kernel/routs/tag.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,18 @@ | ||||
| <?php | ||||
|  | ||||
| use kernel\App; | ||||
| use kernel\CgRouteCollector; | ||||
| 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}', [\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']); | ||||
|     }); | ||||
| }); | ||||
							
								
								
									
										42
									
								
								resources/tmp/ad/tag/kernel/services/TagService.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								resources/tmp/ad/tag/kernel/services/TagService.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,42 @@ | ||||
| <?php | ||||
|  | ||||
| namespace kernel\app_modules\tag\services; | ||||
|  | ||||
| use kernel\app_modules\tag\models\Tag; | ||||
| use kernel\FormModel; | ||||
| use kernel\helpers\Slug; | ||||
|  | ||||
| class TagService | ||||
| { | ||||
|  | ||||
|     public function create(FormModel $form_model): false|Tag | ||||
|     { | ||||
|         $model = new Tag(); | ||||
|         $model->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; | ||||
|     } | ||||
|  | ||||
| } | ||||
							
								
								
									
										58
									
								
								resources/tmp/ad/tag/kernel/views/form.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								resources/tmp/ad/tag/kernel/views/form.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,58 @@ | ||||
| <?php | ||||
| /** | ||||
|  * @var Tag $model | ||||
|  */ | ||||
|  | ||||
| use kernel\app_modules\tag\models\Tag; | ||||
|  | ||||
| $form = new \itguild\forms\ActiveForm(); | ||||
| $form->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(); | ||||
| ?> | ||||
|     <div class="row"> | ||||
|         <div class="col-sm-2"> | ||||
|         <?php | ||||
|         $form->field(\itguild\forms\inputs\Button::class, name: "btn-submit", params: [ | ||||
|             'class' => "btn btn-primary ", | ||||
|             'value' => 'Отправить', | ||||
|             'typeInput' => 'submit' | ||||
|         ]) | ||||
|             ->render(); | ||||
|         ?> | ||||
|         </div> | ||||
|         <div class="col-sm-2"> | ||||
|         <?php | ||||
|         $form->field(\itguild\forms\inputs\Button::class, name: "btn-reset", params: [ | ||||
|             'class' => "btn btn-warning", | ||||
|             'value' => 'Сбросить', | ||||
|             'typeInput' => 'reset' | ||||
|         ]) | ||||
|             ->render(); | ||||
|         ?> | ||||
|         </div> | ||||
|     </div> | ||||
| <?php | ||||
| $form->endForm(); | ||||
							
								
								
									
										39
									
								
								resources/tmp/ad/tag/kernel/views/index.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								resources/tmp/ad/tag/kernel/views/index.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,39 @@ | ||||
| <?php | ||||
| /** | ||||
|  * @var \Illuminate\Database\Eloquent\Collection $menuItem | ||||
|  * @var int $page_number | ||||
|  */ | ||||
|  | ||||
| use Itguild\EloquentTable\EloquentDataProvider; | ||||
| use Itguild\EloquentTable\ListEloquentTable; | ||||
| use kernel\app_modules\tag\models\Tag; | ||||
| use kernel\IGTabel\btn\PrimaryBtn; | ||||
| use kernel\models\Menu; | ||||
| use kernel\modules\menu\table\columns\MenuDeleteActionColumn; | ||||
| use kernel\modules\menu\table\columns\MenuEditActionColumn; | ||||
| use kernel\modules\menu\table\columns\MenuViewActionColumn; | ||||
|  | ||||
| $table = new ListEloquentTable(new EloquentDataProvider(Tag::class, [ | ||||
|     'currentPage' => $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(); | ||||
							
								
								
									
										30
									
								
								resources/tmp/ad/tag/kernel/views/view.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								resources/tmp/ad/tag/kernel/views/view.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,30 @@ | ||||
| <?php | ||||
|  | ||||
| /** | ||||
|  * @var \Illuminate\Database\Eloquent\Collection $tag | ||||
|  */ | ||||
|  | ||||
| use kernel\modules\user\models\User; | ||||
| use Itguild\EloquentTable\ViewEloquentTable; | ||||
| use Itguild\EloquentTable\ViewJsonTableEloquentModel; | ||||
| use kernel\IGTabel\btn\DangerBtn; | ||||
| use kernel\IGTabel\btn\PrimaryBtn; | ||||
| use kernel\IGTabel\btn\SuccessBtn; | ||||
|  | ||||
| $table = new ViewEloquentTable(new ViewJsonTableEloquentModel($tag, [ | ||||
|     'params' => ["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(); | ||||
		Reference in New Issue
	
	Block a user