forked from cybrespace/mastodon
		
	E-mail preferences page
This commit is contained in:
		
							parent
							
								
									9b195f5dd3
								
							
						
					
					
						commit
						7a6d95f70c
					
				
					 13 changed files with 107 additions and 14 deletions
				
			
		| 
						 | 
					@ -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;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										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'
 | 
					  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"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										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
 | 
					- 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
 | 
				
			||||||
| 
						 | 
					@ -14,4 +14,6 @@
 | 
				
			||||||
    = f.file_field :header
 | 
					    = f.file_field :header
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  .actions
 | 
					  .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
 | 
				
			||||||
  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
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										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'
 | 
					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…
	
	Add table
		
		Reference in a new issue