L'encodage d'URL utilisé jusqu'à présent traitait correctement les caractères accentués, mais mal les caractères spéciaux. Certains (comme ':', '/', ';') faisaient carrément planter l'affichage. Et la spec de l'encodage de caractères était globalement mal respectée.
Du coup, on a revu la gestion de l'encodage des URL : la classe org.ametys.core.util.URLEncoder que vous utilisiez n'existe plus, elle a été remplacée par org.ametys.core.util.URIUtils et gère maintenant le décodage également.
Mais le plus important c'est que la sémantique a également été revue, et là c'est du cas par cas.
Exemple dans la charte ODF :
AVANT :
Oups !
La copie dans le presse papier a échouée. Ouvrez le code et copier-le manuellement.
xmlns:url="org.ametys.core.util.URLEncoder"
...
<!-- Url of PDF -->
<xsl:param name="pdfUrl" select="concat($uri-prefix,
'/plugins/odf-web/',
$site,
'/_content/',
/view/content/@name,
'/',
url:encodePath(/view/content/@title), '.pdf')"/>
<a href="{$pdfUrl}"/>
xmlns:url="org.ametys.core.util.URLEncoder"
...
<!-- Url of PDF -->
<xsl:param name="pdfUrl" select="concat($uri-prefix,
'/plugins/odf-web/',
$site,
'/_content/',
/view/content/@name,
'/',
url:encodePath(/view/content/@title), '.pdf')"/>
<a href="{$pdfUrl}"/>
xmlns:url="org.ametys.core.util.URLEncoder"
...
<!-- Url of PDF -->
<xsl:param name="pdfUrl" select="concat($uri-prefix,
'/plugins/odf-web/',
$site,
'/_content/',
/view/content/@name,
'/',
url:encodePath(/view/content/@title), '.pdf')"/>
<a href="{$pdfUrl}"/>
Le code ci-dessus ne peut pas fonctionner avec des caractères spéciaux, il faut encoder séparément le nom pouvant potentiellement comporter des caractères spéciaux et l'URL entière :
APRES :
Oups !
La copie dans le presse papier a échouée. Ouvrez le code et copier-le manuellement.
xmlns:url="org.ametys.core.util.URIUtils"
xmlns:filename="org.ametys.core.util.FilenameUtils"
...
<!-- Url of PDF -->
<xsl:param name="pdfUrl" select="concat($uri-prefix,
'/plugins/odf-web/',
$site,
'/_content/',
/view/content/@name,
'/',
filename:encodeName(/view/content/@title), '.pdf')"/>
<a href="{url:encodePath($pdfUrl)}"/>
xmlns:url="org.ametys.core.util.URIUtils"
xmlns:filename="org.ametys.core.util.FilenameUtils"
...
<!-- Url of PDF -->
<xsl:param name="pdfUrl" select="concat($uri-prefix,
'/plugins/odf-web/',
$site,
'/_content/',
/view/content/@name,
'/',
filename:encodeName(/view/content/@title), '.pdf')"/>
<a href="{url:encodePath($pdfUrl)}"/>
xmlns:url="org.ametys.core.util.URIUtils"
xmlns:filename="org.ametys.core.util.FilenameUtils"
...
<!-- Url of PDF -->
<xsl:param name="pdfUrl" select="concat($uri-prefix,
'/plugins/odf-web/',
$site,
'/_content/',
/view/content/@name,
'/',
filename:encodeName(/view/content/@title), '.pdf')"/>
<a href="{url:encodePath($pdfUrl)}"/>
Pour la migration, il faut rechercher l'ensemble des créations de liens créés manuellement dans vos XSL (ce qui se télécharge notamment) et voir s'ils sont impactés.
Décodage d'URL
Suppression de la classe org.ametys.cms.transformation.xslt.URIDecoder. Cette classe était utilisée à tort la plupart du temps.
Ca a des impacts dans toutes les XSL dans lesquelles elle est utilisée. Il faut faire une recherche pour tous les identifier. Puis supprimer le "xmlns" qui la référence, ainsi que le "exclude" correspondant, en général juste en dessous.
Ensuite il faut remplacer tous les appels à ce namespace (en général "decoder:decode") dans la XSL en question. Ca peut être n'importe où, mais souvent dans docbook2html ou dans des exports FO. Là on retrouve plusieurs cas de figure :
Si c'était utilisé par le htmlexpert, on va souvent avoir la construction : htmlexpertresolver:parseAndResolve(decoder:decode(.)). Il faut simplement enlever decoder:decode : htmlexpertresolver:parseAndResolve(.)
Si c'était utilisé par le plugin forms (notamment dans html:textarea), il faut utiliser un nouvel Helper : xmlns:forms="org.ametys.plugins.forms.xslt.FormsXSLTHelper" et remplacer decoder:decode par forms:decode
Dans les autres cas, il peut être nécessaire de continuer à décoder, dans ce cas, il faut utiliser URIUtils.decode avec le namespace org.ametys.core.util.URIUtils
Service de recherche
Dans le rendu par défaut des critères de recherche, le template XSL nommé "criterion-enumeration-options" a été remplacé par un template de type "match" avec le mode "criterion-enumeration-options".
Dans surcharges éventuelles du rendu du service de recherche, faites les modifications suivantes:
Remplacez
Oups !
La copie dans le presse papier a échouée. Ouvrez le code et copier-le manuellement.