This repository has been archived on 2023-03-18. You can view files and clone it, but cannot push or open issues or pull requests.
osr-discourse-src/app/assets/javascripts/discourse/templates/user.hbs
Guo Xiang Tan 24347ace10 FIX: Properly associate user_profiles background urls via upload id.
`Upload#url` is more likely and can change from time to time. When it
does changes, we don't want to have to look through multiple tables to
ensure that the URLs are all up to date. Instead, we simply associate
uploads properly to `UserProfile` so that it does not have to replicate
the URLs in the table.
2019-05-02 14:58:24 +08:00

243 lines
10 KiB
Handlebars

<div class="container {{if viewingSelf 'viewing-self'}}">
{{#d-section class="user-main"}}
<section class="{{if collapsedInfo 'collapsed-info'}} about {{if hasProfileBackgroundUrl 'has-background' 'no-background'}}" >
{{#unless collapsedInfo}}
{{#if showStaffCounters}}
<div class='staff-counters'>
{{#if model.number_of_flags_given}}
<div><span class="helpful-flags">{{model.number_of_flags_given}}</span>{{i18n 'user.staff_counters.flags_given'}}</div>
{{/if}}
{{#if model.number_of_flagged_posts}}
<div>
{{#link-to 'review' (query-params username=model.username status='all' type='ReviewableFlaggedPost')}}
<span class="flagged-posts">{{model.number_of_flagged_posts}}</span>{{i18n 'user.staff_counters.flagged_posts'}}
{{/link-to}}
</div>
{{/if}}
{{#if model.number_of_deleted_posts}}
<div>
{{#link-to 'user.deletedPosts' model}}
<span class="deleted-posts">{{model.number_of_deleted_posts}}</span>{{i18n 'user.staff_counters.deleted_posts'}}
{{/link-to}}
</div>
{{/if}}
{{#if model.number_of_suspensions}}
<div>
<a {{action "showSuspensions"}}>
<span class="suspensions">{{model.number_of_suspensions}}</span>{{i18n 'user.staff_counters.suspensions'}}
</a>
</div>
{{/if}}
{{#if model.warnings_received_count}}
<div><span class="warnings-received">{{model.warnings_received_count}}</span>{{i18n 'user.staff_counters.warnings_received'}}</div>
{{/if}}
</div>
{{/if}}
<div class="user-profile-image" style={{model.profileBackgroundUrl}}></div>
{{/unless}}
<div class='details'>
<div class='primary'>
{{user-profile-avatar user=model tagName=""}}
<section class='controls'>
<ul>
{{#if model.can_send_private_message_to_user}}
<li>
{{d-button class="btn-primary compose-pm"
action=(route-action "composePrivateMessage" model)
icon="envelope"
label="user.private_message"}}
</li>
{{#if canMuteOrIgnoreUser}}
<li>
{{user-notifications-dropdown user=model updateNotificationLevel=(action "updateNotificationLevel")}}
</li>
{{/if}}
{{/if}}
{{#if currentUser.staff}}
<li><a href={{model.adminPath}} class="btn btn-default">{{d-icon "wrench"}}{{i18n 'admin.user.show_admin_profile'}}</a></li>
{{/if}}
{{plugin-outlet name="user-profile-controls"
tagName=""
connectorTagName="li"
args=(hash model=model)}}
{{#if canExpandProfile}}
<li>
{{#if collapsedInfo}}
<a {{action "expandProfile"}} href class="btn btn-default">
{{d-icon "angle-double-down"}} {{i18n 'user.expand_profile'}}
</a>
{{else}}
<a {{action "collapseProfile"}} href class="btn btn-default">
{{d-icon "angle-double-up"}} {{i18n 'user.collapse_profile'}}
</a>
{{/if}}
</li>
{{/if}}
</ul>
</section>
<div class="primary-textual">
<div class="user-profile-names">
<h1 class="{{if nameFirst "full-name" "username"}}">{{if nameFirst model.name (format-username model.username)}} {{user-status model currentUser=currentUser}}</h1>
<h2 class="{{if nameFirst "username" "full-name"}}">{{#if nameFirst}}{{model.username}}{{else}}{{model.name}}{{/if}}</h2>
{{#if model.staged}}
<h2 class="staged">{{i18n 'user.staged'}}</h2>
{{/if}}
{{#if model.title}}
<h3>{{model.title}}</h3>
{{/if}}
{{plugin-outlet name="user-post-names" args=(hash model=model)}}
</div>
<h3 class="location-and-website">
{{#if model.location}}<div class="user-profile-location">{{d-icon "map-marker-alt"}} {{model.location}}</div>{{/if}}
{{#if model.website_name}}
<div class="user-profile-website">
{{d-icon "globe"}}
{{#if linkWebsite}}
<a href={{model.website}} rel={{unless removeNoFollow 'nofollow noopener'}} target="_blank">{{model.website_name}}</a>
{{else}}
<span title={{model.website}}>{{model.website_name}}</span>
{{/if}}
</div>
{{/if}}
{{plugin-outlet name="user-location-and-website" args=(hash model=model)}}
</h3>
<div class='bio'>
{{#if model.suspended}}
<div class='suspended'>
{{d-icon "ban"}}
<b>
{{#if model.suspendedForever}}
{{i18n 'user.suspended_permanently'}}
{{else}}
{{i18n 'user.suspended_notice' date=model.suspendedTillDate}}
{{/if}}
</b><br>
{{#if model.suspend_reason}}
<b>{{i18n 'user.suspended_reason'}}</b> {{model.suspend_reason}}
{{/if}}
</div>
{{/if}}
{{#if isNotSuspendedOrIsStaff}}
{{{model.bio_cooked}}}
{{/if}}
</div>
{{#if publicUserFields}}
<div class="public-user-fields">
{{#each publicUserFields as |uf|}}
{{#if uf.value}}
<div class="public-user-field {{uf.field.dasherized_name}}">
<span class="user-field-name">{{uf.field.name}}</span>:
<span class="user-field-value">{{uf.value}}</span>
</div>
{{/if}}
{{/each}}
{{plugin-outlet name="user-profile-public-fields"
args=(hash publicUserFields=publicUserFields
model=model)}}
</div>
{{/if}}
{{plugin-outlet name="user-profile-primary" args=(hash model=model)}}
</div>
</div>
{{#unless collapsedInfo}}
<div class='secondary'>
<dl>
{{#if model.created_at}}
<div><dt>{{i18n 'user.created'}}</dt><dd>{{bound-date model.created_at}}</dd></div>
{{/if}}
{{#if model.last_posted_at}}
<div><dt>{{i18n 'user.last_posted'}}</dt><dd>{{bound-date model.last_posted_at}}</dd></div>
{{/if}}
{{#if model.last_seen_at}}
<div><dt>{{i18n 'user.last_seen'}}</dt><dd>{{bound-date model.last_seen_at}}</dd></div>
{{/if}}
<div><dt>{{i18n 'views'}}</dt><dd>{{model.profile_view_count}}</dd></div>
{{#if model.invited_by}}
<div><dt class="invited-by">{{i18n 'user.invited_by'}}</dt><dd class="invited-by">{{#link-to 'user' model.invited_by}}{{model.invited_by.username}}{{/link-to}}</dd></div>
{{/if}}
{{#if model.trust_level}}
<div><dt class="trust-level">{{i18n 'user.trust_level'}}</dt><dd class="trust-level">{{model.trustLevel.name}}</dd></div>
{{/if}}
{{#if canCheckEmails}}
<div><dt>{{i18n 'user.email.title'}}</dt>
<dd title={{model.email}}>
{{#if model.email}}
{{model.email}}
{{else}}
{{d-button action=(route-action "checkEmail") actionParam=model icon="far-envelope" label="admin.users.check_email.text" class="btn-primary"}}
{{/if}}
</dd>
</div>
{{/if}}
{{#if model.displayGroups}}
<div><dt class="groups">{{i18n 'groups.title' count=model.displayGroups.length}}</dt>
<dd class='groups'>
{{#each model.displayGroups as |group|}}
<span>{{#link-to 'group' group.name class="group-link"}}{{group.name}}{{/link-to}}</span>
{{/each}}
{{#link-to "groups" (query-params username=model.username)}}
...
{{/link-to}}
</dd>
</div>
{{/if}}
{{#if canDeleteUser}}
<div class='pull-right'>{{d-button action=(action "adminDelete") icon="exclamation-triangle" label="user.admin_delete" class="btn-danger"}}</div>
{{/if}}
</dl>
{{plugin-outlet name="user-profile-secondary" args=(hash model=model)}}
</div>
{{/unless}}
</div>
</section>
<div class='user-content-wrapper'>
<section class="user-primary-navigation">
{{#mobile-nav class='main-nav' desktopClass="nav nav-pills user-nav" currentPath=currentPath}}
{{#unless model.profile_hidden}}
<li>{{#link-to 'user.summary'}}{{i18n 'user.summary.title'}}{{/link-to}}</li>
<li>{{#link-to 'userActivity'}}{{i18n 'user.activity_stream'}}{{/link-to}}</li>
{{/unless}}
{{#if showNotificationsTab}}
<li>
{{#link-to 'userNotifications'}}
{{d-icon "comment" class="glyph"}}{{i18n 'user.notifications'}}
{{/link-to}}
</li>
{{/if}}
{{#if showPrivateMessages}}
<li>{{#link-to 'userPrivateMessages'}}{{d-icon "far-envelope"}}{{i18n 'user.private_messages'}}{{/link-to}}</li>
{{/if}}
{{#if canInviteToForum}}
<li>{{#link-to 'userInvited'}}{{d-icon "user-plus"}}{{i18n 'user.invited.title'}}{{/link-to}}</li>
{{/if}}
{{#if showBadges}}
<li>{{#link-to 'user.badges'}}{{d-icon "certificate"}}{{i18n 'badges.title'}}{{/link-to}}</li>
{{/if}}
{{plugin-outlet name="user-main-nav" tagName='' connectorTagName='li' args=(hash model=model)}}
{{#if model.can_edit}}
<li>{{#link-to 'preferences'}}{{d-icon "cog"}}{{i18n 'user.preferences'}}{{/link-to}}</li>
{{/if}}
{{/mobile-nav}}
</section>
{{outlet}}
</div>
{{/d-section}}
</div>