0 Votes

Wiki source code of Script

Last modified by Ryan C on 2025/05/13 16:08

Show last authors
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}}