Manuel de migration graphique des versions 1.1.x, 1.2.x et 1.3.x vers 2.0.0

Ce chapitre traite de la migration graphique (rendu des contenus, services) propre à l'ODF.
Suivant la version du CMS que vous migrez, vous devrez d'abord suivre les instructions globales au CMS des pages suivantes:
- Migration graphique 3.2.x vers 3.3.x (en anglais)
- Migration graphique 3.3.x vers 3.4.x (en anglais)
- Migration graphique 3.4.x vers 3.5.x

  1. Format des données XML d'entrées pour les contenus
    1. Affichage d'un champ simple
    2. Afficher d'un champ riche
  2. Modification du modèle de données
    1. Nouveaux champs
    2. Champs supprimés
    3. Métadonnée "universalAdjustment"
    4. Pièces jointes multiples
    5. Lieu(x) d'une formation
  3. Liens vers les objets ODF
    1. Lien vers une formation (ex: service "Liste des formations")
    2. Lien vers un parcours
    3. Liens vers un ELP

Format des données XML d'entrées pour les contenus

En 1.1.x, 1.2.x, 1.3.x un champ synchronisable était saxé sous forme d'un triplé : la valeur non-synchronisé (metadataName), la valeur synchronisée (metadataName_remote) et la valeur indiquant si le champ est synchronisé ou non, soit quelle valeur à affichée (metadataName_sync) :

XML d'entrée en 1.1.x, 1.2.x et 1.3.x

<metadata>
     <title>Licence de mathématiques</title>
 	 <title_remote>LICENCE MATHS</title>
	 <title_sync>false</title_sync>
 	 <duration_remote>3 ans</duration>
	 <duration_sync>true</duration_sync>
</metadata>

En 2.0.x, seule la valeur à afficher (suivant si le champ est synchronisé ou non) est disponible en entrée, ce qui va simplifier les XSL de rendu.

XML d'entrée en 2.0.x

<metadata>
     <title>Licence de mathématiques</title>
 	 <duration>3 ans</duration>
</metadata>

Affichage d'un champ simple

Le template get-metadata-value n'est plus nécessaire et à été supprimé. Utilisez désormais directement <xsl:value-of select="metadata/metadataName">.

Par exemple:

Affichage d'un champ simple en 1.1.x, 1.2.x et 1.3.x

<xsl:if test="metadata/duration or metadata/duration_remote">
	<p class="duration">
    	<span class="element-name">
        	<i18n:text i18n:catalogue="plugin.odf" i18n:key="CONTENT_PROGRAM_DURATION"/>
        </span>
        <xsl:text> </xsl:text>
        <span class="element-value">                    
        	<xsl:call-template name="get-metadata-value">
				<xsl:with-param name="metadataName" select="'duration'"/>
			</xsl:call-template>
        </span>
	</p>            
</xsl:if>

devient

Affichage d'un champ simple en 2.0.x

<xsl:if test="normalize-space(metadata/duration) != ''">
	<p class="duration">
    	<span class="element-name">
        	<i18n:text i18n:catalogue="plugin.odf" i18n:key="CONTENT_PROGRAM_DURATION"/>
        </span>
        <xsl:text> </xsl:text>
        <span class="element-value"><xsl:value-of select="metadata/duration"/></span>                 
    </p>            
</xsl:if>

Astuce
Si vous devez remplacer un certain nombre de fois le template get-metadata-value, il est possible d'utiliser la fonctionnalité Trouver/Remplacer tout de votre IDE pour peu que celui-ci autorise les regexp.
Voici comment faire sous Eclipse :
- Champ trouver mettre <xsl:call-template name="get-metadata-value">\s*<xsl:with-param[^/]*select="'([^"]*)'"[^/]*/>\s*</xsl:call-template>
- Champ remplacer mettre <xsl:value-of select="metadata/$1" />
- N'oubliez pas de cocher la case Expressions regulières dans le bloc Options
L'utilisation de la fonctionnalité Remplacer tout avec cette configuration modifiera tous les appels de la forme :
En leur équivalent version 2.0.x :

Afficher d'un champ riche

Le template get-richText-value a été remplacé par le template common-content-richtext-field

Par exemple

Affichage d'un champ riche 1.1.x, 1.2.x et 1.3.x

<xsl:if test="cms:isNotRichTextEmpty(metadata/presentation) or metadata/presentation_remote">
     <xsl:call-template name="get-richText-value">
     	<xsl:with-param name="metadataName" select="'presentation'"/>
        <xsl:with-param name="level" select="$truelevel + 1"/>
        <xsl:with-param name="title" select="'plugin.odf:CONTENT_PROGRAM_PRESENTATION'"/>
     </xsl:call-template>            
