Overhauled usage of quotation marks / improved user online location strings
[GitHub/WoltLab/WCF.git] / com.woltlab.wcf / templates / user.tpl
1 {include file='documentHeader'}
2
3 <head>
4 <title>{$user->username} - {lang}wcf.user.members{/lang} - {PAGE_TITLE|language}</title>
5
6 {include file='headInclude'}
7
8 <link rel="canonical" href="{link controller='User' object=$user}{/link}" />
9
10 {event name='javascriptInclude'}
11 <script data-relocate="true">
12 //<![CDATA[
13 $(function() {
14 {if $__wcf->getUser()->userID && $__wcf->getUser()->userID != $user->userID}
15 WCF.Language.addObject({
16 'wcf.user.activityPoint': '{lang}wcf.user.activityPoint{/lang}',
17 'wcf.user.button.follow': '{lang}wcf.user.button.follow{/lang}',
18 'wcf.user.button.unfollow': '{lang}wcf.user.button.unfollow{/lang}',
19 'wcf.user.button.ignore': '{lang}wcf.user.button.ignore{/lang}',
20 'wcf.user.button.unignore': '{lang}wcf.user.button.unignore{/lang}'
21 });
22
23 {if !$user->getPermission('user.profile.cannotBeIgnored')}
24 new WCF.User.Profile.IgnoreUser({@$user->userID}, {if $__wcf->getUserProfileHandler()->isIgnoredUser($user->userID)}true{else}false{/if});
25 {/if}
26
27 new WCF.User.Profile.Follow({@$user->userID}, {if $__wcf->getUserProfileHandler()->isFollowing($user->userID)}true{else}false{/if});
28 {/if}
29
30 new WCF.User.Profile.TabMenu({@$user->userID});
31
32 WCF.TabMenu.init();
33
34 {if $user->canEdit() || ($__wcf->getUser()->userID == $user->userID && $user->canEditOwnProfile())}
35 WCF.Language.addObject({
36 'wcf.user.editProfile': '{lang}wcf.user.editProfile{/lang}',
37 });
38
39 new WCF.User.Profile.Editor({@$user->userID}, {if $editOnInit}true{else}false{/if});
40 {/if}
41
42 {if $user->activityPoints}
43 WCF.Language.addObject({
44 'wcf.user.activityPoint': '{lang}wcf.user.activityPoint{/lang}'
45 });
46
47 WCF.User.Profile.ActivityPointList.init();
48 {/if}
49
50 {if $followingCount > 10}
51 var $followingList = null;
52 $('#followingAll').click(function() {
53 if ($followingList === null) {
54 $followingList = new WCF.User.List('wcf\\data\\user\\follow\\UserFollowingAction', $('#followingAll').parents('fieldset').children('legend').text().replace(/ \d+$/, ''), { userID: {@$user->userID} });
55 }
56
57 $followingList.open();
58 });
59 {/if}
60 {if $followerCount > 10}
61 var $followerList = null;
62 $('#followerAll').click(function() {
63 if ($followerList === null) {
64 $followerList = new WCF.User.List('wcf\\data\\user\\follow\\UserFollowAction', $('#followerAll').parents('fieldset').children('legend').text().replace(/ \d+$/, ''), { userID: {@$user->userID} });
65 }
66
67 $followerList.open();
68 });
69 {/if}
70 {if $visitorCount > 10}
71 var $visitorList = null;
72 $('#visitorAll').click(function() {
73 if ($visitorList === null) {
74 $visitorList = new WCF.User.List('wcf\\data\\user\\profile\\visitor\\UserProfileVisitorAction', $('#visitorAll').parents('fieldset').children('legend').text().replace(/ \d+$/, ''), { userID: {@$user->userID} });
75 }
76
77 $visitorList.open();
78 });
79 {/if}
80
81 {if $isAccessible && $__wcf->user->userID != $user->userID}
82 WCF.Language.addObject({
83 'wcf.user.ban': '{lang}wcf.user.ban{/lang}',
84 'wcf.user.ban.confirmMessage': '{lang}wcf.user.ban.confirmMessage{/lang}',
85 'wcf.user.ban.expires': '{lang}wcf.user.ban.expires{/lang}',
86 'wcf.user.ban.expires.description': '{lang}wcf.user.ban.expires.description{/lang}',
87 'wcf.user.ban.neverExpires': '{lang}wcf.user.ban.neverExpires{/lang}',
88 'wcf.user.ban.reason.description': '{lang}wcf.user.ban.reason.description{/lang}',
89 'wcf.user.unban': '{lang}wcf.user.unban{/lang}',
90 'wcf.user.disableAvatar': '{lang}wcf.user.disableAvatar{/lang}',
91 'wcf.user.ban.expires': '{lang}wcf.user.ban.expires{/lang}',
92 'wcf.user.ban.expires.description': '{lang}wcf.user.ban.expires.description{/lang}',
93 'wcf.user.ban.neverExpires': '{lang}wcf.user.ban.neverExpires{/lang}',
94 'wcf.user.disableAvatar.confirmMessage': '{lang}wcf.user.disableAvatar.confirmMessage{/lang}',
95 'wcf.user.disableAvatar.expires': '{lang}wcf.user.disableAvatar.expires{/lang}',
96 'wcf.user.disableAvatar.expires.description': '{lang}wcf.user.disableAvatar.expires.description{/lang}',
97 'wcf.user.disableAvatar.neverExpires': '{lang}wcf.user.disableAvatar.neverExpires{/lang}',
98 'wcf.user.disableSignature': '{lang}wcf.user.disableSignature{/lang}',
99 'wcf.user.disableSignature.confirmMessage': '{lang}wcf.user.disableSignature.confirmMessage{/lang}',
100 'wcf.user.disableSignature.expires': '{lang}wcf.user.disableSignature.expires{/lang}',
101 'wcf.user.disableSignature.expires.description': '{lang}wcf.user.disableSignature.expires.description{/lang}',
102 'wcf.user.disableSignature.neverExpires': '{lang}wcf.user.disableSignature.neverExpires{/lang}',
103 'wcf.user.edit': '{lang}wcf.user.edit{/lang}',
104 'wcf.user.enableAvatar': '{lang}wcf.user.enableAvatar{/lang}',
105 'wcf.user.enableSignature': '{lang}wcf.user.enableSignature{/lang}'
106 });
107
108 var $userInlineEditor = new WCF.User.InlineEditor('.userHeadline');
109 $userInlineEditor.setPermissions({
110 canBanUser: {if $__wcf->session->getPermission('admin.user.canBanUser')}true{else}false{/if},
111 canDisableAvatar: {if $__wcf->session->getPermission('admin.user.canDisableAvatar')}true{else}false{/if},
112 canDisableSignature: {if $__wcf->session->getPermission('admin.user.canDisableSignature')}true{else}false{/if},
113 canEditUser: {if $__wcf->session->getPermission('admin.general.canUseAcp') && $__wcf->session->getPermission('admin.user.canEditUser')}true{else}false{/if}
114 });
115 {/if}
116
117 {if $__wcf->session->getPermission('user.profile.canReportContent')}
118 WCF.Language.addObject({
119 'wcf.moderation.report.reportContent': '{lang}wcf.user.profile.report{/lang}',
120 'wcf.moderation.report.success': '{lang}wcf.moderation.report.success{/lang}'
121 });
122 new WCF.Moderation.Report.Content('com.woltlab.wcf.user', '.jsReportUser');
123 {/if}
124
125 {event name='javascriptInit'}
126 });
127 //]]>
128 </script>
129
130 <noscript>
131 <style type="text/css">
132 #profileContent > .tabMenu > ul > li:not(:first-child) {
133 display: none !important;
134 }
135
136 #profileContent > .tabMenuContent:not(:first-of-type) {
137 display: none !important;
138 }
139 </style>
140 </noscript>
141 </head>
142
143 <body id="tpl{$templateName|ucfirst}" data-template="{$templateName}" data-application="{$templateNameApplication}">
144
145 {include file='userSidebar' assign='sidebar'}
146
147 {include file='header' sidebarOrientation='left'}
148
149 <header class="boxHeadline userHeadline"
150 {if $isAccessible}
151 data-object-id="{@$user->userID}"
152 {if $__wcf->session->getPermission('admin.user.canBanUser')}
153 data-banned="{@$user->banned}"
154 {/if}
155 {if $__wcf->session->getPermission('admin.user.canDisableAvatar')}
156 data-disable-avatar="{@$user->disableAvatar}"
157 {/if}
158 {if $__wcf->session->getPermission('admin.user.canDisableSignature')}
159 data-disable-signature="{@$user->disableSignature}"
160 {/if}
161 {/if}
162 >
163 <span class="framed invisible">{@$user->getAvatar()->getImageTag(48)}</span>
164
165 <h1>{$user->username}{if $user->banned} <span class="icon icon16 fa-lock jsTooltip jsUserBanned" title="{lang}wcf.user.banned{/lang}"></span>{/if}{if MODULE_USER_RANK && $user->getUserTitle()} <span class="badge userTitleBadge{if $user->getRank() && $user->getRank()->cssClassName} {@$user->getRank()->cssClassName}{/if}">{$user->getUserTitle()}</span>{/if}</h1>
166
167 <ul class="dataList">
168 {if $user->isVisibleOption('gender') && $user->gender}<li>{lang}wcf.user.gender.{if $user->gender == 1}male{else}female{/if}{/lang}</li>{/if}
169 {if $user->isVisibleOption('birthday') && $user->getAge()}<li>{@$user->getAge()}</li>{/if}
170 {if $user->isVisibleOption('location') && $user->location}<li>{lang}wcf.user.membersList.location{/lang}</li>{/if}
171 {if $user->getOldUsername()}<li>{lang}wcf.user.profile.oldUsername{/lang}</li>{/if}
172 <li>{lang}wcf.user.membersList.registrationDate{/lang}</li>
173 {event name='userDataRow1'}
174 </ul>
175 {if $user->canViewOnlineStatus() && $user->getLastActivityTime()}
176 <dl class="plain inlineDataList">
177 <dt>{lang}wcf.user.usersOnline.lastActivity{/lang}</dt>
178 <dd>{@$user->getLastActivityTime()|time}{if $user->getCurrentLocation()}, {@$user->getCurrentLocation()}{/if}</dd>
179 {event name='userDataRow2'}
180 </dl>
181 {/if}
182 <nav class="jsMobileNavigation buttonGroupNavigation">
183 <ul id="profileButtonContainer" class="buttonGroup">
184 {hascontent}
185 <li class="dropdown">
186 <a href="#" class="button dropdownToggle jsTooltip" title="{lang}wcf.user.searchUserContent{/lang}"><span class="icon icon16 icon-search"></span> <span class="invisible">{lang}wcf.user.searchUserContent{/lang}</span></a>
187 <ul class="dropdownMenu">
188 {content}
189 {event name='quickSearchItems'}
190 {/content}
191 </ul>
192 </li>
193 {/hascontent}
194
195 {if $__wcf->session->getPermission('user.profile.canReportContent')}
196 <li class="jsReportUser jsOnly" data-object-id="{@$user->userID}"><a href="#" title="{lang}wcf.user.profile.report{/lang}" class="button jsTooltip"><span class="icon icon16 icon-warning-sign"></span> <span class="invisible">{lang}wcf.user.profile.report{/lang}</span></a></li>
197 {/if}
198
199 {if $user->userID != $__wcf->user->userID}
200 {if $user->isAccessible('canViewEmailAddress') || $__wcf->session->getPermission('admin.user.canEditMailAddress')}
201 <li><a class="button jsTooltip" href="mailto:{@$user->getEncodedEmail()}" title="{lang}wcf.user.button.mail{/lang}"><span class="icon icon16 icon-envelope-alt"></span> <span class="invisible">{lang}wcf.user.button.mail{/lang}</span></a></li>
202 {elseif $user->isAccessible('canMail') && $__wcf->session->getPermission('user.profile.canMail')}
203 <li><a class="button jsTooltip" href="{link controller='Mail' object=$user}{/link}" title="{lang}wcf.user.button.mail{/lang}"><span class="icon icon16 icon-envelope-alt"></span> <span class="invisible">{lang}wcf.user.button.mail{/lang}</span></a></li>
204 {/if}
205 {/if}
206
207 {event name='buttons'}
208
209 {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.general.canUseAcp') && $__wcf->session->getPermission('admin.user.canEditUser')){event name='moderationDropdownPermissions'})}
210 <li class="dropdown">
211 <a href="{link controller='UserEdit' object=$user isACP=true}{/link}" class="button jsTooltip jsUserInlineEditor" title="{lang}wcf.user.moderate{/lang}"><span class="icon icon16 fa-wrench"></span> <span class="invisible">{lang}wcf.user.moderate{/lang}</span></a>
212 <ul class="dropdownMenu"></ul>
213 </li>
214 {/if}
215 </ul>
216 </nav>
217 </header>
218
219 {include file='userNotice'}
220
221 {if !$user->isProtected()}
222 <div class="contentNavigation">
223 {hascontent}
224 <nav>
225 <ul>
226 {content}
227 {event name='contentNavigationButtons'}
228 {/content}
229 </ul>
230 </nav>
231 {/hascontent}
232 </div>
233
234 <section id="profileContent" class="marginTop tabMenuContainer" data-active="{$__wcf->getUserProfileMenu()->getActiveMenuItem()->getIdentifier()}">
235 <nav class="tabMenu">
236 <ul>
237 {foreach from=$__wcf->getUserProfileMenu()->getMenuItems() item=menuItem}
238 {if $menuItem->getContentManager()->isVisible($userID)}
239 <li><a href="{$__wcf->getAnchor($menuItem->getIdentifier())}">{lang}wcf.user.profile.menu.{@$menuItem->menuItem}{/lang}</a></li>
240 {/if}
241 {/foreach}
242 </ul>
243 </nav>
244
245 {foreach from=$__wcf->getUserProfileMenu()->getMenuItems() item=menuItem}
246 {if $menuItem->getContentManager()->isVisible($userID)}
247 <div id="{$menuItem->getIdentifier()}" class="container tabMenuContent" data-menu-item="{$menuItem->menuItem}">
248 {if $menuItem === $__wcf->getUserProfileMenu()->getActiveMenuItem()}
249 {@$profileContent}
250 {/if}
251 </div>
252 {/if}
253 {/foreach}
254 </section>
255 {else}
256 <p class="info">{lang}wcf.user.profile.protected{/lang}</p>
257 {/if}
258
259 {include file='footer'}
260
261 </body>
262 </html>