Show last authors
author | version | line-number | content |
---|---|---|---|
1 | {{groovy}} | ||
2 | import org.xwiki.model.reference.DocumentReference | ||
3 | import org.xwiki.model.reference.EntityReference | ||
4 | import org.xwiki.model.reference.EntityType | ||
5 | |||
6 | // ------------------------------------------------------------------ | ||
7 | // 1. References | ||
8 | // ------------------------------------------------------------------ | ||
9 | def groupDocRef = new DocumentReference('xwiki', 'XWiki', 'XWikiAllGroup') | ||
10 | def groupClassRef = new DocumentReference('xwiki', 'XWiki', 'XWikiGroups') | ||
11 | |||
12 | // ------------------------------------------------------------------ | ||
13 | // 2. Load (or create) the XWikiAllGroup page | ||
14 | // ------------------------------------------------------------------ | ||
15 | def groupDocAPI = xwiki.getDocument(groupDocRef) // Document API wrapper | ||
16 | def groupDoc = groupDocAPI.getDocument() // Raw XWikiDocument | ||
17 | |||
18 | if (groupDoc.isNew()) { | ||
19 | xwiki.saveDocument(groupDocAPI, 'Created XWikiAllGroup') | ||
20 | println ' Created XWiki.XWikiAllGroup' | ||
21 | } | ||
22 | |||
23 | // ------------------------------------------------------------------ | ||
24 | // 3. Collect all users except the AllGroup page itself | ||
25 | // ------------------------------------------------------------------ | ||
26 | def allUsers = xwiki.searchDocuments( | ||
27 | "where doc.fullName like 'XWiki.%' and doc.fullName <> 'XWiki.XWikiAllGroup'" | ||
28 | ) | ||
29 | |||
30 | // ------------------------------------------------------------------ | ||
31 | // 4. Add the missing users | ||
32 | // ------------------------------------------------------------------ | ||
33 | def added = [] | ||
34 | |||
35 | allUsers.each { userDocName -> | ||
36 | // already in group? | ||
37 | def alreadyMember = groupDoc.getXObjects(groupClassRef)?.any { | ||
38 | it?.getStringValue('member') == userDocName | ||
39 | } | ||
40 | |||
41 | if (!alreadyMember) { | ||
42 | // Try different methods to create the XObject. | ||
43 | def obj = null | ||
44 | try { | ||
45 | // Method 1: Use xcontext | ||
46 | def context = xcontext ?: contextProvider.get() | ||
47 | obj = groupDoc.newXObject(groupClassRef, context) | ||
48 | } catch (Exception e1) { | ||
49 | try { | ||
50 | // Method 2: Use EntityReference | ||
51 | obj = groupDoc.newXObject( | ||
52 | new EntityReference( | ||
53 | 'XWikiGroups', | ||
54 | EntityType.DOCUMENT, | ||
55 | new EntityReference('XWiki', EntityType.SPACE) | ||
56 | ) | ||
57 | ) | ||
58 | } catch (Exception e2) { | ||
59 | println "Failed to create XObject using either method:" | ||
60 | println "Method 1 Exception: ${e1.getMessage()}" | ||
61 | println "Method 2 Exception: ${e2.getMessage()}" | ||
62 | return // Skip this user if we can't create the object | ||
63 | } | ||
64 | } | ||
65 | |||
66 | if (obj != null) { | ||
67 | obj.setStringValue('member', userDocName) | ||
68 | added << userDocName | ||
69 | } | ||
70 | } | ||
71 | } | ||
72 | |||
73 | // ------------------------------------------------------------------ | ||
74 | // 5. Persist if we changed anything | ||
75 | // ------------------------------------------------------------------ | ||
76 | if (added) { | ||
77 | xwiki.saveDocument(groupDocAPI, "Added users: ${added.join(', ')}") | ||
78 | println " Added users to main wiki group: ${added.join(', ')}" | ||
79 | } else { | ||
80 | println ' All users are already members of XWikiAllGroup' | ||
81 | } | ||
82 | {{/groovy}} |