Exécutez le script suivant pour migrer l'ensemble de vos services.

Réconstruisez le workspace Live ensuite.

Télécharger le script (32.9 KB)

var ConsoleHelper = Java.type('org.ametys.workspaces.repository.ConsoleHelper');   
function __getServicesNodes(serviceId)                          
{                          
    var query = qm.createQuery("//element(*, ametys:zoneItem)[@ametys-internal:type = 'SERVICE' and @ametys-internal:service = '" + serviceId + "']", javax.jcr.query.Query.XPATH);                                  
    return query.execute().getNodes();                            
}                          
               
function __migrateService(node, params)                          
{                          
    var paramsNode = node.getNode("ametys:service_parameters");                          
    var hasChanges = false;                          
    for (var name in params)                          
    {                                  
      var hasChanges = false;                          
      var type = params[name];                          
      if (type == 'long')                          
      {                          
        hasChanges = __convertStringPropertyToLong(paramsNode, "ametys:" + name) || hasChanges;                          
      }                          
      else if (type == 'boolean')                          
      {                          
        hasChanges = __convertStringPropertyToBoolean(paramsNode, "ametys:" + name) || hasChanges;                          
      }                 
      else if (type == 'user')                 
      {                 
        hasChanges = __convertStringPropertyToUser(paramsNode, "ametys:" + name) || hasChanges;                 
      }                 
    }                          
                           
    return hasChanges;                                
}                          
               
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")                                  
      {                                  
        node['setProperty(java.lang.String, boolean)'](propertyName, true);                                  
        hasChanged = true;                                  
      }                                  
      else if (valueAsString == "false")                                  
      {                                  
        node['setProperty(java.lang.String, boolean)'](propertyName, false);                                  
        hasChanged = true;                                  
      }                                  
    }                                  
  }                                      
  return hasChanged;                                  
}                          
               
function __convertStringPropertyToLong(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)                                  
      {                                    
        node['setProperty(java.lang.String, long)'](propertyName, Number(valueAsString));                                  
        hasChanged = true;                                  
      }                                  
    }                                  
  }                                        
  return hasChanged;                                  
}                 
               
function __convertStringPropertyToUser(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)                 
     {                 
       var jsonUtils = serviceManager.lookup('org.ametys.core.util.JSONUtils');                 
       var userMap = jsonUtils.convertJsonToMap(valueAsString);                 
                       
       var userNode = node['addNode(java.lang.String, java.lang.String)'](propertyName, 'ametys:user');                 
       userNode['setProperty(java.lang.String, java.lang.String)']('ametys:login', userMap.get("login"));                 
       userNode['setProperty(java.lang.String, java.lang.String)']('ametys:population', userMap.get("populationId"));                 
                       
       hasChanged = true;                 
     }                 
    }                 
   }                 
   return hasChanged;                 
}      
      
function __convertStringPropertyToMultipleUser(node, propertyName)      
{      
  var hasChanged = false;      
  if (node.hasProperty(propertyName))      
  {      
    var property = node.getProperty(propertyName);      
    if (property.getType() == 1) // 1 is for string      
    {      
      var values = property.getValues();      
      property.remove();      
      
      if (values)      
      {      
        var jsonUtils = serviceManager.lookup('org.ametys.core.util.JSONUtils');      
        var usersNode = node['addNode(java.lang.String, java.lang.String)'](propertyName, 'ametys:multipleItem');      
 usersNode['setProperty(java.lang.String, java.lang.String)']('ametys-internal:typeId', 'user');      
      
        for (var i = 0; i < values.length; i++)      
        {      
          var user = jsonUtils.convertJsonToMap(values[i].getString());      
          var nodeIndex = i + 1;      
          var userNode = usersNode['addNode(java.lang.String, java.lang.String)']('ametys:' + nodeIndex, 'ametys:user');      
          userNode['setProperty(java.lang.String, java.lang.String)']('ametys:login', user.get("login"));      
          userNode['setProperty(java.lang.String, java.lang.String)']('ametys:population', user.get("populationId"));      
        }      
      
        hasChanged = true;      
      }      
    }      
  }      
  return hasChanged;      
}      
      
function __removeStringPropertyIfEmpty(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();      
      
      if (!valueAsString)      
      {      
        property.remove();      
        hasChanged = true;      
      }      
    }      
  }      
  return hasChanged;      
}      
      
