E-mail preferences page
parent
9b195f5dd3
commit
7a6d95f70c
|
@ -19,7 +19,7 @@ const NavigationBar = React.createClass({
|
||||||
|
|
||||||
<div style={{ flex: '1 1 auto', marginLeft: '8px', color: '#9baec8' }}>
|
<div style={{ flex: '1 1 auto', marginLeft: '8px', color: '#9baec8' }}>
|
||||||
<strong style={{ fontWeight: '500', display: 'block', color: '#fff' }}>{this.props.account.get('acct')}</strong>
|
<strong style={{ fontWeight: '500', display: 'block', color: '#fff' }}>{this.props.account.get('acct')}</strong>
|
||||||
<a href='/settings' style={{ color: 'inherit', textDecoration: 'none' }}>Settings</a> · <Link to='/statuses/all' style={{ color: 'inherit', textDecoration: 'none' }}>Public timeline</Link> · <a href='/auth/sign_out' data-method='delete' style={{ color: 'inherit', textDecoration: 'none' }}>Logout</a>
|
<a href='/settings/profile' style={{ color: 'inherit', textDecoration: 'none' }}>Settings</a> · <Link to='/statuses/all' style={{ color: 'inherit', textDecoration: 'none' }}>Public timeline</Link> · <a href='/auth/sign_out' data-method='delete' style={{ color: 'inherit', textDecoration: 'none' }}>Logout</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|
|
@ -214,6 +214,25 @@ body {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.fields-group {
|
||||||
|
margin-bottom: 25px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.boolean-field {
|
||||||
|
margin-bottom: 5px;
|
||||||
|
|
||||||
|
label {
|
||||||
|
font-family: 'Roboto';
|
||||||
|
font-size: 14px;
|
||||||
|
color: #9baec8;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type=checkbox] {
|
||||||
|
display: inline-block;
|
||||||
|
margin-bottom: -13px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
input[type=text], input[type=email], input[type=password], textarea {
|
input[type=text], input[type=email], input[type=password], textarea {
|
||||||
background: transparent;
|
background: transparent;
|
||||||
border: 0;
|
border: 0;
|
||||||
|
|
|
@ -0,0 +1,27 @@
|
||||||
|
class Settings::PreferencesController < ApplicationController
|
||||||
|
layout 'auth'
|
||||||
|
|
||||||
|
before_action :authenticate_user!
|
||||||
|
|
||||||
|
def show
|
||||||
|
end
|
||||||
|
|
||||||
|
def update
|
||||||
|
current_user.settings(:notification_emails).follow = user_params[:notification_emails][:follow] == '1'
|
||||||
|
current_user.settings(:notification_emails).reblog = user_params[:notification_emails][:reblog] == '1'
|
||||||
|
current_user.settings(:notification_emails).favourite = user_params[:notification_emails][:favourite] == '1'
|
||||||
|
current_user.settings(:notification_emails).mention = user_params[:notification_emails][:mention] == '1'
|
||||||
|
|
||||||
|
if current_user.save
|
||||||
|
redirect_to settings_preferences_path, notice: 'Changes successfully saved!'
|
||||||
|
else
|
||||||
|
render action: :show
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def user_params
|
||||||
|
params.require(:user).permit(notification_emails: [:follow, :reblog, :favourite, :mention])
|
||||||
|
end
|
||||||
|
end
|
|
@ -1,4 +1,4 @@
|
||||||
class SettingsController < ApplicationController
|
class Settings::ProfilesController < ApplicationController
|
||||||
layout 'auth'
|
layout 'auth'
|
||||||
|
|
||||||
before_action :authenticate_user!
|
before_action :authenticate_user!
|
||||||
|
@ -9,7 +9,7 @@ class SettingsController < ApplicationController
|
||||||
|
|
||||||
def update
|
def update
|
||||||
if @account.update(account_params)
|
if @account.update(account_params)
|
||||||
redirect_to settings_path, notice: 'Changes successfully saved!'
|
redirect_to settings_profile_path, notice: 'Changes successfully saved!'
|
||||||
else
|
else
|
||||||
render action: :show
|
render action: :show
|
||||||
end
|
end
|
|
@ -1,2 +0,0 @@
|
||||||
module SettingsHelper
|
|
||||||
end
|
|
|
@ -10,5 +10,8 @@
|
||||||
= f.password_field :password_confirmation, autocomplete: "off", placeholder: 'Confirm new password'
|
= f.password_field :password_confirmation, autocomplete: "off", placeholder: 'Confirm new password'
|
||||||
.field
|
.field
|
||||||
= f.password_field :current_password, autocomplete: "off", placeholder: 'Current password'
|
= f.password_field :current_password, autocomplete: "off", placeholder: 'Current password'
|
||||||
|
|
||||||
.actions
|
.actions
|
||||||
= f.button "Save changes", type: 'submit'
|
= f.button "Save changes", type: 'submit'
|
||||||
|
|
||||||
|
.form-footer= render "settings/shared/links"
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
- content_for :page_title do
|
||||||
|
Preferences
|
||||||
|
|
||||||
|
= form_for current_user, url: settings_preferences_path, html: { method: :put } do |f|
|
||||||
|
= f.fields_for :notification_emails, current_user.settings(:notification_emails) do |ff|
|
||||||
|
.boolean-field
|
||||||
|
= ff.check_box :follow
|
||||||
|
= ff.label :follow, 'Send e-mail when someone follows you'
|
||||||
|
.boolean-field
|
||||||
|
= ff.check_box :reblog
|
||||||
|
= ff.label :reblog, 'Send e-mail when someone reblogs your status'
|
||||||
|
.boolean-field
|
||||||
|
= ff.check_box :favourite
|
||||||
|
= ff.label :favourite, 'Send e-mail when someone favourites your status'
|
||||||
|
.boolean-field
|
||||||
|
= ff.check_box :mention
|
||||||
|
= ff.label :mention, 'Send e-mail when someone mentions you'
|
||||||
|
|
||||||
|
.actions
|
||||||
|
= f.button 'Save changes', type: :submit
|
||||||
|
|
||||||
|
.form-footer= render "settings/shared/links"
|
|
@ -1,7 +1,7 @@
|
||||||
- content_for :page_title do
|
- content_for :page_title do
|
||||||
Edit profile
|
Edit profile
|
||||||
|
|
||||||
= form_for @account, url: settings_path, html: { method: :put } do |f|
|
= form_for @account, url: settings_profile_path, html: { method: :put } do |f|
|
||||||
.field
|
.field
|
||||||
= f.text_field :display_name, placeholder: 'Display name'
|
= f.text_field :display_name, placeholder: 'Display name'
|
||||||
.field
|
.field
|
||||||
|
@ -15,3 +15,5 @@
|
||||||
|
|
||||||
.actions
|
.actions
|
||||||
= f.button 'Save changes', type: :submit
|
= f.button 'Save changes', type: :submit
|
||||||
|
|
||||||
|
.form-footer= render "settings/shared/links"
|
|
@ -0,0 +1,7 @@
|
||||||
|
%ul.no-list
|
||||||
|
- if controller_name != 'profiles'
|
||||||
|
%li= link_to "Edit profile", settings_profile_path
|
||||||
|
- if controller_name != 'preferences'
|
||||||
|
%li= link_to "Preferences", settings_preferences_path
|
||||||
|
- if controller_name != 'registrations'
|
||||||
|
%li= link_to "Change password", edit_user_registration_path
|
|
@ -31,7 +31,11 @@ Rails.application.routes.draw do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
resource :settings, only: [:show, :update]
|
namespace :settings do
|
||||||
|
resource :profile, only: [:show, :update]
|
||||||
|
resource :preferences, only: [:show, :update]
|
||||||
|
end
|
||||||
|
|
||||||
resources :media, only: [:show]
|
resources :media, only: [:show]
|
||||||
|
|
||||||
namespace :api do
|
namespace :api do
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
require 'rails_helper'
|
||||||
|
|
||||||
|
RSpec.describe Settings::PreferencesController, type: :controller do
|
||||||
|
|
||||||
|
before do
|
||||||
|
sign_in Fabricate(:user), scope: :user
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "GET #show" do
|
||||||
|
it "returns http success" do
|
||||||
|
get :show
|
||||||
|
expect(response).to have_http_status(:success)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
|
@ -1,6 +1,6 @@
|
||||||
require 'rails_helper'
|
require 'rails_helper'
|
||||||
|
|
||||||
RSpec.describe SettingsController, type: :controller do
|
RSpec.describe Settings::ProfilesController, type: :controller do
|
||||||
|
|
||||||
before do
|
before do
|
||||||
sign_in Fabricate(:user), scope: :user
|
sign_in Fabricate(:user), scope: :user
|
|
@ -1,5 +0,0 @@
|
||||||
require 'rails_helper'
|
|
||||||
|
|
||||||
RSpec.describe SettingsHelper, type: :helper do
|
|
||||||
|
|
||||||
end
|
|
Loading…
Reference in New Issue