[RESOLU] Re: Envoi d'email à tous les membres d'un site

cancel
Showing results for 
Search instead for 
Did you mean: 
matteo_1847
Member II

[RESOLU] Re: Envoi d'email à tous les membres d'un site

Bonjour,

Un petit problème qui me poursuit depuis quelques jours, et auquel je ne trouve pas de solutions… J'aimerais envoyer une notification à tous les utilisateurs du site lors d'une modification d'un document contenu dans un dossier.

"Il suffit d'appliquer une règle de contenu"
En effet, c'est bien ce que j'ai fait, mais il faut spécifier les destinataires. N'ayant pas de groupes dédié au site en question, je dois les rajouter à la main… Sauf que si un nouvel utilisateur arrive (ou quitte le site), il ne faudra pas oublier de l'ajouter dans la règle. Mauvaise solution donc !

"Ah, alors créés un groupe pour ton site"
Pourquoi pas, sauf que SEUL l'administrateur a le droit d'en créer un, et de rajouter des personnes dedans. Or ce n'est pas le rôle de l'administrateur, mais plutôt celui du gestionnaire d'ajouter un à un les utilisateurs au groupe (créé au pire par l'administrateur). Après quelques investigations, j'ai essayé de faire en sorte que le gestionnaire du site puisse avoir accès aux "groupes" en rajoutant dans le share-config.xml une permission pour le manager :
<item type="link" permission="siteManager" id="groups">/console/admin-console/groups</item>
Mais ça ne fonctionne pas, l'élément n'est pas disponible…

1. Existe-t-il une solution, ou une parade pour qu'un gestionnaire puisse créer un groupe ; ou au moins, ajouter et supprimer des personnes à un groupe pré-existant ??
2. Pourquoi n'existe-t-il pas un groupe automatiquement créé qui recenserait tous les utilisateurs d'un site (comme le everyone qui recense TOUS les utilisateurs) ?

Alfrecoeusement,

Matteo.
11 Replies
bertrandf
Active Member

Re: [RESOLU] Re: Envoi d'email à tous les membres d'un site

Il suffit d'appliquer une règle de contenu  Smiley Very Happy

Une règle qui exécute un script. Ce script récupère les utilisateurs du sites (la méthode getSiteShortName() est pratique pour connaitre le site en fonction du noeud) et envoi un mail (vous pouvez meme restreindre vos envois en fonction du rôle de chaque utilisateur).

Le tout en JavaScript :
http://wiki.alfresco.com/wiki/3.4_JavaScript_API
http://wiki.alfresco.com/wiki/3.4_JavaScript_Services_API
matteo_1847
Member II

Re: [RESOLU] Re: Envoi d'email à tous les membres d'un site

Bonjour et merci pour ces indications !

J'ai donc commencé à écrire mon script, et je peux récupérer le nom de mon site en question.
Je suis maintenant bloqué pour récupérer les utilisateurs de mon site. Je m'explique, j'essaye d'utiliser la fonction listMembers() (sans paramètre pour tous les récupérer dans un premier temps) mais je n'y arrive pas… Je l'ai pourtant retourné dans tous les sens mais rien n'y fait… (http://wiki.alfresco.com/wiki/3.4_JavaScript_Services_API#Get_list_of_site_members)
// Récupérer le nom du site
var parent = document.getParent();
var leSite = parent.getSiteShortName();

// Et les membres
var membres = leSite.listMembers();
Erreur : "Cannot find function listMembers"

// ou encore
var membres = site.listMembers();
Erreur : ""site" n'est pas defini"

// ou encore …
var site = siteService.getSite(leSite);
var members = site.listMembers();
Erreur : La méthode 'org.alfresco.repo.site.script.Site.listMembers()' est introuvable"
Voili voilou, une petite idée? J'imagine que ça doit être tout bête, mais je sèche…
bertrandf
Active Member

Re: [RESOLU] Re: Envoi d'email à tous les membres d'un site

getSiteShortName() ne retourne pas un 'objet' site mais seulement son shortName.

Il faudrait faire qqch comme ca :
var shortName= parent.getSiteShortName();
var leSite = siteService.getSite(shortName);

var membres = leSite.listMembers();

[EDIT] Oups, je viens de voir que j'ai pas lu en entier votre POST.

Peut être essayer avec :
leSite.listMembers(null, null, 1000, false);
matteo_1847
Member II

Re: [RESOLU] Re: Envoi d'email à tous les membres d'un site

Bonjour,

Merci, pour votre réactivité! J'avais en effet rectifié en mettant les paramètres pour listMembers. Cependant, il faut enlever le dernier booléen, sinon error ! (d'ailleurs, ça veut aussi dire que le wiki n'est pas à jour pour les params d'entrées ?)