function migrateGoogleCalendarService()                          
{                          
    var params = {'iframe-height': 'long', 'iframe-border': 'boolean', 'showTitle': 'boolean', 'showNav': 'boolean', 'showDate': 'boolean', 'showPrint': 'boolean', 'showTabs': 'boolean', 'showCalendars': 'boolean', 'showTz': 'boolean'};                          
    var nodes = __getServicesNodes('org.ametys.plugins.google-calendar.service.Calendar');                          
    var count = 0;                             
    while (nodes.hasNext())                             
    {                          
        if (__migrateService(nodes.nextNode(), params))                          
        {                          
          count++;                          
        }                          
    }                          
                           
    if (count > 0)                          
    {                          
        session.save();                          
        print(count + " google calendar services have been migrated.");                          
    }                            
}                             
               
function migrateFilteredContentsService()                          
{                          
    var params = {'nb-max': 'long', 'pagination': 'long', 'mask-orphan': 'boolean', 'handle-user-access': 'boolean', 'rss': 'boolean'};                          
    var nodes = __getServicesNodes('org.ametys.web.service.FilteredContentsService');                          
    var count = 0;                             
    while (nodes.hasNext())                             
    {                          
        var node = nodes.nextNode();                          
        var hasChanges = __migrateService(node, params);                          
                                  
        var paramsNode = node.getNode("ametys:service_parameters");                          
        var repeaterEntries = paramsNode.getNode("ametys:search").getNodes();                                  
        while (repeaterEntries.hasNext())                                  
        {                                  
          var repeaterEntry = repeaterEntries.nextNode();                                  
          hasChanges = __convertStringPropertyToBoolean(repeaterEntry, "ametys:strict-search-on-tags") || hasChanges;                                  
        }                             
                              
        if (hasChanges)                          
        {                          
          count++;                          
        }                          
    }                          
                           
    if (count > 0)                          
    {                          
        session.save();                          
        print(count + " filtered contents services have been migrated.");                          
    }                             
}                              
               
function migratePostsService()                          
{                          
    var params = {'year': 'long', 'month': 'long'};                          
    var nodes = __getServicesNodes('org.ametys.blog.service.PostsService');                          
    var count = 0;                             
    while (nodes.hasNext())                             
    {                          
        if (__migrateService(nodes.nextNode(), params))                          
        {                          
          count++;                          
        }                          
    }                          
                           
    if (count > 0)                          
    {                          
        session.save();                          
        print(count + " posts services have been migrated.");                          
    }                            
}                            
               
function migratePostsByTagsService()                          
{                          
    var params = {'excludePrivateTags': 'boolean'};                          
    var nodes = __getServicesNodes('org.ametys.blog.service.PostsByTagsService');                          
    var count = 0;                             
    while (nodes.hasNext())                             
    {                          
        if (__migrateService(nodes.nextNode(), params))                          
        {                          
          count++;                          
        }                          
    }                          
                           
    if (count > 0)                          
    {                          
        session.save();                          
        print(count + " posts services have been migrated.");                          
    }                            
}                          
                           
function migrateLinkDirectoryService()                          
{                          
    var params = {'displayUserLinks': 'boolean', 'configurable': 'boolean', 'showUrl': 'boolean', 'showThemes': 'boolean'};                          
    var nodes = __getServicesNodes('org.ametys.plugins.linkdirectory.DirectoryService');                          
    var count = 0;                             
    while (nodes.hasNext())                             
    {                          
        if (__migrateService(nodes.nextNode(), params))                          
        {                          
          count++;                          
        }                          
    }                          
                           
    if (count > 0)                          
    {                          
        session.save();                          
        print(count + " link directory services have been migrated.");                          
    }                            
}                            
               
function migrateExternalSearchService()                          
{                          
    var params = {'limit': 'long'};                          
    var nodes = __getServicesNodes('org.ametys.plugins.external.data.search.service');                          
    var count = 0;                             
    while (nodes.hasNext())                             
    {                          
        if (__migrateService(nodes.nextNode(), params))                          
        {                          
          count++;                          
        }                          
    }                          
                           
    if (count > 0)                          
    {                          
      session.save();                          
      print(count + " external search services have been migrated.");                          
    }                            
}                          
               
function migrateCalendarService()                          
{                          
    var params = {'months-before': 'long', 'months-after': 'long', 'contents-on-same-page': 'boolean'};                          
    var nodes = __getServicesNodes('org.ametys.plugins.calendar.Calendar');                          
    var count = 0;                             
    while (nodes.hasNext())                             
    {                          
        if (__migrateService(nodes.nextNode(), params))                          
        {                          
          count++;                          
        }                          
    }                          
                           
    if (count > 0)                          
    {                          
      session.save();                          
      print(count + " calendar services have been migrated.");                          
    }                            
}                          
               
