docbrown/app/controllers/podcasts_controller.rb
yheuhtozr c4778d832e
app/controllers & decorators i18n (#16126)
* app/controllers (& decorators) i18n etc

* tidy key names

* update keys

* delete ja.yml

* delete an involved ja.yml

* fix for PR review

* fix for spec

* delete ja.yml
2022-02-03 13:35:56 -05:00

85 lines
2.1 KiB
Ruby

class PodcastsController < ApplicationController
before_action :authenticate_user!
# skip Bullet on create as it currently triggers an error inside the rolify
# method "current_user.add_role()" we have no control of
around_action :skip_bullet, only: %i[create], if: -> { defined?(Bullet) }
IMAGE_KEYS = %w[image pattern_image].freeze
PODCASTS_ALLOWED_PARAMS = %i[
android_url image itunes_url main_color_hex overcast_url pattern_image
slug soundcloud_url twitter_username website_url title feed_url description
].freeze
def new
@podcast = Podcast.new
@podcasts = Podcast.available.order(title: :asc)
@podcast_index = true
end
def create
unless valid_images?
render :new
return
end
@podcast = Podcast.new(podcast_params)
@podcast.creator = current_user
if @podcast.save
current_user.add_role(:podcast_admin, @podcast) if added_by_owner?
flash[:global_notice] = I18n.t("podcasts_controller.podcast_suggested")
redirect_to pod_path
else
@podcasts = Podcast.available.order(title: :asc)
@podcast_index = true
render :new
end
end
private
def added_by_owner?
params[:i_am_owner].to_i == 1
end
def podcast_params
params.require(:podcast).permit(PODCASTS_ALLOWED_PARAMS)
end
def skip_bullet
previous_value = Bullet.enable?
Bullet.enable = false
yield
ensure
Bullet.enable = previous_value
end
def valid_images?
images = podcast_params.slice(*IMAGE_KEYS)
return true if images.blank?
# Create the podcast object to add errors to for the view
@podcast = Podcast.new(podcast_params.except(*IMAGE_KEYS))
@podcast.creator = current_user
return true if valid_image_files_and_names?(images)
@podcasts = Podcast.available.order(title: :asc)
@podcast_index = true
false
end
def valid_image_files_and_names?(images)
images.each do |field, image|
@podcast.errors.add(field, is_not_file_message) unless file?(image)
break if @podcast.errors.any?
@podcast.errors.add(field, filename_too_long_message) if long_filename?(image)
end
@podcast.errors.blank?
end
end