]> cat aescling's git repositories - mastodon.git/commitdiff
E-mail preferences page
authorEugen Rochko <eugen@zeonfederated.com>
Fri, 14 Oct 2016 00:28:49 +0000 (02:28 +0200)
committerEugen Rochko <eugen@zeonfederated.com>
Fri, 14 Oct 2016 00:28:49 +0000 (02:28 +0200)
13 files changed:
app/assets/javascripts/components/features/ui/components/navigation_bar.jsx
app/assets/stylesheets/application.scss
app/controllers/settings/preferences_controller.rb [new file with mode: 0644]
app/controllers/settings/profiles_controller.rb [moved from app/controllers/settings_controller.rb with 73% similarity]
app/helpers/settings_helper.rb [deleted file]
app/views/auth/registrations/edit.html.haml
app/views/settings/preferences/show.html.haml [new file with mode: 0644]
app/views/settings/profiles/show.html.haml [moved from app/views/settings/show.html.haml with 64% similarity]
app/views/settings/shared/_links.html.haml [new file with mode: 0644]
config/routes.rb
spec/controllers/settings/preferences_controller_spec.rb [new file with mode: 0644]
spec/controllers/settings/profiles_controller_spec.rb [moved from spec/controllers/settings_controller_spec.rb with 78% similarity]
spec/helpers/settings_helper_spec.rb [deleted file]

index a168525411dca1fa011776da9c0d86a43de04043..68b660ee89c92be8b3294f7bbe402842cc1b6cd0 100644 (file)
@@ -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>
     );
index 60875a3b3f4d651d39e4b210557caf0d89b50cf8..ac21c809f28d637f400b237e39441e95ce03dba2 100644 (file)
@@ -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;
diff --git a/app/controllers/settings/preferences_controller.rb b/app/controllers/settings/preferences_controller.rb
new file mode 100644 (file)
index 0000000..8a038f2
--- /dev/null
@@ -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
similarity index 73%
rename from app/controllers/settings_controller.rb
rename to app/controllers/settings/profiles_controller.rb
index 299e1f3bc38a7cf1dfa270de7eeced1439e3b903..52b6369a6d7762deadf9723be5d4416f8e943590 100644 (file)
@@ -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
diff --git a/app/helpers/settings_helper.rb b/app/helpers/settings_helper.rb
deleted file mode 100644 (file)
index ffbedba..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-module SettingsHelper
-end
index 9a52af35c66d8a94ae8364ee52a5f94dd219377c..78f4ef5dc874ad9921d92c4d9d48f0fcea56211d 100644 (file)
@@ -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"
diff --git a/app/views/settings/preferences/show.html.haml b/app/views/settings/preferences/show.html.haml
new file mode 100644 (file)
index 0000000..9c73d07
--- /dev/null
@@ -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"
similarity index 64%
rename from app/views/settings/show.html.haml
rename to app/views/settings/profiles/show.html.haml
index fe4d37b55cd7657d026fffb4133350b47ae074b6..2ff91beff18dbf301e26f74b1adcc255bdf534a7 100644 (file)
@@ -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"
diff --git a/app/views/settings/shared/_links.html.haml b/app/views/settings/shared/_links.html.haml
new file mode 100644 (file)
index 0000000..5203004
--- /dev/null
@@ -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
index 94507d32480cb0d599efc113bed0ca4b63e1fe06..ec0309dc7b7824b7fcaab7dbe587e4c31b4a7e65 100644 (file)
@@ -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
diff --git a/spec/controllers/settings/preferences_controller_spec.rb b/spec/controllers/settings/preferences_controller_spec.rb
new file mode 100644 (file)
index 0000000..a5d349d
--- /dev/null
@@ -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
similarity index 78%
rename from spec/controllers/settings_controller_spec.rb
rename to spec/controllers/settings/profiles_controller_spec.rb
index 0b41a2111c8dae319f1a702eedd8ec51debf0bc0..526bbc5bce093652f30cd332d7d534971b1b634b 100644 (file)
@@ -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
diff --git a/spec/helpers/settings_helper_spec.rb b/spec/helpers/settings_helper_spec.rb
deleted file mode 100644 (file)
index 9c68490..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-require 'rails_helper'
-
-RSpec.describe SettingsHelper, type: :helper do
-
-end