This allows users who are privacy conscious to disable the presence features of the forum as well as their public profile.
120 lines
2.7 KiB
JavaScript
120 lines
2.7 KiB
JavaScript
import PreferencesTabController from "discourse/mixins/preferences-tab-controller";
|
|
import { setDefaultHomepage } from "discourse/lib/utilities";
|
|
import {
|
|
default as computed,
|
|
observes
|
|
} from "ember-addons/ember-computed-decorators";
|
|
import {
|
|
currentThemeId,
|
|
listThemes,
|
|
previewTheme,
|
|
setLocalTheme
|
|
} from "discourse/lib/theme-selector";
|
|
import { popupAjaxError } from "discourse/lib/ajax-error";
|
|
|
|
const USER_HOMES = {
|
|
1: "latest",
|
|
2: "categories",
|
|
3: "unread",
|
|
4: "new",
|
|
5: "top"
|
|
};
|
|
|
|
export default Ember.Controller.extend(PreferencesTabController, {
|
|
@computed("makeThemeDefault")
|
|
saveAttrNames(makeDefault) {
|
|
let attrs = [
|
|
"locale",
|
|
"external_links_in_new_tab",
|
|
"dynamic_favicon",
|
|
"enable_quoting",
|
|
"disable_jump_reply",
|
|
"automatically_unpin_topics",
|
|
"allow_private_messages",
|
|
"homepage_id",
|
|
"hide_profile_and_presence"
|
|
];
|
|
|
|
if (makeDefault) {
|
|
attrs.push("theme_ids");
|
|
}
|
|
|
|
return attrs;
|
|
},
|
|
|
|
preferencesController: Ember.inject.controller("preferences"),
|
|
makeThemeDefault: true,
|
|
|
|
@computed()
|
|
availableLocales() {
|
|
return JSON.parse(this.siteSettings.available_locales);
|
|
},
|
|
|
|
@computed()
|
|
themeId() {
|
|
return currentThemeId();
|
|
},
|
|
|
|
userSelectableThemes: function() {
|
|
return listThemes(this.site);
|
|
}.property(),
|
|
|
|
@computed("userSelectableThemes")
|
|
showThemeSelector(themes) {
|
|
return themes && themes.length > 1;
|
|
},
|
|
|
|
@observes("themeId")
|
|
themeIdChanged() {
|
|
const id = this.get("themeId");
|
|
previewTheme([id]);
|
|
},
|
|
|
|
homeChanged() {
|
|
const siteHome = this.siteSettings.top_menu.split("|")[0].split(",")[0];
|
|
const userHome = USER_HOMES[this.get("model.user_option.homepage_id")];
|
|
|
|
setDefaultHomepage(userHome || siteHome);
|
|
},
|
|
|
|
@computed()
|
|
userSelectableHome() {
|
|
let homeValues = _.invert(USER_HOMES);
|
|
|
|
let result = [];
|
|
this.siteSettings.top_menu.split("|").forEach(m => {
|
|
let id = homeValues[m];
|
|
if (id) {
|
|
result.push({ name: I18n.t(`filters.${m}.title`), value: Number(id) });
|
|
}
|
|
});
|
|
return result;
|
|
},
|
|
|
|
actions: {
|
|
save() {
|
|
this.set("saved", false);
|
|
const makeThemeDefault = this.get("makeThemeDefault");
|
|
if (makeThemeDefault) {
|
|
this.set("model.user_option.theme_ids", [this.get("themeId")]);
|
|
}
|
|
|
|
return this.get("model")
|
|
.save(this.get("saveAttrNames"))
|
|
.then(() => {
|
|
this.set("saved", true);
|
|
|
|
if (!makeThemeDefault) {
|
|
setLocalTheme(
|
|
[this.get("themeId")],
|
|
this.get("model.user_option.theme_key_seq")
|
|
);
|
|
}
|
|
|
|
this.homeChanged();
|
|
})
|
|
.catch(popupAjaxError);
|
|
}
|
|
}
|
|
});
|