240 lines
8.1 KiB
Handlebars
240 lines
8.1 KiB
Handlebars
<div class="control-group pref-username">
|
|
<label class="control-label">{{i18n 'user.username.title'}}</label>
|
|
<div class="controls">
|
|
<span class='static'>{{model.username}}</span>
|
|
{{#if model.can_edit_username}}
|
|
{{#link-to "preferences.username" class="btn btn-default btn-small btn-icon pad-left no-text"}}
|
|
{{d-icon "pencil-alt"}} {{/link-to}}
|
|
{{/if}}
|
|
</div>
|
|
{{#if siteSettings.enable_mentions}}
|
|
<div class='instructions'>
|
|
{{{i18n 'user.username.short_instructions' username=model.username}}}
|
|
</div>
|
|
{{/if}}
|
|
</div>
|
|
|
|
{{#unless siteSettings.sso_overrides_avatar}}
|
|
<div class="control-group pref-avatar">
|
|
<label class="control-label" id="profile-picture">{{i18n 'user.avatar.title'}}</label>
|
|
<div class="controls">
|
|
{{! we want the "huge" version even though we're downsizing it in CSS }}
|
|
{{bound-avatar model "huge"}}
|
|
{{d-button action=(route-action "showAvatarSelector") actionParam=model class="btn-default pad-left" icon="pencil-alt"}}
|
|
</div>
|
|
</div>
|
|
{{/unless}}
|
|
|
|
{{#if canEditName}}
|
|
<div class="control-group pref-name">
|
|
<label class="control-label">{{i18n 'user.name.title'}}</label>
|
|
<div class="controls">
|
|
{{#if model.can_edit_name}}
|
|
{{text-field value=newNameInput classNames="input-xxlarge"}}
|
|
{{else}}
|
|
<span class='static'>{{model.name}}</span>
|
|
{{/if}}
|
|
</div>
|
|
<div class='instructions'>
|
|
{{nameInstructions}}
|
|
</div>
|
|
</div>
|
|
{{/if}}
|
|
|
|
{{#if canCheckEmails}}
|
|
<div class="control-group pref-email">
|
|
<label class="control-label">{{i18n 'user.email.title'}}</label>
|
|
{{#if model.email}}
|
|
<div class="controls">
|
|
<span class='static'>{{model.email}}</span>
|
|
{{#if model.can_edit_email}}
|
|
{{#link-to "preferences.email" class="btn btn-default btn-small btn-icon pad-left no-text"}}{{d-icon "pencil-alt"}}{{/link-to}}
|
|
{{/if}}
|
|
</div>
|
|
<div class='instructions'>
|
|
{{#if siteSettings.sso_overrides_email}}
|
|
{{i18n 'user.email.sso_override_instructions'}}
|
|
{{/if}}
|
|
{{i18n 'user.email.instructions'}}
|
|
</div>
|
|
{{else}}
|
|
<div class="controls">
|
|
{{d-button action=(route-action "checkEmail") class="btn-default" actionParam=model title="admin.users.check_email.title" icon="far-envelope" label="admin.users.check_email.text"}}
|
|
</div>
|
|
{{/if}}
|
|
</div>
|
|
{{/if}}
|
|
|
|
{{#if canChangePassword}}
|
|
<div class="control-group pref-password">
|
|
<label class="control-label">{{i18n 'user.password.title'}}</label>
|
|
<div class="controls">
|
|
<a href {{action "changePassword"}} class='btn btn-default'>
|
|
{{d-icon "envelope"}}
|
|
{{#if model.no_password}}
|
|
{{i18n 'user.change_password.set_password'}}
|
|
{{else}}
|
|
{{i18n 'user.change_password.action'}}
|
|
{{/if}}
|
|
</a>
|
|
|
|
{{passwordProgress}}
|
|
</div>
|
|
</div>
|
|
|
|
<div class="control-group pref-second-factor">
|
|
<label class="control-label">{{i18n 'user.second_factor.title'}}</label>
|
|
{{#unless model.second_factor_enabled}}
|
|
<label>
|
|
{{i18n 'user.second_factor.short_description'}}
|
|
</label>
|
|
{{/unless}}
|
|
<div class="controls pref-second-factor">
|
|
{{#if isCurrentUser}}
|
|
{{#if model.second_factor_enabled}}
|
|
{{#link-to "preferences.second-factor" class="btn btn-default"}}
|
|
{{d-icon "unlock"}} <span>{{i18n 'user.second_factor.disable'}}</span>
|
|
{{/link-to}}
|
|
{{else}}
|
|
{{#link-to "preferences.second-factor" class="btn btn-default"}}
|
|
{{d-icon "lock"}} <span>{{i18n 'user.second_factor.enable'}}</span>
|
|
{{/link-to}}
|
|
{{/if}}
|
|
{{/if}}
|
|
</div>
|
|
|
|
<div class="controls pref-second-factor-backup">
|
|
{{#if model.second_factor_enabled}}
|
|
{{#if isCurrentUser}}
|
|
{{#link-to "preferences.second-factor-backup"}}
|
|
<span>
|
|
{{#if model.second_factor_backup_enabled}}
|
|
{{i18n 'user.second_factor_backup.manage'}}
|
|
{{else}}
|
|
{{i18n 'user.second_factor_backup.enable_long'}}
|
|
{{/if}}
|
|
</span>
|
|
{{/link-to}}
|
|
{{/if}}
|
|
{{/if}}
|
|
</div>
|
|
</div>
|
|
{{/if}}
|
|
|
|
{{#if canUpdateAssociatedAccounts}}
|
|
<div class="control-group pref-associated-accounts">
|
|
<label class="control-label">{{i18n 'user.associated_accounts.title'}}</label>
|
|
{{#if associatedAccountsLoaded}}
|
|
<table>
|
|
{{#each authProviders as |authProvider|}}
|
|
<tr>
|
|
<td>{{authProvider.method.prettyName}}</td>
|
|
|
|
{{#if authProvider.account}}
|
|
<td>{{authProvider.account.description}}</td>
|
|
<td>
|
|
{{#if authProvider.method.can_revoke}}
|
|
{{#conditional-loading-spinner condition=revoking size='small'}}
|
|
{{d-button action=(action "revokeAccount") actionParam=authProvider.account title="user.associated_accounts.revoke" class="btn-danger no-text" icon="trash-alt" }}
|
|
{{/conditional-loading-spinner}}
|
|
{{/if}}
|
|
</td>
|
|
{{else}}
|
|
<td colspan=2>
|
|
{{#if authProvider.method.can_connect}}
|
|
{{d-button action=(action "connectAccount") actionParam=authProvider.method label="user.associated_accounts.connect" class="btn-default" icon="plug" disabled=disableConnectButtons}}
|
|
{{else}}
|
|
{{i18n 'user.associated_accounts.not_connected'}}
|
|
{{/if}}
|
|
</td>
|
|
{{/if}}
|
|
|
|
</tr>
|
|
{{/each}}
|
|
</table>
|
|
{{else}}
|
|
<div class="controls">
|
|
{{d-button action=(route-action "checkEmail") actionParam=model title="admin.users.check_email.title" icon="far-envelope" label="admin.users.check_email.text"}}
|
|
</div>
|
|
{{/if}}
|
|
</div>
|
|
{{/if}}
|
|
|
|
{{#if canSelectTitle}}
|
|
<div class="control-group pref-title">
|
|
<label class="control-label">{{i18n 'user.title.title'}}</label>
|
|
<div class="controls">
|
|
{{combo-box
|
|
value=newTitleInput
|
|
content=model.availableTitles
|
|
none="user.title.none"}}
|
|
</div>
|
|
</div>
|
|
{{/if}}
|
|
|
|
{{#if canCheckEmails}}
|
|
<div class="control-group pref-auth-tokens">
|
|
<label class="control-label">{{i18n 'user.auth_tokens.title'}}</label>
|
|
|
|
<div class="auth-tokens">
|
|
{{#each authTokens as |token|}}
|
|
<div class="row auth-token">
|
|
<div class="auth-token-icon">{{d-icon token.icon}}</div>
|
|
{{#unless token.is_active}}
|
|
{{auth-token-dropdown token=token
|
|
revokeAuthToken=(action "revokeAuthToken")
|
|
showToken=(action "showToken")}}
|
|
{{/unless}}
|
|
<div class="auth-token-first">
|
|
<span class="auth-token-device">{{token.device}}</span> – <span title="{{i18n "user.auth_tokens.ip"}}: {{token.client_ip}}">{{token.location}}</span>
|
|
</div>
|
|
<div class="auth-token-second">
|
|
{{token.browser}} |
|
|
{{#if token.is_active}}
|
|
<span class="active">{{i18n 'user.auth_tokens.active'}}</span>
|
|
{{else}}
|
|
{{format-date token.seen_at}}
|
|
{{/if}}
|
|
</div>
|
|
</div>
|
|
{{/each}}
|
|
</div>
|
|
|
|
{{#if canShowAllAuthTokens}}
|
|
<a {{action "toggleShowAllAuthTokens"}}>
|
|
{{#if showAllAuthTokens}}
|
|
{{d-icon "caret-up"}} {{i18n 'user.auth_tokens.show_few'}}
|
|
{{else}}
|
|
{{d-icon "caret-down"}} {{i18n 'user.auth_tokens.show_all' count=model.user_auth_tokens.length}}
|
|
{{/if}}
|
|
</a>
|
|
{{/if}}
|
|
|
|
<a {{action "revokeAuthToken"}} class="pull-right text-danger">{{d-icon "sign-out-alt"}} {{i18n 'user.auth_tokens.log_out_all'}}</a>
|
|
</div>
|
|
{{/if}}
|
|
|
|
{{plugin-outlet name="user-preferences-account" args=(hash model=model save=(action "save"))}}
|
|
|
|
<br/>
|
|
|
|
{{plugin-outlet name="user-custom-controls" args=(hash model=model)}}
|
|
|
|
{{#if canSaveUser}}
|
|
<div class="control-group save-button">
|
|
<div class="controls">
|
|
{{partial 'user/preferences/save-button'}}
|
|
</div>
|
|
</div>
|
|
{{/if}}
|
|
|
|
|
|
{{#if model.canDeleteAccount}}
|
|
<div class="control-group delete-account">
|
|
<br/>
|
|
<div class="controls">
|
|
{{d-button action=(action "delete") disabled=deleteDisabled class="btn-danger" icon="far-trash-alt" label="user.delete_account"}}
|
|
</div>
|
|
</div>
|
|
{{/if}}
|