about summary refs log tree commit diff
diff options
context:
space:
mode:
authorEugen Rochko <eugen@zeonfederated.com>2016-10-14 02:28:49 +0200
committerEugen Rochko <eugen@zeonfederated.com>2016-10-14 02:28:49 +0200
commit7a6d95f70ccb12d61355ecd677eff40dd13260b7 (patch)
tree93abd8019a8ca91c1c251307f0773ca008f4b875
parent9b195f5dd34ad646e1300abaaa42e10cf43cd5db (diff)
E-mail preferences page
-rw-r--r--app/assets/javascripts/components/features/ui/components/navigation_bar.jsx2
-rw-r--r--app/assets/stylesheets/application.scss19
-rw-r--r--app/controllers/settings/preferences_controller.rb27
-rw-r--r--app/controllers/settings/profiles_controller.rb (renamed from app/controllers/settings_controller.rb)4
-rw-r--r--app/helpers/settings_helper.rb2
-rw-r--r--app/views/auth/registrations/edit.html.haml3
-rw-r--r--app/views/settings/preferences/show.html.haml22
-rw-r--r--app/views/settings/profiles/show.html.haml (renamed from app/views/settings/show.html.haml)6
-rw-r--r--app/views/settings/shared/_links.html.haml7
-rw-r--r--config/routes.rb6
-rw-r--r--spec/controllers/settings/preferences_controller_spec.rb16
-rw-r--r--spec/controllers/settings/profiles_controller_spec.rb (renamed from spec/controllers/settings_controller_spec.rb)2
-rw-r--r--spec/helpers/settings_helper_spec.rb5
13 files changed, 107 insertions, 14 deletions
diff --git a/app/assets/javascripts/components/features/ui/components/navigation_bar.jsx b/app/assets/javascripts/components/features/ui/components/navigation_bar.jsx
index a16852541..68b660ee8 100644
--- a/app/assets/javascripts/components/features/ui/components/navigation_bar.jsx
+++ b/app/assets/javascripts/components/features/ui/components/navigation_bar.jsx
@@ -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>
     );
diff --git a/app/assets/stylesheets/application.scss b/app/assets/stylesheets/application.scss
index 60875a3b3..ac21c809f 100644
--- a/app/assets/stylesheets/application.scss
+++ b/app/assets/stylesheets/application.scss
@@ -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
index 000000000..8a038f2fe
--- /dev/null
+++ b/app/controllers/settings/preferences_controller.rb
@@ -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
diff --git a/app/controllers/settings_controller.rb b/app/controllers/settings/profiles_controller.rb
index 299e1f3bc..52b6369a6 100644
--- a/app/controllers/settings_controller.rb
+++ b/app/controllers/settings/profiles_controller.rb
@@ -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
index ffbedbaf4..000000000
--- a/app/helpers/settings_helper.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-module SettingsHelper
-end
diff --git a/app/views/auth/registrations/edit.html.haml b/app/views/auth/registrations/edit.html.haml
index 9a52af35c..78f4ef5dc 100644
--- a/app/views/auth/registrations/edit.html.haml
+++ b/app/views/auth/registrations/edit.html.haml
@@ -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
index 000000000..9c73d07c5
--- /dev/null
+++ b/app/views/settings/preferences/show.html.haml
@@ -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"
diff --git a/app/views/settings/show.html.haml b/app/views/settings/profiles/show.html.haml
index fe4d37b55..2ff91beff 100644
--- a/app/views/settings/show.html.haml
+++ b/app/views/settings/profiles/show.html.haml
@@ -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
index 000000000..520300416
--- /dev/null
+++ b/app/views/settings/shared/_links.html.haml
@@ -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
diff --git a/config/routes.rb b/config/routes.rb
index 94507d324..ec0309dc7 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -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
index 000000000..a5d349d6d
--- /dev/null
+++ b/spec/controllers/settings/preferences_controller_spec.rb
@@ -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
diff --git a/spec/controllers/settings_controller_spec.rb b/spec/controllers/settings/profiles_controller_spec.rb
index 0b41a2111..526bbc5bc 100644
--- a/spec/controllers/settings_controller_spec.rb
+++ b/spec/controllers/settings/profiles_controller_spec.rb
@@ -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
index 9c68490a1..000000000
--- a/spec/helpers/settings_helper_spec.rb
+++ /dev/null
@@ -1,5 +0,0 @@
-require 'rails_helper'
-
-RSpec.describe SettingsHelper, type: :helper do
-
-end