Allow changing the visibitly (public/privat) of messages (fixes #625)

This commit is contained in:
Patrick Gansterer 2019-02-11 13:22:54 +01:00
parent c955a6ee40
commit 226192f7cb
6 changed files with 38 additions and 0 deletions

View File

@ -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: |

View File

@ -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: |

View File

@ -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

View File

@ -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

View File

@ -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/

View File

@ -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