Avant de commencer la migration, veuillez vous assurer que vous avez fait la migration suivante : plugin-contentIO
Action de synchronisation des utilisateurs :
On a rajouté un nouveau paramètre pour la synchronisation des entités (Source SQL des entités).
Ce paramètre est : 'Action de synchronisation des utilisateurs'. Le paramètre par défaut est 800. Dans la plupart des cas, il faut laisser 800.
Il vous faut donc pour chaque synchronisation de contenu de type "Source SQL des entités" cliquer sur 'Modifier' puis sur 'Enregistrer et fermer' pour prendre en compte ce nouveau paramètre.
Nouveau cycle de vie pour les utilisateurs :
Un nouveau cycle de vie pour les utilisateurs a été rajouté ici
Il est conseillé de passer tous vos contenus utilisateurs sur ce cycle de vie. Voir la documentation
Ensuite, il faut définir la clé i18n associée pour lui donner un nom dans WEB-INF/i18n/applications.xml :
Oups !
La copie dans le presse papier a échouée. Ouvrez le code et copier-le manuellement.
<message key="WORKFLOW_user">Cycle de vie des utilisateurs</message>
<message key="WORKFLOW_user">Cycle de vie des utilisateurs</message>
<message key="WORKFLOW_user">Cycle de vie des utilisateurs</message>
Puis passer le script de migration suivant :
Attention, si vous aviez déjà définie un cycle de vie différent pour les utilisateurs (autre que le cycle de vie 'contentio'), il faut adapter ce script et changer le nom du worfklow (variable defaultWorkflowName)
Oups !
La copie dans le presse papier a échouée. Ouvrez le code et copier-le manuellement.
var defaultWorkflowName = "contentio";
var contentTypeEP = serviceManager.lookup('org.ametys.cms.contenttype.ContentTypeExtensionPoint');
var request = "@ametys-internal:contentType='org.ametys.plugins.userdirectory.Content.user'";
contentTypeEP.getSubTypes('org.ametys.plugins.userdirectory.Content.user').forEach(function(contentTypeId) {
request += " or @ametys-internal:contentType='" + contentTypeId + "'"
});
var qm = session.getWorkspace().getQueryManager();
var query = qm.createQuery("//element(*, ametys:content)[" + request + "]", javax.jcr.query.Query.XPATH);
var nodes = query.execute().getNodes();
var nbUserChanged = 0;
while (nodes.hasNext())
{
var content = nodes.next();
if (content.hasNode("ametys-internal:workflows"))
{
var workflows = content.getNode("ametys-internal:workflows");
var workflowNodes = workflows.getNodes();
var hasChanged = false;
while (workflowNodes.hasNext())
{
var workflowNode = workflowNodes.next();
var workflowName = workflowNode.getProperty("oswf:workflowName").getString();
if (workflowName == defaultWorkflowName)
{
workflowNode.setProperty("oswf:workflowName", "user");
hasChanged = true;
}
}
if (hasChanged)
{
content.save();
nbUserChanged++;
}
}
}
print(nbUserChanged + " contenu(s) 'utilisateur' changé(s)");
var defaultWorkflowName = "contentio";
var contentTypeEP = serviceManager.lookup('org.ametys.cms.contenttype.ContentTypeExtensionPoint');
var request = "@ametys-internal:contentType='org.ametys.plugins.userdirectory.Content.user'";
contentTypeEP.getSubTypes('org.ametys.plugins.userdirectory.Content.user').forEach(function(contentTypeId) {
request += " or @ametys-internal:contentType='" + contentTypeId + "'"
});
var qm = session.getWorkspace().getQueryManager();
var query = qm.createQuery("//element(*, ametys:content)[" + request + "]", javax.jcr.query.Query.XPATH);
var nodes = query.execute().getNodes();
var nbUserChanged = 0;
while (nodes.hasNext())
{
var content = nodes.next();
if (content.hasNode("ametys-internal:workflows"))
{
var workflows = content.getNode("ametys-internal:workflows");
var workflowNodes = workflows.getNodes();
var hasChanged = false;
while (workflowNodes.hasNext())
{
var workflowNode = workflowNodes.next();
var workflowName = workflowNode.getProperty("oswf:workflowName").getString();
if (workflowName == defaultWorkflowName)
{
workflowNode.setProperty("oswf:workflowName", "user");
hasChanged = true;
}
}
if (hasChanged)
{
content.save();
nbUserChanged++;
}
}
}
print(nbUserChanged + " contenu(s) 'utilisateur' changé(s)");
var defaultWorkflowName = "contentio";
var contentTypeEP = serviceManager.lookup('org.ametys.cms.contenttype.ContentTypeExtensionPoint');
var request = "@ametys-internal:contentType='org.ametys.plugins.userdirectory.Content.user'";
contentTypeEP.getSubTypes('org.ametys.plugins.userdirectory.Content.user').forEach(function(contentTypeId) {
request += " or @ametys-internal:contentType='" + contentTypeId + "'"
});
var qm = session.getWorkspace().getQueryManager();
var query = qm.createQuery("//element(*, ametys:content)[" + request + "]", javax.jcr.query.Query.XPATH);
var nodes = query.execute().getNodes();
var nbUserChanged = 0;
while (nodes.hasNext())
{
var content = nodes.next();
if (content.hasNode("ametys-internal:workflows"))
{
var workflows = content.getNode("ametys-internal:workflows");
var workflowNodes = workflows.getNodes();
var hasChanged = false;
while (workflowNodes.hasNext())
{
var workflowNode = workflowNodes.next();
var workflowName = workflowNode.getProperty("oswf:workflowName").getString();
if (workflowName == defaultWorkflowName)
{
workflowNode.setProperty("oswf:workflowName", "user");
hasChanged = true;
}
}
if (hasChanged)
{
content.save();
nbUserChanged++;
}
}
}
print(nbUserChanged + " contenu(s) 'utilisateur' changé(s)");
Il vous reste plus qu'à modifier la synchronisation des contenus de vos utilisateurs en définissant le bon cycle de vie associé :
Cycle de vie pour les entités :
Vous pouvez supprimer l'action 22 de votre fichier de workflow (WEB-INF/param/workflows/udorgunit.xml).
Nouveau champs pour le contenu 'utilisateur' :
On a maintenant un lien bi-directionnel entre les entités et les utilisateurs. Pour cela, on a rajouté une donnée "orgunits" dans le type de contenu org.ametys.plugins.userdirectory.Content.user.xml :
Oups !
La copie dans le presse papier a échouée. Ouvrez le code et copier-le manuellement.
Dans votre projet, votre type de contenu 'utilisateur' étend celui là. Il faudra donc rajouter cette donnée dans tous les metadataSet de votre type de contenu.