function migrateAgendaService()                          
{                          
    var params = {'months-before': 'long', 'months-after': 'long', 'mask-orphan': 'boolean', 'handle-user-access': 'boolean', 'pdf-download': 'boolean', 'ical-download': 'boolean', 'rss': 'boolean'};                          
    var nodes = __getServicesNodes('org.ametys.plugins.calendar.Agenda');                          
    var count = 0;                             
    while (nodes.hasNext())                             
    {                          
        if (__migrateService(nodes.nextNode(), params))                          
        {                          
          count++;                          
        }                          
    }                          
                           
    if (count > 0)                          
    {                          
      session.save();                          
      print(count + " agenda services have been migrated.");                          
    }                            
}                         
               
function migrateFilteredPagesService()                         
{                         
    var params = {'nb-max': 'long', 'pagination': 'long'};                         
    var nodes = __getServicesNodes('org.ametys.web.service.FilteredPagesService');                         
    var count = 0;                            
    while (nodes.hasNext())                            
    {                         
        if (__migrateService(nodes.nextNode(), params))                         
        {                         
          count++;                         
        }                         
    }                         
                          
    if (count > 0)                         
    {                         
      session.save();                         
      print(count + " filtered pages services have been migrated.");                         
    }                           
}                      
               
function migrateNewsletterListService()                      
{                      
    var params = {'length': 'long', 'rss': 'boolean'};                      
    var nodes = __getServicesNodes('org.ametys.newsletter.service.ListService');                      
    var count = 0;                      
    while (nodes.hasNext())                      
    {                      
        if (__migrateService(nodes.nextNode(), params))                      
        {                      
            count++;                      
        }                      
    }                      
                      
    if (count > 0)                      
    {                      
        session.save();                      
        print(count + " newsletter list services have been migrated.");                      
    }                      
}                      
               
function migrateSitemapService()                      
{                      
    var params = {'depth': 'long', 'includeInvisiblePage': 'boolean'};                      
    var nodes = __getServicesNodes('org.ametys.web.service.SitemapService');                      
    var count = 0;                      
    while (nodes.hasNext())                      
    {                      
        if (__migrateService(nodes.nextNode(), params))                      
        {                      
            count++;                      
        }                      
    }                      
                      
    if (count > 0)                      
    {                      
        session.save();                      
        print(count + " sitemap services have been migrated.");                      
    }                      
}                      
               
function migrateIframeService()                      
{                      
    var params = {'iframe-height': 'long', 'iframe-border': 'boolean', 'transparancy': 'boolean'};                      
    var nodes = __getServicesNodes('org.ametys.web.service.IframeService');                      
    var count = 0;                      
    while (nodes.hasNext())                      
    {                      
        if (__migrateService(nodes.nextNode(), params))                      
        {                      
            count++;                      
        }                      
    }                      
                      
    if (count > 0)                      
    {                      
        session.save();                      
        print(count + " iframe services have been migrated.");                      
    }                      
}                      
               
function migrateProgramListService()                     
{                     
    var params = {'alphaOrderOnFirstLevel': 'boolean', 'alphaOrderOnSecondLevel': 'boolean', 'displaySubProgram': 'boolean'};                     
    var nodes = __getServicesNodes('org.ametys.odf.service.ProgramList');                     
    var count = 0;                     
    while (nodes.hasNext())                     
    {                     
        if (__migrateService(nodes.nextNode(), params))                     
        {                     
            count++;                     
        }                     
    }                     
                     
    if (count > 0)                     
    {                     
        session.save();                     
        print(count + " program list services have been migrated.");                     
    }                     
}                     
               
function migrateServerDirectoryService()                     
{                     
    var params = {'enableDynamicPaths': 'boolean'};                     
    var nodes = __getServicesNodes('org.ametys.plugins.server.directory');                     
    var count = 0;                     
    while (nodes.hasNext())                     
    {                     
        if (__migrateService(nodes.nextNode(), params))                     
        {                     
            count++;                     
        }                     
    }                     
                     
    if (count > 0)                     
    {                     
        session.save();                     
        print(count + " server directory services have been migrated.");                     
    }                     
}                     
               
