Relation Utilisateur du CMS et contenu utilisateur


Type de contenu Utilisateur

Le type abstrait "Utilisateur" a changé.
Il apporte maintenant la donnée "user" qui est de type "user".

Pour les projets qui ont défini leur propre type de contenu "utilisateur" qui étend "org.ametys.plugins.userdirectory.Content.user", il faudra changer les metadataset du contenu pour prendre en compte la donnée "user" :

  • Il faut surtout la positionner sur le metadataset "creation" en édition.
  • Et éviter de la positionner sur les autres metadataset en édition.

Les SCC

Si les utilisateurs de votre annuaire sont liés aux utilisateurs du CMS :

  • Changer la définition de vos SCC dans l'administration :

    • Si c'est une "Source de données SQL", sélectionner à la place "Annuaire des utilisateurs : entités depuis une source de données SQL" et renseigner les champs
    • Si c'est une "Source de données LDAP", sélectionner à la place "Annuaire des utilisateurs : entités depuis une source de données LDAP" et renseigner les champs
    • Si c'est une "Annuaire des utilisateurs : utilisateurs depuis une population Ametys", juste modifier et enregistrer.

Lorsque vous allez changer le type de la SCC, certains paramètres vont se réinitialiser. Pour voir les anciens paramètres, vous pouvez regarder le fichier "synchronizable-collection.xml" dans le dossier /data/config.
Ce fichier sera écrasé au moment où vous sauvegardez.

  • Passer le script de migration suivant en paramétrant :
    • Le type de contenu à migrer
    • L'identifiant de la SCC
    • La donnée du contenu qui porte le champs unique du contenu (la plupart du temps c'est login)
var contentType = "org.ametys.plugin.defaultud.Content.uduser"; // TODO set this field              
  var sccId = "utilisateurs"; // TODO set this field              
  var fieldId = "login"; // TODO set this field        

  var unlock = function(node)              
  {              
    var lockToken = node.getProperty(RepositoryConstants.METADATA_LOCKTOKEN).getString();              
    var lockManager = node.getSession().getWorkspace().getLockManager();              
    lockManager.addLockToken(lockToken);              
    lockManager.unlock(node.getPath());              

    // Remove residual properties              
    node["setProperty(java.lang.String,javax.jcr.Value)"](RepositoryConstants.METADATA_LOCKTOKEN, null);              
    node["setProperty(java.lang.String,javax.jcr.Value)"](RepositoryConstants.METADATA_LOCKOWNER, null);              
    node.getSession().save();              
  }               
              
  var qm = session.getWorkspace().getQueryManager();              
  var query = qm.createQuery("//element(*, ametys:content)[@ametys-internal:contentType='" + contentType + "' "              
  + "and @ametys-internal:scc = '" + sccId + "']", javax.jcr.query.Query.XPATH);              
  var nodes = query.execute().getNodes();              

  var nbContent = 0;              
  while (nodes.hasNext())              
  {              
    var content = nodes.next();              
              
    if (content.isLocked())              
    {              
      unlock(content);              
    }              
              
    content.setProperty("ametys:uniqueId", content.getProperty("ametys:" + fieldId).getString());              
    content.save();              
              
    nbContent++;              
  }              

  print(nbContent + " contenu(s) changé(s)");           

  queryPage = qm.createQuery("//element(*, ametys:defaultPage)[@ametys-internal:virtual ='org.ametys.plugins.userdirectory.page.VirtualUserDirectoryPageFactory']", javax.jcr.query.Query.XPATH);          
  var nodePages = queryPage.execute().getNodes();          
  var nbPage = 0;          
  while (nodePages.hasNext())          
  {          
    var page = nodePages.next();          
    var metadata = page.getProperty("ametys:user-directory-root-classification-metadata").getString();          
          
    if (metadata == fieldId)          
    {          
      page.setProperty("ametys:user-directory-root-classification-metadata", "uniqueId");          
      page.save();          
          
      nbPage++;          
    }          
  }          
          
  print(nbPage + " page(s) changée(s)");                                
  • Relancer une synchronisation de contenu pour finaliser la migration.

 

Le UserXSLTHelper

Il est fort probable que dans vos projet, vous ayez créé votre propre helper XSLT pour surcharger la méthode getCurrentUserContent.
Vous pouvez maintenant supprimer cette surcharge et utiliser la méthode noyau getCurrentUserContent du helper org.ametys.plugins.userdirectory.transformation.xslt.UserXSLTHelper.

Il faudra aussi bien penser à remettre ce helper noyau dans vos XSL à la place du helper projet

De plus, il y a surement une condition de workflow qui a été créé dans votre projet pour faire appel à votre Helper personnalisé (cette condition est souvent appelée CheckCurrentUserContentCondition)
Elle n'est plus utile non plus, vous pouvez la supprimer (avec sa déclaration dans le plugin.xml)

Et vous pouvez à nouveau appeler la condition noyau org.ametys.plugins.userdirectory.workflow.CheckCurrentUserContentCondition.

Retour en haut