</xsl:if>

devient

Affichage d'un champ riche 2.0.x

<xsl:call-template name="common-content-richtext-field">
     <xsl:with-param name="value" select="metadata/presentation"/>
     <xsl:with-param name="level" select="$truelevel + 1"/>
     <xsl:with-param name="title" select="'plugin.odf:CONTENT_PROGRAM_PRESENTATION'"/>
</xsl:call-template>      

Modification du modèle de données

Le modèle de données a quelque peu été modifié. Une migration technique au niveau des données est également nécessaire. Cf. Manuel de migration technique des versions 1.1.x, 1.2.x et 1.3.x vers 2.x, paragraphe

Nouveaux champs

De nouveaux champs ont été rajoutés et peuvent être affichés dans les XSL de rendu:

  • Secteur disciplinaire DGESIP (multiple): metadata/dgesipCode
  • Code FAP (multiple): metadata/fapCode

Champs supprimés

Les champs suivants ont été supprimés et doivent être supprimés des XSL de rendus (sauf si vous souhaitez les conservés):

  • Secteurs d'activité : metadata/sector_activity
  • Domaine / Discipline : metadata/domain_discipline
  • Domaine ministériel : metadata/ministryDomain

Métadonnée "universalAdjustment"

La métadonnée "universalAdjustement" correspondant au champ "Aménagements particuliers" a été renommée "universalAdjustment".

Dans vos XSL de rendus, remplacez la référence à metadata/universalAdjustement par metadata/universalAdjustment

Pièces jointes multiples

Le champ "Fichier à télécharger" relatif à une formation est à partir de la version 2.0.x un champ multiple.

Lien vers une pièce jointe en 1.1.x, 1.2.x et 1.3.x

<xsl:template name="download">
        <xsl:param name="truelevel"/>
    
        <xsl:if test="metadata/attachment">
            <div class="bloc download">
                <xsl:element name="h{$truelevel}"><i18n:text i18n:catalogue="plugin.odf" i18n:key="CONTENT_PROGRAM_ATTACHMENT"/></xsl:element>
                <p><a href="{resolver:resolve(metadata/attachment/@type, metadata/attachment/@path, 'true')}"><xsl:value-of select="metadata/attachment/@filename"/></a></p>
            </div>
        </xsl:if>    
</xsl:template>

devient

Liens vers les pièces jointes en 2.0.x

<xsl:template name="download">
        <xsl:param name="truelevel"/>
    
        <xsl:if test="metadata/attachments/entry/attachment">
            <div class="bloc download">
                <xsl:element name="h{$truelevel}"><i18n:text i18n:catalogue="plugin.odf" i18n:key="CONTENT_PROGRAM_ATTACHMENT"/></xsl:element>
                
                <xsl:for-each select="metadata/attachments/entry">
                    <p>
                    <span class="file">
                        <a href="{resolver:resolve(attachment/@type, attachment/@path, 'true')}" title="{attachment/@filename} ({attachment/@size})">
                            <img class="icon" alt=""><xsl:attribute name="src"><xsl:value-of select="$uri-prefix"/><xsl:text>/plugins/explorer/icon/</xsl:text><xsl:value-of select="filenameutils:getExtension(attachment/@filename)"/><xsl:text>.png</xsl:text></xsl:attribute></img>
                            <xsl:choose>
                                <xsl:when test="normalize-space(attachment-text) != ''"> <xsl:value-of select="attachment-text"/></xsl:when>
                                <xsl:otherwise><xsl:value-of select="attachment/@filename"/></xsl:otherwise>
                            </xsl:choose>
                        </a>
                        <span class="size"> (<xsl:call-template name="format-size"><xsl:with-param name="size" select="attachment/@size"/></xsl:call-template>)</span>            
                    </span> 
                    </p>   
                </xsl:for-each>
            </div>
        </xsl:if>    
    </xsl:template>

Le template XSL download de la 2.0.x affiche également une icône en fonction du type de fichier ainsi que la taille du fichier.

Si vous décidez d'inclure les informations concernant la taille du fichier, ajoutez le template suivant pour gérer les différents formats de taille (ce template est utilisé dans le code au dessus):

Format de la taille des pièces jointes

