0 Votes

Wiki source code of Script

Version 12.1 by Ryan C on 2025/05/13 16:07

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

XWiki AI Chat