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;
}