<xsl:template name="format-size">
    <xsl:param name="size"/>
        
    <xsl:choose>
		<xsl:when test="$size &lt; 1024">
			<i18n:translate>
				<i18n:text i18n:key="CONTENT_PROGRAM_ATTACHMENTS_FILE_SIZE_BYTES"/>
				<i18n:param><xsl:value-of select="$size"/></i18n:param>
			</i18n:translate>
		</xsl:when>
		<xsl:when test="$size &lt; (1024 * 1024)">
			<i18n:translate>
				<i18n:text i18n:key="CONTENT_PROGRAM_ATTACHMENTS_FILE_SIZE_KB"/>
				<i18n:param><xsl:value-of select="round($size div 1024)"/></i18n:param>
			</i18n:translate>
		</xsl:when>
		<xsl:otherwise>
			<i18n:translate>
				<i18n:text i18n:key="CONTENT_PROGRAM_ATTACHMENTS_FILE_SIZE_MB"/>
				<i18n:param><xsl:value-of select="round($size div (1024 * 1024))"/></i18n:param>
			</i18n:translate>
		</xsl:otherwise>
	</xsl:choose>
</xsl:template>

 

Lieu(x) d'une formation

Le lieu de la formation est maintenant multiple

Affichage du lieu d'une formation en 1.1.x, 1.2.x et 1.3.x

<xsl:if test="metadata/place or metadata/place_remote">
    <xsl:element name="h{$truelevel + 1}"><i18n:text i18n:catalogue="plugin.odf" i18n:key="CONTENT_PROGRAM_PLACE"/></xsl:element>
	<p><xsl:call-template name="get-metadata-value"><xsl:with-param name="metadataName" select="'place'"/></xsl:call-template></p>
</xsl:if>

devient

Affichage du ou des lieux d'une formation en 2.0.x

<xsl:if test="normalize-space(metadata/place) != ''">
	<xsl:element name="h{$truelevel + 1}"><i18n:text i18n:catalogue="plugin.odf" i18n:key="CONTENT_PROGRAM_PLACE"/></xsl:element>
    <ul>
    	<xsl:for-each select="metadata/place">
        	<li><xsl:value-of select="."/></li>
        </xsl:for-each>
    </ul>
</xsl:if>

Liens vers les objets ODF

Le helper xsl org.ametys.plugins.odfweb.repository.OdfPagePathHelper a été supprimé. Pour afficher un lien vers un objet ODF (formation, parcours, ELP), il faut désormais utilisé le helper général org.ametys.cms.transformation.xslt.ResolveURIComponent et sa méthode resolve.

Signature :
String resolve(String type, String uri)

avec

  • type : "odf"
  • uri : identifiant du contenu (formation, parcours, elp)

Dans le cas d'un ELP, l'uri peut être composée de l'identifiant du contenu et de l'identifiant de son parent séparés par ";"

Lien vers une formation (ex: service "Liste des formations")

Lien vers une formation en 1.1.x, 1.2.x et 1.3.x

<li class="program">
    <a href="{$odf-site-uri-prefix}/{$lang}/{/xml/programs/@root-page-path}/{degree/@code}/{@domain}/{@name}.html">
         <xsl:value-of select="@title"/>
    </a>
</li>

devient

Lien vers une formation en 2.0.x

<li class="program">
     <a href="{resolver:resolve('odf', @id)}">
     	<xsl:value-of select="@title"/>
     </a>
</li>

Lien vers un parcours

Lien vers un parcours en 1.1.x, 1.2.x et 1.3.x

<xsl:template match="subprogram">
	<li>
       <a href="{odf:getSubProgramPath($siteName, /view/content/@language, @path, @id)}"><xsl:value-of select="@title"/></a>
    </li>
</xsl:template>

devient

Lien vers un parcours en 2.0.x

<xsl:template match="subprogram">
    <li>
    	<a href="{resolver:resolve('odf', @id)}"><xsl:value-of select="@title"/></a>
	</li>
</xsl:template>

Liens vers un ELP

Lien vers un ELP en 1.1.x, 1.2.x et 1.3.x

<xsl:template match="course">
	<li>
    	<a href="{odf:getCoursePath($siteName, /view/content/@language, @path, @id, $programId)}"><xsl:value-of select="@title"/></a>
    </li>
</xsl:template>

devient

Lien vers un ELP en 2.0.x

<xsl:template match="course">
	<li>
    	<a href="{resolver:resolve('odf', concat(@id, ';', /view/content/@id))}">
        	<xsl:value-of select="@title"/>
		</a>
	</li>
</xsl:template>