Skip to content

Commit

Permalink
Merge pull request #3145 from justcarakas/3142-metatype-url-check
Browse files Browse the repository at this point in the history
Show the correct error when adding custom urls
  • Loading branch information
carakas committed Jul 4, 2020
2 parents 00a78e2 + 7bd10c0 commit db38473
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 5 deletions.
8 changes: 4 additions & 4 deletions src/Backend/Core/Installer/Data/locale.xml
Expand Up @@ -10907,14 +10907,14 @@
<translation language="pl"><![CDATA[Wybierz liczbę dobrze dobranych terminów, które opisują treść. Z punktu widzenia SEO nie oferują one jednak żadnej wartości dodanej.]]></translation>
</item>
<item type="message" name="HelpMetaURL">
<translation language="nl"><![CDATA[Vervang de automatisch gegenereerde URL door een zelfgekozen URL.]]></translation>
<translation language="en"><![CDATA[Replace the automaticly generated URL by a custom one.]]></translation>
<translation language="nl"><![CDATA[Vervang de automatisch gegenereerde URL door een zelfgekozen URL. Alleen kleine alfanumerieke letters en - zijn toegestaan]]></translation>
<translation language="en"><![CDATA[Replace the automaticly generated URL by a custom one. Only alphanumeric lowercase characters and - are allowed]]></translation>
<translation language="hu"><![CDATA[Cserélje le az automatikusan generált URL-t egyénire.]]></translation>
<translation language="it"><![CDATA[Sostituisci l'URL generato automaticamente con uno personalizzato.]]></translation>
<translation language="ru"><![CDATA[Заменяет автоматический URL на пользовательский.]]></translation>
<translation language="zh"><![CDATA[使用自定义链接替代自动生成的链接地址。]]></translation>
<translation language="de"><![CDATA[Ersetze die automatisch generierte URL mit einer individuell angepassten.]]></translation>
<translation language="fr"><![CDATA[Replacer l'URL automatiquement générée par une URL personnalisée.]]></translation>
<translation language="de"><![CDATA[Ersetze die automatisch generierte URL mit einer individuell angepassten. Es sind nur alphanumerische Kleinbuchstaben und - zulässig]]></translation>
<translation language="fr"><![CDATA[Replacer l'URL automatiquement générée par une URL personnalisée. Seuls les caractères alphanumériques en minuscules et - sont autorisés]]></translation>
<translation language="es"><![CDATA[Remplaza la URL automáticamente generada por una propia.]]></translation>
<translation language="lt"><![CDATA[Ar keisti automatiškai sugeneruotas nuorodas rankiniu būdu sukurtomis?.]]></translation>
<translation language="uk"><![CDATA[Замінює автоматичниний URL на користувацький]]></translation>
Expand Down
29 changes: 28 additions & 1 deletion src/Backend/Form/Type/MetaType.php
Expand Up @@ -188,7 +188,9 @@ function ($fieldName) use ($metaForm, $defaultValue, &$metaData) {
);

if ($generatedUrl !== $metaData['url'] && $metaData['urlOverwrite']) {
$metaForm->get('url')->addError(new FormError($this->translator->trans('err.URLAlreadyExists')));
$metaForm->get('url')->addError(
new FormError($this->translator->trans(self::getInvalidUrlErrorMessage($generatedUrl)))
);
$event->setData($metaData);

return;
Expand Down Expand Up @@ -321,4 +323,29 @@ public function buildView(FormView $view, FormInterface $form, array $options):
$view->vars['generate_url_callback_parameters'] = serialize($options['generate_url_callback_parameters']);
$view->vars['detail_url'] = $options['detail_url'];
}

private static function stripNumberAddedByTheUrlGeneration(string $string): string
{
$chunks = explode('-', $string);

if (!SpoonFilter::isNumeric(end($chunks))) {
return $string;
}

// remove last chunk
array_pop($chunks);

return implode('-', $chunks);
}

private static function getInvalidUrlErrorMessage(string $generatedUrl): string
{
$baseGeneratedUrl = self::stripNumberAddedByTheUrlGeneration($generatedUrl);

if ($baseGeneratedUrl !== $generatedUrl && strpos($generatedUrl, $baseGeneratedUrl) === 0) {
return 'err.URLAlreadyExists';
}

return 'err.InvalidURL';
}
}

0 comments on commit db38473

Please sign in to comment.