Migration technique

    • Liens normaux

      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

    • Limitation d'accès

      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 pour migrer vos liens :

      var ConsoleHelper = Java.type('org.ametys.workspaces.repository.ConsoleHelper');  
      
      // 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", "NORMAL");  
      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 oldUsersNodes = parentNode.getNodes();  
      while (oldUsersNodes.hasNext())  
      {  
      var oldUserNode = oldUsersNodes.next();  
      var userPopulation = oldUserNode.getProperty("ametys:population").getString();  
      
      if (!usersNode.hasNode(userPopulation))  
      {  
      usersNode.addNode(userPopulation, "nt:unstructured");  
      }  
      
      var popNode = usersNode.getNode(userPopulation);  
      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 oldGroupsNodes = parentNode.getNodes();  
      while (oldGroupsNodes.hasNext())  
      {  
      var oldGroupNode = oldGroupsNodes.next();  
      var groupDirectory = oldGroupNode.getProperty("ametys:groupDirectory").getString();  
      
      if (!groupsNode.hasNode(groupDirectory))  
      {  
      groupsNode.addNode(groupDirectory, "nt:unstructured");  
      }  
      
      var dirNode = groupsNode.getNode(groupDirectory);  
      
      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");  
Retour en haut