0 Votes

Changes for page Script

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

From version 8.1
edited by Ryan C
on 2025/05/13 16:01
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,78 +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
30 - }
31 -}
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 + }
32 32  
33 -// Save if needed
34 -if (added) {
35 - def wrapper = xwiki.getDocument(groupDoc.documentReference)
36 - xwiki.saveDocument(wrapper, "✅ Added users to group: ${added.join(', ')}")
37 - println "✅ Added: ${added.join(', ')}"
38 -} else {
39 - println "✅ All users already
40 -
41 -def groupDocRef = new DocumentReference("xwiki", "XWiki", "XWikiAllGroup")
42 -def groupClassName = "XWiki.XWikiGroups"
43 -
44 -// 1. Ensure the group document exists
45 -def groupDocAPI = xwiki.getDocument(groupDocRef)
46 -def groupDoc = groupDocAPI.getDocument()
47 -
48 -if (groupDoc.isNew()) {
49 - def apiDoc = xwiki.getDocument(groupDoc.documentReference)
50 - xwiki.saveDocument(apiDoc, "Created XWikiAllGroup page")
51 - println "🆕 Created XWiki.XWikiAllGroup page"
52 -}
53 -
54 -// 2. Proceed as before
55 -def allUsers = xwiki.searchDocuments("where doc.fullName like 'XWiki.%' and doc.fullName != 'XWiki.XWikiAllGroup'")
56 -def added = []
57 -
58 -allUsers.each { userDocName ->
59 - def alreadyMember = groupDoc.getXObjects(groupClassName)?.any {
60 - it?.getStringValue("member") == userDocName
66 + if (obj != null) {
67 + obj.setStringValue('member', userDocName)
68 + added << userDocName
69 + }
61 61   }
62 -
63 - if (!alreadyMember) {
64 - def newObj = groupDoc.newXObject(groupClassName)
65 - newObj.setStringValue("member", userDocName)
66 - added << userDocName
67 - }
68 68  }
69 69  
73 +// ------------------------------------------------------------------
74 +// 5. Persist if we changed anything
75 +// ------------------------------------------------------------------
70 70  if (added) {
71 - def wrappedDoc = xwiki.getDocument(groupDoc.documentReference)
72 - xwiki.saveDocument(wrappedDoc, "✅ Added users to XWikiAllGroup: ${added.join(', ')}")
73 - 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(', ')}"
74 74  } else {
75 - println "✅ All users are already members of the main wiki."
80 + println ' All users are already members of XWikiAllGroup'
76 76  }
77 77  {{/groovy}}
78 78