/
news_controller.rb
125 lines (110 loc) · 3.88 KB
/
news_controller.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
# encoding: UTF-8
class Moderation::NewsController < ModerationController
before_action :find_news, except: [:index]
after_action :expire_cache, only: [:update, :accept]
after_action :marked_as_read, only: [:show, :update, :vote]
respond_to :html, :md
def index
@news = News.candidate.sorted
@drafts = News.draft.sorted
@refused = News.refused.order("updated_at DESC").limit(15)
@polls = Poll.draft
@boards = Board.all(Board.amr)
end
def show
enforce_view_permission(@news)
path = moderation_news_path(@news, format: params[:format])
redirect_to path, status: 301 and return if request.path != path
@boards = Board.all(Board.news, @news.id)
headers["Cache-Control"] = "no-cache, no-store, must-revalidate, max-age=0"
flash.now[:alert] = "Attention, cette dépêche a été supprimée et n'est visible que par les modérateurs" if @news.deleted?
flash.now[:alert] = "Attention, cette dépêche a été refusée et n'est visible que par les modérateurs" if @news.refused?
respond_to do |wants|
wants.html { render :show, layout: 'chat_n_edit' }
wants.js { render partial: 'short' }
wants.md { @news.put_paragraphs_together }
end
end
def edit
enforce_update_permission(@news)
render partial: 'form'
end
def update
enforce_update_permission(@news)
@news.attributes = news_params
@news.editor = current_account
@news.save
if request.xhr?
render partial: 'short'
else
redirect_to @news, notice: "Modification enregistrée"
end
end
def accept
enforce_accept_permission(@news)
if @news.has_default_paragraph?
redirect_to [:moderation, @news], alert: "Impossible de publier une dépêche avec le texte par défaut d'un paragraphe"
elsif @news.unlocked?
@news.moderator_id = current_user.id
@news.accept!
NewsNotifications.accept(@news).deliver_now
redirect_to @news, alert: "Dépêche acceptée"
else
redirect_to [:moderation, @news], alert: "Impossible de modérer la dépêche tant que quelqu'un est en train de la modifier"
end
end
def refuse
enforce_refuse_permission(@news)
if params[:message]
@news.moderator_id = current_user.id
@news.put_paragraphs_together
@news.refuse!
notif = NewsNotifications.refuse_with_message(@news, params[:message], params[:template])
notif.deliver_now if notif
redirect_to '/'
elsif @news.unlocked?
@boards = Board.all(Board.news, @news.id)
else
redirect_to [:moderation, @news], alert: "Impossible de modérer la dépêche tant que quelqu'un est train de la modifier"
end
end
def rewrite
enforce_rewrite_permission(@news)
if @news.unlocked?
@news.moderator_id = current_user.id
@news.rewrite!
NewsNotifications.rewrite(@news).deliver_now
redirect_to @news, alert: "Dépêche renvoyée en rédaction"
else
redirect_to [:moderation, @news], alert: "Impossible de modérer la dépêche tant que quelqu'un est en train de la modifier"
end
end
def reset
enforce_reset_permission(@news)
@news.reset_votes
redirect_to [:moderation, @news], notice: "Votes remis à zéro"
end
def ppp
enforce_ppp_permission(@news)
@news.set_on_ppp
redirect_to [:moderation, @news], notice: "Cette dépêche est maintenant affichée en phare"
end
def vote
render partial: "vote"
end
protected
def news_params
params.require(:news).permit(:title, :section_id, :wiki_body, :wiki_second_part, :body, :second_part,
links_attributes: [Link::Accessible])
end
def find_news
@news = News.find(params[:id])
end
def marked_as_read
current_account.read(@news.node) unless params[:format] == "md"
end
def expire_cache
return if @news.state == "candidate"
expire_page controller: '/news', action: :index, format: :atom
end
end