Manuel de migration technique et graphique 1.x vers 2.0.0

Migration des liens de l'annuaire

Arrêtez le serveur, supprimez le custom-nodetypes.xml, puis redémarrez le serveur (si vous l'avez déjà fait cette procédure une fois, ce n'est pas la peine de la refaire)

Exécutez le script suivant en modifier la valeur des variables populationId et groupDirectory selon vos propres données.

Script de migration des liens

var populationId = "ametys_demo_users"; // value of the id of the population your users belong to
var groupDirectoryId= "groupes-sql"; // value of the id of the group directory your groups belong to
  
function convertGrantedUsers(node)
{
    if (node.hasProperty("ametys-internal:granted-users"))
    {
        var logins = node.getProperty("ametys-internal:granted-users").getValues();
        node.getProperty("ametys-internal:granted-users").remove();
  
        var rootNode = node.addNode("ametys-internal:granted-users", "ametys:linkGrantedUsers");
        for (var i=0; i < logins.length; i++)
        {   
            var userNode = rootNode.addNode("ametys-internal:granted-user", "ametys:user");
  
            userNode.setProperty("ametys:login", logins[i].getString());
            userNode.setProperty("ametys:population", populationId);
        }
        return true;
    }
    return false;
}
  
function convertGrantedGroups(node)
{
    if (node.hasProperty("ametys-internal:granted-groups"))
    {
        var ids = node.getProperty("ametys-internal:granted-groups").getValues();
        node.getProperty("ametys-internal:granted-groups").remove();
  
        var rootNode = node.addNode("ametys-internal:granted-groups", "ametys:linkGrantedGroups");
        for (var i=0; i < ids.length; i++)
        {   
            var gpNode = grantedGroups.addNode("ametys-internal:granted-group", "ametys:group");
  
            gpNode.setProperty("ametys:groupId", logins[i].getString());
            gpNode.setProperty("ametys:groupDirectory", groupDirectoryId);
        }
        return true;
    }
    return false;
}
    
// Migrate link directory
var qm = session.getWorkspace().getQueryManager();
var query = qm.createQuery("//element(*, ametys:directoryLink)", javax.jcr.query.Query.XPATH);
var links = query.execute().getNodes();
  
var count = 0;
while (links.hasNext())
{
    var link = links.next();
    try
    {
        if (convertGrantedUsers(link) || convertGrantedGroups(link))
        {
            link.save();
            count++;
        }
    }
    catch (e)
    {
        print("Exception for link '" + link + "'.\n" + e);
    }
}
print(count + " links have been migrated");   

Migration des services Annuaire de liens

Exécutez le script suivant pour migrer vos services Annuaire de liens

Script de migration des services

var ConsoleHelper = Java.type('org.ametys.workspaces.repository.ConsoleHelper');
 
var qm = session.getWorkspace().getQueryManager();
var query = qm.createQuery("//element(*, ametys:zoneItem)[@ametys-internal:type='SERVICE' and @ametys-internal:service='org.ametys.plugins.linkdirectory.DirectoryService']", javax.jcr.query.Query.XPATH);
var nodes = query.execute().getNodes();
 
var count = 0;
while (nodes.hasNext())
{
    var node = nodes.next();
    var paramsNode = node.getNode('ametys:service_parameters');
 
    if (ConsoleHelper.convertSingleToMultipleProperty(paramsNode, "ametys:themes"))
    {
          paramsNode.save();
          count++
    }  
}
print(count + " link services have been migrated");

 

Différenciation d'accès aux URLs

Migration technique

A partir de la version 2.0.0 il est possible de définir 2 URLs pour chaque lien de l'annuaire :

  • une URL externe, accessible depuis l’extérieur
  • une URL interne, accessible depuis un réseau interne, défini par une plage d'IP.

L'internaute sera redirigé vers une ou l'autre des URLs suivant s'il navigue depuis le réseaux interne ou depuis l'extérieur.

La plage IP interne est définie dans un paramètre de site. Si vous souhaitez différencier les URLs d'accès, pensez à renseigner ce paramètre de site.

Après mise à jour du plugin et avant le premier démarrage de l'application, le fichier custom_nodetypes.xml (qui se trouve dans le dossier <chemin_repository>/repository/nodetypes) doit être supprimé.

Migration graphique

Par défaut, pour les liens possédant uniquement une URL interne, si l'internaute accède à la liste de liens depuis une IP hors plage d'IP privées, alors le lien sera visible mais non cliquable. Graphiquement le lien est entourée d'une classe CSS "link-disabled" que vous pouvez charter comme vous le souhaitez.
La charte graphique de démo, ajoute par exemple une opacité de 0.5 :

Vous pouvez surcharger ce comportement dans votre charte graphique. Les liens non accessibles depuis une adresse IP hors de plage d'IP privées sont repérables par l'attribut disabled=true

<link id="directoryLink://b6c0d3ab-519f-485e-b65f-95ac49dc31b5" 
      lang="fr" 
      url="https://lien-interne.org" 
      disabled="true" 
      urltype="URL" 
      title="Titre du lien" 
      alternative="Alternative du lien" 
      user-selected="true" 
      picturetype="external" 
	  picturealternative="" 
      picturepath="picture" picturename="index.jpg" picturesize="5150" imagetype="metadata" 
	  grantanyuser="false" limitedaccess="false" />