function migrateWordsService()                     
{                     
    var params = {'limit': 'long'};                     
    var nodes = __getServicesNodes('org.ametys.plugins.tagcloud.services.Words');                     
    var count = 0;                     
    while (nodes.hasNext())                     
    {                     
        if (__migrateService(nodes.nextNode(), params))                     
        {                     
            count++;                     
        }                     
    }                     
                     
    if (count > 0)                     
    {                     
        session.save();                     
        print(count + " words services have been migrated.");                     
    }                     
}                     
               
function migrateTagsService()                     
{                     
    var params = {'limit': 'long'};                     
    var nodes = __getServicesNodes('org.ametys.plugins.tagcloud.services.Tags');                     
    var count = 0;                     
    while (nodes.hasNext())                     
    {                     
        if (__migrateService(nodes.nextNode(), params))                     
        {                     
            count++;                     
        }                     
    }                     
                     
    if (count > 0)                     
    {                     
        session.save();                     
        print(count + " tags services have been migrated.");                     
    }                     
}                 
               
function migrateUGCService()                 
{                 
  var params = {'user': 'user'};                 
  var nodes = __getServicesNodes('org.ametys.plugin.ugc.service.UGC');                 
  var count = 0;                 
  while (nodes.hasNext())                 
  {                 
    if (__migrateService(nodes.nextNode(), params))                 
    {                 
      count++;                 
    }                 
  }                 
                 
  if (count > 0)                 
  {                 
    session.save();                 
    print(count + " UGC services have been migrated.");                 
  }                 
}                
               
function migrateRevampingService()                
{                
  var params = {'cas': 'boolean'};                
  var nodes = __getServicesNodes('org.ametys.proxied-content.service.Revamping');                
  var count = 0;                
  while (nodes.hasNext())                
  {                
    if (__migrateService(nodes.nextNode(), params))                
    {                
      count++;                
    }                
  }                
               
  if (count > 0)                
  {                
    session.save();                
    print(count + " revamping services have been migrated.");                
  }                
}           
      
function migrateFilteredPostsService()                
{                
  var params = {'pagination': 'long'};                
  var nodes = __getServicesNodes('org.ametys.plugins.blog.service.FilteredPostsService');                
  var count = 0;                
  while (nodes.hasNext())                
  {                
    if (__migrateService(nodes.nextNode(), params))                
    {                
      count++;                
    }                
  }                
               
  if (count > 0)                
  {                
    session.save();                
    print(count + " filtered posts services have been migrated.");                
  }                
}          
      
function migrateShowTweetsService()          
{          
  var params = {'max': 'long'};          
  var nodes = __getServicesNodes('org.ametys.plugins.socialnetworking.twitter.showtweets');          
  var count = 0;          
  while (nodes.hasNext())          
  {          
    if (__migrateService(nodes.nextNode(), params))          
    {          
      count++;          
    }          
  }          
      
  if (count > 0)          
  {          
    session.save();          
    print(count + " swhow tweets services have been migrated.");          
  }          
}         
      
function migrateSearchService()        
{        
  var params = {'advanced-search': 'boolean', 'strict-search-on-tags': 'boolean', 'search-multisite': 'boolean', 'facets': 'boolean', 'offset': 'long', 'withWorkspaces': 'boolean'};        
  var nodes = __getServicesNodes('org.ametys.web.service.FrontSearchService');        
  var count = 0;        
  while (nodes.hasNext())        
  {        
    if (__migrateService(nodes.nextNode(), params))        
    {        
      count++;        
    }        
  }        
        
  if (count > 0)        
  {        
    session.save();        
    print(count + " search services have been migrated.");        
  }        
}        
      
function migrateResourcesSearchService()        
{        
  var params = {'offset': 'long', 'search-by-format': 'boolean', 'search-by-creator': 'boolean', 'search-by-publisher': 'boolean', 'search-by-rights': 'boolean', 'search-multisite': 'boolean', 'on-same-page': 'boolean'};        
  var nodes = __getServicesNodes('org.ametys.web.service.ResourcesSearchService');        
  var count = 0;        
  while (nodes.hasNext())        
  {        
    if (__migrateService(nodes.nextNode(), params))        
    {        
      count++;        
    }        
  }        
        
  if (count > 0)        
  {        
    session.save();        
    print(count + " resources search services have been migrated.");        
  }        
}        
      
function migrateODFSearchService()        
{        
  var params = {'advanced-search': 'boolean', 'subprogram-search': 'boolean', 'facets': 'boolean', 'offset': 'long'};        
  var nodes = __getServicesNodes('org.ametys.odf.service.SearchService');        
  var count = 0;        
  while (nodes.hasNext())        
  {        
    if (__migrateService(nodes.nextNode(), params))        
    {        
      count++;        
    }        
  }        
        
  if (count > 0)        
  {        
    session.save();        
    print(count + " (ODF) search services have been migrated.");        
  }        
}        
      
