Récupérer tous les sites Share d'un utilisateur

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

Récupérer tous les sites Share d'un utilisateur

Bonjour à tous,
Je reviens une énième fois vers vous pour m'aider sur un point qui me pose problème :
J'essaye (avec l'API JavaScript) de récupérer tous les sites Share où un utilisateur à les droits d'éditer le contenu (les liens par exemple Smiley Happy ) :
J'ai trouvé que les personnes appartenant à un groupe d'un site particulier sont dans un noeud du type : workspace://SpacesStore/system/authorities/GROUP_site_nomDuSite_SiteNomDuGroupe/nomDeUtilisateur

Du coup c'est assez embêtant de récupérer tous les sites où l'utilisateur est responsable : je vois une boucle qui récupère tous les sites existants, qui contient une autre boucle qui parcours tous les groupes de  ce site et qui récupère si oui ou non l'utilisateur y appartient.

N'existe il pas une façon plus simple de procéder ?

Merci pour vos réponses
15 Replies
bertrandf
Active Member

Re: Récupérer tous les sites Share d'un utilisateur

Bonjour,

Vous travaillez sur quel version d'Alfresco ?

Je pense que les nouvelles API JavaScript peuvent grandement vous aider : http://wiki.alfresco.com/wiki/3.4_JavaScript_Services_API#Site

Il me semble que :
Pour pouvoir créer des liens, il faut que l'utilisateur soit Coordinateur (gestionnaire), Collaborateur ou Contributeur.
Un Contributeur peut éditer ses liens mais pas ceux des autres.
Un Coordinateur (gestionnaire) ou Collaborateur peut éditer l'ensemble des liens.

Des fonctions qui pourrait vous être utiles :
List the available sites : listSites(nameFilter, sitePresetFilter)
Get a site : getSite(shortName)
Get list of site members : listMembers(nameFilter, roleFilter)
Get site member's role : getMembersRole(userName)
kizux_3453
Member II

Re: Récupérer tous les sites Share d'un utilisateur

Merci beaucoup je suis un peu honteux de ne pas les avoir trouver pour le coup  Smiley Surprisedops:

Maintenant que j'ai les sites de mes utilisateurs, j'aimerai afficher une page qui liste tous ces sites, j'utilise donc l'API WebScript avec quelque chose du genre :

fichier.js
function editMe(obj){
obj.innerHTML = "ajout de code html";
}

fichier.html.ftl
<html>
<body>
<div id="liste" onLoad="javascript:editMe(this)">
</div>
</body>
</html>

C'est une bonne méthode ou il y a encore plus simple ?

Merci beaucoup  :mrgreen:
bertrandf
Active Member

Re: Récupérer tous les sites Share d'un utilisateur

Je ne sais pas si j'ai vraiment compris votre question.

Mais il ne faut pas voir le fichier JavaScript de votre WebScript comme une librairie.
Vous ne pourrez pas appeler dans votre template Freemarker des fonctions que vous avez créées dans le fichier JavaScript de votre WebScript.

Il faut voir le fichier JavaScript d'un WebScript comme un fichier qui s'occupe de traitements et qui peut passer des résultats au template, le template quant à lui ne sert qu'a afficher les résultats.

Pour faire de l'édition, ce qu'on fait c'est qu'on créé un webscript en GET dans lequel on créé un formulaire qui fera appel lors du submit à un webscript en POST.

Si vous voulez une interface pour éditer les liens d'un site par exemple, vous pourriez créer 3 webscripts (ce n'est qu'un exemple) :
1) Un webscript en GET qui se charge de lister les liens d'un site (avec a coté de chaque lien, ajouter une icône "Editer" qui redirige vers un autre webscript) : (listSiteLinks.get.desc.xml / listSiteLinks.get.js / listSiteLinks.get.html.ftl)
2) Un webscript en GET qui permet d'afficher un formulaire avec le détail du lien (editLink.get.desc.xml / editLink.get.js / editLink.get.html.ftl)
3) Un webscript en POST qui sera appelé à la validation du formulaire pour éditer les infos du liens (editLink.post.desc.xml / editLink.post.js / editLink.post.html.ftl)
kizux_3453
Member II

Re: Récupérer tous les sites Share d'un utilisateur

Oui c'était mon intention le seul truc qui me bloque un peu c'est d'afficher dans ma vue ce que j'ai récupérer grâce au fichier javascript  Smiley Surprisedops:
Cette étape :
Il faut voir le fichier JavaScript d'un WebScript comme un fichier qui s'occupe de traitements et qui peut passer des résultats au template, le template quant à lui ne sert qu'a afficher les résultats.
J'ai procéder de la façon suivante finalement:
fichier.js

model.liste = "le code html qui affiche ma liste";

fichier.html.ftl

liste de lien: ${liste}
bertrandf
Active Member

Re: Récupérer tous les sites Share d'un utilisateur

Oui il faut procéder de la sorte.

Mais vous pouvez passer des objets plus complexes dans le 'model' : un tableau, un objets, un tableau d'objets, …

Si vous avez par exemple un tableau de sites :
var sites = [];
sites.push({name: "site1", favourite: true}, {name: "site2", favourite: false});
model.sites = sites;

Et dans votre template, vous pouvez parcourir les objets :
<h3>Liste des sites : </h3>
<#list sites as site>
  <div>
    Nom: ${site.name}<br>
    Favoris : ${site.favourite?string("Oui", "Non")}
  </div>
  <#if site_has_next><hr></#if>
</#list>


L'API Freemaker est assez puissante et la documentation plutôt très bien faite :
Les built-ins pour manipuler les différents types (chaine de caractères, nombres, …)
http://freemarker.sourceforge.net/docs/ref_builtins.html
http://freemarker.sourceforge.net/docs/ref_builtins_string.html
http://freemarker.sourceforge.net/docs/ref_builtins_sequence.html


Les directives :
http://freemarker.sourceforge.net/docs/ref_directives.html

Exemples de webscripts :
http://wiki.alfresco.com/wiki/Web_Scripts_Examples
kizux_3453
Member II

Re: Récupérer tous les sites Share d'un utilisateur

Ha voila d'accord, un peu comme les taglibs en JPA donc.

Bon par contre j'ai un petit soucis avec la méthode listSites() :
This method lists the sites that are available in the repository. The returned list can optionally be filtered by name and site.
listSites(nameFilter, sitePresetFilter)
je l'utilise donc comme suit :
var listeSite = companyhome.childByNamePath("sites").listSites();
model.test = listeSite;
mais j'ai malheureusement l'erreur :
TypeError: Cannot find function listSites

Aie aie, j'ai peur de rien comprendre  Smiley Sad
bertrandf
Active Member

Re: Récupérer tous les sites Share d'un utilisateur

L'API n'est pas très bien documentée :

// List the available sites
siteService.listSites();

//Get a site
var site = siteService.getSite(siteId);

// Get list of site members
var members = site.listMembers();

//Get site member's role
var totoRole = site.getMembersRole("toto");
kizux_3453
Member II

Re: Récupérer tous les sites Share d'un utilisateur

Merci beaucoup, heureusement que le forum est là !
Bon je vais tacher de me débrouiller avec ca pour le moment, je repasse mettre le sujet en résolu si tout c'est bien passé, merci beaucoup  :mrgreen:
kizux_3453
Member II

Re: Récupérer tous les sites Share d'un utilisateur

var listeSite = siteService.listSites();
 La méthode 'org.alfresco.repo.site.script.ScriptSiteService.listSites()' est introuvable

La vache, suis je maudit ? ou complètement à côté de la plaque ? (les deux sont possibles)