diff --git a/Gemfile b/Gemfile index 8c3b5db..e7117a8 100644 --- a/Gemfile +++ b/Gemfile @@ -1 +1,2 @@ gem 'slim-rails' +gem 'validate_url' diff --git a/app/controllers/messenger_settings_controller.rb b/app/controllers/messenger_settings_controller.rb index 0e06493..0f14dd3 100644 --- a/app/controllers/messenger_settings_controller.rb +++ b/app/controllers/messenger_settings_controller.rb @@ -3,13 +3,44 @@ class MessengerSettingsController < ApplicationController before_action :authorize def update - setting = MessengerSetting.find_or_create @project.id - setting.assign_attributes(params[:setting]) - if setting.save + setting = MessengerSetting.find_or_create(@project.id) + if setting.update(allowed_params) flash[:notice] = l(:notice_successful_update) + redirect_to settings_project_path(@project, tab: 'messenger') else - flash[:error] = 'Updating failed.' + e.message + flash[:error] = setting.errors.full_messages.flatten.join("\n") + respond_to do |format| + format.html { redirect_back_or_default(settings_project_path(@project, tab: 'messenger')) } + format.api { render_validation_errors(setting) } + end end - redirect_to settings_project_path(@project, tab: 'messenger') + end + + private + + def allowed_params + params.require(:setting).permit :messenger_url, + :messenger_icon, + :messenger_channel, + :messenger_username, + :messenger_verify_ssl, + :auto_mentions, + :default_mentions, + :display_watchers, + :post_updates, + :new_include_description, + :updated_include_description, + :post_private_issues, + :post_private_notes, + :post_wiki, + :post_wiki_updates, + :post_db, + :post_db_updates, + :post_private_db, + :post_contact, + :post_contact_updates, + :post_private_contacts, + :post_password, + :post_password_updates end end diff --git a/app/models/messenger_setting.rb b/app/models/messenger_setting.rb index 952840c..3a76e74 100644 --- a/app/models/messenger_setting.rb +++ b/app/models/messenger_setting.rb @@ -1,32 +1,7 @@ class MessengerSetting < ActiveRecord::Base - include Redmine::SafeAttributes belongs_to :project - safe_attributes 'messenger_url', - 'messenger_icon', - 'messenger_channel', - 'messenger_username', - 'messenger_verify_ssl', - 'auto_mentions', - 'default_mentions', - 'display_watchers', - 'post_updates', - 'new_include_description', - 'updated_include_description', - 'post_private_issues', - 'post_private_notes', - 'post_wiki', - 'post_wiki_updates', - 'post_db', - 'post_db_updates', - 'post_private_db', - 'post_contact', - 'post_contact_updates', - 'post_private_contacts', - 'post_password', - 'post_password_updates' - - attr_protected :id, :project_id + validates :messenger_url, url: { allow_blank: true, message: l(:error_messenger_invalid_url) } def self.find_or_create(p_id) setting = MessengerSetting.find_by(project_id: p_id) diff --git a/config/locales/de.yml b/config/locales/de.yml index afcd30e..1e6b549 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -1,6 +1,7 @@ # German strings de: - permission_manage_messenger: Messenger verwalten + default_mentionsl_info: Benutzer, die immer mit Mentions benachrichtet werden sollen. Mehrere Namen können mit Komma getrennt angegeben werden (z.B. @all, @here). + error_messenger_invalid_url: "ist keine gültige URL" label_messenger_contact_created: "[%{project_url}] Kontakt %{url} erstellt von *%{user}*" label_messenger_contact_updated: "[%{project_url}] Kontakt %{url} aktualisiert von *%{user}*" label_messenger_db_entry_created: "[%{project_url}] DB Eintrag %{url} erstellt von *%{user}*" @@ -11,6 +12,7 @@ de: label_messenger_password_created: "[%{project_url}] Kennwort %{url} erstellt von *%{user}*" label_messenger_password_updated: "[%{project_url}] Kennwort %{url} aktualisiert von *%{user}*" label_messenger_project_text_field_info: Leer lassen für Systemstandard. + label_messenger_setting: Messenger Einstellung label_messenger_settings_default: Standardeinstellung label_messenger_settings_disabled: Deaktiviert label_messenger_settings_enabled: Aktiviert @@ -32,8 +34,8 @@ de: label_settings_post_db: Neue DB Einträge? label_settings_post_password_updates: Passwort Updates? label_settings_post_password: Neue Passwörter? - label_settings_post_private_db: Private DB Einträge? label_settings_post_private_contacts: Private Kontakte? + label_settings_post_private_db: Private DB Einträge? label_settings_post_private_issues: Private Ticket Updates? label_settings_post_private_notes: Private Notizen? label_settings_post_updates: Ticket Updates? @@ -50,5 +52,4 @@ de: messenger_url_info_html: 'Generiere eine Incoming WebHook URL vom Messenger Service. Um nur aus bestimmten Projekten Nachrichten zu versenden, kann diese URL leer bleiben und in den Projekteinstellungen gesetzt werden.' messenger_verify_ssl_info_html: 'Falls der Messenger Service ein ungültiges oder selbst erstelltes (self-signed) SSL Zertifikat verwendet bitte deaktivieren.' messenger_wiki_intro: Legen Sie fest welche Einträge oder Änderungen für Wikis im angegebenen Messenger Channel versendet werden. - label_messenger_setting: Messenger Einstellung - default_mentionsl_info: Benutzer, die immer mit Mentions benachrichtet werden sollen. Mehrere Namen können mit Komma getrennt angegeben werden (z.B. @all, @here). + permission_manage_messenger: Messenger verwalten diff --git a/config/locales/en.yml b/config/locales/en.yml index 333fc27..3c742c9 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1,6 +1,7 @@ # English strings en: - permission_manage_messenger: Manage messenger + default_mentionsl_info: Default people to notify, comma separated (e.g. @all, @here) + error_messenger_invalid_url: is not a valid URL label_messenger_contact_created: "[%{project_url}] Contact %{url} created by *%{user}*" label_messenger_contact_updated: "[%{project_url}] Contact %{url} updated by *%{user}*" label_messenger_db_entry_created: "[%{project_url}] DB entry %{url} created by *%{user}*" @@ -11,6 +12,7 @@ en: label_messenger_password_created: "[%{project_url}] Kennwort %{url} created by *%{user}*" label_messenger_password_updated: "[%{project_url}] Kennwort %{url} updated by *%{user}*" label_messenger_project_text_field_info: Leave it blank for system default. + label_messenger_setting: Messenger Settings label_messenger_settings_default: System default label_messenger_settings_disabled: Disabled label_messenger_settings_enabled: Enabled @@ -32,8 +34,8 @@ en: label_settings_post_db: DB entry added? label_settings_post_password_updates: Password updates? label_settings_post_password: Password added? - label_settings_post_private_db: Private DB entries? label_settings_post_private_contacts: Private contacts? + label_settings_post_private_db: Private DB entries? label_settings_post_private_issues: Private issue updates? label_settings_post_private_notes: Private notes updates? label_settings_post_updates: Issue updates? @@ -50,5 +52,4 @@ en: messenger_url_info_html: 'Generate an Incoming WebHook URL from the messenger service. Leave it empty, if you only want to activate specific projects with project based settings' messenger_verify_ssl_info_html: 'If your Messenger service uses an invalid or self-signed SSL certificate, disable it.' messenger_wiki_intro: Activate the changes for Wikis that should be sent to the pre-defined Messenger channel. - label_messenger_setting: Messenger Settings - default_mentionsl_info: Default people to notify, comma separated (e.g. @all, @here) + permission_manage_messenger: Manage messenger diff --git a/config/locales/ja.yml b/config/locales/ja.yml index 3e953af..6f0b942 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -1,6 +1,7 @@ # Japanese strings ja: - permission_manage_messenger: メッセンジャーの管理 + default_mentionsl_info: Default people to notify, comma separated (e.g. @all, @here) + error_messenger_invalid_url: is not a valid URL label_messenger_contact_created: "[%{project_url}] コンタクト %{url} が *%{user}* によって作成されました。" label_messenger_contact_updated: "[%{project_url}] コンタクト %{url} が*%{user}* によって更新されました。" label_messenger_db_entry_created: "[%{project_url}] DB entry %{url} created by *%{user}*" @@ -11,6 +12,7 @@ ja: label_messenger_password_created: "[%{project_url}] Kennwort %{url} created by *%{user}*" label_messenger_password_updated: "[%{project_url}] Kennwort %{url} updated by *%{user}*" label_messenger_project_text_field_info: デフォルトの設定を使う場合空欄にしてください。 + label_messenger_setting: メッセンジャーの設定 label_messenger_settings_default: デフォルト label_messenger_settings_disabled: 無効 label_messenger_settings_enabled: 有効 @@ -32,8 +34,8 @@ ja: label_settings_post_db: DB entry added? label_settings_post_password_updates: Password updates? label_settings_post_password: Password added? - label_settings_post_private_db: Private DB entries? label_settings_post_private_contacts: Private contacts? + label_settings_post_private_db: Private DB entries? label_settings_post_private_issues: プライベートチケットの更新 label_settings_post_private_notes: プライベート注記の更新 label_settings_post_updates: チケットの更新 @@ -50,5 +52,4 @@ ja: messenger_url_info_html: 'メッセンジャー サービスで 内向きのウェブフックのURLを作成して下さい。プロジェクト毎に設定を変えたい場合は空欄として下さい。' messenger_verify_ssl_info_html: 'メッセンジャー サービスが自己署名証明書や不正な証明書を使っている場合、無効として下さい。' messenger_wiki_intro: メッセンジャーに送信するWikiのイベントにチェックを入れて下さい。 - label_messenger_setting: メッセンジャーの設定 - default_mentionsl_info: Default people to notify, comma separated (e.g. @all, @here) + permission_manage_messenger: メッセンジャーの管理