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/controllers/user.js.es6
2019-11-07 15:38:28 -06:00

160 lines
4.6 KiB
JavaScript

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