diff --git a/config/locales/de.yml b/config/locales/de.yml index 5aeee9d5..58130db0 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -1400,6 +1400,7 @@ de: title: Neue Nachricht show: all_messages: Nachrichten im Überblick + change_visibility: 'Ändern' from: 'Von:' group: Gruppe reply: Antworten @@ -1408,9 +1409,14 @@ de: subject: 'Betreff:' title: Nachricht anzeigen to: 'An:' + visibility: 'Sichtbarkeit:' + visibility_private: 'Privat' + visibility_public: 'Öffentlich' thread: all_message_threads: Alle Nachrichtenverläufe reply: Antworten + toggle_private: + not_allowed: Du kannst die Sichtbarkeit dieser Nachricht nicht ändern. messages_mailer: foodsoft_message: footer: | diff --git a/config/locales/en.yml b/config/locales/en.yml index 322d1a8c..82df3407 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1425,6 +1425,7 @@ en: title: New message show: all_messages: All messages + change_visibility: 'Change' from: 'From:' group: 'Group:' reply: Reply @@ -1433,9 +1434,14 @@ en: subject: 'Subject:' title: Show message to: 'To:' + visibility: 'Visibility:' + visibility_private: 'Private' + visibility_public: 'Public' thread: all_message_threads: All message threads reply: Reply + toggle_private: + not_allowed: You can not change the visibility of the message. messages_mailer: foodsoft_message: footer: | diff --git a/plugins/messages/app/controllers/messages_controller.rb b/plugins/messages/app/controllers/messages_controller.rb index 6d8b25aa..71be748e 100644 --- a/plugins/messages/app/controllers/messages_controller.rb +++ b/plugins/messages/app/controllers/messages_controller.rb @@ -48,6 +48,16 @@ class MessagesController < ApplicationController end end + def toggle_private + message = Message.find(params[:id]) + if message.can_toggle_private?(current_user) + message.update_attribute :private, !message.private + redirect_to message + else + redirect_to message, alert: I18n.t('messages.toggle_private.not_allowed') + end + end + def thread @messages = Message.thread(params[:id]).order(:created_at) end diff --git a/plugins/messages/app/models/message.rb b/plugins/messages/app/models/message.rb index 67b8676b..5808f4f2 100644 --- a/plugins/messages/app/models/message.rb +++ b/plugins/messages/app/models/message.rb @@ -124,6 +124,12 @@ class Message < ApplicationRecord !private || sender == user || recipients_ids.include?(user.id) end + def can_toggle_private?(user) + return true if sender == user + return false if private? + user.role_admin? + end + private def create_salt diff --git a/plugins/messages/app/views/messages/show.haml b/plugins/messages/app/views/messages/show.haml index 13365296..36e7b570 100644 --- a/plugins/messages/app/views/messages/show.haml +++ b/plugins/messages/app/views/messages/show.haml @@ -23,6 +23,15 @@ %tr %td= t '.sent_on' %td= format_time(@message.created_at) + %tr + %td= t '.visibility' + %td + - if @message.private + = t '.visibility_private' + - else + = t '.visibility_public' + - if @message.can_toggle_private?(current_user) + = link_to t('.change_visibility'), toggle_private_message_path(@message), method: :post, class: 'btn btn-mini' %hr/ %p= simple_format(h(@message.body)) %hr/ diff --git a/plugins/messages/config/routes.rb b/plugins/messages/config/routes.rb index 2b681fe5..d66eebdd 100644 --- a/plugins/messages/config/routes.rb +++ b/plugins/messages/config/routes.rb @@ -3,6 +3,7 @@ Rails.application.routes.draw do resources :messages, :only => [:index, :show, :new, :create] do member do get :thread + post :toggle_private end end