<%= yield %> diff --git a/config/locales/devise.views.de.yml b/config/locales/devise.views.de.yml new file mode 100644 index 0000000..7d6d77f --- /dev/null +++ b/config/locales/devise.views.de.yml @@ -0,0 +1,110 @@ +de: + devise: + confirmations: + new: + resend_confirmation_instructions: Anleitung zur Bestätigung noch mal schicken + confirmed: Ihre Konto wurde erfolgreich bestätigt. + send_instructions: Sie erhalten ein wenigen Minuten eine E-Mail mit Anweisungen, wie Sie Ihr Konto bestätigen. + send_paranoid_instructions: Falls Ihre E-Mail-Adresse in unserer Datenbank existiert, werden Sie in wenigen Minuten eine E-Mail mit Anweisungen erhalten, wie Sie Ihr Konto bestätigen. + failure: + already_authenticated: "Sie sind schon angemeldet." + inactive: "Ihr Konto ist noch nicht aktiviert." + invalid: "Ungültige E-Mail-Adresse oder Passwort." + invalid_token: "Ungültiger Authentifikations-Schlüssel." + locked: "Ihr Konto ist gesperrt." + not_found_in_database: "Ungültige E-Mail-Adresse oder Passwort." + timeout: "Ihre Sitzung ist abgelaufen. Bitte melden sich erneut an, um fortzufahren." + unauthenticated: "Sie müssen sich anmelden oder registrieren, um fortfahren zu können." + unconfirmed: "Sie müssen Ihr Konto bestätigen, um fortfahren zu können." + mailer: + confirmation_instructions: + action: Mein Konto bestätigen + greeting: Willkommen %{recipient}! + instruction: ! 'Folgen Sie dem untenstehenden Link, um Ihr Konto zu bestätigen:' + subject: Anleitung zur Bestätigung Ihres Accounts + reset_password_instructions: + action: Passwort ändern + greeting: Hallo %{recipient}! + instruction: Jemand hat einen Link angefordert, um Ihr Passwort zu ändern, und Sie können das durch den unten aufgeführten Link tun. + instruction_2: Wenn Sie das nicht angefordert haben, bitte ignorieren Sie diese E-Mail. + instruction_3: Das Passwort wird nicht geändert bis Sie den obenstehenden Link abrufen, und ein neues Passwort bestimmen. + subject: Anleitung um das Passwort zurückzusetzten + unlock_instructions: + action: Mein Konto entsperren + greeting: Hallo %{recipient}! + instruction: ! 'Folgen Sie dem untenstehenden Link, um Ihr Konto zu entsperren:' + message: Ihr Konto wurde aufgrund einer großen Anzahl von fehlgeschlagenen Anmeldeversuchen gesperrt. + subject: Anleitung um Ihr Konto zu entsperren + omniauth_callbacks: + failure: "Sie konnten nicht über %{kind} authentifiziert werden, da \"%{reason}\"." + success: "Erfolgreich über %{kind} authentifiziert." + passwords: + new: + forgot_your_password: Haben Sie Ihr Passwort vergessen? + send_me_reset_password_instructions: Schicken Sie mir die Anleitung, mein Passwort zurückzusetzen + edit: + change_your_password: Passwort ändern + new_password: Neues Passwort + confirm_new_password: Neues Passwort bestätigen + change_my_password: Ändere mein Passwort + no_token: "Sie können diese Seite nicht ohne Link zum Zurücksetzen Ihres Passworts aufrufen. Wenn Sie Ihr Passwort zurücksetzen wollen, gehen Sie sicher, dass Sie die vollständige Adresse benutzt haben, die Sie mit der E-Mail erhalten haben." + send_instructions: "Sie werden eine E-Mail mit der Anleitung, wie Sie Ihr Passwort zurücksetzen können, in wenigen Minuten erhalten." + send_paranoid_instructions: "Falls Ihre E-Mail-Adresse in unserer Datenbank existiert, werden Sie in wenigen Minuten eine E-Mail mit einem Link zum Zurücksetzen Ihres Passworts erhalten." + updated: Ihr Passwort wurde erfolgreich geändert. Sie sind nun angemeldet. + updated_not_active: "Ihr Passwort wurde erfolgreich geändert." + registrations: + edit: + are_you_sure: Sind Sie sicher? + cancel_my_account: Konto löschen + leave_blank_if_you_don_t_want_to_change_it: freilassen, wenn Sie das nicht ändern wollen + title: ! '%{resource} bearbeiten' + we_need_your_current_password_to_confirm_your_changes: wir benötigen Ihr aktuelles Passwort, um die Änderung zu bestätigen + update: "Aktualisieren" + unhappy: "Unglücklich" + new: + sign_up: Registrieren + destroyed: "Auf Wiedersehen! Ihr Konto wurde erfolreich gekündigt. Wir hoffen Sie bald wiederzusehen." + signed_up: "Willkommen! Sie haben sich erfolgreich registriert." + signed_up_but_inactive: "Sie haben sich erfolgreich registriert. Aber wir konnten Sie nicht anmelden, da Ihr Konto noch nicht aktiviert ist." + signed_up_but_locked: "Sie haben sich erfolgreich registriert. Aber wir konnten Sie nicht anmelden, da Ihr Konto gesperrt ist." + signed_up_but_unconfirmed: "Eine Nachricht mit einem Aktivierungs-Link wurde an Ihre E-Mail-Adresse geschickt. Bitte öffnen Sie diesen Link, um Ihr Konto zu aktivieren." + update_needs_confirmation: "Ihr Konto wurde erfolgreich aktualisiert, aber wir müssen Ihre E-Mail-Adresse verifizieren. Bitte überprüfen Sie Ihre E-Mails und klicken auf den Bestätigungs-Link, um Ihre E-Mail-Adresse abschliessend zu bestätigen." + updated: "Ihr Konto wurde erfolgreich aktualisiert." + sessions: + signed_in: "Erfolgreich angemeldet." + signed_out: "Erfolgreich abgemeldet." + new: + sign_in: Anmelden + shared: + links: + didn_t_receive_confirmation_instructions: Keine Anleitung zur Bestätigung erhalten? + didn_t_receive_unlock_instructions: Keine Anleitung zum Entsperren erhalten? + forgot_your_password: Passwort vergessen? + sign_in: Anmelden + sign_in_with_provider: Mit %{provider} anmelden + sign_up: Registrieren + unlocks: + new: + resend_unlock_instructions: Anleitung zum Entsperren noch mal schicken + send_instructions: "Sie werden eine E-Mail mit der Anleitung, wie Sie Ihr Konto entsperren können, in wenigen Minuten erhalten." + send_paranoid_instructions: "Falls Ihr Konto existiert, werden Sie eine E-Mail mit der Anleitung, wie Sie Ihr Konto entsperren können, in wenigen Minuten erhalten." + unlocked: "Ihr Konto wurde erfolreich entsperrt. Bitte melden Sie sich an, um fortfahren zu können." + errors: + messages: + already_confirmed: "wurde schon bestätigt - bitte versuchen Sie sich anzumelden" + confirmation_period_expired: "muss innerhalb %{period} bestätigt werden - bitte fordern Sie den Link erneut an" + expired: "ist ausgelaufen - bitte fordern Sie den Link erneut an" + not_found: "nicht gefunden" + not_locked: "war nicht gesperrt" + not_saved: + one: "1 Fehler verhinderte, dass %{resource} gespeichert werden konnte:" + other: "%{count} Fehler verhinderten, dass %{resource} gespeichert werden konnte:" + activerecord: + models: + admin: "Admin" + attributes: + admin: + current_sign_in_at: "Angemeldet am" + email: "E-Mail" + password: "Passwort" + last_sign_in_at: "Zuletzt angemeldet am" \ No newline at end of file diff --git a/config/locales/views/application/de.yml b/config/locales/views/application/de.yml new file mode 100644 index 0000000..19bf621 --- /dev/null +++ b/config/locales/views/application/de.yml @@ -0,0 +1,6 @@ +# ruby encoding: utf-8 + +de: + application: + sign_in: 'Einloggen' + sign_out: 'Ausloggen' \ No newline at end of file From d2ab9f320276dd0bd2ed467630423031555ec969 Mon Sep 17 00:00:00 2001 From: Philipp Fischbeck Date: Sat, 31 Jan 2015 12:58:53 +0100 Subject: [PATCH 5/9] Add warning to sign in page --- app/views/devise/sessions/new.html.erb | 1 + config/locales/devise.views.de.yml | 1 + 2 files changed, 2 insertions(+) diff --git a/app/views/devise/sessions/new.html.erb b/app/views/devise/sessions/new.html.erb index 8dfc50f..f954c5f 100644 --- a/app/views/devise/sessions/new.html.erb +++ b/app/views/devise/sessions/new.html.erb @@ -1,3 +1,4 @@ +<%= alert_box t('.no_sign_in_required_for_translating'), context: :warning %>