function migrateSearchCourseService()        
{        
  var params = {'advanced-search': 'boolean', 'facets': 'boolean', 'displayProgramReferences': 'boolean', 'offset': 'long'};        
  var nodes = __getServicesNodes('org.ametys.odf.service.SearchCourseService');        
  var count = 0;        
  while (nodes.hasNext())        
  {        
    if (__migrateService(nodes.nextNode(), params))        
    {        
       count++;        
    }        
  }        
        
  if (count > 0)        
  {        
    session.save();        
    print(count + " search courses services have been migrated.");        
  }        
}      
      
function migrateSyndicationService()      
{      
  var params = {'length': 'long', 'nb-feed-user': 'long', 'nb-feed-max': 'long'};      
  var nodes = __getServicesNodes('org.ametys.plugins.syndication.service.RSS');      
  var count = 0;      
  while (nodes.hasNext())      
  {      
    var node = nodes.nextNode();      
    var hasChanges = __migrateService(node, params);      
      
    var paramsNode = node.getNode("ametys:service_parameters");      
    var repeaterEntries = paramsNode.getNode("ametys:feeds").getNodes();      
    while (repeaterEntries.hasNext())      
    {      
      var repeaterEntry = repeaterEntries.nextNode();      
      hasChanges = __convertStringPropertyToLong(repeaterEntry, "ametys:length") || hasChanges;      
      hasChanges = __convertStringPropertyToBoolean(repeaterEntry, "ametys:limited") || hasChanges;      
   hasChanges = ConsoleHelper.convertSingleToMultipleProperty(repeaterEntry, "ametys:fo-user") || hasChanges;    
 hasChanges = ConsoleHelper.convertSingleToMultipleProperty(repeaterEntry, "ametys:fo-group") || hasChanges;    
 hasChanges = __convertStringPropertyToMultipleUser(repeaterEntry, "ametys:fo-user") || hasChanges;      
      hasChanges = __removeStringPropertyIfEmpty(repeaterEntry, "ametys:cache") || hasChanges;      
    }      
      
    if (hasChanges)      
    {      
      count++;      
    }      
  }      
      
  if (count > 0)      
  {      
    session.save();      
    print(count + " syndication RSS services have been migrated.");      
  }      
}    

function migrateOrganizationChartService() 
{ 
 var nodes = __getServicesNodes('org.ametys.plugins.userdirectory.service.OrganizationChart'); 
 
 while (nodes.hasNext()) 
 { 
 var node = nodes.nextNode(); 
 var paramsNode = node.getNode("ametys:service_parameters"); 
 
 if (node.hasProperty("ametys:maxLevel")) 
 { 
 var property = node.getProperty("ametys:maxLevel"); 
 
 var property = node.getProperty(propertyName); 
 if (property.getType() == 1) // 1 is for string 
 { 
 count++; 
 var value = Number(property.getString()); 
 property.remove(); 
 
 if (value >= 1) // If the property is not filled, then value == 0 
 { 
 node['setProperty(java.lang.String, long)']("ametys:maxLevel", value); 
 } 
 } 
 } 
 } 
 
 if (count > 0) 
 { 
 session.save(); 
 print(count + " organization chart services have been migrated."); 
 } 
} 
               
var qm = session.getWorkspace().getQueryManager();                            
                                       
migrateOrganizationChartService(); 
migrateGoogleCalendarService();                            
migrateLinkDirectoryService();                                              
migrateServerDirectoryService();                      
migrateWordsService();                      
migrateTagsService();                                  
migrateRevampingService();                          
migrateSitemapService();                      
migrateIframeService();              
migrateExternalSearchService();              
migrateUGCService();                                      
migratePostsService();             
migratePostsByTagsService();             
migrateCalendarService();             
migrateAgendaService();             
migrateProgramListService();                      
migrateNewsletterListService();               
migrateShowTweetsService();                 
migrateSearchService();        
migrateResourcesSearchService();        
migrateODFSearchService();        
migrateSearchCourseService();        
migrateFilteredContentsService();                         
migrateFilteredPagesService();           
migrateFilteredPostsService();          
migrateSyndicationService();      
               
print("End of migration, you can rebuild the Live workspace");                          
Retour en haut