diff --git a/docs/02-config.md b/docs/02-config.md index ae93ef4..eb2b0c6 100644 --- a/docs/02-config.md +++ b/docs/02-config.md @@ -22,6 +22,8 @@ codefog_tags: my_manager: source: 'tl_table.tags' # in format ., or an array of such service: '' # optional, manager service to use (defaults to "codefog_tags.default_manager") + locale: '' # optional, locale to use for alias generation (defaults to "en") + validChars: '' # optional, validChars to use for alias generation (defaults to "0-9a-z") alias: '' # optional, alias of the newly created service ``` diff --git a/src/DependencyInjection/CodefogTagsExtension.php b/src/DependencyInjection/CodefogTagsExtension.php index d649e9b..0e1c178 100755 --- a/src/DependencyInjection/CodefogTagsExtension.php +++ b/src/DependencyInjection/CodefogTagsExtension.php @@ -44,7 +44,7 @@ private function createManager(string $name, array $config, ContainerBuilder $co $container ->setDefinition($id, new ChildDefinition($config['service'])) - ->setArguments([$name, $config['source']]) + ->setArguments([$name, $config['source'], $config['locale'], $config['validChars']]) ->addTag(ManagerPass::TAG_NAME, ['alias' => $name]) ->setPublic(true) ; diff --git a/src/DependencyInjection/Configuration.php b/src/DependencyInjection/Configuration.php index 0ae3355..53419cc 100644 --- a/src/DependencyInjection/Configuration.php +++ b/src/DependencyInjection/Configuration.php @@ -49,6 +49,8 @@ static function (string $value): array { ->end() ->end() ->scalarNode('service')->defaultValue('codefog_tags.default_manager')->end() + ->scalarNode('locale')->defaultValue('en')->end() + ->scalarNode('validChars')->defaultValue('0-9a-z')->end() ->scalarNode('alias')->defaultNull()->end() ->end() ->end() diff --git a/src/EventListener/DataContainer/TagListener.php b/src/EventListener/DataContainer/TagListener.php index ac08aee..f19a0f7 100644 --- a/src/EventListener/DataContainer/TagListener.php +++ b/src/EventListener/DataContainer/TagListener.php @@ -271,7 +271,12 @@ public function onAliasSaveCallback(string $value, DataContainer $dc): string // Generate alias if there is none if (!$value) { $autoAlias = true; - $value = StringUtil::generateAlias($dc->activeRecord->name); + $manager = $this->registry->get($dc->activeRecord->source); + $aliasOptions = [ + 'locale' => $manager->getLocale(), + 'validChars' => $manager->getValidChars() + ]; + $value = System::getContainer()->get('contao.slug')->generate($dc->activeRecord->name, $aliasOptions); } $existingAliases = $this->db->fetchOne("SELECT COUNT(*) FROM {$dc->table} WHERE alias=? AND source=?", [$value, $dc->activeRecord->source]); diff --git a/src/Manager/DefaultManager.php b/src/Manager/DefaultManager.php index a4741c8..a615286 100644 --- a/src/Manager/DefaultManager.php +++ b/src/Manager/DefaultManager.php @@ -20,6 +20,7 @@ use Codefog\TagsBundle\Tag; use Contao\DataContainer; use Contao\StringUtil; +use Contao\System; class DefaultManager implements ManagerInterface, DcaAwareInterface, InsertTagsAwareInterface { @@ -33,6 +34,16 @@ class DefaultManager implements ManagerInterface, DcaAwareInterface, InsertTagsA */ protected $sources; + /** + * @var string + */ + protected $locale; + + /** + * @var string + */ + protected $validChars; + /** * @var TagFinder */ @@ -46,10 +57,12 @@ class DefaultManager implements ManagerInterface, DcaAwareInterface, InsertTagsA /** * DefaultManager constructor. */ - public function __construct(string $name, array $sources) + public function __construct(string $name, array $sources, string $locale, string $validChars) { $this->name = $name; $this->sources = $sources; + $this->locale = $locale; + $this->validChars = $validChars; } /** @@ -272,6 +285,23 @@ public function getSourceFinder(): SourceFinder return $this->sourceFinder; } + /** + * Get locale. + */ + public function getLocale(): string + { + return $this->locale; + } + + /** + * Get validChars. + */ + public function getValidChars(): string + { + return $this->validChars; + } + + /** * Create the source criteria. */ @@ -299,7 +329,11 @@ protected function getSource(string $source = null): string */ protected function generateAlias(TagModel $model, string $source = null): void { - $alias = StringUtil::generateAlias($model->name); + $aliasOptions = [ + 'locale' => $this->locale, + 'validChars' => $this->validChars + ]; + $alias = System::getContainer()->get('contao.slug')->generate($model->name, $aliasOptions); // Add ID to alias if it already exists if (null !== ($existingTag = $this->tagFinder->findSingle($this->createTagCriteria($source)->setAlias($alias)))) { diff --git a/src/Manager/ManagerInterface.php b/src/Manager/ManagerInterface.php index 412406d..f2fb258 100644 --- a/src/Manager/ManagerInterface.php +++ b/src/Manager/ManagerInterface.php @@ -23,4 +23,14 @@ public function getAllTags(string $source = null): array; * Get tags optionally filtered by values. */ public function getFilteredTags(array $values, string $source = null): array; + + /** + * Get locale. + */ + public function getLocale(): string; + + /** + * Get validChars. + */ + public function getValidChars(): string; }