0 Votes

Changes for page Script

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

From version 4.1
edited by Ryan C
on 2025/05/12 23:33
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,31 +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 -def groupDocRef = new DocumentReference("xwiki", "XWiki", "XWikiAllGroup")
5 -def groupClassRef = new DocumentReference("xwiki", "XWiki", "XWikiGroups")
6 -def mainGroupDoc = xwiki.getDocument(groupDocRef).getDocument()
6 +// ------------------------------------------------------------------
7 +// 1. References
8 +// ------------------------------------------------------------------
9 +def groupDocRef = new DocumentReference('xwiki', 'XWiki', 'XWikiAllGroup')
10 +def groupClassRef = new DocumentReference('xwiki', 'XWiki', 'XWikiGroups')
7 7  
8 -def allUsers = xwiki.searchDocuments("where doc.fullName like 'XWiki.%' and doc.fullName != 'XWiki.XWikiAllGroup'")
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 +// ------------------------------------------------------------------
9 9  def added = []
10 10  
11 11  allUsers.each { userDocName ->
12 - def alreadyMember = mainGroupDoc.getXObjects(groupClassRef)?.any {
13 - it?.getStringValue("member") == userDocName
36 + // already in group?
37 + def alreadyMember = groupDoc.getXObjects(groupClassRef)?.any {
38 + it?.getStringValue('member') == userDocName
14 14   }
15 15  
16 16   if (!alreadyMember) {
17 - def newObj = mainGroupDoc.newXObject(groupClassRef)
18 - newObj.setStringValue("member", userDocName)
19 - 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 + }
20 20   }
21 21  }
22 22  
73 +// ------------------------------------------------------------------
74 +// 5. Persist if we changed anything
75 +// ------------------------------------------------------------------
23 23  if (added) {
24 - def mainGroupWrapped = xwiki.getDocument(mainGroupDoc.documentReference)
25 - xwiki.saveDocument(mainGroupWrapped, "Added missing users to XWikiAllGroup: ${added.join(', ')}")
26 - println "✅ Added users to main wiki: ${added.join(', ')}"
77 + xwiki.saveDocument(groupDocAPI, "Added users: ${added.join(', ')}")
78 + println " Added users to main wiki group: ${added.join(', ')}"
27 27  } else {
28 - println "✅ All users are already members of the main wiki."
80 + println ' All users are already members of XWikiAllGroup'
29 29  }
30 30  {{/groovy}}
31 31