diff --git a/app/controllers/admin/articles_controller.rb b/app/controllers/admin/articles_controller.rb index d22cb9826..5e454396e 100644 --- a/app/controllers/admin/articles_controller.rb +++ b/app/controllers/admin/articles_controller.rb @@ -39,15 +39,7 @@ module Admin def update article = Article.find(params[:id]) - article.featured = article_params[:featured].to_s == "true" - article.approved = article_params[:approved].to_s == "true" - article.email_digest_eligible = article_params[:email_digest_eligible].to_s == "true" - article.boosted_additional_articles = article_params[:boosted_additional_articles].to_s == "true" - article.boosted_dev_digest_email = article_params[:boosted_dev_digest_email].to_s == "true" - article.user_id = article_params[:user_id].to_i if article_params[:user_id].present? - article.update(article_params) - article.co_author_ids = article_params[:co_author_ids]&.split(",")&.map(&:strip) - if article.save + if article.update(article_params) flash[:success] = "Article saved!" else flash[:danger] = article.errors_as_sentence @@ -135,8 +127,9 @@ module Admin main_image_background_hex_color featured_number user_id - co_author_ids - last_buffered] + co_author_ids_list + last_buffered + published_at] params.require(:article).permit(allowed_params) end diff --git a/app/models/article.rb b/app/models/article.rb index 3339399d1..fe9658c95 100644 --- a/app/models/article.rb +++ b/app/models/article.rb @@ -379,6 +379,10 @@ class Article < ApplicationRecord spaminess_rating: BlackBox.calculate_spaminess(self)) end + def co_author_ids_list=(list_of_co_author_ids) + self.co_author_ids = list_of_co_author_ids.split(",").map(&:strip) + end + private def search_score diff --git a/app/views/admin/articles/_individual_article.html.erb b/app/views/admin/articles/_individual_article.html.erb index d89130f04..14241a5c6 100644 --- a/app/views/admin/articles/_individual_article.html.erb +++ b/app/views/admin/articles/_individual_article.html.erb @@ -68,7 +68,7 @@ cover image
<% end %> - <%= form_with url: admin_article_path(article.id), local: true do |f| %> + <%= form_with url: admin_article_path(article.id), model: article, local: true do |f| %>
@@ -86,28 +86,35 @@ value="<%= article.user_id %>">
- - Co-Author IDs (comma separated): + ">
+ <% if article.published? %> +
+
+ + <%= f.datetime_select :published_at, required: true, include_blank: true, include_seconds: true, class: "form-control" %> UTC +
+
+ <% end %>
- id="featured-<%= article.id %>"> + <%= f.check_box :featured, id: "featured-#{article.id}" %>
- id="approved-<%= article.id %>"> + <%= f.check_box :approved, id: "approved-#{article.id}" %>
- id="boosted_additional_articles-<%= article.id %>"> + <%= f.check_box :boosted_additional_articles, id: "boosted_additional_articles-#{article.id}" %>
<% unless article.last_buffered %>
- + <%= f.check_box :last_buffered, id: "last_buffered-#{article.id}" %>
<% end %> diff --git a/spec/models/article_spec.rb b/spec/models/article_spec.rb index 994165f64..b5f4adce4 100644 --- a/spec/models/article_spec.rb +++ b/spec/models/article_spec.rb @@ -961,4 +961,13 @@ RSpec.describe Article, type: :model do end end end + + describe "co_author_ids_list=" do + it "correctly sets co author ids from a comma separated list of ids" do + co_author1 = create(:user) + co_author2 = create(:user) + article.co_author_ids_list = "#{co_author1.id}, #{co_author2.id}" + expect(article.co_author_ids).to match_array([co_author1.id, co_author2.id]) + end + end end diff --git a/spec/requests/admin/articles_spec.rb b/spec/requests/admin/articles_spec.rb index 0cc61e289..c4a8fe5fe 100644 --- a/spec/requests/admin/articles_spec.rb +++ b/spec/requests/admin/articles_spec.rb @@ -40,5 +40,17 @@ RSpec.describe "/admin/articles", type: :request do patch "/admin/articles/#{article.id}", params: { article: { featured: true } } end.to change { article.reload.featured }.to(true) end + + it "allows an Admin to update the published at datetime for an article" do + updated_published_at = article.published_at - 5.hours + expect do + patch "/admin/articles/#{article.id}", params: { article: { "published_at(1i)": updated_published_at.year, + "published_at(2i)": updated_published_at.month, + "published_at(3i)": updated_published_at.day, + "published_at(4i)": updated_published_at.hour, + "published_at(5i)": updated_published_at.min, + "published_at(6i)": updated_published_at.sec } } + end.to change { article.reload.published_at }.to(DateTime.parse(updated_published_at.to_s)) + end end end