`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.
159 lines
4.4 KiB
JavaScript
159 lines
4.4 KiB
JavaScript
import CanCheckEmails from "discourse/mixins/can-check-emails";
|
|
import computed from "ember-addons/ember-computed-decorators";
|
|
import User from "discourse/models/user";
|
|
import optionalService from "discourse/lib/optional-service";
|
|
|
|
export default Ember.Controller.extend(CanCheckEmails, {
|
|
indexStream: false,
|
|
application: Ember.inject.controller(),
|
|
userNotifications: Ember.inject.controller("user-notifications"),
|
|
currentPath: Ember.computed.alias("application.currentPath"),
|
|
adminTools: optionalService(),
|
|
|
|
@computed("model.username")
|
|
viewingSelf(username) {
|
|
let currentUser = this.currentUser;
|
|
return currentUser && username === currentUser.get("username");
|
|
},
|
|
|
|
@computed("viewingSelf", "model.profile_hidden")
|
|
canExpandProfile(viewingSelf, profileHidden) {
|
|
return !profileHidden && viewingSelf;
|
|
},
|
|
|
|
@computed("model.profileBackgroundUrl")
|
|
hasProfileBackgroundUrl(background) {
|
|
return !Ember.isEmpty(background.toString());
|
|
},
|
|
|
|
@computed("model.profile_hidden", "indexStream", "viewingSelf", "forceExpand")
|
|
collapsedInfo(profileHidden, indexStream, viewingSelf, forceExpand) {
|
|
if (profileHidden) {
|
|
return true;
|
|
}
|
|
return (!indexStream || viewingSelf) && !forceExpand;
|
|
},
|
|
canMuteOrIgnoreUser: Ember.computed.or(
|
|
"model.can_ignore_user",
|
|
"model.can_mute_user"
|
|
),
|
|
hasGivenFlags: Ember.computed.gt("model.number_of_flags_given", 0),
|
|
hasFlaggedPosts: Ember.computed.gt("model.number_of_flagged_posts", 0),
|
|
hasDeletedPosts: Ember.computed.gt("model.number_of_deleted_posts", 0),
|
|
hasBeenSuspended: Ember.computed.gt("model.number_of_suspensions", 0),
|
|
hasReceivedWarnings: Ember.computed.gt("model.warnings_received_count", 0),
|
|
|
|
showStaffCounters: Ember.computed.or(
|
|
"hasGivenFlags",
|
|
"hasFlaggedPosts",
|
|
"hasDeletedPosts",
|
|
"hasBeenSuspended",
|
|
"hasReceivedWarnings"
|
|
),
|
|
|
|
@computed("model.suspended", "currentUser.staff")
|
|
isNotSuspendedOrIsStaff(suspended, isStaff) {
|
|
return !suspended || isStaff;
|
|
},
|
|
|
|
linkWebsite: Ember.computed.not("model.isBasic"),
|
|
|
|
@computed("model.trust_level")
|
|
removeNoFollow(trustLevel) {
|
|
return trustLevel > 2 && !this.siteSettings.tl3_links_no_follow;
|
|
},
|
|
|
|
@computed("viewingSelf", "currentUser.admin")
|
|
showBookmarks(viewingSelf, isAdmin) {
|
|
return viewingSelf || isAdmin;
|
|
},
|
|
|
|
@computed("viewingSelf")
|
|
showDrafts(viewingSelf) {
|
|
return viewingSelf;
|
|
},
|
|
|
|
@computed("viewingSelf", "currentUser.admin")
|
|
showPrivateMessages(viewingSelf, isAdmin) {
|
|
return (
|
|
this.siteSettings.enable_personal_messages && (viewingSelf || isAdmin)
|
|
);
|
|
},
|
|
|
|
@computed("viewingSelf", "currentUser.staff")
|
|
showNotificationsTab(viewingSelf, staff) {
|
|
return viewingSelf || staff;
|
|
},
|
|
|
|
@computed("model.name")
|
|
nameFirst(name) {
|
|
return (
|
|
!this.get("siteSettings.prioritize_username_in_ux") &&
|
|
name &&
|
|
name.trim().length > 0
|
|
);
|
|
},
|
|
|
|
@computed("model.badge_count")
|
|
showBadges(badgeCount) {
|
|
return Discourse.SiteSettings.enable_badges && badgeCount > 0;
|
|
},
|
|
|
|
@computed()
|
|
canInviteToForum() {
|
|
return User.currentProp("can_invite_to_forum");
|
|
},
|
|
|
|
canDeleteUser: Ember.computed.and(
|
|
"model.can_be_deleted",
|
|
"model.can_delete_all_posts"
|
|
),
|
|
|
|
@computed("model.user_fields.@each.value")
|
|
publicUserFields() {
|
|
const siteUserFields = this.site.get("user_fields");
|
|
if (!Ember.isEmpty(siteUserFields)) {
|
|
const userFields = this.get("model.user_fields");
|
|
return siteUserFields
|
|
.filterBy("show_on_profile", true)
|
|
.sortBy("position")
|
|
.map(field => {
|
|
Ember.set(field, "dasherized_name", field.get("name").dasherize());
|
|
const value = userFields
|
|
? userFields[field.get("id").toString()]
|
|
: null;
|
|
return Ember.isEmpty(value)
|
|
? null
|
|
: Ember.Object.create({ value, field });
|
|
})
|
|
.compact();
|
|
}
|
|
},
|
|
|
|
actions: {
|
|
collapseProfile() {
|
|
this.set("forceExpand", false);
|
|
},
|
|
|
|
expandProfile() {
|
|
this.set("forceExpand", true);
|
|
},
|
|
|
|
showSuspensions() {
|
|
this.get("adminTools").showActionLogs(this, {
|
|
target_user: this.get("model.username"),
|
|
action_name: "suspend_user"
|
|
});
|
|
},
|
|
|
|
adminDelete() {
|
|
this.get("adminTools").deleteUser(this.get("model.id"));
|
|
},
|
|
|
|
updateNotificationLevel(level) {
|
|
const user = this.get("model");
|
|
return user.updateNotificationLevel(level);
|
|
}
|
|
}
|
|
});
|