diff --git a/.gitignore b/.gitignore index 21799d6..752f38c 100644 --- a/.gitignore +++ b/.gitignore @@ -2,7 +2,8 @@ !*/ !/.gitignore !/scripts/** +!/web/modules/custom/** !/web/sites/default/environments/settings.*.php !/web/sites/default/settings.php !/web/themes/custom/** -/web/themes/custom/*/dist/ \ No newline at end of file +/web/themes/custom/*/dist/ diff --git a/web/modules/custom/custom/custom.info.yml b/web/modules/custom/custom/custom.info.yml new file mode 100644 index 0000000..82617ad --- /dev/null +++ b/web/modules/custom/custom/custom.info.yml @@ -0,0 +1,5 @@ +name: Oliver Davies custom module +type: module +core: 8.x +core_version_requirements: ^8 || ^9 +package: Custom diff --git a/web/modules/custom/custom/drush.services.yml b/web/modules/custom/custom/drush.services.yml new file mode 100644 index 0000000..ffa0410 --- /dev/null +++ b/web/modules/custom/custom/drush.services.yml @@ -0,0 +1,5 @@ +services: + Drupal\custom\Command\FormatTagNamesCommand: + autowire: true + tags: + - { name: drush.command } diff --git a/web/modules/custom/custom/src/Command/FormatTagNamesCommand.php b/web/modules/custom/custom/src/Command/FormatTagNamesCommand.php new file mode 100644 index 0000000..ef43808 --- /dev/null +++ b/web/modules/custom/custom/src/Command/FormatTagNamesCommand.php @@ -0,0 +1,136 @@ + 'Accessible Bristol', + 'admin:hover' => FALSE, + 'aria' => 'ARIA', + 'cck' => 'CCK', + 'centos' => 'CentOS', + 'css' => 'CSS', + 'dcbristol' => FALSE, + 'ddev' => 'DDEV', + 'drupal-association' => 'Drupal Association', + 'drupal-bristol' => 'Drupal Bristol', + 'drupal-commerce' => 'Drupal Commerce', + 'drupal-planet' => 'Drupal Planet', + 'drupal-vm' => 'Drupal VM', + 'drupal-vm-generator' => 'Drupal VM Generator', + 'drupalcamp' => 'DrupalCamp', + 'drupalcamp-bristol' => 'DrupalCamp Bristol', + 'drupalcamp-london' => 'DrupalCamp London', + 'drupalcamp-north' => 'DrupalCamp North', + 'drupalcon' => 'DrupalCon', + 'entity-api' => 'Entity API', + 'fancy-slide' => 'Fancy Slide', + 'field-collection' => 'Field Collection', + 'filefield' => 'FileField', + 'form-api' => 'Form API', + 'git-flow' => 'Git Flow', + 'github' => 'GitHub', + 'illuminate-collections' => 'Illuminate Collections', + 'image-caption' => 'Image Caption', + 'imagecache' => 'ImageCache', + 'imagefield' => 'ImageField', + 'imagefield-import' => 'ImageField Import', + 'javascript' => 'JavaScript', + 'laravel-collections' => 'Laravel Collections', + 'laravel-mix' => 'Laravel Mix', + 'linux-journal' => 'Linux Journal', + 'mac-os-x' => 'macOS', + 'mamp' => 'MAMP', + 'mod_rewrite' => FALSE, + 'npm' => FALSE, + 'oliverdavies.co.uk' => FALSE, + 'php' => 'PHP', + 'php-south-wales' => 'PHP South Wales', + 'phpstorm' => 'PhpStorm', + 'phpsw' => 'PHPSW', + 'phpunit' => 'PHPUnit', + 'postcss' => 'PostCSS', + 'psr' => 'PSR', + 'regular-expression' => 'Regular expressions', + 'sequel-pro' => 'Sequel Pro', + 'settings.php' => FALSE, + 'sql' => 'SQL', + 'ssh' => 'SSH', + 'sublime-text' => 'Sublime Text', + 'svn' => 'SVN', + 'swdug' => 'SWDUG', + 'symfonylive' => 'SymfonyLive', + 'tailwind-css' => 'Tailwind CSS', + 'tdd' => 'TDD', + 'views-attach' => 'Views Attach', + 'virtualbox' => 'VirtualBox', + 'vuejs' => 'VueJS', + 'virtualhostx' => 'VirtualHostX', + ]; + + public function __construct(EntityTypeManagerInterface $entityTypeManager) { + parent::__construct(); + + $this->termStorage = $entityTypeManager->getStorage('taxonomy_term'); + } + + /** + * Drush command for updating legacy tag names. + * + * @command opdavies:update-tag-names + */ + public function updateTagNames(): void { + foreach ($this->getTags() as $tag) { + $name = $tag->label(); + $newName = $this->getNewTagName($name); + + if ($newName === NULL) { + $this->writeln(sprintf('Skipping %s.', $name)); + continue; + } + + $this->writeln(sprintf('Updating %s to %s.', $name, $newName)); + $tag->name = $newName; + $tag->save(); + } + } + + private function getTags(): array { + return $this->termStorage->loadByProperties([ + 'vid' => 'tags', + ]); + } + + private function getNewTagName(string $tagName): ?string { + if (!array_key_exists($tagName, static::$tagNames)) { + return str_replace('-', ' ', ucfirst($tagName)); + } + + if (static::$tagNames[$tagName] === FALSE) { + return NULL; + } + + return static::$tagNames[$tagName]; + } + +}