413 lines
13 KiB
Handlebars
413 lines
13 KiB
Handlebars
<section class='details'>
|
|
|
|
<div class='user-controls'>
|
|
{{#link-to 'user' model class="btn"}}
|
|
<i class='fa fa-user'></i>
|
|
{{i18n admin.user.show_public_profile}}
|
|
{{/link-to}}
|
|
{{#if can_impersonate}}
|
|
<button class='btn' {{action impersonate target="content"}}>
|
|
<i class='fa fa-crosshairs'></i>
|
|
{{i18n admin.user.impersonate}}
|
|
</button>
|
|
{{/if}}
|
|
{{#if currentUser.admin}}
|
|
<button class='btn' {{action log_out target="content"}}>
|
|
<i class='fa fa-power-off'></i>
|
|
{{i18n admin.user.log_out}}
|
|
</button>
|
|
{{/if}}
|
|
</div>
|
|
|
|
<div class='display-row'>
|
|
<div class='field'>{{i18n user.username.title}}</div>
|
|
<div class='value'>{{username}}</div>
|
|
<div class='controls'>
|
|
{{#link-to 'preferences.username' model class="btn"}}
|
|
<i class='fa fa-pencil'></i>
|
|
{{i18n user.change_username.title}}
|
|
{{/link-to}}
|
|
</div>
|
|
</div>
|
|
|
|
<div class='display-row'>
|
|
<div class='field'>{{i18n user.email.title}}</div>
|
|
<div class='value'><a href="mailto:{{unbound email}}">{{email}}</a></div>
|
|
</div>
|
|
|
|
<div class='display-row'>
|
|
<div class='field'>{{i18n user.avatar.title}}</div>
|
|
<div class='value'>{{avatar content imageSize="large"}}</div>
|
|
</div>
|
|
|
|
<div class='display-row'>
|
|
<div class='field'>{{i18n user.title.title}}</div>
|
|
<div class='value'>
|
|
{{#if editingTitle}}
|
|
{{text-field value=title autofocus="autofocus"}}
|
|
{{else}}
|
|
<span {{action toggleTitleEdit}}>{{title}} </span>
|
|
{{/if}}
|
|
</div>
|
|
<div class='controls'>
|
|
{{#if editingTitle}}
|
|
<button class='btn' {{action saveTitle}}>{{i18n admin.user.save_title}}</button>
|
|
<a href="#" {{action toggleTitleEdit}}>{{i18n cancel}}</a>
|
|
{{else}}
|
|
<button class='btn' {{action toggleTitleEdit}}><i class="fa fa-pencil"></i>{{i18n admin.user.edit_title}}</button>
|
|
{{/if}}
|
|
</div>
|
|
</div>
|
|
|
|
|
|
{{#if currentUser.admin}}
|
|
<div class='display-row'>
|
|
<div class='field'>{{i18n admin.groups.title}}</div>
|
|
<div class='value'>
|
|
{{admin-group-selector selected=model.groups available=availableGroups}}
|
|
</div>
|
|
<div class='controls'>
|
|
{{#if custom_groups}}
|
|
{{i18n admin.groups.primary}}
|
|
{{combo-box content=custom_groups value=primary_group_id nameProperty="name" none="admin.groups.no_primary"}}
|
|
{{/if}}
|
|
{{#if primaryGroupDirty}}
|
|
<button class='btn ok no-text' {{action savePrimaryGroup}}><i class='fa fa-check'></i></button>
|
|
<button class='btn cancel no-text' {{action resetPrimaryGroup}}><i class='fa fa-times'></i></button>
|
|
{{/if}}
|
|
</div>
|
|
</div>
|
|
{{/if}}
|
|
|
|
<div class='display-row'>
|
|
<div class='field'>{{i18n user.ip_address.title}}</div>
|
|
<div class='value'>{{ip_address}}</div>
|
|
<div class='controls'>
|
|
{{#if currentUser.admin}}
|
|
<button class='btn' {{action refreshBrowsers target="content"}}>
|
|
{{i18n admin.user.refresh_browsers}}
|
|
</button>
|
|
{{ip-lookup ip=ip_address user_id=id}}
|
|
{{/if}}
|
|
</div>
|
|
</div>
|
|
|
|
<div class='display-row'>
|
|
<div class='field'>{{i18n user.registration_ip_address.title}}</div>
|
|
<div class='value'>{{registration_ip_address}}</div>
|
|
<div class='controls'>
|
|
{{#if currentUser.admin}}
|
|
{{ip-lookup ip=registration_ip_address user_id=id}}
|
|
{{/if}}
|
|
</div>
|
|
</div>
|
|
|
|
{{#if showBadges}}
|
|
<div class='display-row'>
|
|
<div class='field'>{{i18n admin.badges.title}}</div>
|
|
<div class='value'>
|
|
{{i18n badges.badge_count count=badge_count}}
|
|
</div>
|
|
<div class='controls'>
|
|
{{#link-to 'adminUser.badges' this class="btn"}}<i class="fa fa-certificate"></i>{{i18n admin.badges.edit_badges}}{{/link-to}}
|
|
</div>
|
|
</div>
|
|
{{/if}}
|
|
|
|
</section>
|
|
|
|
|
|
<section class='details'>
|
|
<h1>{{i18n admin.user.permissions}}</h1>
|
|
|
|
{{#if showApproval}}
|
|
<div class='display-row'>
|
|
<div class='field'>{{i18n admin.users.approved}}</div>
|
|
<div class='value'>
|
|
{{#if approved}}
|
|
{{i18n admin.user.approved_by}}
|
|
|
|
{{#link-to 'adminUser' approvedBy}}{{avatar approvedBy imageSize="small"}}{{/link-to}}
|
|
{{#link-to 'adminUser' approvedBy}}{{approvedBy.username}}{{/link-to}}
|
|
{{else}}
|
|
{{i18n no_value}}
|
|
{{/if}}
|
|
|
|
</div>
|
|
<div class='controls'>
|
|
{{#if approved}}
|
|
{{i18n admin.user.approve_success}}
|
|
{{else}}
|
|
{{#if can_approve}}
|
|
<button class='btn' {{action approve target="content"}}>
|
|
<i class='fa fa-check'></i>
|
|
{{i18n admin.user.approve}}
|
|
</button>
|
|
{{/if}}
|
|
{{/if}}
|
|
</div>
|
|
</div>
|
|
{{/if}}
|
|
|
|
<div class='display-row'>
|
|
<div class='field'>{{i18n admin.users.active}}</div>
|
|
<div class='value'>
|
|
{{#if active}}
|
|
{{i18n yes_value}}
|
|
{{else}}
|
|
{{i18n no_value}}
|
|
{{/if}}
|
|
</div>
|
|
<div class='controls'>
|
|
{{#if active}}
|
|
{{#if can_deactivate}}
|
|
<button class='btn' {{action deactivate target="content"}}>{{i18n admin.user.deactivate_account}}</button>
|
|
{{i18n admin.user.deactivate_explanation}}
|
|
{{/if}}
|
|
{{else}}
|
|
{{#if can_send_activation_email}}
|
|
<button class='btn' {{action sendActivationEmail target="content"}}>
|
|
<i class='fa fa-envelope'></i>
|
|
{{i18n admin.user.send_activation_email}}
|
|
</button>
|
|
{{/if}}
|
|
{{#if can_activate}}
|
|
<button class='btn' {{action activate target="content"}}>
|
|
<i class='fa fa-check'></i>
|
|
{{i18n admin.user.activate}}
|
|
</button>
|
|
{{/if}}
|
|
{{/if}}
|
|
</div>
|
|
</div>
|
|
|
|
<div class='display-row'>
|
|
<div class='field'>{{i18n admin.api.key}}</div>
|
|
|
|
{{#if api_key}}
|
|
<div class='long-value'>
|
|
{{api_key.key}}
|
|
<button class='btn' {{action regenerateApiKey}}><i class="fa fa-undo"></i>{{i18n admin.api.regenerate}}</button>
|
|
<button {{action revokeApiKey}} class="btn"><i class="fa fa-times"></i>{{i18n admin.api.revoke}}</button>
|
|
</div>
|
|
{{else}}
|
|
<div class='value'>
|
|
—
|
|
</div>
|
|
<div class='controls'>
|
|
<button {{action generateApiKey}} class="btn"><i class="fa fa-key"></i>{{i18n admin.api.generate}}</button>
|
|
</div>
|
|
{{/if}}
|
|
</div>
|
|
|
|
<div class='display-row'>
|
|
<div class='field'>{{i18n admin.user.admin}}</div>
|
|
<div class='value'>{{admin}}</div>
|
|
<div class='controls'>
|
|
{{#if can_revoke_admin}}
|
|
<button class='btn' {{action revokeAdmin target="content"}}>
|
|
<i class='fa fa-shield'></i>
|
|
{{i18n admin.user.revoke_admin}}
|
|
</button>
|
|
{{/if}}
|
|
{{#if can_grant_admin}}
|
|
<button class='btn' {{action grantAdmin target="content"}}>
|
|
<i class='fa fa-shield'></i>
|
|
{{i18n admin.user.grant_admin}}
|
|
</button>
|
|
{{/if}}
|
|
</div>
|
|
|
|
</div>
|
|
<div class='display-row'>
|
|
<div class='field'>{{i18n admin.user.moderator}}</div>
|
|
<div class='value'>{{moderator}}</div>
|
|
<div class='controls'>
|
|
{{#if can_revoke_moderation}}
|
|
<button class='btn' {{action revokeModeration target="content"}}>
|
|
<i class='fa fa-shield'></i>
|
|
{{i18n admin.user.revoke_moderation}}
|
|
</button>
|
|
{{/if}}
|
|
{{#if can_grant_moderation}}
|
|
<button class='btn' {{action grantModeration target="content"}}>
|
|
<i class='fa fa-shield'></i>
|
|
{{i18n admin.user.grant_moderation}}
|
|
</button>
|
|
{{/if}}
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class='display-row'>
|
|
<div class='field'>{{i18n trust_level}}</div>
|
|
<div class="value">
|
|
{{combo-box content=trustLevels value=trust_level nameProperty="detailedName"}}
|
|
</div>
|
|
<div class="controls">
|
|
{{#if leaderRequirements}}
|
|
{{#link-to 'adminUser.leaderRequirements' this class="btn"}}{{i18n admin.user.trust_level_3_requirements}}{{/link-to}}
|
|
{{/if}}
|
|
|
|
{{#if dirty}}
|
|
<div>
|
|
<button class='btn ok no-text' {{action saveTrustLevel target="content"}}><i class='fa fa-check'></i></button>
|
|
<button class='btn cancel no-text' {{action restoreTrustLevel target="content"}}><i class='fa fa-times'></i></button>
|
|
</div>
|
|
{{/if}}
|
|
</div>
|
|
</div>
|
|
|
|
<div {{bind-attr class=":display-row isSuspended:highlight-danger"}}>
|
|
<div class='field'>{{i18n admin.user.suspended}}</div>
|
|
<div class='value'>{{isSuspended}}</div>
|
|
<div class='controls'>
|
|
{{#if isSuspended}}
|
|
<button class='btn btn-danger' {{action unsuspend target="content"}}>
|
|
<i class='fa fa-ban'></i>
|
|
{{i18n admin.user.unsuspend}}
|
|
</button>
|
|
{{suspendDuration}}
|
|
{{i18n admin.user.suspended_explanation}}
|
|
{{else}}
|
|
{{#if canSuspend}}
|
|
<button class='btn btn-danger' {{action showSuspendModal this}}>
|
|
<i class='fa fa-ban'></i>
|
|
{{i18n admin.user.suspend}}
|
|
</button>
|
|
{{i18n admin.user.suspended_explanation}}
|
|
{{/if}}
|
|
{{/if}}
|
|
</div>
|
|
</div>
|
|
|
|
{{#if isSuspended}}
|
|
<div class='display-row highlight-danger'>
|
|
<div class='field'>{{i18n admin.user.suspended_by}}</div>
|
|
<div class='value'>
|
|
{{#link-to 'adminUser' suspendedBy}}{{avatar suspendedBy imageSize="tiny"}}{{/link-to}}
|
|
{{#link-to 'adminUser' suspendedBy}}{{suspendedBy.username}}{{/link-to}}
|
|
</div>
|
|
<div class='controls'>
|
|
<b>{{i18n admin.user.suspend_reason}}</b>:
|
|
{{suspend_reason}}
|
|
</div>
|
|
</div>
|
|
{{/if}}
|
|
|
|
<div class='display-row' {{bind-attr class=":display-row blocked:highlight-danger"}}>
|
|
<div class='field'>{{i18n admin.user.blocked}}</div>
|
|
<div class='value'>{{blocked}}</div>
|
|
<div class='controls'>
|
|
{{#if blocked}}
|
|
<button class='btn' {{action unblock target="content"}}>
|
|
<i class='fa fa-thumbs-o-up'></i>
|
|
{{i18n admin.user.unblock}}
|
|
</button>
|
|
{{i18n admin.user.block_explanation}}
|
|
{{/if}}
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<section class='details'>
|
|
<h1>{{i18n admin.user.activity}}</h1>
|
|
|
|
<div class='display-row'>
|
|
<div class='field'>{{i18n created}}</div>
|
|
<div class='value'>{{{created_at_age}}}</div>
|
|
</div>
|
|
<div class='display-row'>
|
|
<div class='field'>{{i18n admin.users.last_emailed}}</div>
|
|
<div class='value'>{{{last_emailed_age}}}</div>
|
|
</div>
|
|
<div class='display-row'>
|
|
<div class='field'>{{i18n last_seen}}</div>
|
|
<div class='value'>{{{last_seen_age}}}</div>
|
|
</div>
|
|
<div class='display-row'>
|
|
<div class='field'>{{i18n admin.user.like_count}}</div>
|
|
<div class='value'>{{like_given_count}} / {{like_count}}</div>
|
|
</div>
|
|
<div class='display-row'>
|
|
<div class='field'>{{i18n admin.user.topics_entered}}</div>
|
|
<div class='value'>{{topics_entered}}</div>
|
|
</div>
|
|
<div class='display-row'>
|
|
<div class='field'>{{i18n admin.user.post_count}}</div>
|
|
<div class='value'>{{post_count}}</div>
|
|
<div class='controls'>
|
|
{{#if can_delete_all_posts}}
|
|
<button class='btn btn-danger' {{action deleteAllPosts target="content"}}>
|
|
<i class='fa fa-trash-o'></i>
|
|
{{i18n admin.user.delete_all_posts}}
|
|
</button>
|
|
{{else}}
|
|
{{deleteAllPostsExplanation}}
|
|
{{/if}}
|
|
</div>
|
|
</div>
|
|
<div class='display-row'>
|
|
<div class='field'>{{i18n admin.user.posts_read_count}}</div>
|
|
<div class='value'>{{posts_read_count}}</div>
|
|
</div>
|
|
<div class='display-row'>
|
|
<div class='field'>{{i18n admin.user.flags_given_received_count}}</div>
|
|
<div class='value'>{{flags_given_count}} / {{flags_received_count}}</div>
|
|
</div>
|
|
<div class='display-row'>
|
|
<div class='field'>{{i18n admin.user.private_topics_count}}</div>
|
|
<div class='value'>{{private_topics_count}}</div>
|
|
</div>
|
|
<div class='display-row'>
|
|
<div class='field'>{{i18n admin.user.time_read}}</div>
|
|
<div class='value'>{{{time_read}}}</div>
|
|
</div>
|
|
<div class='display-row'>
|
|
<div class='field'>{{i18n user.invited.days_visited}}</div>
|
|
<div class='value'>{{{days_visited}}}</div>
|
|
</div>
|
|
</section>
|
|
|
|
{{#if single_sign_on_record}}
|
|
<section class='details'>
|
|
<h1>{{i18n admin.user.sso.title}}</h1>
|
|
|
|
{{#with single_sign_on_record}}
|
|
<div class='display-row'>
|
|
<div class='field'>{{i18n admin.user.sso.external_id}}</div>
|
|
<div class='value'>{{external_id}}</div>
|
|
</div>
|
|
<div class='display-row'>
|
|
<div class='field'>{{i18n admin.user.sso.external_username}}</div>
|
|
<div class='value'>{{external_username}}</div>
|
|
</div>
|
|
<div class='display-row'>
|
|
<div class='field'>{{i18n admin.user.sso.external_name}}</div>
|
|
<div class='value'>{{external_name}}</div>
|
|
</div>
|
|
<div class='display-row'>
|
|
<div class='field'>{{i18n admin.user.sso.external_email}}</div>
|
|
<div class='value'>{{external_email}}</div>
|
|
</div>
|
|
<div class='display-row'>
|
|
<div class='field'>{{i18n admin.user.sso.external_avatar_url}}</div>
|
|
<div class='value'>{{external_avatar_url}}</div>
|
|
</div>
|
|
{{/with}}
|
|
</section>
|
|
{{/if}}
|
|
|
|
<section>
|
|
<hr/>
|
|
<button {{bind-attr class=":btn :btn-danger :pull-right deleteForbidden:hidden"}} {{action destroy target="content"}} {{bind-attr disabled="deleteForbidden"}}>
|
|
<i class="fa fa-exclamation-triangle"></i>
|
|
{{i18n admin.user.delete}}
|
|
</button>
|
|
{{#if deleteExplanation}}
|
|
<div class="clearfix"></div>
|
|
<div class="pull-right"><i class="fa fa-exclamation-triangle"></i> {{deleteExplanation}}</div>
|
|
{{/if}}
|
|
</section>
|
|
<div class="clearfix"></div>
|