Migration technique

    • Tout d'abord :

      • Eteindre le serveur
      • Supprimer le custom-nodetypes.xml
      • Redémarrer le serveur

      Service annuaire de lien

      Le service a été migré, les paramètres sont donc typés et il faut passer le script suivant :

      function convertStringPropertyToBoolean(node, propertyName)           
       {           
          var hasChanged = false;           
            if (node.hasProperty(propertyName))           
            {           
                var property = node.getProperty(propertyName);           
               if (property.getType() == 1) // 1 is for string           
               {           
                   var valueAsString = property.getString();           
                   property.remove();           
                   if (valueAsString == "true" || valueAsString == "false")           
                   {           
                       node['setProperty(java.lang.String, boolean)'](propertyName, valueAsString == "true");           
                   }           
                   hasChanged = true;           
               }               
           }           
                 
           return hasChanged;           
       }           
                 
       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.nextNode().getNode("ametys:service_parameters");           
           var hasChanges = convertStringPropertyToBoolean(node, "ametys:displayUserLinks");           
           hasChanges = convertStringPropertyToBoolean(node, "ametys:configurable") || hasChanges;           
           hasChanges = convertStringPropertyToBoolean(node, "ametys:showUrl") || hasChanges;           
           hasChanges = convertStringPropertyToBoolean(node, "ametys:showThemes") || hasChanges;           
                 
           if (hasChanges)           
           {           
               count++;           
           }              
       }           
                 
       session.save();           
       print(count + " updated link directory services.");              

      Reconstruire le workspace Live pour appliquer ces modifications aux pages publiées.

      Limitation d'accès

      La limitation d'accès aux liens s'appuie désormais sur la nouvelle gestion des droits :

      • Un lien public est un lien pour laquelle le profil "Lecteur" est autorisé pour Anonymous
      • Un lien privé est un lien pour laquelle le profil "Lecteur" est exclu pour Anonymous


      Exécutez le script suivant, en modifiant la valeur des variables POPULATION_ID et GROUP_DIRECTORY selon vos propres données, pour migrer vos liens :

      var ConsoleHelper = Java.type('org.ametys.workspaces.repository.ConsoleHelper');           
                 
      // A PERSONNALISER           
      var POPULATION_ID = 'ametys_demo_users';           
      var GROUP_DIRECTORY = 'sql-groups';           
                 
      // Profil Lecteur         
      var readerProfile = Java.to(['READER'], "java.lang.String[]")         
               
      var query = session.getWorkspace().getQueryManager().createQuery("//element(*, ametys:directoryLink)", javax.jcr.query.Query.XPATH);         
      var nodes = query.execute().getNodes();         
               
      var count = 0;         
      while (nodes.hasNext())         
      {         
          var node = nodes.next();    
          var hasChanged = false;    
          if (!node.hasProperty("ametys-internal:status"))    
          {    
              node.setProperty("ametys-internal:status", "USUAL");    
              hasChanged = true;    
          }         
          if (!node.hasNode('ametys-internal:acl'))         
          {         
              var aclNode = node.addNode("ametys-internal:acl", "ametys:acl");         
               
              var grantAnyUser = node.hasProperty("ametys-internal:grant-any-user") ? node.getProperty("ametys-internal:grant-any-user").getBoolean() : false;         
              if (grantAnyUser)         
              {         
                  ConsoleHelper.setProperty(aclNode, "ametys:denied-anonymous-profiles", readerProfile );         
              }         
              else         
              {         
                  // Set ACL for anonymous         
                  ConsoleHelper.setProperty(aclNode, "ametys:allowed-anonymous-profiles", readerProfile);   
       ConsoleHelper.setProperty(aclNode, "ametys:allowed-any-connected-profiles", readerProfile);      
              }         
      
              if (node.hasProperty("ametys-internal:grant-any-user"))         
              {         
                  node.getProperty("ametys-internal:grant-any-user").remove();         
              }         
               
              if (node.hasNode('ametys-internal:granted-users'))         
              {         
                  // Migrate ACL for users         
                  var parentNode = node.getNode("ametys-internal:granted-users");         
      
                  var usersNode = aclNode.addNode("users", "nt:unstructured");         
                  var popNode = usersNode.addNode(POPULATION_ID, "nt:unstructured");         
               
                  var oldUsersNodes = parentNode.getNodes();         
                  while (oldUsersNodes.hasNext())         
                  {         
                      var oldUserNode = oldUsersNodes.next();         
                      var login = oldUserNode.getProperty("ametys:login").getString();         
                      var userNode = popNode.addNode(login, "ametys:acl-user");         
                      ConsoleHelper.setProperty(userNode, "ametys:allowed-profiles", readerProfile);         
                  }         
                  parentNode.remove();         
              }         
      
              if (node.hasNode('ametys-internal:granted-groups'))         
              {         
                  // Migrate ACL for groups         
                  var parentNode = node.getNode("ametys-internal:granted-groups");         
      
                  var groupsNode = aclNode.addNode("groups", "nt:unstructured");         
                  var dirNode = groupsNode.addNode(GROUP_DIRECTORY, "nt:unstructured");         
               
                  var oldGroupsNodes = parentNode.getNodes();         
                  while (oldGroupsNodes.hasNext())         
                  {         
                      var oldGroupNode = oldGroupsNodes.next();         
                      var groupId = oldGroupNode.getProperty("ametys:groupId").getString();         
                      var gpNode = dirNode.addNode(groupId, "ametys:acl-group");         
                      ConsoleHelper.setProperty(gpNode, "ametys:allowed-profiles", readerProfile);         
                  }         
                  parentNode.remove();         
               
              }    
              hasChanged = true;    
          }    
      
          if (hasChanged)    
          {    
              session.save();    
              count++;    
          }         
      }         
      print(count + " links have been updated");         
    • Script de migration

      Passer le script de migration ci-dessous pour changer la valeur par défaut des liens "normaux".

      Télécharger le script

      var qm = session.getWorkspace().getQueryManager();   
      var query = qm.createQuery("//element(*, ametys:directoryLink)[@ametys-internal:status = 'USUAL']", javax.jcr.query.Query.XPATH);   
      var nodes = query.execute().getNodes();   
      var count = 0;   
      while (nodes.hasNext())   
      {   
       var node = nodes.next();   
       var status = node.setProperty("ametys-internal:status", "NORMAL");   
       count++;   
      }   
         
      if (count > 0)   
      {   
       session.save();   
      }   
      print(count + " updated links.");   

      Il faut ensuite reconstruire le live

Retour en haut