* 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
85 lines
2.1 KiB
Ruby
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
|