Add (un)confirm email address acp actions
[GitHub/WoltLab/WCF.git] / wcfsetup / install / files / acp / templates / userList.tpl
1 {if $searchID}
2 {assign var='pageTitle' value='wcf.acp.user.search'}
3 {else}
4 {assign var='pageTitle' value='wcf.acp.user.list'}
5 {/if}
6
7 {include file='header'}
8
9 {event name='javascriptInclude'}
10 <script data-relocate="true">
11 $(function() {
12 var actionObjects = { };
13 actionObjects['com.woltlab.wcf.user'] = { };
14 actionObjects['com.woltlab.wcf.user']['delete'] = new WCF.Action.Delete('wcf\\data\\user\\UserAction', '.jsUserRow');
15
16 WCF.Clipboard.init('wcf\\acp\\page\\UserListPage', {@$hasMarkedItems}, actionObjects);
17
18 var options = { };
19 {if $pages > 1}
20 options.refreshPage = true;
21 {/if}
22
23 new WCF.Table.EmptyTableHandler($('#userTableContainer'), 'jsUserRow', options);
24
25 WCF.Language.addObject({
26 'wcf.acp.user.banReason': '{lang}wcf.acp.user.banReason{/lang}',
27 'wcf.acp.user.banReason.description': '{lang}wcf.acp.user.banReason.description{/lang}',
28 'wcf.acp.user.ban.sure': '{lang}wcf.acp.user.ban.sure{/lang}',
29 'wcf.acp.user.ban.expires': '{lang}wcf.acp.user.ban.expires{/lang}',
30 'wcf.acp.user.ban.expires.description': '{lang}wcf.acp.user.ban.expires.description{/lang}',
31 'wcf.acp.user.ban.neverExpires': '{lang}wcf.acp.user.ban.neverExpires{/lang}',
32 'wcf.acp.user.sendNewPassword.workerTitle': '{lang}wcf.acp.user.sendNewPassword.workerTitle{/lang}',
33 'wcf.acp.worker.abort.confirmMessage': '{lang}wcf.acp.worker.abort.confirmMessage{/lang}',
34 'wcf.acp.content.removeContent': '{lang}wcf.acp.content.removeContent{/lang}',
35 'wcf.user.status.banned': '{lang}wcf.user.status.banned{/lang}',
36 'wcf.user.status.isDisabled': '{lang}wcf.user.status.isDisabled{/lang}'
37 });
38 WCF.ACP.User.BanHandler.init();
39
40 {if $__wcf->session->getPermission('admin.user.canEnableUser')}
41 WCF.ACP.User.EnableHandler.init();
42 {/if}
43
44 {if $__wcf->session->getPermission('admin.user.canEditPassword')}
45 WCF.ACP.User.SendNewPasswordHandler.init();
46 {/if}
47
48 require(['Language', 'WoltLabSuite/Core/Acp/Ui/User/Editor'], function (Language, AcpUiUserList) {
49 Language.addObject({
50 'wcf.acp.user.action.sendNewPassword.confirmMessage': '{lang}wcf.acp.user.action.sendNewPassword.confirmMessage{/lang}'
51 });
52
53 AcpUiUserList.init();
54 });
55
56 {event name='javascriptInit'}
57 });
58 </script>
59
60 <header class="contentHeader">
61 <div class="contentHeaderTitle">
62 <h1 class="contentTitle">{lang}{@$pageTitle}{/lang}{if $items} <span class="badge badgeInverse">{#$items}</span>{/if}</h1>
63 </div>
64
65 {hascontent}
66 <nav class="contentHeaderNavigation">
67 <ul>
68 {content}
69 {if $__wcf->session->getPermission('admin.user.canAddUser')}
70 <li><a href="{link controller='UserAdd'}{/link}" class="button"><span class="icon icon16 fa-plus"></span> <span>{lang}wcf.acp.user.add{/lang}</span></a></li>
71 {/if}
72
73 {event name='contentHeaderNavigation'}
74 {/content}
75 </ul>
76 </nav>
77 {/hascontent}
78 </header>
79
80 {hascontent}
81 <div class="paginationTop">
82 {content}
83 {assign var=encodedURL value=$url|rawurlencode}
84 {assign var=encodedAction value=$action|rawurlencode}
85
86 {pages print=true assign=pagesLinks controller="UserList" id=$searchID link="pageNo=%d&action=$encodedAction&sortField=$sortField&sortOrder=$sortOrder"}
87 {/content}
88 </div>
89 {/hascontent}
90
91 {if $users|count}
92 <div id="userTableContainer" class="section tabularBox">
93 <table data-type="com.woltlab.wcf.user" class="table jsClipboardContainer">
94 <thead>
95 <tr>
96 <th class="columnMark"><label><input type="checkbox" class="jsClipboardMarkAll"></label></th>
97 <th class="columnID columnUserID{if $sortField == 'userID'} active {@$sortOrder}{/if}" colspan="2"><a href="{link controller='UserList' id=$searchID}action={@$encodedAction}&pageNo={@$pageNo}&sortField=userID&sortOrder={if $sortField == 'userID' && $sortOrder == 'ASC'}DESC{else}ASC{/if}{/link}">{lang}wcf.global.objectID{/lang}</a></th>
98 <th class="columnTitle columnUsername{if $sortField == 'username'} active {@$sortOrder}{/if}" colspan="2"><a href="{link controller='UserList' id=$searchID}action={@$encodedAction}&pageNo={@$pageNo}&sortField=username&sortOrder={if $sortField == 'username' && $sortOrder == 'ASC'}DESC{else}ASC{/if}{/link}">{lang}wcf.user.username{/lang}</a></th>
99
100 {foreach from=$columnHeads key=column item=columnLanguageVariable}
101 <th class="column{$column|ucfirst}{if $columnStyling[$column]|isset} {$columnStyling[$column]}{/if}{if $sortField == $column} active {@$sortOrder}{/if}"{if $column === 'registrationDate'} colspan="2"{/if}><a href="{link controller='UserList' id=$searchID}action={@$encodedAction}&pageNo={@$pageNo}&sortField={$column}&sortOrder={if $sortField == $column && $sortOrder == 'ASC'}DESC{else}ASC{/if}{/link}">{lang}{$columnLanguageVariable}{/lang}</a></th>
102 {/foreach}
103
104 {event name='columnHeads'}
105 </tr>
106 </thead>
107
108 <tbody>
109 {foreach from=$users item=user}
110 <tr class="jsUserRow jsClipboardObject" data-object-id="{@$user->userID}" data-banned="{if $user->banned}true{else}false{/if}" data-enabled="{if !$user->activationCode}true{else}false{/if}" data-email-confirmed="{if $user->isEmailConfirmed()}true{else}false{/if}">
111 <td class="columnMark"><input type="checkbox" class="jsClipboardItem" data-object-id="{@$user->userID}"></td>
112 <td class="columnIcon">
113 <div class="dropdown" id="userListDropdown{@$user->userID}">
114 <a href="#" class="dropdownToggle button small"><span class="icon icon16 fa-pencil"></span> <span>{lang}wcf.global.button.edit{/lang}</span></a>
115
116 <ul class="dropdownMenu">
117 {event name='dropdownItems'}
118
119 {if $user->userID !== $__wcf->user->userID}
120 {if $user->accessible && $__wcf->session->getPermission('admin.user.canEnableUser')}
121 <li><a href="#" class="jsConfirmEmailToggle" data-confirm-email-message="{lang}wcf.acp.user.action.confirmEmail{/lang}" data-unconfirm-email-message="{lang}wcf.acp.user.action.unconfirmEmail{/lang}">{lang}wcf.acp.user.action.{if $user->isEmailConfirmed()}un{/if}confirmEmail{/lang}</a></li>
122 {/if}
123
124 {if $__wcf->session->getPermission('admin.user.canMailUser')}
125 <li><a href="{link controller='UserMail' id=$user->userID}{/link}">{lang}wcf.acp.user.action.sendMail{/lang}</a></li>
126 {/if}
127
128 {if $user->accessible && $__wcf->session->getPermission('admin.user.canEditPassword')}
129 <li><a href="#" class="jsSendNewPassword">{lang}wcf.acp.user.action.sendNewPassword{/lang}</a></li>
130 {/if}
131 {/if}
132
133 {if $user->editable}
134 <li><a href="{link controller='UserExportGdpr' id=$user->userID}{/link}">{lang}wcf.acp.user.exportGdpr{/lang}</a></li>
135 {/if}
136
137 {if $user->deletable}
138 <li class="dropdownDivider"></li>
139 <li><a href="#" class="jsDispatchDelete">{lang}wcf.global.button.delete{/lang}</a></li>
140 <li><a href="#" class="jsDeleteContent">{lang}wcf.acp.content.removeContent{/lang}</a></li>
141 {/if}
142
143 {if $user->editable}
144 <li class="dropdownDivider"></li>
145 <li><a href="{link controller='UserEdit' id=$user->userID}{/link}" class="jsEditLink">{lang}wcf.global.button.edit{/lang}</a></li>
146 {/if}
147 </ul>
148 </div>
149
150 <div class="jsLegacyButtons" style="display: none">
151 {* The old buttons (with the exception of the edit button) should remain here
152 for backwards-compatibility, they're sometimes referenced with JavaScript-
153 based insert calls. Clicks are forwarded to them anyway, thus there is no
154 significant downside, other than "just" some more legacy code. *}
155
156 {if $user->deletable}
157 <span class="icon icon16 fa-times jsTooltip jsDeleteButton pointer" title="{lang}wcf.global.button.delete{/lang}" data-object-id="{@$user->userID}" data-confirm-message-html="{lang __encode=true}wcf.acp.user.delete.sure{/lang}"></span>
158 {/if}
159 {if $user->bannable}
160 <span class="icon icon16 fa-{if $user->banned}lock{else}unlock{/if} jsBanButton jsTooltip pointer" title="{lang}wcf.acp.user.{if $user->banned}unban{else}ban{/if}{/lang}" data-object-id="{@$user->userID}" data-ban-message="{lang}wcf.acp.user.ban{/lang}" data-unban-message="{lang}wcf.acp.user.unban{/lang}" data-banned="{if $user->banned}true{else}false{/if}"></span>
161 {/if}
162 {if $user->canBeEnabled}
163 <span class="icon icon16 fa-{if !$user->activationCode}check-square-o{else}square-o{/if} jsEnableButton jsTooltip pointer" title="{lang}wcf.acp.user.{if !$user->activationCode}disable{else}enable{/if}{/lang}" data-object-id="{@$user->userID}" data-enable-message="{lang}wcf.acp.user.enable{/lang}" data-disable-message="{lang}wcf.acp.user.disable{/lang}" data-enabled="{if !$user->activationCode}true{else}false{/if}"></span>
164 {/if}
165
166 {event name='rowButtons'}
167 </div>
168 </td>
169 <td class="columnID columnUserID">{@$user->userID}</td>
170 <td class="columnIcon">{@$user->getAvatar()->getImageTag(24)}</td>
171 <td class="columnTitle columnUsername">
172 <span class="username">
173 {if $user->editable}
174 <a title="{lang}wcf.acp.user.edit{/lang}" href="{link controller='UserEdit' id=$user->userID}{/link}">{$user->username}</a>
175 {else}
176 {$user->username}
177 {/if}
178 </span>
179
180 <span class="userStatusIcons">
181 {if $user->banned}<span class="icon icon16 fa-lock jsTooltip jsUserStatusBanned" title="{lang}wcf.user.status.banned{/lang}"></span>{/if}
182 {if $user->activationCode != 0}
183 <span class="icon icon16 fa-power-off jsTooltip jsUserStatusIsDisabled" title="{lang}wcf.user.status.isDisabled{/lang}"></span>
184 {if !$user->getBlacklistMatches()|empty}
185 <span class="icon icon16 fa-warning jsTooltip jsUserStatusBlacklistMatches" title="{lang}wcf.user.status.blacklistMatches{/lang}"></span>
186 {/if}
187 {/if}
188 </span>
189
190 {if MODULE_USER_RANK}
191 {if $user->getUserTitle()} <span class="badge userTitleBadge{if $user->getRank() && $user->getRank()->cssClassName} {@$user->getRank()->cssClassName}{/if}">{$user->getUserTitle()}</span>{/if}
192 {if $user->getRank() && $user->getRank()->rankImage} <span class="userRankImage">{@$user->getRank()->getImage()}</span>{/if}
193 {/if}
194 </td>
195
196 {foreach from=$columnHeads key=column item=columnLanguageVariable}
197 {if $column === 'registrationDate'}
198 <td class="columnDate columnRegistrationIpAddress">
199 {if $__wcf->session->getPermission('admin.user.canViewIpAddress') && $user->registrationIpAddress}
200 <span class="jsTooltip" title="{lang}wcf.user.registrationIpAddress{/lang}">{$user->getRegistrationIpAddress()}</span>
201 {/if}
202 </td>
203 {/if}
204 <td class="column{$column|ucfirst}{if $columnStyling[$column]|isset} {$columnStyling[$column]}{/if}">{if $columnValues[$user->userID][$column]|isset}{@$columnValues[$user->userID][$column]}{/if}</td>
205 {/foreach}
206
207 {event name='columns'}
208 </tr>
209 {/foreach}
210 </tbody>
211 </table>
212 </div>
213
214 <footer class="contentFooter">
215 {hascontent}
216 <div class="paginationBottom">
217 {content}{@$pagesLinks}{/content}
218 </div>
219 {/hascontent}
220
221 {hascontent}
222 <nav class="contentFooterNavigation">
223 <ul>
224 {content}
225 {if $__wcf->session->getPermission('admin.user.canAddUser')}
226 <li><a href="{link controller='UserAdd'}{/link}" class="button"><span class="icon icon16 fa-plus"></span> <span>{lang}wcf.acp.user.add{/lang}</span></a></li>
227 {/if}
228
229 {event name='contentFooterNavigation'}
230 {/content}
231 </ul>
232 </nav>
233 {/hascontent}
234 </footer>
235 {else}
236 <p class="info">{lang}wcf.acp.user.search.error.noMatches{/lang}</p>
237 {/if}
238
239 {include file='footer'}