J'avance progressivement… Je n'arrive toujours pas à récupérer un nom d'utilisateur, pour enfin avoir son email :
// On récupère les membres du site
var membres = leSite.listMembers(null,null,0);
var membre;
for each (membre in membres) {
   var donneesUtilisateur =  people.getPerson(membre);
   // Et je récupère l'email de la personne et c'est gagné…
Sauf que :
membre vaut : "siteCollaborator" et non l'id du premier membre du site…
et donc donneesUtilisateur vaut : null puisque aucun utilisateur ne s'appelle "siteCollaborator"…

D'après le Wiki, listMember() retourne : "Map<String, String>. The list of members of a site with their roles. If no name or role filter is specified, all members of the site are listed."
Je pense que j'utilise mal la ressource Map. Une suggestion d'utilisation ?

Merci, Matteo
bertrandf
Active Member

Re: [RESOLU] Re: Envoi d'email à tous les membres d'un site

(d'ailleurs, ça veut aussi dire que le wiki n'est pas à jour pour les params d'entrées ?)
Oui  Smiley Sad

Pour vous aider à avancer, allez voir le fichier memberships.get.js qui doit se trouver dans /alfresco/WEB-INF/classes/alfresco/templates/webscripts/org/alfresco/repository/site/membership/
matteo_1847
Member II

Re: [RESOLU] Re: Envoi d'email à tous les membres d'un site

Bonjour,

Ca y est mon script d'envoi fonctionne, je le mets à disposition ici. Je me suis un peu arraché les cheveux, mais au moins je connais mieux l'API maintenant! Peut-être existe-t-il plus simple ou mieux codé, mais ça marche, c'est le principal  Smiley Happy

Ce script est à placer dans le répertoire 'scripts' du 'dictionnaire des données'. Il envoie un mail à tous les utilisateurs sauf l'administrateur (pour ne pas trop le spammer le pauvre!)

// Récupérer le nom du site
var parent = document.getParent();
var shortName= parent.getSiteShortName();
var leSite = siteService.getSite(shortName);

// On récupère les membres du site
var membres = leSite.listMembers(null,null,0);
var nomDuSite = leSite.title;
var membre;

for (membre in membres){
   var donneesMembres = people.getPerson(membre);
   var email = donneesMembres.properties.email;
   if (donneesMembres.properties.userName!="admin") {
      // create mail action
      var mail = actions.create("mail");
      mail.parameters.to = email;
      mail.parameters.subject = "Un document a été mis à jour dans l'univers '"+nomDuSite+"'…";
      mail.parameters.from = "admin@alfresco.fr";
      mail.parameters.template = companyhome.childByNamePath("Dictionnaire de données/Modèles d'e-mail/Modèles d'e-mail de notification/notify_user_email.ftl");
      mail.parameters.text = "Un document mis à jour !" ;
      // execute l'action
      mail.execute(document);
   }
}
A +, et merci à BertrandF !
P.S : si on veut seulement l'envoyer aux collaborateurs par exemple, il suffit d'appliquer un filtre dans listMembers().

[EDIT] : J'ai modifié le titre qui est un peu plus parlant pour ce qui a été fait finalement !
matteo_1847
Member II

Re: [RESOLU] Re: Envoi d'email à tous les membres d'un site

O M G (ou OMD pour nous les francophones!)

Je crois rêver… Ce topic n'est malheureusement pas clôt… Je me suis rendu compte que j'obtenais des erreurs. Le pire, c'est que je ne comprends pas pourquoi je n'avais pas vu ces phénomènes quand j'avais fait mes tests, et pensait que c'était "Résolu"..

Bon le fait est là. Lorsque j'exécute le scénario suivant :
1. Ajouter 1 règle lors de "l'ajout ou création d'un document", exécuter l'action : "exécuter le script" ci-dessus.
2. Ajouter un fichier (build.xml) dans le répertoire (toto) concerné par la règle,
3. Consulter ce fichier, en y cliquant dessus.

Et j'obtiens dans ma boite mail, ces 3 mails :
"Le document suivant : build.xml, a été ajouté dans le dossier : toto." –> Ce mail est OK
"Le document suivant : doclib, a été ajouté dans le dossier : build.xml." –> ??? Celui-ci moins ….
"Le document suivant : webpreview, a été ajouté dans le dossier : build.xml." –> re ???

Y comprenez-vous quelque chose ??? Là je sèche, et ça me dépasse totalement.. Je pensais être pourtant si content de ce script……
bertrandf
Active Member

Re: [RESOLU] Re: Envoi d'email à tous les membres d'un site

Bonjour,

Les fichiers doclib et webpreview sont liés à la prévisualisation et la vignette d'un document.
Dans share, pour chaque document, vous retrouverez ces fichiers.

Dans votre script, il suffit de tester le type du document courant, si vous souhaitez envoyer des mails seulement pour des documents de type cm:content :

if (document.type == "{http://www.alfresco.org/model/content/1.0}content") {
}
ou

if (document.typeShort== "cm:content") {
}


Sinon, vous vérifiez que le document courant n'est pas une vignette ou une prévisualisation (type {http://www.alfresco.org/model/content/1.0}thumbnail) :
if (document.type != "{http://www.alfresco.org/model/content/1.0}thumbnail") {
}
matteo_1847
Member II

Re: [RESOLU] Re: Envoi d'email à tous les membres d'un site

Bonjour,

Merci pour cette solution plus 'propre'… En effet, en attendant, je n'envoyais l'e-mail que si le nom du document ne s'appelait pas webpreview ou doclib… Donc ça fonctionnait également, jusqu'au jour où un utilisateur aurait ajouté un document intilué "webpreview"!..

Une dernière chose étrange, ce phénomène-ci. Cela ne concerne pas spécialement MA règle mais les règles en général, lors de la mise à jour d'un document :
1. je positionne l'unique règle de contenu suivante : quand "des éléments sont mis à jour dans le dossier" sur "tous les éléments" j'exécute l'action "envoyer un E-mail" à mon adresse.
2. j'ajoute un document —> la règle est déclenchée : je reçois un e-mail (alors qu'il s'agit d'un ajout et que la règle est définie pour les éléments mis à jour).
3. je mets à jour ce document (grace à "mettre à jour") —> je reçois 2 mails identiques (au lieu d'un seul).

Mon install d'alfresco (3.4-d) est pourtant clean… Puis-je vous demander si vous arrivez à reproduire le scénario ci-dessus?

Merci beaucoup.