0 Votes
Modifié par john le 2025/05/31 14:13

Afficher les derniers auteurs
1
2 In order to build organizational charts using XWiki users, it is necessary to configure XWiki to add a "manager" field to the user class and also add this field to the user profile configuration.
3
4 This can be done by editing the [[xwiki:XWiki.XWikiUsers]] class, adding a user field called "manager" and by updating the [[profile in the administration>>xwiki:XWiki.XWikiPreferences||queryString="editor=globaladmin&section=UserProfile"]] to add the "manager" field in the profile display.
5
6 Alternatively you can click on the button below to have this done for you, provided you have administration rights.
7
8 {{velocity}}
9 #set($classUpdateNeeded = false)
10 #set($profileUpdateNeeded = false)
11 #set($userclassdoc = $xwiki.getDocument("xwiki:XWiki.XWikiUsers"))
12 #set($userclass = $userclassdoc.getxWikiClass())
13 #set($baseuserclass = $userclass.getXWikiClass())
14 #if($userclass.get("title"))
15 * Title field already exists in XWiki.XWikiUsers class
16 #else
17 * Title field should be added in XWiki.XWikiUsers class
18 #set($ok = $baseuserclass.addTextField("title", "Title", 40))
19 #set($classUpdateNeeded = true)
20 #end
21 #if($userclass.get("manager"))
22 * Manager field already exists in XWiki.XWikiUsers class
23 #else
24 * Manager field should be added in XWiki.XWikiUsers class
25 #set($ok = $baseuserclass.addUsersField("manager", "Manager", false))
26 #set($classUpdateNeeded = true)
27 #end
28 #if($userclass.get("company"))
29 * Company field already exists in XWiki.XWikiUsers class
30 #else
31 * Company field should be added in XWiki.XWikiUsers class
32 #set($ok = $baseuserclass.addTextField("company", "Company", 40))
33 #set($classUpdateNeeded = true)
34 #end
35 #if($request.confirm && $classUpdateNeeded)
36 * User class is being saved with new fields added
37 #set($ok = $userclassdoc.save("Adding organizational chart fields"))
38 #end
39 #set($userprofiledoc = $xwiki.getDocument("xwiki:XWiki.AdminUserProfileSheet"))
40 #set($ok = $userprofiledoc.use("XWiki.UserProfileSectionClass"))
41 #set($props = $userprofiledoc.getValue("properties"))
42 #if($props.contains("title:title"))
43 * Title field is already added to the user profile
44 #else
45 * Title field should be added in user profile
46 #set($profileUpdateNeeded = true)
47 #if($props.contains("family-name:last_name"))
48 #set($props = "${props}$!{util.newline}title:title")
49 #else
50 #set($props = $props.replaceAll("family-name:last_name", "family-name:last_name$!{util.newline}title:title"))
51 #end
52 #end
53 #if($props.contains("manager:manager"))
54 * Manager field is already added to the user profile
55 #else
56 #set($profileUpdateNeeded = true)
57 * Manager field should be added in user profile
58 #set($props = $props.replaceAll("title:title", "title:title$!{util.newline}manager:manager"))
59 #end
60 #if($props.contains("org:company"))
61 * Company field is already added to the user profile
62 #else
63 #set($profileUpdateNeeded = true)
64 #set($props = $props.replaceAll("manager:manager", "manager:manager$!{util.newline}org:company"))
65 #end
66 #if($request.confirm && $profileUpdateNeeded)
67 * User Profile is being saved with new fields added
68 #set($ok = $userprofiledoc.set("properties", $props))
69 #set($ok = $userprofiledoc.save("Adding organizational chart fields"))
70 #end
71
72
73 #if(!$request.confirm)
74 #if($profileUpdateNeeded||$classUpdateNeeded)
75 [[Confirm adding fields>>||queryString="confirm=1"]]
76 #else
77 * All necessary fields are already added
78 #end
79 #elseif(!$profileUpdateNeeded&&!$classUpdateNeeded)
80 * All necessary fields are already added
81 #end
82 {{/velocity}}