E-mail preferences page
This commit is contained in:
		| @@ -19,7 +19,7 @@ const NavigationBar = React.createClass({ | ||||
|  | ||||
|         <div style={{ flex: '1 1 auto', marginLeft: '8px', color: '#9baec8' }}> | ||||
|           <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> | ||||
|     ); | ||||
|   | ||||
| @@ -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 { | ||||
|     background: transparent; | ||||
|     border: 0; | ||||
|   | ||||
							
								
								
									
										27
									
								
								app/controllers/settings/preferences_controller.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								app/controllers/settings/preferences_controller.rb
									
									
									
									
									
										Normal file
									
								
							| @@ -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' | ||||
| 
 | ||||
|   before_action :authenticate_user! | ||||
| @@ -9,7 +9,7 @@ class SettingsController < ApplicationController | ||||
| 
 | ||||
|   def update | ||||
|     if @account.update(account_params) | ||||
|       redirect_to settings_path, notice: 'Changes successfully saved!' | ||||
|       redirect_to settings_profile_path, notice: 'Changes successfully saved!' | ||||
|     else | ||||
|       render action: :show | ||||
|     end | ||||
| @@ -1,2 +0,0 @@ | ||||
| module SettingsHelper | ||||
| end | ||||
| @@ -10,5 +10,8 @@ | ||||
|     = f.password_field :password_confirmation, autocomplete: "off", placeholder: 'Confirm new password' | ||||
|   .field | ||||
|     = f.password_field :current_password, autocomplete: "off", placeholder: 'Current password' | ||||
|  | ||||
|   .actions | ||||
|     = f.button "Save changes", type: 'submit' | ||||
|  | ||||
| .form-footer= render "settings/shared/links" | ||||
|   | ||||
							
								
								
									
										22
									
								
								app/views/settings/preferences/show.html.haml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								app/views/settings/preferences/show.html.haml
									
									
									
									
									
										Normal file
									
								
							| @@ -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 | ||||
|   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 | ||||
|     = f.text_field :display_name, placeholder: 'Display name' | ||||
|   .field | ||||
| @@ -14,4 +14,6 @@ | ||||
|     = f.file_field :header | ||||
| 
 | ||||
|   .actions | ||||
|     = f.button 'Save changes', type: :submit  | ||||
|     = f.button 'Save changes', type: :submit | ||||
| 
 | ||||
| .form-footer= render "settings/shared/links" | ||||
							
								
								
									
										7
									
								
								app/views/settings/shared/_links.html.haml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								app/views/settings/shared/_links.html.haml
									
									
									
									
									
										Normal file
									
								
							| @@ -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 | ||||
|  | ||||
|   resource  :settings, only: [:show, :update] | ||||
|   namespace :settings do | ||||
|     resource :profile, only: [:show, :update] | ||||
|     resource :preferences, only: [:show, :update] | ||||
|   end | ||||
|  | ||||
|   resources :media, only: [:show] | ||||
|  | ||||
|   namespace :api do | ||||
|   | ||||
							
								
								
									
										16
									
								
								spec/controllers/settings/preferences_controller_spec.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								spec/controllers/settings/preferences_controller_spec.rb
									
									
									
									
									
										Normal file
									
								
							| @@ -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' | ||||
| 
 | ||||
| RSpec.describe SettingsController, type: :controller do | ||||
| RSpec.describe Settings::ProfilesController, type: :controller do | ||||
| 
 | ||||
|   before do | ||||
|     sign_in Fabricate(:user), scope: :user | ||||
| @@ -1,5 +0,0 @@ | ||||
| require 'rails_helper' | ||||
|  | ||||
| RSpec.describe SettingsHelper, type: :helper do | ||||
|  | ||||
| end | ||||
		Reference in New Issue
	
	Block a user