diff --git a/app/modules/tag/TagModule.php b/app/modules/tag/TagModule.php deleted file mode 100644 index ff826c6..0000000 --- a/app/modules/tag/TagModule.php +++ /dev/null @@ -1,8 +0,0 @@ -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", - ]); - - $this->menuService->createItem([ - "label" => "Тэги", - "url" => "/admin/settings/tag", - "slug" => "tag_settings", - "parent_slug" => "settings" - ]); - - OptionService::createFromParams("entity_tag_list", "{}", "Список тегов"); - } - - /** - * @throws \Exception - */ - public function deactivate(): void - { - $this->menuService->removeItemBySlug("tag"); - $this->menuService->removeItemBySlug("tag_settings"); - - OptionService::removeOptionByKey("entity_tag_list"); - - $this->migrationService->rollbackAtPath("{KERNEL_APP_MODULES}/tag/migrations"); - } - - public function formInputs(string $entity, Model $model = null): void - { - if (isset($model->id)) { - $value = TagEntityService::getTagsByEntity($entity, $model->id); - } - - $input = SelectBuilder::build("tag[]", [ - 'class' => 'form-control', - 'placeholder' => 'Теги', - 'value' => $value ?? '', - 'multiple' => "multiple", - 'options' => Tag::getTagLabelByEntity($entity) - ]); - $input->setLabel("Теги"); - $input->create()->render(); - } - - public function saveInputs(string $entity, Model $model, Request $request): void - { - TagEntity::where("entity", $entity)->where("entity_id", $model->id)->delete(); - - $tags = $request->post("tag"); - if (is_array($tags)) { - foreach ($tags as $tag) { - $tagEntity = new TagEntity(); - $tagEntity->entity = $entity; - $tagEntity->entity_id = $model->id; - $tagEntity->tag_id = $tag; - $tagEntity->save(); - } - } - } - - - public function getItems(string $entity, Model $model): array|string - { - $tags = TagEntity::where("entity", $entity)->where("entity_id", $model->id)->with("tag")->get(); - $tagsStr = ""; - foreach ($tags as $tag) { - $tagsStr .= $tag->tag->label . ", "; - } - - return substr($tagsStr, 0, -2); - } - - public function getItem(string $entity, string $entity_id): string - { - $tags = TagEntity::where("entity", $entity)->where("entity_id", $entity_id)->get(); - $tagsStr = ""; - foreach ($tags as $tag) { - $tagsStr .= $tag->tag->label . ", "; - } - - return substr($tagsStr, 0, -2); - } - - public function deleteItems(string $entity, Model $model): void - { - TagEntity::where("entity", $entity)->where("entity_id", $model->id)->delete(); - } -} \ No newline at end of file diff --git a/kernel/app_modules/tag/controllers/TagController.php b/kernel/app_modules/tag/controllers/TagController.php deleted file mode 100755 index e20b907..0000000 --- a/kernel/app_modules/tag/controllers/TagController.php +++ /dev/null @@ -1,120 +0,0 @@ -cgView->viewPath = KERNEL_APP_MODULES_DIR . "/tag/views/tag/"; - $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/view/" . $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/view/" . $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/"); - } - - public function actionSettings(): void - { - $this->cgView->render('settingsForm.php'); - } - - #[NoReturn] public function actionSaveSettings(): void - { - $request = new Request(); - $entities = $request->post('entity'); - EntityRelation::configurationEntitiesByProperty($entities, 'tag'); - - Flash::setMessage("success", "Настройка прошла успешно"); - $this->redirect("/admin/settings/tag", 302); - } - -} \ No newline at end of file diff --git a/kernel/app_modules/tag/controllers/TagEntityController.php b/kernel/app_modules/tag/controllers/TagEntityController.php deleted file mode 100755 index 8df18d0..0000000 --- a/kernel/app_modules/tag/controllers/TagEntityController.php +++ /dev/null @@ -1,49 +0,0 @@ -cgView->viewPath = KERNEL_APP_MODULES_DIR . "/tag/views/tag_entity/"; - } - - /** - * @param $page_number - * @return void - */ - public function actionIndex($page_number = 1): void - { - $this->cgView->render("index.php", ['page_number' => $page_number]); - } - - /** - * @throws Exception - */ - public function actionView($id): void - { - $tagEntity = TagEntity::find($id); - - if (!$tagEntity){ - throw new Exception(message: "The tag entity not found"); - } - $this->cgView->render("view.php", ['tagEntity' => $tagEntity]); - } - -} \ No newline at end of file diff --git a/kernel/app_modules/tag/migrations/2024_10_08_093710_create_tag_table.php b/kernel/app_modules/tag/migrations/2024_10_08_093710_create_tag_table.php deleted file mode 100755 index 810dece..0000000 --- a/kernel/app_modules/tag/migrations/2024_10_08_093710_create_tag_table.php +++ /dev/null @@ -1,33 +0,0 @@ -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/kernel/app_modules/tag/migrations/2024_11_25_122506_create_tag_entity_table.php b/kernel/app_modules/tag/migrations/2024_11_25_122506_create_tag_entity_table.php deleted file mode 100644 index 11c4c2a..0000000 --- a/kernel/app_modules/tag/migrations/2024_11_25_122506_create_tag_entity_table.php +++ /dev/null @@ -1,32 +0,0 @@ -schema->create('tag_entity', function (Blueprint $table) { - $table->increments('id'); - $table->integer('tag_id')->nullable(false); - $table->string('entity', 255)->nullable(false); - $table->integer('entity_id')->nullable(false); - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - */ - public function down(): void - { - \kernel\App::$db->schema->dropIfExists('tag_entity'); - } -}; diff --git a/kernel/app_modules/tag/models/Tag.php b/kernel/app_modules/tag/models/Tag.php deleted file mode 100755 index df4c8ee..0000000 --- a/kernel/app_modules/tag/models/Tag.php +++ /dev/null @@ -1,61 +0,0 @@ - 'Заголовок', - 'entity' => 'Сущность', - 'slug' => 'Slug', - 'status' => 'Статус', - ]; - } - - /** - * @return string[] - */ - public static function getStatus(): array - { - return [ - self::DISABLE_STATUS => "Не активный", - self::ACTIVE_STATUS => "Активный", - ]; - } - - public static function getTagListByEntity(string $entity): array - { - return self::where("entity", $entity)->get()->toArray(); - } - - public static function getTagLabelByEntity(string $entity): array - { - $result = []; - $tags = self::getTagListByEntity($entity); - foreach ($tags as $tag){ - $result[$tag['id']] = $tag['label']; - } - - return $result; - } - -} \ No newline at end of file diff --git a/kernel/app_modules/tag/models/TagEntity.php b/kernel/app_modules/tag/models/TagEntity.php deleted file mode 100755 index e1a8956..0000000 --- a/kernel/app_modules/tag/models/TagEntity.php +++ /dev/null @@ -1,32 +0,0 @@ - 'тег', - 'entity' => 'Сущность', - 'entity_id' => 'Идентификатор сущности', - ]; - } - - public function tag(): \Illuminate\Database\Eloquent\Relations\BelongsTo - { - return $this->belongsTo(Tag::class); - } -} \ No newline at end of file diff --git a/kernel/app_modules/tag/models/forms/CreateTagEntityForm.php b/kernel/app_modules/tag/models/forms/CreateTagEntityForm.php deleted file mode 100755 index 52a029f..0000000 --- a/kernel/app_modules/tag/models/forms/CreateTagEntityForm.php +++ /dev/null @@ -1,19 +0,0 @@ - 'required', - 'entity' => '', - 'entity_id' => '', - ]; - } - -} \ No newline at end of file diff --git a/kernel/app_modules/tag/models/forms/CreateTagForm.php b/kernel/app_modules/tag/models/forms/CreateTagForm.php deleted file mode 100755 index 8f68633..0000000 --- a/kernel/app_modules/tag/models/forms/CreateTagForm.php +++ /dev/null @@ -1,20 +0,0 @@ - 'required|min-str-len:5|max-str-len:30', - 'entity' => 'required', - '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 deleted file mode 100755 index adb1c9e..0000000 --- a/kernel/app_modules/tag/routs/tag.php +++ /dev/null @@ -1,34 +0,0 @@ -group(["prefix" => "admin"], function (CgRouteCollector $router) { - App::$collector->group(["before" => "auth"], function (RouteCollector $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('/view/{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']); - }); - App::$collector->group(["prefix" => "tag_entity"], function (CGRouteCollector $router) { - App::$collector->get('/', [\kernel\app_modules\tag\controllers\TagEntityController::class, 'actionIndex']); - App::$collector->get('/page/{page_number}', [\kernel\app_modules\tag\controllers\TagEntityController::class, 'actionIndex']); - App::$collector->get('/create', [\kernel\app_modules\tag\controllers\TagEntityController::class, 'actionCreate']); - App::$collector->post("/", [\kernel\app_modules\tag\controllers\TagEntityController::class, 'actionAdd']); - App::$collector->get('view/{id}', [\kernel\app_modules\tag\controllers\TagEntityController::class, 'actionView']); - App::$collector->any('/update/{id}', [\kernel\app_modules\tag\controllers\TagEntityController::class, 'actionUpdate']); - App::$collector->any("/edit/{id}", [\kernel\app_modules\tag\controllers\TagEntityController::class, 'actionEdit']); - App::$collector->get('/delete/{id}', [\kernel\app_modules\tag\controllers\TagEntityController::class, 'actionDelete']); - }); - App::$collector->group(["prefix" => "settings"], function (CGRouteCollector $router) { - App::$collector->get('/tag', [\app\modules\tag\controllers\TagController::class, 'actionSettings']); - App::$collector->post('/tag/update', [\app\modules\tag\controllers\TagController::class, 'actionSaveSettings']); - }); - }); -}); \ No newline at end of file diff --git a/kernel/app_modules/tag/service/TagEntityService.php b/kernel/app_modules/tag/service/TagEntityService.php deleted file mode 100755 index 00cacfa..0000000 --- a/kernel/app_modules/tag/service/TagEntityService.php +++ /dev/null @@ -1,51 +0,0 @@ -tag_id = $form_model->getItem('tag_id'); - $model->entity = $form_model->getItem('entity'); - $model->entity_id = $form_model->getItem('entity_id'); - if ($model->save()){ - return $model; - } - - return false; - } - - public function update(FormModel $form_model, TagEntity $tag): false|TagEntity - { - $tag->tag_id = $form_model->getItem('tag_id'); - $tag->entity = $form_model->getItem('entity'); - $tag->entity_id = $form_model->getItem('entity_id'); - - if ($tag->save()){ - return $tag; - } - - return false; - } - - public static function getTagsByEntity(string $entity, int $entity_id): array - { - $tags= TagEntity::where("entity_id", $entity_id)->where("entity", $entity)->get(); - $value = []; - foreach ($tags as $tag) { - $value[$tag->id] = $tag->tag->label; - } - - return $value; - } - -} \ No newline at end of file diff --git a/kernel/app_modules/tag/service/TagService.php b/kernel/app_modules/tag/service/TagService.php deleted file mode 100755 index 1a69ba6..0000000 --- a/kernel/app_modules/tag/service/TagService.php +++ /dev/null @@ -1,43 +0,0 @@ -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/tag/form.php b/kernel/app_modules/tag/views/tag/form.php deleted file mode 100755 index 2685b40..0000000 --- a/kernel/app_modules/tag/views/tag/form.php +++ /dev/null @@ -1,58 +0,0 @@ -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\Select::class, name: "entity", params: [ - 'class' => "form-control", - 'value' => $model->entity ?? '' -]) - ->setLabel("Сущность") - ->setOptions(\kernel\EntityRelation::getEntityList()) - ->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/tag/index.php b/kernel/app_modules/tag/views/tag/index.php deleted file mode 100755 index bac1430..0000000 --- a/kernel/app_modules/tag/views/tag/index.php +++ /dev/null @@ -1,40 +0,0 @@ - $page_number, - 'perPage' => 8, - 'params' => ["class" => "table table-bordered", "border" => "2"], - 'baseUrl' => "/admin/tag", -])); - -$table->beforePrint(function () { - return PrimaryBtn::create("Создать", "/admin/tag/create")->fetch(); -}); - -$table->columns([ - "status" => [ - "value" => function ($cell) { - return Tag::getStatus()[$cell]; - }] -]); - -\kernel\widgets\TagTabsWidget::create()->run(); - - -$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/kernel/app_modules/tag/views/tag/settingsForm.php b/kernel/app_modules/tag/views/tag/settingsForm.php deleted file mode 100644 index 54f1280..0000000 --- a/kernel/app_modules/tag/views/tag/settingsForm.php +++ /dev/null @@ -1,47 +0,0 @@ -beginForm("/admin/settings/tag/update"); - -//\kernel\helpers\Debug::dd($value); -?> - -
-
Выберите сущности, к которым хотите прикрепить теги
-
- -field(\itguild\forms\inputs\Select::class, "entity[]", [ - 'class' => "form-control", - 'value' => \kernel\EntityRelation::getEntityByProperty('tag') ?? '', - 'multiple' => "multiple", - -]) - ->setLabel("Сущности") - ->setOptions(\kernel\EntityRelation::getEntityList()) - ->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/tag/view.php b/kernel/app_modules/tag/views/tag/view.php deleted file mode 100755 index b09034f..0000000 --- a/kernel/app_modules/tag/views/tag/view.php +++ /dev/null @@ -1,30 +0,0 @@ - ["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/app_modules/tag/views/tag_entity/index.php b/kernel/app_modules/tag/views/tag_entity/index.php deleted file mode 100755 index 663ee97..0000000 --- a/kernel/app_modules/tag/views/tag_entity/index.php +++ /dev/null @@ -1,34 +0,0 @@ - $page_number, - 'perPage' => 8, - 'params' => ["class" => "table table-bordered", "border" => "2"], - 'baseUrl' => "/admin/tag_entity", -])); - -$table->beforePrint(function () { - return PrimaryBtn::create("Создать", "/admin/tag_entity/create")->fetch(); -}); -$table->columns([ - "tag_id" => [ - "value" => function ($data) { - return Tag::find($data)->label; - }] -]); - -$table->addAction(\kernel\IGTabel\action_column\ViewActionColumn::class); -$table->addAction(\kernel\IGTabel\action_column\DeleteActionColumn::class); -$table->addAction(\kernel\IGTabel\action_column\EditActionColumn::class); - -\kernel\widgets\TagTabsWidget::create()->run(); -$table->create(); -$table->render(); \ No newline at end of file diff --git a/kernel/app_modules/tag/views/tag_entity/view.php b/kernel/app_modules/tag/views/tag_entity/view.php deleted file mode 100755 index 1e44ccf..0000000 --- a/kernel/app_modules/tag/views/tag_entity/view.php +++ /dev/null @@ -1,30 +0,0 @@ - ["class" => "table table-bordered", "border" => "2"], - 'baseUrl' => "/admin/tag", -])); -$table->beforePrint(function () use ($tagEntity) { - $btn = PrimaryBtn::create("Список", "/admin/tag_entity")->fetch(); - $btn .= SuccessBtn::create("Редактировать", "/admin/tag_entity/update/" . $tagEntity->id)->fetch(); - $btn .= DangerBtn::create("Удалить", "/admin/tag_entity/delete/" . $tagEntity->id)->fetch(); - return $btn; -}); -$table->rows([ - 'tag_id' => (function ($data) { - return \kernel\app_modules\tag\models\Tag::find($data)->label; - }) -]); -$table->create(); -$table->render(); \ No newline at end of file diff --git a/kernel/services/ModuleService.php b/kernel/services/ModuleService.php index 2a0eb69..ebace82 100644 --- a/kernel/services/ModuleService.php +++ b/kernel/services/ModuleService.php @@ -3,6 +3,7 @@ namespace kernel\services; use DirectoryIterator; +use GuzzleHttp\Exception\GuzzleException; use kernel\EntityRelation; use kernel\Flash; use kernel\helpers\Debug; @@ -19,6 +20,12 @@ class ModuleService protected null|bool $serverAvailable = null; + public ModuleShopService $moduleShopService; + public function __construct() + { + $this->moduleShopService = new ModuleShopService(); + } + /** * @param string $module * @return false|array|string @@ -458,12 +465,13 @@ class ModuleService return false; } + /** + * @throws GuzzleException + */ public function isLastVersion(string $slug): bool { if ($this->isServerAvailable()) { - $modules_info = RESTClient::request($_ENV['MODULE_SHOP_URL'] . '/api/module_shop/gb_slug'); - - $modules_info = json_decode($modules_info->getBody()->getContents(), true); + $modules_info = $this->moduleShopService->getGroupedBySlugModules(); $mod_info = $this->getModuleInfoBySlug($slug); @@ -491,16 +499,18 @@ class ModuleService return false; } + /** + * @throws GuzzleException + */ public function isShopModule(string $slug): bool { if ($this->isServerAvailable()) { - $modules_info = RESTClient::request($_ENV['MODULE_SHOP_URL'] . '/api/module_shop/gb_slug'); + $modules_info = $this->moduleShopService->getGroupedBySlugModules(); if (!$this->issetModuleShopToken()) { return false; } - $modules_info = json_decode($modules_info->getBody()->getContents(), true); if (isset($modules_info)) { $mod_info = $this->getModuleInfoBySlug($slug); foreach ($modules_info as $mod) { diff --git a/kernel/services/ModuleShopService.php b/kernel/services/ModuleShopService.php index 72562ad..fcdffe3 100644 --- a/kernel/services/ModuleShopService.php +++ b/kernel/services/ModuleShopService.php @@ -3,7 +3,11 @@ namespace kernel\services; use GuzzleHttp\Exception\GuzzleException; +use kernel\Flash; +use kernel\helpers\Debug; +use kernel\helpers\Files; use kernel\helpers\RESTClient; +use kernel\Request; class ModuleShopService { @@ -17,20 +21,71 @@ class ModuleShopService } /** + * @param string $email + * @return mixed * @throws GuzzleException */ - public function email_auth(string $email) + public function email_auth(string $email): mixed { $request = RESTClient::post($this->url . "/api/secure/email_auth", ['email' => $email], false); return json_decode($request->getBody()->getContents(), true); } - public function code_check(string $code) + /** + * @param string $code + * @return mixed + * @throws GuzzleException + */ + public function code_check(string $code): mixed { $request = RESTClient::post($this->url . "/api/secure/code_check", ['code' => $code], false); return json_decode($request->getBody()->getContents(), true); } + /** + * @return mixed + * @throws GuzzleException + */ + public function getGroupedBySlugModules(): mixed + { + $modulesInfo = RESTClient::request($_ENV['MODULE_SHOP_URL'] . '/api/module_shop/gb_slug'); + return json_decode($modulesInfo->getBody()->getContents(), true); + } + + /** + * @param string $slug + * @return void + * @throws GuzzleException + */ + public function installModule(string $slug): void + { + $moduleInfo = $this->getModuleInfoBySlug($slug); + + $moduleInfo = RESTClient::request($_ENV['MODULE_SHOP_URL'] . '/api/module_shop/install/' . $moduleInfo['id']); + $moduleInfo = json_decode($moduleInfo->getBody()->getContents(), true); + + Files::uploadByUrl($_ENV['MODULE_SHOP_URL'] . $moduleInfo['path_to_archive'], RESOURCES_DIR . "/tmp/modules"); + + (new ModuleService())->installModule('/resources/tmp/modules/' . basename($moduleInfo['path_to_archive'])); + } + + /** + * @param string $slug + * @return false|mixed + * @throws GuzzleException + */ + public function getModuleInfoBySlug(string $slug): mixed + { + $modulesInfo = $this->getGroupedBySlugModules(); + foreach ($modulesInfo as $module) { + if ($module['slug'] === $slug) { + return $module; + } + } + + return false; + } + } \ No newline at end of file diff --git a/kernel/services/ThemeService.php b/kernel/services/ThemeService.php index 4185852..1d2636c 100644 --- a/kernel/services/ThemeService.php +++ b/kernel/services/ThemeService.php @@ -3,6 +3,7 @@ namespace kernel\services; use DirectoryIterator; +use kernel\Flash; use kernel\helpers\Debug; use kernel\helpers\Files; use kernel\helpers\Manifest; @@ -19,12 +20,15 @@ class ThemeService protected ModuleService $moduleService; + protected ModuleShopService $moduleShopService; + public function __construct() { $this->option = new Option(); $this->findActiveTheme(); $this->moduleService = new ModuleService(); + $this->moduleShopService = new ModuleShopService(); } /** @@ -55,7 +59,12 @@ class ThemeService return $this->active_theme; } - public function setActiveTheme(string $theme): void + /** + * @param string $theme + * @return bool + * @throws \GuzzleHttp\Exception\GuzzleException + */ + public function setActiveTheme(string $theme): bool { $activeTheme = $this->option::where("key", "active_theme")->first(); @@ -63,21 +72,25 @@ class ThemeService if (isset($themeInfo['dependence'])) { $dependence_array = explode(',', $themeInfo['dependence']); foreach ($dependence_array as $depend) { - $this->moduleService->runInitScript($depend); - } - } - - $currentThemeInfo = $this->getActiveThemeInfo(); - - if (isset($currentThemeInfo['dependence'])) { - $dependence_array = explode(',', $currentThemeInfo['dependence']); - foreach ($dependence_array as $depend) { - $this->moduleService->runDeactivateScript($depend); + if (!$this->moduleService->isInstall($depend)) { + if ($this->moduleService->isShopModule($depend)) { + $this->moduleShopService->installModule($depend); + } else { + Flash::setMessage("error", "Модуль не найден в IT Guild Framework Shop."); + return false; + } + } else { + if (!$this->moduleService->isActive($depend)) { + $this->moduleService->setActiveModule($depend); + } + } } } $activeTheme->value = getConst($theme); $activeTheme->save(); + + return true; } public function getActiveThemeInfo(): false|array|string diff --git a/kernel/views/module/index.php b/kernel/views/module/index.php index 8cb34f8..d7c1158 100644 --- a/kernel/views/module/index.php +++ b/kernel/views/module/index.php @@ -79,7 +79,5 @@ if ($moduleService->isActive('module_shop_client')) { ModuleTabsWidget::create()->run(); } - - $table->create(); $table->render();