Add diary entry subscribe/unsubscribe GET pages
This commit is contained in:
parent
d22e851557
commit
3a873b1668
8 changed files with 110 additions and 30 deletions
|
@ -157,21 +157,25 @@ class DiaryEntriesController < ApplicationController
|
|||
end
|
||||
|
||||
def subscribe
|
||||
diary_entry = DiaryEntry.find(params[:id])
|
||||
@diary_entry = DiaryEntry.find(params[:id])
|
||||
|
||||
diary_entry.subscriptions.create(:user => current_user) unless diary_entry.subscribers.exists?(current_user.id)
|
||||
if request.post?
|
||||
@diary_entry.subscriptions.create(:user => current_user) unless @diary_entry.subscribers.exists?(current_user.id)
|
||||
|
||||
redirect_to diary_entry_path(diary_entry.user, diary_entry)
|
||||
redirect_to diary_entry_path(@diary_entry.user, @diary_entry)
|
||||
end
|
||||
rescue ActiveRecord::RecordNotFound
|
||||
render :action => "no_such_entry", :status => :not_found
|
||||
end
|
||||
|
||||
def unsubscribe
|
||||
diary_entry = DiaryEntry.find(params[:id])
|
||||
@diary_entry = DiaryEntry.find(params[:id])
|
||||
|
||||
diary_entry.subscriptions.where(:user => current_user).delete_all if diary_entry.subscribers.exists?(current_user.id)
|
||||
if request.post?
|
||||
@diary_entry.subscriptions.where(:user => current_user).delete_all if @diary_entry.subscribers.exists?(current_user.id)
|
||||
|
||||
redirect_to diary_entry_path(diary_entry.user, diary_entry)
|
||||
redirect_to diary_entry_path(@diary_entry.user, @diary_entry)
|
||||
end
|
||||
rescue ActiveRecord::RecordNotFound
|
||||
render :action => "no_such_entry", :status => :not_found
|
||||
end
|
||||
|
|
|
@ -1,26 +1,5 @@
|
|||
<article class='diary_post border-top border-grey py-3<%= " text-muted px-3 bg-danger bg-opacity-10" unless diary_entry.visible %> user_<%= diary_entry.user.id %>'>
|
||||
<div class='mb-3'>
|
||||
<% if @user %>
|
||||
<h2><%= link_to diary_entry.title, diary_entry_path(diary_entry.user, diary_entry) %></h2>
|
||||
<% else %>
|
||||
<div class="row">
|
||||
<div class="col-auto">
|
||||
<%= user_thumbnail diary_entry.user %>
|
||||
</div>
|
||||
<div class="col">
|
||||
<h2><%= link_to diary_entry.title, diary_entry_path(diary_entry.user, diary_entry) %></h2>
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
<small class='text-muted'>
|
||||
<%= t(".posted_by_html", :link_user => (link_to diary_entry.user.display_name, user_path(diary_entry.user)), :created => l(diary_entry.created_at, :format => :blog), :language_link => (link_to diary_entry.language.name, :controller => "diary_entries", :action => "index", :display_name => nil, :language => diary_entry.language_code)) %>
|
||||
<% if (l(diary_entry.updated_at, :format => :blog) != l(diary_entry.created_at, :format => :blog)) %>
|
||||
<%= t(".updated_at_html", :updated => l(diary_entry.updated_at, :format => :blog)) %>
|
||||
<% end %>
|
||||
</small>
|
||||
|
||||
</div>
|
||||
<%= render :partial => "diary_entry_heading", :object => diary_entry, :as => "diary_entry" %>
|
||||
|
||||
<div class="richtext text-break" xml:lang="<%= diary_entry.language_code %>" lang="<%= diary_entry.language_code %>">
|
||||
<%= diary_entry.body.to_html %>
|
||||
|
|
21
app/views/diary_entries/_diary_entry_heading.html.erb
Normal file
21
app/views/diary_entries/_diary_entry_heading.html.erb
Normal file
|
@ -0,0 +1,21 @@
|
|||
<div class='mb-3'>
|
||||
<% if @user %>
|
||||
<h2><%= link_to diary_entry.title, diary_entry_path(diary_entry.user, diary_entry) %></h2>
|
||||
<% else %>
|
||||
<div class="row">
|
||||
<div class="col-auto">
|
||||
<%= user_thumbnail diary_entry.user %>
|
||||
</div>
|
||||
<div class="col">
|
||||
<h2><%= link_to diary_entry.title, diary_entry_path(diary_entry.user, diary_entry) %></h2>
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
<small class='text-muted'>
|
||||
<%= t("diary_entries.diary_entry.posted_by_html", :link_user => (link_to diary_entry.user.display_name, user_path(diary_entry.user)), :created => l(diary_entry.created_at, :format => :blog), :language_link => (link_to diary_entry.language.name, :controller => "diary_entries", :action => "index", :display_name => nil, :language => diary_entry.language_code)) %>
|
||||
<% if (l(diary_entry.updated_at, :format => :blog) != l(diary_entry.created_at, :format => :blog)) %>
|
||||
<%= t("diary_entries.diary_entry.updated_at_html", :updated => l(diary_entry.updated_at, :format => :blog)) %>
|
||||
<% end %>
|
||||
</small>
|
||||
</div>
|
12
app/views/diary_entries/subscribe.html.erb
Normal file
12
app/views/diary_entries/subscribe.html.erb
Normal file
|
@ -0,0 +1,12 @@
|
|||
<% content_for :heading do %>
|
||||
<h1><%= t ".heading", :user => @diary_entry.user.display_name %></h1>
|
||||
<% end %>
|
||||
|
||||
<%= render :partial => "diary_entry_heading", :object => @diary_entry, :as => "diary_entry" %>
|
||||
|
||||
<%= bootstrap_form_tag do |f| %>
|
||||
<% if params[:referer] -%>
|
||||
<%= f.hidden_field :referer, :value => params[:referer] %>
|
||||
<% end -%>
|
||||
<%= f.primary t(".button") %>
|
||||
<% end %>
|
12
app/views/diary_entries/unsubscribe.html.erb
Normal file
12
app/views/diary_entries/unsubscribe.html.erb
Normal file
|
@ -0,0 +1,12 @@
|
|||
<% content_for :heading do %>
|
||||
<h1><%= t ".heading", :user => @diary_entry.user.display_name %></h1>
|
||||
<% end %>
|
||||
|
||||
<%= render :partial => "diary_entry_heading", :object => @diary_entry, :as => "diary_entry" %>
|
||||
|
||||
<%= bootstrap_form_tag do |f| %>
|
||||
<% if params[:referer] -%>
|
||||
<%= f.hidden_field :referer, :value => params[:referer] %>
|
||||
<% end -%>
|
||||
<%= f.primary t(".button") %>
|
||||
<% end %>
|
|
@ -576,6 +576,12 @@ en:
|
|||
comment: Comment
|
||||
newer_comments: "Newer Comments"
|
||||
older_comments: "Older Comments"
|
||||
subscribe:
|
||||
heading: Subscribe to the following diary entry discussion?
|
||||
button: Subscribe to discussion
|
||||
unsubscribe:
|
||||
heading: Unsubscribe from the following diary entry discussion?
|
||||
button: Unsubscribe from discussion
|
||||
doorkeeper:
|
||||
errors:
|
||||
messages:
|
||||
|
|
|
@ -244,8 +244,8 @@ OpenStreetMap::Application.routes.draw do
|
|||
post "/user/:display_name/diary/:id/unhide" => "diary_entries#unhide", :id => /\d+/, :as => :unhide_diary_entry
|
||||
post "/user/:display_name/diary/:id/hidecomment/:comment" => "diary_entries#hidecomment", :id => /\d+/, :comment => /\d+/, :as => :hide_diary_comment
|
||||
post "/user/:display_name/diary/:id/unhidecomment/:comment" => "diary_entries#unhidecomment", :id => /\d+/, :comment => /\d+/, :as => :unhide_diary_comment
|
||||
post "/user/:display_name/diary/:id/subscribe" => "diary_entries#subscribe", :as => :diary_entry_subscribe, :id => /\d+/
|
||||
post "/user/:display_name/diary/:id/unsubscribe" => "diary_entries#unsubscribe", :as => :diary_entry_unsubscribe, :id => /\d+/
|
||||
match "/user/:display_name/diary/:id/subscribe" => "diary_entries#subscribe", :via => [:get, :post], :as => :diary_entry_subscribe, :id => /\d+/
|
||||
match "/user/:display_name/diary/:id/unsubscribe" => "diary_entries#unsubscribe", :via => [:get, :post], :as => :diary_entry_unsubscribe, :id => /\d+/
|
||||
|
||||
# user pages
|
||||
resources :users, :path => "user", :param => :display_name, :only => [:show, :destroy]
|
||||
|
|
|
@ -98,10 +98,18 @@ class DiaryEntriesControllerTest < ActionDispatch::IntegrationTest
|
|||
{ :path => "/user/username/diary/1/unhidecomment/2", :method => :post },
|
||||
{ :controller => "diary_entries", :action => "unhidecomment", :display_name => "username", :id => "1", :comment => "2" }
|
||||
)
|
||||
assert_routing(
|
||||
{ :path => "/user/username/diary/1/subscribe", :method => :get },
|
||||
{ :controller => "diary_entries", :action => "subscribe", :display_name => "username", :id => "1" }
|
||||
)
|
||||
assert_routing(
|
||||
{ :path => "/user/username/diary/1/subscribe", :method => :post },
|
||||
{ :controller => "diary_entries", :action => "subscribe", :display_name => "username", :id => "1" }
|
||||
)
|
||||
assert_routing(
|
||||
{ :path => "/user/username/diary/1/unsubscribe", :method => :get },
|
||||
{ :controller => "diary_entries", :action => "unsubscribe", :display_name => "username", :id => "1" }
|
||||
)
|
||||
assert_routing(
|
||||
{ :path => "/user/username/diary/1/unsubscribe", :method => :post },
|
||||
{ :controller => "diary_entries", :action => "unsubscribe", :display_name => "username", :id => "1" }
|
||||
|
@ -916,6 +924,25 @@ class DiaryEntriesControllerTest < ActionDispatch::IntegrationTest
|
|||
assert_response :not_found
|
||||
end
|
||||
|
||||
def test_subscribe_page
|
||||
user = create(:user)
|
||||
other_user = create(:user)
|
||||
diary_entry = create(:diary_entry, :user => user)
|
||||
path = diary_entry_subscribe_path(:id => diary_entry, :display_name => user.display_name)
|
||||
|
||||
get path
|
||||
assert_response :redirect
|
||||
assert_redirected_to login_path(:referer => path)
|
||||
|
||||
session_for(other_user)
|
||||
get path
|
||||
assert_response :success
|
||||
assert_dom ".content-body" do
|
||||
assert_dom "a[href='#{diary_entry_path(:id => diary_entry, :display_name => user.display_name)}']", :text => diary_entry.title
|
||||
assert_dom "a[href='#{user_path(user)}']", :text => user.display_name
|
||||
end
|
||||
end
|
||||
|
||||
def test_subscribe_success
|
||||
user = create(:user)
|
||||
other_user = create(:user)
|
||||
|
@ -953,6 +980,25 @@ class DiaryEntriesControllerTest < ActionDispatch::IntegrationTest
|
|||
end
|
||||
end
|
||||
|
||||
def test_unsubscribe_page
|
||||
user = create(:user)
|
||||
other_user = create(:user)
|
||||
diary_entry = create(:diary_entry, :user => user)
|
||||
path = diary_entry_unsubscribe_path(:id => diary_entry, :display_name => user.display_name)
|
||||
|
||||
get path
|
||||
assert_response :redirect
|
||||
assert_redirected_to login_path(:referer => path)
|
||||
|
||||
session_for(other_user)
|
||||
get path
|
||||
assert_response :success
|
||||
assert_dom ".content-body" do
|
||||
assert_dom "a[href='#{diary_entry_path(:id => diary_entry, :display_name => user.display_name)}']", :text => diary_entry.title
|
||||
assert_dom "a[href='#{user_path(user)}']", :text => user.display_name
|
||||
end
|
||||
end
|
||||
|
||||
def test_unsubscribe_success
|
||||
user = create(:user)
|
||||
other_user = create(:user)
|
||||
|
|
Loading…
Add table
Reference in a new issue