Show last authors
author | version | line-number | content |
---|---|---|---|
1 | {{groovy}} | ||
2 | import org.xwiki.model.reference.DocumentReference | ||
3 | |||
4 | // ------------------------------------------------------------------ | ||
5 | // 1. References | ||
6 | // ------------------------------------------------------------------ | ||
7 | def groupDocRef = new DocumentReference('xwiki', 'XWiki', 'XWikiAllGroup') | ||
8 | def groupClassRef = new DocumentReference('xwiki', 'XWiki', 'XWikiGroups') | ||
9 | |||
10 | // ------------------------------------------------------------------ | ||
11 | // 2. Load (or create) the XWikiAllGroup page | ||
12 | // ------------------------------------------------------------------ | ||
13 | def groupDocAPI = xwiki.getDocument(groupDocRef) // Document API wrapper | ||
14 | def groupDoc = groupDocAPI.getDocument() // Raw XWikiDocument | ||
15 | |||
16 | if (groupDoc.isNew()) { | ||
17 | xwiki.saveDocument(groupDocAPI, 'Created XWikiAllGroup') | ||
18 | println " Created XWiki.XWikiAllGroup" | ||
19 | } | ||
20 | |||
21 | // ------------------------------------------------------------------ | ||
22 | // 3. Collect all users except the AllGroup page itself | ||
23 | // ------------------------------------------------------------------ | ||
24 | def allUsers = xwiki.searchDocuments( | ||
25 | "where doc.fullName like 'XWiki.%' and doc.fullName <> 'XWiki.XWikiAllGroup'" | ||
26 | ) | ||
27 | |||
28 | // ------------------------------------------------------------------ | ||
29 | // 4. Add the missing users | ||
30 | // ------------------------------------------------------------------ | ||
31 | def added = [] | ||
32 | |||
33 | allUsers.each { userDocName -> | ||
34 | // already in group? | ||
35 | def alreadyMember = groupDoc.getXObjects(groupClassRef)?.any { | ||
36 | it?.getStringValue('member') == userDocName | ||
37 | } | ||
38 | |||
39 | if (!alreadyMember) { | ||
40 | // Try to create XObject using the simplest method first | ||
41 | try { | ||
42 | // Use the string class name instead of the DocumentReference | ||
43 | def obj = groupDoc.newXObject("XWiki.XWikiGroups", xcontext) | ||
44 | obj.setStringValue('member', userDocName) | ||
45 | added << userDocName | ||
46 | } catch (Exception e) { | ||
47 | println "Could not add user ${userDocName}: ${e.message}" | ||
48 | } | ||
49 | } | ||
50 | } | ||
51 | |||
52 | // ------------------------------------------------------------------ | ||
53 | // 5. Persist if we changed anything | ||
54 | // ------------------------------------------------------------------ | ||
55 | if (added) { | ||
56 | xwiki.saveDocument(groupDocAPI, "Added users: ${added.join(', ')}") | ||
57 | println " Added users to main wiki group: ${added.join(', ')}" | ||
58 | } else { | ||
59 | println " All users are already members of XWikiAllGroup" | ||
60 | } | ||
61 | {{/groovy}} |