0 Votes

Changes for page Script

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

From version 9.1
edited by Ryan C
on 2025/05/13 16:02
Change comment: There is no comment for this version
To version 12.1
edited by Ryan C
on 2025/05/13 16:07
Change comment: There is no comment for this version

Summary

Details

Page properties
Content
... ... @@ -1,42 +1,83 @@
1 1  {{groovy}}
2 2  import org.xwiki.model.reference.DocumentReference
3 +import org.xwiki.model.reference.EntityReference
4 +import org.xwiki.model.reference.EntityType
3 3  
4 -// References
5 -def groupDocRef = new DocumentReference("xwiki", "XWiki", "XWikiAllGroup")
6 -def groupClassRef = new DocumentReference("xwiki", "XWiki", "XWikiGroups")
6 +// ------------------------------------------------------------------
7 +// 1. References
8 +// ------------------------------------------------------------------
9 +def groupDocRef = new DocumentReference('xwiki', 'XWiki', 'XWikiAllGroup')
10 +def groupClassRef = new DocumentReference('xwiki', 'XWiki', 'XWikiGroups')
7 7  
8 -// Load or create the group page
9 -def groupDocAPI = xwiki.getDocument(groupDocRef)
10 -def groupDoc = groupDocAPI.getDocument()
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
11 11  
12 12  if (groupDoc.isNew()) {
13 - xwiki.saveDocument(groupDocAPI, "Created XWikiAllGroup")
14 - println "Created XWiki.XWikiAllGroup"
19 + xwiki.saveDocument(groupDocAPI, 'Created XWikiAllGroup')
20 + println ' Created XWiki.XWikiAllGroup'
15 15  }
16 16  
17 -// Add missing users to group
18 -def allUsers = xwiki.searchDocuments("where doc.fullName like 'XWiki.%' and doc.fullName != 'XWiki.XWikiAllGroup'")
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 +// ------------------------------------------------------------------
19 19  def added = []
20 20  
21 21  allUsers.each { userDocName ->
36 + // already in group?
22 22   def alreadyMember = groupDoc.getXObjects(groupClassRef)?.any {
23 - it?.getStringValue("member") == userDocName
38 + it?.getStringValue('member') == userDocName
24 24   }
25 25  
26 26   if (!alreadyMember) {
27 - def obj = groupDoc.newXObject(groupClassRef)
28 - obj.setStringValue("member", userDocName)
29 - added << userDocName
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 + }
30 30   }
31 31  }
32 32  
33 -// Save if needed
73 +// ------------------------------------------------------------------
74 +// 5. Persist if we changed anything
75 +// ------------------------------------------------------------------
34 34  if (added) {
35 - def wrapper = xwiki.getDocument(groupDoc.documentReference)
36 - xwiki.saveDocument(wrapper, "Added users to group: ${added.join(', ')}")
37 - println "Added users: ${added.join(', ')}"
77 + xwiki.saveDocument(groupDocAPI, "Added users: ${added.join(', ')}")
78 + println " Added users to main wiki group: ${added.join(', ')}"
38 38  } else {
39 - println "All users are already members of the main wiki."
80 + println ' All users are already members of XWikiAllGroup'
40 40  }
41 41  {{/groovy}}
42 42