Hide last authors
author | version | line-number | content |
---|---|---|---|
![]() |
7.1 | 1 | {{groovy}} |
2 | import org.xwiki.model.reference.DocumentReference | ||
![]() |
12.1 | 3 | import org.xwiki.model.reference.EntityReference |
4 | import org.xwiki.model.reference.EntityType | ||
![]() |
1.1 | 5 | |
![]() |
12.1 | 6 | // ------------------------------------------------------------------ |
7 | // 1. References | ||
8 | // ------------------------------------------------------------------ | ||
9 | def groupDocRef = new DocumentReference('xwiki', 'XWiki', 'XWikiAllGroup') | ||
10 | def groupClassRef = new DocumentReference('xwiki', 'XWiki', 'XWikiGroups') | ||
![]() |
8.1 | 11 | |
![]() |
12.1 | 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 | ||
![]() |
8.1 | 17 | |
18 | if (groupDoc.isNew()) { | ||
![]() |
12.1 | 19 | xwiki.saveDocument(groupDocAPI, 'Created XWikiAllGroup') |
20 | println ' Created XWiki.XWikiAllGroup' | ||
![]() |
8.1 | 21 | } |
22 | |||
![]() |
12.1 | 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 | // ------------------------------------------------------------------ | ||
![]() |
8.1 | 33 | def added = [] |
34 | |||
35 | allUsers.each { userDocName -> | ||
![]() |
12.1 | 36 | // already in group? |
37 | def alreadyMember = groupDoc.getXObjects(groupClassRef)?.any { | ||
38 | it?.getStringValue('member') == userDocName | ||
![]() |
8.1 | 39 | } |
40 | |||
41 | if (!alreadyMember) { | ||
![]() |
12.1 | 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 | } | ||
![]() |
8.1 | 70 | } |
71 | } | ||
72 | |||
![]() |
12.1 | 73 | // ------------------------------------------------------------------ |
74 | // 5. Persist if we changed anything | ||
75 | // ------------------------------------------------------------------ | ||
![]() |
8.1 | 76 | if (added) { |
![]() |
12.1 | 77 | xwiki.saveDocument(groupDocAPI, "Added users: ${added.join(', ')}") |
78 | println " Added users to main wiki group: ${added.join(', ')}" | ||
![]() |
8.1 | 79 | } else { |
![]() |
12.1 | 80 | println ' All users are already members of XWikiAllGroup' |
![]() |
7.1 | 81 | } |
82 | {{/groovy}} | ||
83 |