Merge pull request #5987 from WoltLab/acp-dahsboard-box-hight
[GitHub/WoltLab/WCF.git] / com.woltlab.wcf / templates / user.tpl
CommitLineData
3e93caf9 1{capture assign='pageTitle'}{$user->username} - {lang}wcf.user.members{/lang}{/capture}
320f4a6d 2
3e93caf9 3{capture assign='headContent'}
320f4a6d 4 {event name='javascriptInclude'}
9543d9fe 5 <script data-relocate="true">
80dd04db 6 {if $__wcf->getUser()->userID && $__wcf->getUser()->userID != $user->userID}
58d7e8f8 7 require(['Language', 'WoltLabSuite/Core/Ui/User/Editor', 'WoltLabSuite/Core/Ui/User/Profile/Menu/Item/Ignore', 'WoltLabSuite/Core/Ui/User/Profile/Menu/Item/Follow'], function(Language, UiUserEditor, UiUserProfileMenuItemIgnore, UiUserProfileMenuItemFollow) {
80dd04db 8 Language.addObject({
e2e8c155
MW
9 'wcf.acp.user.disable': '{jslang}wcf.acp.user.disable{/jslang}',
10 'wcf.acp.user.enable': '{jslang}wcf.acp.user.enable{/jslang}',
11 'wcf.user.ban': '{jslang}wcf.user.ban{/jslang}',
6cd266e8 12 'wcf.user.banned': '{jslang}wcf.user.banned{/jslang}',
e2e8c155
MW
13 'wcf.user.ban.confirmMessage': '{jslang}wcf.user.ban.confirmMessage{/jslang}',
14 'wcf.user.ban.expires': '{jslang}wcf.user.ban.expires{/jslang}',
15 'wcf.user.ban.expires.description': '{jslang}wcf.user.ban.expires.description{/jslang}',
16 'wcf.user.ban.neverExpires': '{jslang}wcf.user.ban.neverExpires{/jslang}',
17 'wcf.user.ban.reason.description': '{jslang}wcf.user.ban.reason.description{/jslang}',
18 'wcf.user.button.follow': '{jslang}wcf.user.button.follow{/jslang}',
19 'wcf.user.button.unfollow': '{jslang}wcf.user.button.unfollow{/jslang}',
20 'wcf.user.button.ignore': '{jslang}wcf.user.button.ignore{/jslang}',
21 'wcf.user.button.unignore': '{jslang}wcf.user.button.unignore{/jslang}',
22 'wcf.user.disableAvatar': '{jslang}wcf.user.disableAvatar{/jslang}',
23 'wcf.user.disableAvatar.confirmMessage': '{jslang}wcf.user.disableAvatar.confirmMessage{/jslang}',
24 'wcf.user.disableAvatar.expires': '{jslang}wcf.user.disableAvatar.expires{/jslang}',
25 'wcf.user.disableAvatar.expires.description': '{jslang}wcf.user.disableAvatar.expires.description{/jslang}',
26 'wcf.user.disableAvatar.neverExpires': '{jslang}wcf.user.disableAvatar.neverExpires{/jslang}',
27 'wcf.user.disableCoverPhoto': '{jslang}wcf.user.disableCoverPhoto{/jslang}',
28 'wcf.user.disableCoverPhoto.confirmMessage': '{jslang}wcf.user.disableCoverPhoto.confirmMessage{/jslang}',
29 'wcf.user.disableCoverPhoto.expires': '{jslang}wcf.user.disableCoverPhoto.expires{/jslang}',
30 'wcf.user.disableCoverPhoto.expires.description': '{jslang}wcf.user.disableCoverPhoto.expires.description{/jslang}',
31 'wcf.user.disableCoverPhoto.neverExpires': '{jslang}wcf.user.disableCoverPhoto.neverExpires{/jslang}',
32 'wcf.user.disableSignature': '{jslang}wcf.user.disableSignature{/jslang}',
33 'wcf.user.disableSignature.confirmMessage': '{jslang}wcf.user.disableSignature.confirmMessage{/jslang}',
34 'wcf.user.disableSignature.expires': '{jslang}wcf.user.disableSignature.expires{/jslang}',
35 'wcf.user.disableSignature.expires.description': '{jslang}wcf.user.disableSignature.expires.description{/jslang}',
36 'wcf.user.disableSignature.neverExpires': '{jslang}wcf.user.disableSignature.neverExpires{/jslang}',
37 'wcf.user.edit': '{jslang}wcf.user.edit{/jslang}',
38 'wcf.user.enableAvatar': '{jslang}wcf.user.enableAvatar{/jslang}',
39 'wcf.user.enableCoverPhoto': '{jslang}wcf.user.enableCoverPhoto{/jslang}',
40 'wcf.user.enableSignature': '{jslang}wcf.user.enableSignature{/jslang}',
41 'wcf.user.unban': '{jslang}wcf.user.unban{/jslang}'
320f4a6d
MW
42 });
43
efed4643
AE
44 {if $isAccessible}
45 UiUserEditor.init();
46 {/if}
47
a59c2da9 48 {if !$user->getPermission('user.profile.cannotBeIgnored') || $__wcf->getUserProfileHandler()->isIgnoredUser($user->userID)}
013abaff 49 new UiUserProfileMenuItemIgnore({@$user->userID}, {if $__wcf->getUserProfileHandler()->isIgnoredUser($user->userID)}true{else}false{/if});
320f4a6d 50 {/if}
8842ca25
MW
51
52 {if !$user->isIgnoredUser($__wcf->user->userID)}
5412dd98 53 new UiUserProfileMenuItemFollow({@$user->userID}, {if $__wcf->getUserProfileHandler()->isFollowing($user->userID)}true{else}false{/if});
8842ca25 54 {/if}
80dd04db
AE
55 });
56 {/if}
b933a200 57
80dd04db
AE
58 $(function() {
59 {if $__wcf->getUser()->userID && $__wcf->getUser()->userID != $user->userID}
60 WCF.Language.addObject({
e2e8c155 61 'wcf.user.activityPoint': '{jslang}wcf.user.activityPoint{/jslang}'
80dd04db 62 });
320f4a6d
MW
63 {/if}
64
65 new WCF.User.Profile.TabMenu({@$user->userID});
66
320f4a6d
MW
67 {if $user->canEdit() || ($__wcf->getUser()->userID == $user->userID && $user->canEditOwnProfile())}
68 WCF.Language.addObject({
e2e8c155 69 'wcf.user.editProfile': '{jslang}wcf.user.editProfile{/jslang}'
320f4a6d
MW
70 });
71
b433eb35 72 new WCF.User.Profile.Editor({@$user->userID}, {if $editOnInit}true{else}false{/if});
320f4a6d
MW
73 {/if}
74
320f4a6d
MW
75 {event name='javascriptInit'}
76 });
b933a200
MW
77
78 require(['WoltLabSuite/Core/Controller/User/Profile'], ({ setup }) => {
79 setup({$user->userID});
80 });
320f4a6d
MW
81 </script>
82
83 <noscript>
84 <style type="text/css">
85 #profileContent > .tabMenu > ul > li:not(:first-child) {
86 display: none !important;
87 }
88
89 #profileContent > .tabMenuContent:not(:first-of-type) {
90 display: none !important;
91 }
92 </style>
93 </noscript>
3e93caf9 94{/capture}
320f4a6d 95
2772d4eb 96{capture assign='contentHeader'}
2634aad9 97 <header class="contentHeader userProfileUser userProfileUserWithCoverPhoto" data-object-id="{@$user->userID}"{if $isAccessible}
2772d4eb
MW
98 {if $__wcf->session->getPermission('admin.user.canBanUser')}
99 data-banned="{@$user->banned}"
100 {/if}
101 {if $__wcf->session->getPermission('admin.user.canDisableAvatar')}
102 data-disable-avatar="{@$user->disableAvatar}"
103 {/if}
104 {if $__wcf->session->getPermission('admin.user.canDisableSignature')}
105 data-disable-signature="{@$user->disableSignature}"
106 {/if}
2634aad9 107 {if $__wcf->session->getPermission('admin.user.canDisableCoverPhoto')}
42ef9c72
AE
108 data-disable-cover-photo="{@$user->disableCoverPhoto}"
109 {/if}
2772d4eb
MW
110 {if $__wcf->session->getPermission('admin.user.canEnableUser')}
111 data-is-disabled="{if $user->activationCode}true{else}false{/if}"
112 {/if}
113 {/if}>
2634aad9
AE
114 <div class="userProfileCoverPhoto" style="background-image: url({$user->getCoverPhoto()->getURL()})">
115 {if ($user->userID == $__wcf->user->userID || $user->canEdit()) && ($__wcf->getSession()->getPermission('user.profile.coverPhoto.canUploadCoverPhoto') || $user->coverPhotoHash)}
116 <div class="userProfileManageCoverPhoto dropdown jsOnly">
ab43711a 117 <a href="#" class="button small dropdownToggle">{icon name='pencil'} {lang}wcf.user.coverPhoto.edit{/lang}</a>
2634aad9
AE
118 <ul class="dropdownMenu">
119 {if $__wcf->getSession()->getPermission('user.profile.coverPhoto.canUploadCoverPhoto')}
120 <li><a href="#" class="jsButtonUploadCoverPhoto jsStaticDialog" data-dialog-id="userProfileCoverPhotoUpload">{lang}wcf.user.coverPhoto.upload{/lang}</a></li>
121 {/if}
122 <li{if !$user->coverPhotoHash} style="display:none;"{/if}><a href="#" class="jsButtonDeleteCoverPhoto">{lang}wcf.user.coverPhoto.delete{/lang}</a></li>
123 </ul>
124 </div>
125 {/if}
126 </div>
2772d4eb
MW
127 <div class="contentHeaderIcon">
128 {if $user->userID == $__wcf->user->userID}
129 <a href="{link controller='AvatarEdit'}{/link}" class="jsTooltip" title="{lang}wcf.user.avatar.edit{/lang}">{@$user->getAvatar()->getImageTag(128)}</a>
130 {else}
131 <span>{@$user->getAvatar()->getImageTag(128)}</span>
132 {/if}
07c80400 133 {if $user->isOnline()}<span class="badge green badgeOnline">{lang}wcf.user.online{/lang}</span>{/if}
2772d4eb
MW
134 </div>
135
136 <div class="contentHeaderTitle">
137 <h1 class="contentTitle">
cb0baf6d 138 <span class="userProfileUsername">{$user->username}</span>
506fc276
AE
139 {if $user->banned}
140 <span class="jsTooltip jsUserBanned" title="{lang}wcf.user.banned{/lang}">
141 {icon size=24 name='lock'}
142 </span>
143 {/if}
6315a0ac
MW
144 {if MODULE_USER_RANK}
145 {if $user->getUserTitle()}
146 <span class="badge userTitleBadge{if $user->getRank() && $user->getRank()->cssClassName} {@$user->getRank()->cssClassName}{/if}">{$user->getUserTitle()}</span>
147 {/if}
148 {if $user->getRank() && $user->getRank()->rankImage}
149 <span class="userRankImage">{@$user->getRank()->getImage()}</span>
150 {/if}
2772d4eb 151 {/if}
e91cb649
AE
152
153 {event name='afterContentTitle'}
6315a0ac
MW
154 </h1>
155
46770eba 156 <div class="contentHeaderDescription">
d067a1e0 157 {if MODULE_TROPHY && $__wcf->session->getPermission('user.profile.trophy.canSeeTrophies') && ($user->isAccessible('canViewTrophies') || $user->userID == $__wcf->session->userID) && $specialTrophyCount}
a83d788a
JR
158 <div class="specialTrophyUserContainer">
159 <ul>
160 {foreach from=$user->getSpecialTrophies() item=trophy}
c194c001 161 <li><a href="{@$trophy->getLink()}">{@$trophy->renderTrophy(32, true)}</a></li>
a83d788a 162 {/foreach}
d067a1e0 163 {if $user->trophyPoints > $specialTrophyCount}
14a64855 164 <li><a href="#" class="jsTooltip userTrophyOverlayList" data-user-id="{$user->userID}" title="{lang}wcf.user.trophy.showTrophies{/lang}" role="button">{lang trophyCount=$user->trophyPoints-$specialTrophyCount}wcf.user.trophy.showMoreTrophies{/lang}</a></li>
d067a1e0 165 {/if}
a83d788a
JR
166 </ul>
167 </div>
168 {/if}
2772d4eb 169 <ul class="inlineList commaSeparated">
f51e402c 170 {if !$user->isProtected()}
aa20b103 171 {if $user->isVisibleOption('gender') && $user->gender}<li>{$user->getFormattedUserOption('gender')}</li>{/if}
f51e402c
MW
172 {if $user->isVisibleOption('birthday') && $user->getAge()}<li>{@$user->getAge()}</li>{/if}
173 {if $user->isVisibleOption('location') && $user->location}<li>{lang}wcf.user.membersList.location{/lang}</li>{/if}
174 {/if}
2772d4eb
MW
175 {if $user->getOldUsername()}<li>{lang}wcf.user.profile.oldUsername{/lang}</li>{/if}
176 <li>{lang}wcf.user.membersList.registrationDate{/lang}</li>
177 {event name='userDataRow1'}
178 </ul>
179
e904f3dc 180 {hascontent}
2772d4eb 181 <ul class="inlineList commaSeparated">
e904f3dc
AE
182 {content}
183 {if $user->canViewOnlineStatus() && $user->getLastActivityTime()}
184 <li>{lang}wcf.user.usersOnline.lastActivity{/lang}: {@$user->getLastActivityTime()|time}</li>
185 {if $user->getCurrentLocation()}<li>{@$user->getCurrentLocation()}</li>{/if}
186 {/if}
187 {if $__wcf->session->getPermission('admin.user.canViewIpAddress') && $user->registrationIpAddress}
45c88598 188 <li>{lang}wcf.user.registrationIpAddress{/lang}: <span class="userRegistrationIpAddress">{@$user->getRegistrationIpAddress()|ipSearch}</span></li>
e904f3dc
AE
189 {/if}
190 {/content}
2772d4eb 191 </ul>
e904f3dc 192 {/hascontent}
2772d4eb
MW
193
194 <dl class="plain inlineDataList">
195 {include file='userInformationStatistics'}
196
197 {if $user->profileHits}
198 <dt{if $user->getProfileAge() > 1} title="{lang}wcf.user.profileHits.hitsPerDay{/lang}"{/if}>{lang}wcf.user.profileHits{/lang}</dt>
199 <dd>{#$user->profileHits}</dd>
200 {/if}
201 </dl>
202 </div>
203 </div>
beddeac6
MW
204
205 {hascontent}
206 <nav class="contentHeaderNavigation">
207 <ul class="userProfileButtonContainer">
208 {content}
209 {if $user->canEdit() || ($__wcf->getUser()->userID == $user->userID && $user->canEditOwnProfile())}
ab43711a 210 <li><a href="#" class="jsButtonEditProfile button buttonPrimary">{icon name='pencil'} <span>{lang}wcf.user.editProfile{/lang}</span></a></li>
beddeac6
MW
211 {/if}
212
213 {event name='contentHeaderNavigation'}
214 {/content}
215 </ul>
216 </nav>
217 {/hascontent}
2772d4eb
MW
218 </header>
219{/capture}
41ec911a 220
652ff672 221{include file='userSidebar' assign='sidebarRight'}
320f4a6d 222
300c4e3c
MW
223{capture assign='__menuSearch'}
224 {event name='menuSearch'}
225 {* DEPRECATED *}{event name='quickSearchItems'}
226{/capture}
227{assign var='__menuSearch' value=$__menuSearch|trim}
228
5af681fc
MW
229{capture assign='__menuManagement'}
230 {event name='menuManagement'}
231 {if $isAccessible && $__wcf->user->userID != $user->userID && ($__wcf->session->getPermission('admin.user.canBanUser') || $__wcf->session->getPermission('admin.user.canDisableAvatar') || $__wcf->session->getPermission('admin.user.canDisableSignature') || $__wcf->session->getPermission('admin.user.canEnableUser') || ($__wcf->session->getPermission('admin.general.canUseAcp') && $__wcf->session->getPermission('admin.user.canEditUser')){event name='moderationDropdownPermissions'})}
232 {if $__wcf->session->getPermission('admin.user.canBanUser')}<li><a href="#" class="jsButtonUserBan">{lang}wcf.user.{if $user->banned}un{/if}ban{/lang}</a></li>{/if}
233 {if $__wcf->session->getPermission('admin.user.canDisableAvatar')}<li><a href="#" class="jsButtonUserDisableAvatar">{lang}wcf.user.{if $user->disableAvatar}enable{else}disable{/if}Avatar{/lang}</a></li>{/if}
234 {if $__wcf->session->getPermission('admin.user.canDisableSignature')}<li><a href="#" class="jsButtonUserDisableSignature">{lang}wcf.user.{if $user->disableSignature}enable{else}disable{/if}Signature{/lang}</a></li>{/if}
235 {if $__wcf->session->getPermission('admin.user.canDisableCoverPhoto')}<li><a href="#" class="jsButtonUserDisableCoverPhoto">{lang}wcf.user.{if $user->disableCoverPhoto}enable{else}disable{/if}CoverPhoto{/lang}</a></li>{/if}
236 {if $__wcf->session->getPermission('admin.user.canEnableUser')}<li><a href="#" class="jsButtonUserEnable">{lang}wcf.acp.user.{if $user->pendingActivation()}enable{else}disable{/if}{/lang}</a></li>{/if}
237
238 {if $__wcf->session->getPermission('admin.general.canUseAcp') && $__wcf->session->getPermission('admin.user.canEditUser')}<li><a href="{link controller='UserEdit' object=$user isACP=true}{/link}" class="jsUserInlineEditor">{lang}wcf.user.edit{/lang}</a></li>{/if}
239 {/if}
240{/capture}
241{assign var='__menuManagement' value=$__menuManagement|trim}
242
300c4e3c
MW
243{capture assign='contentInteractionButtons'}
244 {if $__menuSearch}
245 <div class="contentInteractionButton dropdown jsOnly">
eecd78e1 246 <button type="button" class="button small dropdownToggle">{icon name='magnifying-glass'} <span>{lang}wcf.user.searchUserContent{/lang}</span></button>
300c4e3c
MW
247 <ul class="dropdownMenu userProfileButtonMenu" data-menu="search">
248 {@$__menuSearch}
249 </ul>
250 </div>
251 {/if}
5af681fc
MW
252 {if $__menuManagement}
253 <div class="contentInteractionButton dropdown jsOnly">
eecd78e1 254 <button type="button" class="button small dropdownToggle">{icon name='gear'} <span>{lang}wcf.user.profile.management{/lang}</span></button>
5af681fc
MW
255 <ul class="dropdownMenu userProfileButtonMenu" data-menu="management">
256 {@$__menuManagement}
257 </ul>
258 </div>
259 {/if}
300c4e3c
MW
260{/capture}
261
859f6f9f 262{capture assign='contentInteractionDropdownItems'}
beddeac6 263 {* DEPRECATED *}{event name='menuCustomization'}
859f6f9f
MW
264 {event name='menuInteraction'}
265
266 {if $user->userID != $__wcf->user->userID}
267 {if $user->isAccessible('canViewEmailAddress') || $__wcf->session->getPermission('admin.user.canEditMailAddress')}
268 <li><a href="mailto:{@$user->getEncodedEmail()}">{lang}wcf.user.button.mail{/lang}</a></li>
269 {/if}
270 {/if}
271
272 {if $user->userID != $__wcf->user->userID && $__wcf->session->getPermission('user.profile.canReportContent')}
a31f5145
AE
273 <li>
274 <a
275 href="#"
276 role="button"
277 data-report-content="com.woltlab.wcf.user"
278 data-object-id="{$user->userID}"
279 >
280 {lang}wcf.user.profile.report{/lang}
281 </a>
282 </li>
859f6f9f
MW
283 {/if}
284{/capture}
285
652ff672 286{include file='header'}
320f4a6d 287
93823e40 288{if !$user->isProtected()}
7ac7dc24 289 <div id="profileContent" class="section tabMenuContainer userProfileContent" data-active="{$__wcf->getUserProfileMenu()->getActiveMenuItem($userID)->getIdentifier()}">
93823e40 290 <nav class="tabMenu">
320f4a6d 291 <ul>
93823e40
MW
292 {foreach from=$__wcf->getUserProfileMenu()->getMenuItems() item=menuItem}
293 {if $menuItem->getContentManager()->isVisible($userID)}
c8abd7df 294 <li><a href="#{$menuItem->getIdentifier()|rawurlencode}">{$menuItem}</a></li>
93823e40
MW
295 {/if}
296 {/foreach}
320f4a6d
MW
297 </ul>
298 </nav>
93823e40
MW
299
300 {foreach from=$__wcf->getUserProfileMenu()->getMenuItems() item=menuItem}
301 {if $menuItem->getContentManager()->isVisible($userID)}
95961bdf 302 <div id="{$menuItem->getIdentifier()}" class="tabMenuContent" data-menu-item="{$menuItem->menuItem}">
7ac7dc24 303 {if $menuItem === $__wcf->getUserProfileMenu()->getActiveMenuItem($userID)}
93823e40
MW
304 {@$profileContent}
305 {/if}
306 </div>
307 {/if}
308 {/foreach}
95961bdf 309 </div>
93823e40 310{else}
a14d7068 311 <woltlab-core-notice type="info">{lang}wcf.user.profile.protected{/lang}</woltlab-core-notice>
93823e40 312{/if}
320f4a6d 313
2634aad9 314{if $user->userID == $__wcf->user->userID || $user->canEdit()}
e26331e1
AE
315 {if $__wcf->getSession()->getPermission('user.profile.coverPhoto.canUploadCoverPhoto')}
316 <div id="userProfileCoverPhotoUpload" class="jsStaticDialogContent" data-title="{lang}wcf.user.coverPhoto.upload{/lang}">
e26331e1 317 {if $__wcf->user->disableCoverPhoto}
a14d7068 318 <woltlab-core-notice type="error">{lang}wcf.user.coverPhoto.error.disabled{/lang}</woltlab-core-notice>
e26331e1
AE
319 {else}
320 <div id="coverPhotoUploadPreview"></div>
321
322 {* placeholder for the upload button *}
323 <div id="coverPhotoUploadButtonContainer"></div>
b971006b 324 <small>{lang}wcf.user.coverPhoto.upload.description{/lang}</small>
e26331e1
AE
325 {/if}
326 </div>
327 <script data-relocate="true">
328 require(['Language', 'WoltLabSuite/Core/Ui/User/CoverPhoto/Upload'], function (Language, UiUserCoverPhotoUpload) {
329 Language.addObject({
e2e8c155
MW
330 'wcf.user.coverPhoto.delete.confirmMessage': '{jslang}wcf.user.coverPhoto.delete.confirmMessage{/jslang}',
331 'wcf.user.coverPhoto.upload.error.fileExtension': '{jslang}wcf.user.coverPhoto.upload.error.fileExtension{/jslang}',
332 'wcf.user.coverPhoto.upload.error.tooLarge': '{jslang}wcf.user.coverPhoto.upload.error.tooLarge{/jslang}',
333 'wcf.user.coverPhoto.upload.error.uploadFailed': '{jslang}wcf.user.coverPhoto.upload.error.uploadFailed{/jslang}',
334 'wcf.user.coverPhoto.upload.error.badImage': '{jslang}wcf.user.coverPhoto.upload.error.badImage{/jslang}'
e26331e1
AE
335 });
336
337 {if !$__wcf->user->disableCoverPhoto}
1dcb1f38 338 new UiUserCoverPhotoUpload({@$user->userID});
e26331e1
AE
339 {/if}
340 });
341 </script>
342 {/if}
343 <script data-relocate="true">
f2b0fe01
AE
344 require(['Language', 'WoltLabSuite/Core/Ui/User/CoverPhoto/Delete'], function (Language, UiUserCoverPhotoDelete) {
345 Language.addObject({
e2e8c155 346 'wcf.user.coverPhoto.delete.confirmMessage': '{jslang}wcf.user.coverPhoto.delete.confirmMessage{/jslang}'
f2b0fe01
AE
347 });
348
1dcb1f38 349 UiUserCoverPhotoDelete.init({@$user->userID});
f2b0fe01 350 });
e26331e1
AE
351 </script>
352{/if}
353
320f4a6d 354{include file='footer'}