Add message from service administrator

This commit is contained in:
nztqa 2017-09-28 16:57:04 +09:00
parent eb945f26a3
commit aa1876f94c
10 changed files with 135 additions and 4 deletions

View file

@ -130,6 +130,7 @@
"Authentication": true, "Authentication": true,
"Integrations": true, "Integrations": true,
"HTTP": true, "HTTP": true,
"AccountSettings": true "AccountSettings": true,
"Notices": true
} }
} }

View file

@ -49,6 +49,13 @@ template(name="header")
if appIsOffline if appIsOffline
+offlineWarning +offlineWarning
if hasAnnouncement
.announcement
p
i.fa.fa-bullhorn
| #{announcement}
i.fa.fa-times-circle.js-close-announcement
template(name="offlineWarning") template(name="offlineWarning")
.offline-warning .offline-warning
p p

View file

@ -10,8 +10,22 @@ Template.header.helpers({
appIsOffline() { appIsOffline() {
return !Meteor.status().connected; return !Meteor.status().connected;
}, },
hasAnnouncement() {
const notice = Notices.findOne();
return notice && notice.enabled;
},
announcement() {
$('.announcement').show();
const notice = Notices.findOne();
return notice && notice.body;
},
}); });
Template.header.events({ Template.header.events({
'click .js-create-board': Popup.open('headerBarCreateBoard'), 'click .js-create-board': Popup.open('headerBarCreateBoard'),
'click .js-close-announcement'() {
$('.announcement').hide();
},
}); });

View file

@ -197,6 +197,7 @@
li li
height: 28px height: 28px
.announcement,
.offline-warning .offline-warning
width: 100% width: 100%
text-align: center text-align: center

View file

@ -14,6 +14,8 @@ template(name="setting")
a.js-setting-menu(data-id="email-setting") {{_ 'email'}} a.js-setting-menu(data-id="email-setting") {{_ 'email'}}
li li
a.js-setting-menu(data-id="account-setting") {{_ 'accounts'}} a.js-setting-menu(data-id="account-setting") {{_ 'accounts'}}
li
a.js-setting-menu(data-id="notice-setting") {{_ 'admin-notice'}}
.main-body .main-body
if loading.get if loading.get
+spinner +spinner
@ -23,6 +25,8 @@ template(name="setting")
+email +email
else if accountSetting.get else if accountSetting.get
+accountSettings +accountSettings
else if noticeSetting.get
+administratorNoticeSettings
template(name="general") template(name="general")
ul#registration-setting.setting-detail ul#registration-setting.setting-detail
@ -96,3 +100,19 @@ template(name='accountSettings')
span {{_ 'no'}} span {{_ 'no'}}
li li
button.js-accounts-save.primary {{_ 'save'}} button.js-accounts-save.primary {{_ 'save'}}
template(name='administratorNoticeSettings')
ul#notice-setting.setting-detail
li
a.flex.js-toggle-activemessage
.materialCheckBox(class="{{#if currentSetting.enabled}}is-checked{{/if}}")
span {{_ 'admin-notice-active'}}
li
.admin-notice(class="{{#if currentSetting.enabled}}{{else}}hide{{/if}}")
ul
li
.title {{_ 'admin-notice-title'}}
textarea#admin-notice.form-control= currentSetting.body
li
button.js-notice-save.primary {{_ 'save'}}

View file

@ -1,6 +1,7 @@
Meteor.subscribe('setting'); Meteor.subscribe('setting');
Meteor.subscribe('mailServer'); Meteor.subscribe('mailServer');
Meteor.subscribe('accountSettings'); Meteor.subscribe('accountSettings');
Meteor.subscribe('notices');
BlazeComponent.extendComponent({ BlazeComponent.extendComponent({
onCreated() { onCreated() {
@ -9,6 +10,7 @@ BlazeComponent.extendComponent({
this.generalSetting = new ReactiveVar(true); this.generalSetting = new ReactiveVar(true);
this.emailSetting = new ReactiveVar(false); this.emailSetting = new ReactiveVar(false);
this.accountSetting = new ReactiveVar(false); this.accountSetting = new ReactiveVar(false);
this.noticeSetting = new ReactiveVar(false);
}, },
setError(error) { setError(error) {
@ -65,6 +67,7 @@ BlazeComponent.extendComponent({
this.generalSetting.set('registration-setting' === targetID); this.generalSetting.set('registration-setting' === targetID);
this.emailSetting.set('email-setting' === targetID); this.emailSetting.set('email-setting' === targetID);
this.accountSetting.set('account-setting' === targetID); this.accountSetting.set('account-setting' === targetID);
this.noticeSetting.set('notice-setting' === targetID);
} }
}, },
@ -152,3 +155,45 @@ BlazeComponent.extendComponent({
}]; }];
}, },
}).register('accountSettings'); }).register('accountSettings');
BlazeComponent.extendComponent({
onCreated() {
this.loading = new ReactiveVar(false);
},
setLoading(w) {
this.loading.set(w);
},
currentSetting(){
return Notices.findOne();
},
saveMessage() {
const message = $('#admin-notice').val().trim();
Notices.update(Notices.findOne()._id, {
$set: { 'body': message },
});
},
toggleActive(){
this.setLoading(true);
const isActive = this.currentSetting().enabled;
Notices.update(Notices.findOne()._id, {
$set:{ 'enabled': !isActive},
});
this.setLoading(false);
if(isActive){
$('.admin-notice').slideUp();
}else{
$('.admin-notice').slideDown();
}
},
events() {
return [{
'click a.js-toggle-activemessage': this.toggleActive,
'click button.js-notice-save': this.saveMessage,
}];
},
}).register('administratorNoticeSettings');

View file

@ -61,10 +61,11 @@
.is-checked .is-checked
border-bottom: 2px solid #2980b9; border-bottom: 2px solid #2980b9;
border-right: 2px solid #2980b9; border-right: 2px solid #2980b9;
span span
padding: 0 0.5rem padding: 0 0.5rem
.admin-notice,
.invite-people .invite-people
padding-left 20px; padding-left 20px;
li li

View file

@ -54,6 +54,9 @@
"addMemberPopup-title": "Members", "addMemberPopup-title": "Members",
"admin": "Admin", "admin": "Admin",
"admin-desc": "Can view and edit cards, remove members, and change settings for the board.", "admin-desc": "Can view and edit cards, remove members, and change settings for the board.",
"admin-notice": "Notice",
"admin-notice-active": "Active message",
"admin-notice-title": "Message from service administrator",
"all-boards": "All boards", "all-boards": "All boards",
"and-n-other-card": "And __count__ other card", "and-n-other-card": "And __count__ other card",
"and-n-other-card_plural": "And __count__ other cards", "and-n-other-card_plural": "And __count__ other cards",

36
models/notices.js Normal file
View file

@ -0,0 +1,36 @@
Notices = new Mongo.Collection('notices');
Notices.attachSchema(new SimpleSchema({
enabled: {
type: Boolean,
defaultValue: false,
},
title: {
type: String,
optional: true,
},
body: {
type: String,
optional: true,
},
sort: {
type: Number,
decimal: true,
},
}));
Notices.allow({
update(userId) {
const user = Users.findOne(userId);
return user && user.isAdmin;
},
});
if (Meteor.isServer) {
Meteor.startup(() => {
const notices = Notices.findOne({});
if(!notices){
Notices.insert({enabled: false, sort: 0});
}
});
}

View file

@ -0,0 +1,3 @@
Meteor.publish('notices', function() {
return Notices.find();
});