0 Votes

Changes for page Script

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

From version 12.1
edited by Ryan C
on 2025/05/13 16:07
Change comment: There is no comment for this version
To version 6.1
edited by Ryan C
on 2025/05/12 23:40
Change comment: There is no comment for this version

Summary

Details

Page properties
Content
... ... @@ -1,83 +1,9 @@
1 -{{groovy}}
2 -import org.xwiki.model.reference.DocumentReference
3 -import org.xwiki.model.reference.EntityReference
4 -import org.xwiki.model.reference.EntityType
1 +{{velocity}}
2 +#set($doc = $xwiki.getDocument("XWiki.XWikiGroups"))
3 +#set($class = $doc.xWikiClass)
4 +* Fields in XWikiGroups:
5 +#foreach ($field in $class.properties.entrySet())
6 + - **$field.key** (type: $field.value.class.simpleName)
7 +#end
8 +{{/velocity}}
5 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}}
83 -