<%= t('.sign_in', :default => "Sign in") %>

diff --git a/config/locales/devise.views.de.yml b/config/locales/devise.views.de.yml index 7d6d77f..f319f85 100644 --- a/config/locales/devise.views.de.yml +++ b/config/locales/devise.views.de.yml @@ -75,6 +75,7 @@ de: signed_out: "Erfolgreich abgemeldet." new: sign_in: Anmelden + no_sign_in_required_for_translating: "Für das Vorschlagen von Übersetzungen ist keine Anmeldung notwendig. Die Anmeldung dient lediglich der Verwaltung durch Admins:" shared: links: didn_t_receive_confirmation_instructions: Keine Anleitung zur Bestätigung erhalten? From fb108420b46c5a97451fbdbeeac5ee6035341230 Mon Sep 17 00:00:00 2001 From: Philipp Fischbeck Date: Sun, 1 Feb 2015 11:04:51 +0100 Subject: [PATCH 6/9] Fix small bugs in views --- app/views/devise/sessions/new.html.erb | 4 ++-- app/views/problems/show.html.erb | 4 ---- app/views/translations/show.html.erb | 4 ---- config/locales/devise.views.de.yml | 3 ++- 4 files changed, 4 insertions(+), 11 deletions(-) diff --git a/app/views/devise/sessions/new.html.erb b/app/views/devise/sessions/new.html.erb index f954c5f..3444e2d 100644 --- a/app/views/devise/sessions/new.html.erb +++ b/app/views/devise/sessions/new.html.erb @@ -16,8 +16,8 @@ <% if devise_mapping.rememberable? %>
<% end %> <%= f.submit t('.sign_in', :default => "Sign in"), class: "btn btn-primary" %> diff --git a/app/views/problems/show.html.erb b/app/views/problems/show.html.erb index 7a2af88..708617f 100644 --- a/app/views/problems/show.html.erb +++ b/app/views/problems/show.html.erb @@ -1,7 +1,3 @@ -<% if notice %> -

