diff --git a/app/controllers/admin/podcasts_controller.rb b/app/controllers/admin/podcasts_controller.rb
index 2f6769c33..178b33fc8 100644
--- a/app/controllers/admin/podcasts_controller.rb
+++ b/app/controllers/admin/podcasts_controller.rb
@@ -5,7 +5,7 @@ module Admin
authorize_resource(resource)
if resource.save
- Podcasts::GetEpisodesJob.perform_later(podcast_id: resource.id)
+ Podcasts::GetEpisodesJob.perform_later(podcast_id: resource.id) if resource.published
redirect_to(
[namespace, resource],
notice: translate_with_resource("create.success"),
diff --git a/app/controllers/api/v0/podcast_episodes_controller.rb b/app/controllers/api/v0/podcast_episodes_controller.rb
index 4cac03221..8eebb689d 100644
--- a/app/controllers/api/v0/podcast_episodes_controller.rb
+++ b/app/controllers/api/v0/podcast_episodes_controller.rb
@@ -13,7 +13,7 @@ module Api
@page = params[:page]
if params[:username]
- @podcast = Podcast.reachable.find_by!(slug: params[:username])
+ @podcast = Podcast.available.find_by!(slug: params[:username])
@podcast_episodes = @podcast.
podcast_episodes.reachable.order("published_at desc").
page(@page).
diff --git a/app/controllers/podcast_episodes_controller.rb b/app/controllers/podcast_episodes_controller.rb
index 86c3fb1ca..91617dacc 100644
--- a/app/controllers/podcast_episodes_controller.rb
+++ b/app/controllers/podcast_episodes_controller.rb
@@ -4,8 +4,8 @@ class PodcastEpisodesController < ApplicationController
def index
@podcast_index = true
- @podcasts = Podcast.reachable.order("title asc")
- @podcast_episodes = PodcastEpisode.reachable.order("published_at desc").first(20)
+ @podcasts = Podcast.available.order("title asc")
+ @podcast_episodes = PodcastEpisode.available.order("published_at desc").first(20)
if params[:q].blank?
set_surrogate_key_header("podcast_episodes_all " + params[:q].to_s,
@podcast_episodes.map { |e| e["record_key"] })
diff --git a/app/controllers/stories_controller.rb b/app/controllers/stories_controller.rb
index fc31ae9fe..225dd16fe 100644
--- a/app/controllers/stories_controller.rb
+++ b/app/controllers/stories_controller.rb
@@ -23,8 +23,8 @@ class StoriesController < ApplicationController
elsif (@article = Article.find_by(slug: params[:slug])&.decorate)
handle_possible_redirect
else
- @podcast = Podcast.reachable.find_by!(slug: params[:username])
- @episode = PodcastEpisode.reachable.find_by!(slug: params[:slug])
+ @podcast = Podcast.available.find_by!(slug: params[:username])
+ @episode = PodcastEpisode.available.find_by!(slug: params[:slug])
handle_podcast_show
end
end
@@ -64,7 +64,7 @@ class StoriesController < ApplicationController
end
def handle_user_or_organization_or_podcast_or_page_index
- @podcast = Podcast.reachable.find_by(slug: params[:username].downcase)
+ @podcast = Podcast.available.find_by(slug: params[:username].downcase)
@organization = Organization.find_by(slug: params[:username].downcase)
@page = Page.find_by(slug: params[:username].downcase, is_top_level_path: true)
if @podcast
diff --git a/app/dashboards/podcast_dashboard.rb b/app/dashboards/podcast_dashboard.rb
index 382b7de69..303d6127c 100644
--- a/app/dashboards/podcast_dashboard.rb
+++ b/app/dashboards/podcast_dashboard.rb
@@ -24,6 +24,7 @@ class PodcastDashboard < Administrate::BaseDashboard
pattern_image: CarrierwaveField,
slug: Field::String,
reachable: Field::Boolean,
+ published: Field::Boolean,
status_notice: Field::Text,
created_at: Field::DateTime,
updated_at: Field::DateTime
@@ -38,6 +39,7 @@ class PodcastDashboard < Administrate::BaseDashboard
podcast_episodes
id
reachable
+ published
status_notice
title
description
@@ -63,6 +65,7 @@ class PodcastDashboard < Administrate::BaseDashboard
pattern_image
slug
reachable
+ published
created_at
updated_at
].freeze
@@ -87,6 +90,7 @@ class PodcastDashboard < Administrate::BaseDashboard
image
slug
reachable
+ published
].freeze
# Overwrite this method to customize how podcasts are displayed
diff --git a/app/models/podcast.rb b/app/models/podcast.rb
index b040d9149..1b0784311 100644
--- a/app/models/podcast.rb
+++ b/app/models/podcast.rb
@@ -18,6 +18,8 @@ class Podcast < ApplicationRecord
after_save :bust_cache
scope :reachable, -> { where(id: PodcastEpisode.reachable.select(:podcast_id)) }
+ scope :published, -> { where(published: true) }
+ scope :available, -> { reachable.published }
alias_attribute :path, :slug
alias_attribute :profile_image_url, :image_url
diff --git a/app/models/podcast_episode.rb b/app/models/podcast_episode.rb
index a4159e065..cf8e5d673 100644
--- a/app/models/podcast_episode.rb
+++ b/app/models/podcast_episode.rb
@@ -26,6 +26,8 @@ class PodcastEpisode < ApplicationRecord
before_validation :prefix_all_images
scope :reachable, -> { where(reachable: true) }
+ scope :published, -> { joins(:podcast).where(podcasts: { published: true }) }
+ scope :available, -> { reachable.published }
algoliasearch per_environment: true do
attribute :id
diff --git a/app/views/internal/podcasts/index.html.erb b/app/views/internal/podcasts/index.html.erb
index 336e894ea..54f325a9f 100644
--- a/app/views/internal/podcasts/index.html.erb
+++ b/app/views/internal/podcasts/index.html.erb
@@ -14,23 +14,25 @@
<%= paginate @podcasts %>
-