Added user settings for email notifications [SCI-443]

This commit is contained in:
Oleksii Kriuchykhin 2016-10-06 13:47:48 +02:00
parent 8dc956010c
commit 5399033fce
7 changed files with 89 additions and 34 deletions

View file

@ -95,28 +95,53 @@
// Setup notification checkbox buttons
function notificationsSettings() {
var recent_notification = $('[name="recent_notification"]');
recent_notification
.checkboxpicker({
onActiveCls: 'btn-primary'
});
var notification_settings = [ "recent_notification",
"assignments_notification" ]
if ( recent_notification.attr('value') === 'true' ) {
recent_notification.prop('checked', true);
} else {
recent_notification.prop('checked', false);
for (var i = 0; i < notification_settings.length; i++ ) {
var setting = $('[name="' + notification_settings[i] + '"]');
var dependant = $('[name="' + notification_settings[i] + '_email"]');
setting
.checkboxpicker({
onActiveCls: 'btn-primary'
}).change(function() {
if ( $(this).prop('checked') ) {
enableDependant($('[name="' + $(this).attr('name') + '_email"]'));
} else {
disableDependant($('[name="' + $(this).attr('name') + '_email"]'));
}
});
if ( setting.attr('value') === 'true' ) {
setting.prop('checked', true);
} else {
setting.prop('checked', false);
disableDependant(dependant);
}
setEmailSwitch(dependant);
}
var assignments_notification = $('[name="assignments_notification"]');
assignments_notification
.checkboxpicker({
onActiveCls: 'btn-primary'
});
function setEmailSwitch(setting) {
setting
.checkboxpicker({
onActiveCls: 'btn-primary'
});
if ( setting.attr('value') === 'true' ) {
setting.prop('checked', true);
enableDependant(setting);
} else {
setting.prop('checked', false);
}
}
if ( assignments_notification.attr('value') === 'true' ) {
assignments_notification.prop('checked', true);
} else {
assignments_notification.prop('checked', false);
function disableDependant(dependant) {
dependant.checkboxpicker().prop('disabled', true);
dependant.checkboxpicker().prop('checked', false);
}
function enableDependant(dependant) {
dependant.checkboxpicker().prop('disabled', false);
}
}

View file

@ -458,8 +458,13 @@ class Users::SettingsController < ApplicationController
end
def notifications_settings
@user.assignments_notification = params[:assignments_notification]
@user.recent_notification = params[:recent_notification]
@user.assignments_notification =
params[:assignments_notification] ? true : false
@user.recent_notification = params[:recent_notification] ? true : false
@user.recent_notification_email =
params[:recent_notification_email] ? true : false
@user.assignments_notification_email =
params[:assignments_notification_email] ? true : false
if @user.save
respond_to do |format|

View file

@ -33,7 +33,8 @@ class UserNotification < ActiveRecord::Base
def send_email
if self.notification.type_of == 'system_message'
send_email_notification(self.user, self.notification)
elsif self.user.assignments_notification || self.user.recent_notification
elsif self.user.assignments_notification_email ||
self.user.recent_notification_email
send_email_notification(self.user, self.notification)
end
end

View file

@ -59,6 +59,13 @@
<%= f.label t('notifications.form.assignments'), class: 'visible-sm visible-xs' %>
<%= check_box_tag :assignments_notification, @user.assignments_notification %>
</div>
<div class="col-md-3 col-sm-3 col-text-center">
<h5 class="hidden-sm hidden-xs"><%= t('notifications.form.email_settings') %></h5>
<%= f.label t('notifications.form.recent_notification'), class: 'visible-sm visible-xs'%> <br>
<%= check_box_tag :recent_notification_email, @user.recent_notification_email %> <br>
<%= f.label t('notifications.form.assignments'), class: 'visible-sm visible-xs' %>
<%= check_box_tag :assignments_notification_email, @user.assignments_notification_email %>
</div>
</div>
<% end %>
</div>

View file

@ -1514,6 +1514,7 @@ en:
form:
assignments: "Assignments notifications"
recent_notification: "Change notifications"
email_settings: "E-mail notifications"
show_all: "Show all notifications"
show_more: "Show more notifications"
no_notifications: "No notifications."

View file

@ -0,0 +1,14 @@
class AddEmailNotificationSettingsToUser < ActiveRecord::Migration
def up
add_column :users, :assignments_notification_email, :boolean, default: false
add_column :users, :recent_notification_email, :boolean, default: false
User.update_all(assignments_notification_email: false,
recent_notification_email: false)
end
def down
remove_column :users, :assignments_notification_email
remove_column :users, :recent_notification_email
end
end

View file

@ -11,7 +11,7 @@
#
# It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 20161004074754) do
ActiveRecord::Schema.define(version: 20161006065203) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
@ -628,20 +628,20 @@ ActiveRecord::Schema.define(version: 20161004074754) do
add_index "user_projects", ["user_id"], name: "index_user_projects_on_user_id", using: :btree
create_table "users", force: :cascade do |t|
t.string "full_name", null: false
t.string "initials", null: false
t.string "email", default: "", null: false
t.string "encrypted_password", default: "", null: false
t.string "full_name", null: false
t.string "initials", null: false
t.string "email", default: "", null: false
t.string "encrypted_password", default: "", null: false
t.string "reset_password_token"
t.datetime "reset_password_sent_at"
t.datetime "remember_created_at"
t.integer "sign_in_count", default: 0, null: false
t.integer "sign_in_count", default: 0, null: false
t.datetime "current_sign_in_at"
t.datetime "last_sign_in_at"
t.string "current_sign_in_ip"
t.string "last_sign_in_ip"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "avatar_file_name"
t.string "avatar_content_type"
t.integer "avatar_file_size"
@ -650,7 +650,7 @@ ActiveRecord::Schema.define(version: 20161004074754) do
t.datetime "confirmed_at"
t.datetime "confirmation_sent_at"
t.string "unconfirmed_email"
t.string "time_zone", default: "UTC"
t.string "time_zone", default: "UTC"
t.string "invitation_token"
t.datetime "invitation_created_at"
t.datetime "invitation_sent_at"
@ -658,10 +658,12 @@ ActiveRecord::Schema.define(version: 20161004074754) do
t.integer "invitation_limit"
t.integer "invited_by_id"
t.string "invited_by_type"
t.integer "invitations_count", default: 0
t.integer "tutorial_status", default: 0, null: false
t.boolean "assignments_notification", default: true
t.boolean "recent_notification", default: true
t.integer "invitations_count", default: 0
t.integer "tutorial_status", default: 0, null: false
t.boolean "assignments_notification", default: true
t.boolean "recent_notification", default: true
t.boolean "assignments_notification_email", default: false
t.boolean "recent_notification_email", default: false
end
add_index "users", ["confirmation_token"], name: "index_users_on_confirmation_token", unique: true, using: :btree