<%= notice %>

-<% end %> - diff --git a/app/views/translations/show.html.erb b/app/views/translations/show.html.erb index 4e54b94..ca7421d 100644 --- a/app/views/translations/show.html.erb +++ b/app/views/translations/show.html.erb @@ -1,7 +1,3 @@ -<% if notice %> -

<%= notice %>

-<% end %> - diff --git a/config/locales/devise.views.de.yml b/config/locales/devise.views.de.yml index f319f85..13c8360 100644 --- a/config/locales/devise.views.de.yml +++ b/config/locales/devise.views.de.yml @@ -75,7 +75,8 @@ de: signed_out: "Erfolgreich abgemeldet." new: sign_in: Anmelden - no_sign_in_required_for_translating: "Für das Vorschlagen von Übersetzungen ist keine Anmeldung notwendig. Die Anmeldung dient lediglich der Verwaltung durch Admins:" + remember_me: Angemeldet bleiben + no_sign_in_required_for_translating: "Für das Vorschlagen von Übersetzungen ist keine Anmeldung notwendig. Die Anmeldung dient lediglich der Verwaltung durch Admins." shared: links: didn_t_receive_confirmation_instructions: Keine Anleitung zur Bestätigung erhalten? From b281f56d11eb37fbfd5236ad51cc050fb883d377 Mon Sep 17 00:00:00 2001 From: Philipp Fischbeck Date: Sun, 1 Feb 2015 11:10:38 +0100 Subject: [PATCH 7/9] Redirect to original problem after translation creation --- app/controllers/translations_controller.rb | 2 +- test/controllers/translations_controller_test.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/translations_controller.rb b/app/controllers/translations_controller.rb index dafd0e3..61aec87 100644 --- a/app/controllers/translations_controller.rb +++ b/app/controllers/translations_controller.rb @@ -25,7 +25,7 @@ class TranslationsController < ApplicationController respond_to do |format| if @translation.save - format.html { redirect_to @translation, notice: t('translations.notice.successfully_created') } + format.html { redirect_to @translation.problem, notice: t('translations.notice.successfully_created') } format.json { render :show, status: :created, location: @translation } else format.html { render :new } diff --git a/test/controllers/translations_controller_test.rb b/test/controllers/translations_controller_test.rb index 41b3e18..df02bcc 100644 --- a/test/controllers/translations_controller_test.rb +++ b/test/controllers/translations_controller_test.rb @@ -25,7 +25,7 @@ class TranslationsControllerTest < ActionController::TestCase post :create, problem_id: 1, translation: @update end - assert_redirected_to translation_path(assigns(:translation)) + assert_redirected_to problem_path(id: 1) end test "should show translation" do From f16222519573c6cd7bae593ed2bc2a09f69e28ca Mon Sep 17 00:00:00 2001 From: Philipp Fischbeck Date: Sun, 1 Feb 2015 11:16:50 +0100 Subject: [PATCH 8/9] Add authentication with devise, fix tests --- app/controllers/application_controller.rb | 1 + app/controllers/problems_controller.rb | 1 + app/controllers/translations_controller.rb | 1 + app/views/layouts/application.html.erb | 4 +++- test/controllers/problems_controller_test.rb | 2 ++ test/controllers/translations_controller_test.rb | 5 +++++ test/fixtures/admins.yml | 6 +++++- 7 files changed, 18 insertions(+), 2 deletions(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index d83690e..407aa10 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -2,4 +2,5 @@ class ApplicationController < ActionController::Base # Prevent CSRF attacks by raising an exception. # For APIs, you may want to use :null_session instead. protect_from_forgery with: :exception + before_action :authenticate_admin! end diff --git a/app/controllers/problems_controller.rb b/app/controllers/problems_controller.rb index 43adad4..6bbc3fb 100644 --- a/app/controllers/problems_controller.rb +++ b/app/controllers/problems_controller.rb @@ -1,4 +1,5 @@ class ProblemsController < ApplicationController + skip_before_action :authenticate_admin!, only: [:index, :show] before_action :set_problem, only: [:show] def index diff --git a/app/controllers/translations_controller.rb b/app/controllers/translations_controller.rb index 61aec87..7c3ea67 100644 --- a/app/controllers/translations_controller.rb +++ b/app/controllers/translations_controller.rb @@ -1,4 +1,5 @@ class TranslationsController < ApplicationController + skip_before_action :authenticate_admin!, only: [:new, :create] before_action :set_translation, only: :show before_action :set_problem, only: [:new, :create] diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index 002277c..87f25b8 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -26,7 +26,9 @@ <%= horizontal do %> <%= nav class: 'navbar-left' do %> <%= link_to Problem.model_name.human(count: 2), problems_path %> - <%= link_to Translation.model_name.human(count: 2), translations_path %> + <% if admin_signed_in? %> + <%= link_to Translation.model_name.human(count: 2), translations_path %> + <% end %> <% end %> <%= nav class: 'navbar-right' do %> <% if admin_signed_in? %> diff --git a/test/controllers/problems_controller_test.rb b/test/controllers/problems_controller_test.rb index 7f202d3..e553fa6 100644 --- a/test/controllers/problems_controller_test.rb +++ b/test/controllers/problems_controller_test.rb @@ -1,6 +1,8 @@ require 'test_helper' class ProblemsControllerTest < ActionController::TestCase + include Devise::TestHelpers + test "should get index" do get :index assert_response :success diff --git a/test/controllers/translations_controller_test.rb b/test/controllers/translations_controller_test.rb index df02bcc..f30faaa 100644 --- a/test/controllers/translations_controller_test.rb +++ b/test/controllers/translations_controller_test.rb @@ -1,15 +1,19 @@ require 'test_helper' class TranslationsControllerTest < ActionController::TestCase + include Devise::TestHelpers + setup do @translation = translations(:translation_one) @update = { title: 'New title', content: 'This is the new content', } + @admin = admins(:admin) end test "should get index" do + sign_in @admin get :index assert_response :success assert_not_nil assigns(:translations) @@ -29,6 +33,7 @@ class TranslationsControllerTest < ActionController::TestCase end test "should show translation" do + sign_in @admin get :show, id: @translation assert_response :success end diff --git a/test/fixtures/admins.yml b/test/fixtures/admins.yml index dfdafef..813e227 100644 --- a/test/fixtures/admins.yml +++ b/test/fixtures/admins.yml @@ -3,4 +3,8 @@ # This model initially had no columns defined. If you add columns to the # model remove the '{}' from the fixture names and add the columns immediately # below each fixture, per the syntax in the comments below -# \ No newline at end of file +# + +admin: + email: admin@example.com + encrypted_password: <%= Devise.bcrypt(Admin, 'password') %> \ No newline at end of file From 594f9540a8d487554f8902eba70ca9b2013ce299 Mon Sep 17 00:00:00 2001 From: Philipp Fischbeck Date: Sun, 1 Feb 2015 12:00:49 +0100 Subject: [PATCH 9/9] Add tests for flash message helpers --- app/helpers/application_helper.rb | 20 +++++++++++--------- test/helpers/application_helper_test.rb | 13 +++++++++++++ 2 files changed, 24 insertions(+), 9 deletions(-) create mode 100644 test/helpers/application_helper_test.rb diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 781d8fb..fc5c037 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -4,15 +4,17 @@ module ApplicationHelper end def flash_messages(opts = {}) - flash.each do |msg_type, message| - concat(content_tag(:div, message, class: "alert #{bootstrap_class_for(msg_type)} alert-dismissible", role: 'alert') do - concat(content_tag(:button, class: 'close', data: { dismiss: 'alert' }) do - concat content_tag(:span, '×'.html_safe, 'aria-hidden' => true) - concat content_tag(:span, 'Close', class: 'sr-only') - end) - concat message - end) + capture do + flash.each do |msg_type, message| + concat(content_tag(:div, message, class: "alert #{bootstrap_class_for(msg_type)} alert-dismissible", role: 'alert') do + concat(content_tag(:button, class: 'close', data: { dismiss: 'alert' }) do + concat content_tag(:span, '×'.html_safe, 'aria-hidden' => true) + concat content_tag(:span, 'Close', class: 'sr-only') + end) + concat message + end) + end + nil end - nil end end diff --git a/test/helpers/application_helper_test.rb b/test/helpers/application_helper_test.rb new file mode 100644 index 0000000..4a29dc2 --- /dev/null +++ b/test/helpers/application_helper_test.rb @@ -0,0 +1,13 @@ +require 'test_helper' + +class ApplicationHelperTest < ActionView::TestCase + test "bootstrap classes for flash should return correct values" do + assert_equal "alert-danger", bootstrap_class_for(:error) + assert_equal "alert-success", bootstrap_class_for(:success) + end + + test "bootstrap flash messages should work" do + flash[:error] = "Error" + assert_equal "
Error
", flash_messages + end +end