Ticket #1097 (closed defect: fixed)
Génération des URLs uniques à la création des billets
Reported by: | franck | Owned by: | xave |
---|---|---|---|
Priority: | normal | Milestone: | 2.3 |
Component: | module:blog | Version: | 2.2 |
Severity: | blocker | Keywords: | |
Cc: |
Description
Explication du bug par l'exemple :
Soient 3 billets présents dans la base, avec respectivement les post_url suivant :
- related
- related2
- relatedPosts
Un 4e billet tente d'être créé avec une URL spécifiée à related
Dans ce cas, Dotclear va proposer une URL alternative (compteur numérique démarrant à 2 à la fin de l'URL, éventuellement incrémenté si nécessaire).
Pour y parvenir DC récupère tous les billets commençant par l'URL souhaitée, ici "related" et récupèrera donc les 3 billets existants (voir ci-dessus). Un tableau trié est constitué avec les URLs des billets trouvés (le tableau est trié dans l'ordre des 3 URLs citées au début de ce ticktet).
DC utilise ensuite la dernière URL du tableau, relatedPosts dans le cas qui nous concerne et cherche s'il un "compteur" existe à la fin, ce qui n'est pas le cas ici. Par conséquent il proposera alors de commencer une nouvelle numérotation (à 2) et retourne alors l'URL related2, or cette URL a déjà été utilisée !
Tout ceci se trouve dans la fonction dcBlog::getPostURL() du fichier class.dc.blog.php
Il faudrait, soit raffiner la requête SQL de recherche des URLs "ressemblantes" soit compléter le traitement pour s'assurer que l'URL proposée n'est pas déjà utilisée et dans ce cas proposer d'incrémenter alors le compteur (cela nécessitera de retrouver la plus grande valeur utilisée du compteur en question).
(In [3269]) Refine where clause, fixes #1097