Исходный код вики AdminUsersSheet

Версия 1.1 от Admin xWiKi на 15.10.2019, 13:19

Последние авторы
1 {{velocity output="false"}}
2 #macro (userScopeFilter)
3 <select name="wiki">
4 <option selected="selected" value="local">
5 $escapetool.xml($services.localization.render('rightsmanager.local'))
6 </option>
7 <option value="global">
8 $escapetool.xml($services.localization.render('rightsmanager.global'))
9 </option>
10 <option value="both">
11 $escapetool.xml($services.localization.render('rightsmanager.both'))
12 </option>
13 </select>
14 #end
15
16 #macro (displayUsersLiveTable)
17 #set ($columnOptions = {
18 'name': {'type': 'text', 'sortable': false, 'html': true},
19 'first_name': {'type': 'text', 'sortable': false},
20 'last_name': {'type': 'text', 'sortable': false},
21 'scope': {'type': 'list', 'sortable': false},
22 '_actions': {
23 'actions': [
24 'edit',
25 {'id': 'disable', 'icon': 'lock'},
26 {'id': 'enable', 'icon': 'unlock'},
27 'delete'
28 ],
29 'labels': false
30 }
31 })
32 #set ($columns = ['name', 'first_name', 'last_name', '_actions'])
33 #set ($liveTableOptions = {
34 'url': $doc.getURL('view', 'xpage=getusers'),
35 'translationPrefix': 'xe.admin.users.',
36 'outputOnlyHtml': true
37 })
38 #if (!$xcontext.isMainWiki())
39 #set ($discard = $columns.add(3, 'scope'))
40 ## We use the top filters option to show only the local users by default because the JavaScript code from the sheet
41 ## is executed after the livetable is loaded. The JavaScript code removes the top filters and updates the scope filter
42 ## afterwards.
43 #set ($liveTableOptions.topFilters = "#userScopeFilter")
44 #end
45 <div class="medium-avatars">
46 #livetable('userstable' $columns $columnOptions $liveTableOptions)
47 </div>
48 <p>
49 <button type="button" class="btn btn-primary" data-toggle="modal" data-target="${escapetool.h}createUserModal">
50 $escapetool.xml($services.localization.render('rightsmanager.addnewuser'))
51 </button>
52 </p>
53 #end
54
55 #macro (createUserModal)
56 <div class="modal" id="createUserModal" tabindex="-1" role="dialog" aria-labelledby="createUserModal-label"
57 data-backdrop="static" data-keyboard="false">
58 <div class="modal-dialog" role="document">
59 <div class="modal-content">
60 <div class="modal-header">
61 <button type="button" class="close" data-dismiss="modal" aria-label="Close">
62 <span aria-hidden="true">&times;</span>
63 </button>
64 <div class="modal-title" id="createUserModal-label">
65 $escapetool.xml($services.localization.render('rightsmanager.addnewuser'))
66 </div>
67 </div>
68 <div class="modal-body"></div>
69 <div class="modal-footer">
70 <button type="button" class="btn btn-default" data-dismiss="modal">
71 $escapetool.xml($services.localization.render('cancel'))
72 </button>
73 <button type="button" class="btn btn-primary" disabled="disabled">
74 $escapetool.xml($services.localization.render('create'))
75 </button>
76 </div>
77 </div>
78 </div>
79 </div>
80 #end
81
82 #macro (editUserModal)
83 <div class="modal" id="editUserModal" tabindex="-1" role="dialog" aria-labelledby="editUserModal-label"
84 data-backdrop="static" data-keyboard="false" data-liveTable="#userstable" data-liveTableAction="edit">
85 <div class="modal-dialog modal-lg" role="document">
86 <div class="modal-content">
87 <div class="modal-header">
88 <button type="button" class="close" data-dismiss="modal" aria-label="Close">
89 <span aria-hidden="true">&times;</span>
90 </button>
91 <div class="modal-title" id="editUserModal-label">
92 $escapetool.xml($services.localization.render('xe.admin.users.editUser'))
93 </div>
94 </div>
95 <div class="modal-body"></div>
96 <div class="modal-footer">
97 <button type="button" class="btn btn-default" data-dismiss="modal">
98 $escapetool.xml($services.localization.render('cancel'))
99 </button>
100 <button type="button" class="btn btn-primary" disabled="disabled">
101 $escapetool.xml($services.localization.render('save'))
102 </button>
103 </div>
104 </div>
105 </div>
106 </div>
107 #end
108
109 #macro (deleteUserModal)
110 ## Load the resources needed by the user picker in order to be able to select the new author when deleting users that
111 ## have script or programming rights.
112 #userPicker_import
113 <div class="modal" id="deleteUserModal" tabindex="-1" role="dialog" aria-labelledby="deleteUserModal-label"
114 data-liveTable="#userstable" data-liveTableAction="delete">
115 <div class="modal-dialog" role="document">
116 <div class="modal-content">
117 <div class="modal-header">
118 <button type="button" class="close" data-dismiss="modal" aria-label="Close">
119 <span aria-hidden="true">&times;</span>
120 </button>
121 <div class="modal-title" id="deleteUserModal-label">
122 $escapetool.xml($services.localization.render('xe.admin.users.deleteUser'))
123 </div>
124 </div>
125 <div class="modal-body loading"></div>
126 <div class="modal-footer">
127 <button type="button" class="btn btn-default" data-dismiss="modal">
128 $escapetool.xml($services.localization.render('cancel'))
129 </button>
130 <button type="button" class="btn btn-danger" data-dismiss="modal">
131 $escapetool.xml($services.localization.render('delete'))
132 </button>
133 </div>
134 </div>
135 </div>
136 </div>
137 #end
138
139 #macro (deleteUserModalContent $userReference)
140 {{html clean="false"}}
141 #set ($userReference = $services.model.resolveDocument($userReference, 'user', $doc.documentReference))
142 <p>$services.localization.render('administration.section.users.deleteUser.confirmationMessage', [
143 "#displayUser($userReference {'useInlineHTML': true})",
144 "<a href='$xwiki.getURL($userReference, 'view', 'category=groups')'>",
145 '</a>'
146 ])</p>
147 ## Check if the user we're about to delete has programming or script rights because in this case deleting the user may
148 ## break the pages where this user was the last (content) author.
149 ##
150 ## Note that we check programming and script rights at the wiki level only, in the wiki where the user is defined.
151 ## This doesn't cover all the cases because script right can be set at page level so it's possible that the user has
152 ## script right only on some pages (and not at the wiki level). Counting the pages that were last modified by this
153 ## user and for which they have script right is costly (we need to check script right separately for each page that
154 ## was last modified by the user, we can't do it in the database query).
155 #set ($wikiPrefsRef = $services.model.createDocumentReference($userReference.wikiReference.name, 'XWiki',
156 'XWikiPreferences'))
157 #if ($services.security.authorization.hasAccess('programming', $userReference, $wikiPrefsRef))
158 #maybeShowDeleteUserWarning($userReference 'programming')
159 #elseif ($services.security.authorization.hasAccess('script', $userReference, $wikiPrefsRef))
160 #maybeShowDeleteUserWarning($userReference 'script')
161 #end
162 {{/html}}
163 #end
164
165 #macro (maybeShowDeleteUserWarning $userReference $right)
166 #countPagesLastModifiedBy($userReference)
167 #if ($pageCount > 0)
168 <div class="box errormessage xform">
169 #set ($pageIndexReference = $services.model.createDocumentReference(
170 $userReference.wikiReference.name, 'Main', 'AllDocs'))
171 #set ($pageIndexURL = $xwiki.getURL($pageIndexReference) + '#|t=alldocs&doc.author=' +
172 $escapetool.url($services.model.serialize($userReference, 'local')))
173 #set ($translationKey = "administration.section.users.deleteUser.${right}RightsWarning")
174 $services.localization.render($translationKey, ["<a href='$pageIndexURL'>", $pageCount, '</a>'])
175 <dl>
176 <dt>
177 <label for="newAuthor">$escapetool.xml($services.localization.render(
178 'administration.section.users.deleteUser.newAuthor'))</label>
179 #set ($translationKey = 'administration.section.users.deleteUser.newAuthor.hint')
180 #set ($rightTranslation = $services.localization.render(
181 "administration.section.users.deleteUser.newAuthor.$right"))
182 <span class="xHint">$escapetool.xml($services.localization.render($translationKey,
183 [$rightTranslation]))</span>
184 </dt>
185 <dd>
186 #set ($userPickerParams = {
187 'id': 'newAuthor',
188 'name': 'newAuthor',
189 'data-required-right': $right
190 })
191 #userPicker(false $userPickerParams)
192 #set ($translationKey = 'administration.section.users.deleteUser.newAuthor.error')
193 <span class="xErrorMsg hidden">$escapetool.xml($services.localization.render($translationKey,
194 [$rightTranslation]))</span>
195 </dd>
196 </dl>
197 </div>
198 #end
199 #end
200
201 #macro (countPagesLastModifiedBy $userReference)
202 #if ($userReference.wikiReference.name == $xcontext.mainWikiName)
203 ## Global user: search everywhere.
204 #set ($wikis = $services.wiki.allIds)
205 #else
206 ## Local user: search only in the wiki where the user is defined.
207 #set ($wikis = [$userReference.wikiReference.name])
208 #end
209 #set ($pageCount = 0)
210 #set ($statement = 'where doc.author = :user or doc.contentAuthor = :user')
211 #foreach ($wiki in $wikis)
212 #if ($userReference.wikiReference.name == $wiki)
213 #set ($userReferenceString = $services.model.serialize($userReference, 'local'))
214 #else
215 #set ($userReferenceString = $services.model.serialize($userReference, 'default'))
216 #end
217 #set ($pageCount = $pageCount + $services.query.xwql($statement).setWiki($wiki).addFilter('unique'
218 ).bindValue('user', $userReferenceString).count())
219 #end
220 #end
221
222 #macro (validateNewAuthor $newAuthorReference $requiredRight)
223 #set ($newAuthorReference = $services.model.resolveDocument($newAuthorReference, 'user', $doc.documentReference))
224 #set ($wikiPrefsRef = $services.model.createDocumentReference($newAuthorReference.wikiReference.name, 'XWiki',
225 'XWikiPreferences'))
226 #jsonResponse({
227 'valid': $services.security.authorization.hasAccess($requiredRight, $newAuthorReference, $wikiPrefsRef)
228 })
229 #end
230
231 #macro (doView)
232 ## We include new settings from the Wiki Manager (only if it is not the main wiki).
233 #set ($wikiManagerUserRef = $services.model.createDocumentReference('', 'WikiManager', 'WikiUsers'))
234 #if (!$xcontext.isMainWiki() && $xwiki.exists($wikiManagerUserRef))
235 {{include reference="WikiManager.WikiUsers" /}}
236 #end
237 ## The Users management is enabled:
238 ## - on the main wiki
239 ## - on a subwiki where local users are enabled
240 ## - on a subwiki if there is no service "$services.wiki.user"
241 #if ($xcontext.isMainWiki() || "$!services.wiki.user" == '' || "$!services.wiki.user.userScope" != 'GLOBAL_ONLY')
242 ##
243 ## Inject needed JS and CSS files
244 ##
245 #set ($discard = $xwiki.ssx.use("XWiki.XWikiUserSheet"))
246 #set ($discard = $xwiki.ssx.use("XWiki.AdminUsersSheet"))
247 #set ($discard = $xwiki.jsx.use("XWiki.AdminUsersSheet"))
248
249 {{html clean="false"}}
250 #displayUsersLiveTable
251 #createUserModal
252 #editUserModal
253 #deleteUserModal
254 {{/html}}
255 #end
256 #end
257 {{/velocity}}
258
259 {{velocity}}
260 #if ($request.data == 'deleteUserModalContent' && "$!request.userReference" != '')
261 #deleteUserModalContent($request.userReference)
262 #elseif ($request.data == 'validateNewAuthor' && "$!request.newAuthor" != '' && "$!request.requiredRight" != '')
263 #validateNewAuthor($request.newAuthor $request.requiredRight)
264 #else
265 #doView
266 #end
267 {{/velocity}}