From 9d3bedd017676b1a87cffe6979acb977e464d537 Mon Sep 17 00:00:00 2001 From: Allekslar Date: Wed, 9 Feb 2022 12:16:48 +0000 Subject: [PATCH] Initial commit --- README.md | 20 + composer.json | 32 ++ module-generator.jpg | Bin 0 -> 121258 bytes src/AllekslarModuleGenerator.php | 9 + src/Command/GenerateModule.php | 399 ++++++++++++++++++ src/Resources/config/services.xml | 13 + .../templates/module/module.acl_index.stub | 23 + .../templates/module/module.base.stub | 37 ++ .../module/module.component_action_scss.stub | 4 + .../module/module.component_action_twig.stub | 4 + .../module/module.component_index.stub | 30 ++ .../templates/module/module.mixin_index.stub | 5 + .../templates/module/module.page-create.stub | 5 + .../templates/module/module.page-detail.stub | 30 ++ .../templates/module/module.page-list.stub | 30 ++ .../module/module.page_detail_scss.stub | 11 + .../module/module.page_detail_twig.stub | 18 + .../module/module.page_list_scss.stub | 41 ++ .../module/module.page_list_twig.stub | 30 ++ .../module/module.service_index.stub | 0 .../templates/module/module.snippet.stub | 0 .../templates/module/module.view_index.stub | 0 22 files changed, 741 insertions(+) create mode 100644 README.md create mode 100644 composer.json create mode 100644 module-generator.jpg create mode 100644 src/AllekslarModuleGenerator.php create mode 100644 src/Command/GenerateModule.php create mode 100644 src/Resources/config/services.xml create mode 100644 src/Resources/templates/module/module.acl_index.stub create mode 100644 src/Resources/templates/module/module.base.stub create mode 100644 src/Resources/templates/module/module.component_action_scss.stub create mode 100644 src/Resources/templates/module/module.component_action_twig.stub create mode 100644 src/Resources/templates/module/module.component_index.stub create mode 100644 src/Resources/templates/module/module.mixin_index.stub create mode 100644 src/Resources/templates/module/module.page-create.stub create mode 100644 src/Resources/templates/module/module.page-detail.stub create mode 100644 src/Resources/templates/module/module.page-list.stub create mode 100644 src/Resources/templates/module/module.page_detail_scss.stub create mode 100644 src/Resources/templates/module/module.page_detail_twig.stub create mode 100644 src/Resources/templates/module/module.page_list_scss.stub create mode 100644 src/Resources/templates/module/module.page_list_twig.stub create mode 100644 src/Resources/templates/module/module.service_index.stub create mode 100644 src/Resources/templates/module/module.snippet.stub create mode 100644 src/Resources/templates/module/module.view_index.stub diff --git a/README.md b/README.md new file mode 100644 index 0000000..f57c2db --- /dev/null +++ b/README.md @@ -0,0 +1,20 @@ +# Generates Administration Module Structure + +![Generates Administration Module Structure](module-generator.jpg) + +### Installation + +- `composer require allekslar/module-generator` +- `bin/console plugin:refresh` +- `bin/console plugin:install --activate --clearCache AllekslarModuleGenerator` + +### Commands +The first parameter accepts the name of the plugin for which the scaffolding should be generated. + +The second parameter accepts the name of the module. + +- `bin/console allekslar:generate:module ` + +or + +- `bin/console allekslar:generate:module` requests options interactively diff --git a/composer.json b/composer.json new file mode 100644 index 0000000..f7ce75c --- /dev/null +++ b/composer.json @@ -0,0 +1,32 @@ +{ + "name": "allekslar/module-generator", + "description": "Creates the structure for new administration module", + "type": "shopware-platform-plugin", + "version": "1.0.0", + "license": "MIT", + "authors": [ + { + "name": "allekslar" + } + ], + "autoload": { + "psr-4": { + "AllekslarModuleGenerator\\": "src/" + } + }, + "extra": { + "shopware-plugin-class": "AllekslarModuleGenerator\\AllekslarModuleGenerator", + "label": { + "de-DE": "Administrations modul-generator Shopware 6", + "en-GB": "administration module-generator Shopware 6" + }, + "description": { + "de-DE": "Erstellt die Struktur für das neue Administrationsmodul Shopware 6", + "en-GB": "Creates the structure for new administration module Shopware 6 " + }, + "supportLink": { + "de-DE": "https://github.com/Allekslar", + "en-GB": "https://github.com/Allekslar" + } + } +} diff --git a/module-generator.jpg b/module-generator.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8704319635f33c5afe871b7f8cde5a8580f41a48 GIT binary patch literal 121258 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 = $plugins; + $this->fileSystem = $fileSystem; + parent::__construct(); + } + + /** + * Configures the current command. + */ + protected function configure(): void + { + + $this + ->addArgument('pluginName', InputArgument::OPTIONAL, 'Plugin Name') + ->addArgument('moduleName', InputArgument::OPTIONAL, 'The name of the module.'); + } + + + /** + * Initializes the command after the input has been bound and before the input + * is validated. + * + * @param InputInterface $input + * @param OutputInterface $output + * @return void + */ + protected function initialize(InputInterface $input, OutputInterface $output): void + { + $this->io = new SymfonyStyle($input, $output); + } + + /** + * Interacts with the user. + * + * interactively ask for values of missing required arguments. + * + * @param InputInterface $input + * @param OutputInterface $output + * @return void + */ + protected function interact(InputInterface $input, OutputInterface $output): void + { + $output->writeln([ + '', + '=========================================', + 'Generates Administration Module Structure', + '=========================================', + '', + ]); + + $pluginName = $input->getArgument('pluginName'); + + if (!$pluginName) { + $pluginName = $this->io->ask('Please enter a plugin name: '); + } + $this->pluginName = ucfirst($pluginName); + + $pluginPath = $this->getPluginPath($this->pluginName); + + $moduleName = $input->getArgument('moduleName'); + + if (!$moduleName) { + $moduleName = $this->io->ask('Please enter a module name: '); + } + $this->moduleName = strtolower($moduleName); + + $this->moduleFolderPath = "{$pluginPath}/Resources/app/administration/src/module/{$this->moduleName}/"; + + $question = new ChoiceQuestion( + 'Please select module subfolder structure defaults:', + ['page', 'snippet', 'component', 'acl', 'view', 'service', 'mixin'], + '0,1' + ); + $question->setMultiselect(true); + $this->moduleFolderName = $this->io->askQuestion($question); + + $output->writeln([ + 'You have just selected: ' . implode(', ', $this->moduleFolderName) . '', + '=========================================', + '', + ]); + } + + /** + * Executes the current command. + * + * @param InputInterface $input + * @param OutputInterface $output + * @return int 0 if everything went fine, or an exit code + */ + public function execute(InputInterface $input, OutputInterface $output): int + { + $this->buildModule(); + + return Command::SUCCESS; + } + + /** + * Build the Module. + * + * @return void + * @throws \ReflectionException + */ + private function buildModule(): void + { + $pluginPath = $this->getPluginPath($this->pluginName); + + $this->createMainJs($pluginPath); + + $this->setModuleFolderStructure($pluginPath); + + $this->buildModuleFiles(); + } + + /** + * @param string $name + * @return string + * @throws \ReflectionException + */ + private function getPluginPath(string $name): string + { + foreach ($this->plugins as $plugin) { + if ($plugin['name'] !== $name) { + continue; + } + + $reflection = new \ReflectionClass($plugin['baseClass']); + + return dirname($reflection->getFileName()); + } + + throw new \RuntimeException(sprintf('Cannot find plugin by name "%s"', $name)); + } + + /** + * + * @param string $pluginPath + * @return void + */ + private function createMainJs(string $pluginPath): void + { + $moduleParentFolderPath = "{$pluginPath}/Resources/app/administration/src/"; + + if (!$this->fileSystem->exists($moduleParentFolderPath . 'main.js')) { + $this->fileSystem->dumpFile($moduleParentFolderPath . 'main.js', null); + } + } + + /** + * + * @param string $pluginPath + * @return void + */ + private function setModuleFolderStructure(string $pluginPath): void + { + + $moduleFolderPath = "{$pluginPath}/Resources/app/administration/src/module/{$this->moduleName}/"; + + $this->createDefaultSubfolderStructure($moduleFolderPath); + $this->createComponentSubfolderStructure($moduleFolderPath); + $this->createSubfolderStructure($moduleFolderPath, 'acl'); + $this->createSubfolderStructure($moduleFolderPath, 'view'); + $this->createSubfolderStructure($moduleFolderPath, 'service'); + $this->createSubfolderStructure($moduleFolderPath, 'mixin'); + } + + /** + * Build the Module files. + * + * @return void + */ + private function buildModuleFiles(): void + { + $finder = new Finder(); + + $finder->files()->in(__DIR__ . '/../Resources/templates/module/'); + + if ($finder->hasResults()) { + foreach ($finder as $file) { + $fileContent = file_get_contents($file->getPathname()); + $fileContent = $this->setTemplateVariables($fileContent); + $this->createModuleFiles($file, $fileContent); + } + } + } + + /** + * + * @param string $moduleFolderPath + * @return void + */ + private function createDefaultSubfolderStructure(string $moduleFolderPath): void + { + if (!$this->fileSystem->exists($moduleFolderPath)) { + $this->fileSystem->mkdir([ + $moduleFolderPath . 'page/' . $this->moduleName . '-list/', + $moduleFolderPath . 'page/' . $this->moduleName . '-detail/', + $moduleFolderPath . 'page/' . $this->moduleName . '-create/', + $moduleFolderPath . 'snippet/', + ]); + } + } + + /** + * + * @param string $moduleFolderPath + * @return void + */ + private function createComponentSubfolderStructure(string $moduleFolderPath): void + { + if ( + !$this->fileSystem->exists("{$moduleFolderPath}component/{$this->moduleName}-action/") + && in_array("component", $this->moduleFolderName) + ) { + $this->fileSystem->mkdir([ + "{$moduleFolderPath}component/{$this->moduleName}-action/", + ]); + } + } + + /** + * + * @param string $moduleFolderPath + * @param string $subfolder + * @return void + */ + private function createSubfolderStructure(string $moduleFolderPath, string $subfolder): void + { + if ( + !$this->fileSystem->exists("{$moduleFolderPath}{$subfolder}/") + && in_array($subfolder, $this->moduleFolderName) + ) { + $this->fileSystem->mkdir([ + "{$moduleFolderPath}{$subfolder}/", + ]); + } + } + + /** + * + * @param string $fileContent + * @return string + */ + private function setTemplateVariables(string $fileContent): string + { + + $unicodeString = new UnicodeString($this->moduleName); + // Convert element-name to element.name + $routeName = u($this->moduleName)->replace('-', '.'); + + $fileContent = str_replace('{{ name }}', $this->moduleName, $fileContent); + $fileContent = str_replace('{{ routeName }}', $routeName, $fileContent); + $fileContent = str_replace('{{ labelName }}', $unicodeString->camel(), $fileContent); + $fileContent = str_replace('{{ twigModule }}', $unicodeString->snake(), $fileContent); + return $fileContent; + } + + /** + * + * @param SplFileInfo $file + * @param string $fileContent + * @return void + */ + private function createModuleFiles(SplFileInfo $file, string $fileContent): void + { + if (!$this->fileSystem->exists("{$this->moduleFolderPath}index.js")) { + if (strpos($file->getFilename(), 'base')) { + file_put_contents("{$this->moduleFolderPath}index.js", $fileContent); + } + } + $this->createSnippetFiles($file, $fileContent, 'en-GB'); + + $this->createModulePageFiles($file, $fileContent, 'list'); + $this->createModulePageFiles($file, $fileContent, 'detail'); + $this->createModulePageFiles($file, $fileContent, 'create'); + + $this->createComponentFiles($file, $fileContent); + $this->createFiles($file, $fileContent, 'acl'); + $this->createFiles($file, $fileContent, 'mixin'); + $this->createFiles($file, $fileContent, 'service'); + $this->createFiles($file, $fileContent, 'view'); + } + + /** + * + * @param SplFileInfo $file + * @param string $fileContent + * @param string $language + * @return void + */ + private function createSnippetFiles(SplFileInfo $file, string $fileContent, string $language): void + { + if (!$this->fileSystem->exists("{$this->moduleFolderPath}snippet/{$language}.json")) { + if (strpos($file->getFilename(), 'snippet')) { + file_put_contents("{$this->moduleFolderPath}snippet/{$language}.json", $fileContent); + } + } + } + + /** + * + * @param SplFileInfo $file + * @param string $fileContent + * @param string $type + * @return void + */ + private function createModulePageFiles(SplFileInfo $file, string $fileContent, string $type): void + { + if (!$this->fileSystem->exists("{$this->moduleFolderPath}page/{$this->moduleName}-{$type}/index.js")) { + if (strpos($file->getFilename(), "page-{$type}")) { + file_put_contents("{$this->moduleFolderPath}page/{$this->moduleName}-{$type}/index.js", $fileContent); + } + } + if (!$this->fileSystem->exists("{$this->moduleFolderPath}page/{$this->moduleName}-${type}/{$this->moduleName}-{$type}.html.twig")) { + if (strpos($file->getFilename(), "page_{$type}_twig")) { + file_put_contents("{$this->moduleFolderPath}page/{$this->moduleName}-${type}/{$this->moduleName}-{$type}.html.twig", $fileContent); + } + } + if (!$this->fileSystem->exists("{$this->moduleFolderPath}page/{$this->moduleName}-{$type}/{$this->moduleName}-{$type}.scss")) { + if (strpos($file->getFilename(), "page_{$type}_scss")) { + file_put_contents("{$this->moduleFolderPath}page/{$this->moduleName}-{$type}/{$this->moduleName}-{$type}.scss", $fileContent); + } + } + } + + /** + * + * @param SplFileInfo $file + * @param string $fileContent + * @return void + */ + private function createComponentFiles(SplFileInfo $file, string $fileContent): void + { + if ($this->fileSystem->exists("{$this->moduleFolderPath}component/{$this->moduleName}-action/")) { + if (!$this->fileSystem->exists("{$this->moduleFolderPath}component/{$this->moduleName}-action/index.js")) { + if (strpos($file->getFilename(), 'component_index')) { + file_put_contents("{$this->moduleFolderPath}component/{$this->moduleName}-action/index.js", $fileContent); + } + } + if (!$this->fileSystem->exists("{$this->moduleFolderPath}component/{$this->moduleName}-action/{$this->moduleName}-action.html.twig")) { + if (strpos($file->getFilename(), 'component_action_twig')) { + file_put_contents("{$this->moduleFolderPath}component/{$this->moduleName}-action/{$this->moduleName}-action.html.twig", $fileContent); + } + } + if (!$this->fileSystem->exists("{$this->moduleFolderPath}component/{$this->moduleName}-action/{$this->moduleName}-action.scss")) { + if (strpos($file->getFilename(), 'component_action_scss')) { + file_put_contents("{$this->moduleFolderPath}component/{$this->moduleName}-action/{$this->moduleName}-action.scss", $fileContent); + } + } + } + } + + /** + * + * @param SplFileInfo $file + * @param string $fileContent + * @param string $type + * @return void + */ + private function createFiles(SplFileInfo $file, string $fileContent, string $type): void + { + if ($this->fileSystem->exists("{$this->moduleFolderPath}{$type}/")) { + if (!$this->fileSystem->exists("{$this->moduleFolderPath}{$type}/index.js")) { + if (strpos($file->getFilename(), "{$type}_index")) { + file_put_contents("{$this->moduleFolderPath}{$type}/index.js", $fileContent); + } + } + } + } +} diff --git a/src/Resources/config/services.xml b/src/Resources/config/services.xml new file mode 100644 index 0000000..e5921f7 --- /dev/null +++ b/src/Resources/config/services.xml @@ -0,0 +1,13 @@ + + + + + %kernel.plugin_infos% + + + + + + \ No newline at end of file diff --git a/src/Resources/templates/module/module.acl_index.stub b/src/Resources/templates/module/module.acl_index.stub new file mode 100644 index 0000000..1d71962 --- /dev/null +++ b/src/Resources/templates/module/module.acl_index.stub @@ -0,0 +1,23 @@ +Shopware.Service('privileges').addPrivilegeMappingEntry({ + category: 'permissions', + parent: null, + key: 'your_key', + roles: { + viewer: { + privileges: [], + dependencies: [] + }, + editor: { + privileges: [], + dependencies: [] + }, + creator: { + privileges: [], + dependencies: [] + }, + deleter: { + privileges: [], + dependencies: [] + } + } +}); \ No newline at end of file diff --git a/src/Resources/templates/module/module.base.stub b/src/Resources/templates/module/module.base.stub new file mode 100644 index 0000000..fa1d9b3 --- /dev/null +++ b/src/Resources/templates/module/module.base.stub @@ -0,0 +1,37 @@ +import "./page/{{ name }}-list"; +import "./page/{{ name }}-detail"; +import "./page/{{ name }}-create"; + +Shopware.Module.register("{{ name }}", { + type: "plugin", + name: "{{ labelName }}", + title: "{{ labelName }}", + description: "{{ labelName }} description", + color: "#ff3d58", + icon: "default-basic-shape-square", + + routes: { + list: { + component: "{{ name }}-list", + path: "list" + }, + detail: { + component: "{{ name }}-detail", + path: "detail/:id", + meta: { + parentPath: "{{ routeName }}.list" + } + } + }, + + navigation: [ + { + label: "{{ labelName }}", + color: "#ff3d58", + path: "{{ routeName }}.list", + icon: "default-basic-shape-square", + parent: "sw-catalogue", + position: 100, + }, + ], +}); \ No newline at end of file diff --git a/src/Resources/templates/module/module.component_action_scss.stub b/src/Resources/templates/module/module.component_action_scss.stub new file mode 100644 index 0000000..20f8a09 --- /dev/null +++ b/src/Resources/templates/module/module.component_action_scss.stub @@ -0,0 +1,4 @@ +@import "~scss/variables"; + +.{{ name }}-action { +} diff --git a/src/Resources/templates/module/module.component_action_twig.stub b/src/Resources/templates/module/module.component_action_twig.stub new file mode 100644 index 0000000..0e58264 --- /dev/null +++ b/src/Resources/templates/module/module.component_action_twig.stub @@ -0,0 +1,4 @@ +{% block {{ twigModule }}_action %} +
+
+{% endblock %} \ No newline at end of file diff --git a/src/Resources/templates/module/module.component_index.stub b/src/Resources/templates/module/module.component_index.stub new file mode 100644 index 0000000..2dffcb9 --- /dev/null +++ b/src/Resources/templates/module/module.component_index.stub @@ -0,0 +1,30 @@ +import template from "./{{ name }}-action.html.twig"; +import "./{{ name }}-action.scss"; + +const { Component } = Shopware; + +Component.register("{{ name }}-action", { + template, + inject: [], + + mixins: [], + + props: {}, + + data() { + return {}; + }, + + metaInfo() { + return { + title: this.$createTitle(), + }; + }, + computed: {}, + + watch: {}, + + created() {}, + + methods: {}, +}); \ No newline at end of file diff --git a/src/Resources/templates/module/module.mixin_index.stub b/src/Resources/templates/module/module.mixin_index.stub new file mode 100644 index 0000000..341326d --- /dev/null +++ b/src/Resources/templates/module/module.mixin_index.stub @@ -0,0 +1,5 @@ +const { Mixin } = Shopware; + +Mixin.register('{{ name }}-mixin', { + +}); diff --git a/src/Resources/templates/module/module.page-create.stub b/src/Resources/templates/module/module.page-create.stub new file mode 100644 index 0000000..b8eab83 --- /dev/null +++ b/src/Resources/templates/module/module.page-create.stub @@ -0,0 +1,5 @@ +const { Component } = Shopware; + +Component.extend('{{ name }}-create', '{{ name }}-detail', { + methods: {} +}); \ No newline at end of file diff --git a/src/Resources/templates/module/module.page-detail.stub b/src/Resources/templates/module/module.page-detail.stub new file mode 100644 index 0000000..b0802a1 --- /dev/null +++ b/src/Resources/templates/module/module.page-detail.stub @@ -0,0 +1,30 @@ +import template from "./{{ name }}-detail.html.twig"; +import "./{{ name }}-detail.scss"; + +const { Component } = Shopware; + +Component.register("{{ name }}-detail", { + template, + inject: [], + + mixins: [], + + props: {}, + + data() { + return {}; + }, + + metaInfo() { + return { + title: this.$createTitle(), + }; + }, + computed: {}, + + watch: {}, + + created() {}, + + methods: {}, +}); \ No newline at end of file diff --git a/src/Resources/templates/module/module.page-list.stub b/src/Resources/templates/module/module.page-list.stub new file mode 100644 index 0000000..6129854 --- /dev/null +++ b/src/Resources/templates/module/module.page-list.stub @@ -0,0 +1,30 @@ +import template from "./{{ name }}-list.html.twig"; +import "./{{ name }}-list.scss"; + +const { Component } = Shopware; + +Component.register("{{ name }}-list", { + template, + inject: [], + + mixins: [], + + props: {}, + + data() { + return {}; + }, + + metaInfo() { + return { + title: this.$createTitle(), + }; + }, + computed: {}, + + watch: {}, + + created() {}, + + methods: {}, +}); \ No newline at end of file diff --git a/src/Resources/templates/module/module.page_detail_scss.stub b/src/Resources/templates/module/module.page_detail_scss.stub new file mode 100644 index 0000000..7084146 --- /dev/null +++ b/src/Resources/templates/module/module.page_detail_scss.stub @@ -0,0 +1,11 @@ +.{{ name }}-detail { + .smart-bar__actions { + span { + display: flex; + } + + .sw-tooltip--wrapper { + margin-left: 8px; + } + } +} diff --git a/src/Resources/templates/module/module.page_detail_twig.stub b/src/Resources/templates/module/module.page_detail_twig.stub new file mode 100644 index 0000000..c6549b5 --- /dev/null +++ b/src/Resources/templates/module/module.page_detail_twig.stub @@ -0,0 +1,18 @@ +{% block {{ twigModule }}_detail %} + + {% block {{ twigModule }}_detail_header %} + + {% endblock %} + + {% block {{ twigModule }}_detail_actions %} + + {% endblock %} + + {% block {{ twigModule }}_detail_content %} + + {% endblock %} + +{% endblock %} \ No newline at end of file diff --git a/src/Resources/templates/module/module.page_list_scss.stub b/src/Resources/templates/module/module.page_list_scss.stub new file mode 100644 index 0000000..e8cc261 --- /dev/null +++ b/src/Resources/templates/module/module.page_list_scss.stub @@ -0,0 +1,41 @@ +@import "~scss/variables"; + +${{ name }}-list-color-error: $color-crimson-500; +${{ name }}-list-color-success: $color-emerald-500; + +.{{ name }}-list { + .{{ name }}-list__content { + width: 100%; + height: 100%; + position: absolute; + } + + .is--inactive { + color: ${{ name }}-list-color-error; + } + + .is--active { + color: ${{ name }}-list-color-success; + } + + .{{ name }}-list__metadata-customer-guest-label { + margin: 0 0 0 12px; + text-align: center; + } + + .sw-label.{{ name }}-list__requested-group-label { + background: $color-module-orange-500; + color: $color-white; + font-weight: 600; + } +} + +.{{ name }}-list__sidebar { + .sw-sidebar-item__scrollable-container { + padding: 0 25px; + } + + .sw-filter-panel { + padding: 0; + } +} diff --git a/src/Resources/templates/module/module.page_list_twig.stub b/src/Resources/templates/module/module.page_list_twig.stub new file mode 100644 index 0000000..02c48b1 --- /dev/null +++ b/src/Resources/templates/module/module.page_list_twig.stub @@ -0,0 +1,30 @@ +{% block {{ twigModule }}_list %} + + + {% block {{ twigModule }}_list_search_bar %} + + {% endblock %} + + {% block {{ twigModule }}_list_smart_bar_header %} + + {% endblock %} + + {% block {{ twigModule }}_list_smart_bar_actions %} + + {% endblock %} + + + + {% block {{ twigModule }}_list_sidebar %} + {% endblock %} + +{% endblock %} \ No newline at end of file diff --git a/src/Resources/templates/module/module.service_index.stub b/src/Resources/templates/module/module.service_index.stub new file mode 100644 index 0000000..e69de29 diff --git a/src/Resources/templates/module/module.snippet.stub b/src/Resources/templates/module/module.snippet.stub new file mode 100644 index 0000000..e69de29 diff --git a/src/Resources/templates/module/module.view_index.stub b/src/Resources/templates/module/module.view_index.stub new file mode 100644 index 0000000..e69de29