app/controllers/cms_admin/slides_controller.rb
class CmsAdmin::SlidesController < CmsAdmin::BaseController
skip_before_filter :load_fixtures
before_filter :build_slide, :only => [:new, :create]
before_filter :load_slide, :only => [:edit, :update, :destroy]
def index
@slides = @site.slides.order('cms_slides.position')
if params[:ajax]
slides = @slides.images.collect do |slide|
{ :thumb => slide.file.url(:cms_thumb),
:image => slide.file.url }
end
render :json => slides
else
return redirect_to :action => :new if @site.slides.count == 0
end
end
def new
render
end
def create
@slides = []
# Sometimes params[:file] comes in as a single file object
unless params[:file].is_a?(Hash)
uploaded_file = params[:file]
params[:file] = { }
params[:file][:file] = [uploaded_file]
end
file_array = params[:file][:file] || [nil]
label = params[:file][:label]
file_array.each_with_index do |file, i|
file_params = params[:file].merge(:file => file)
# if file_array.size > 1 && file_params[:label].present?
# label = file_params[:label] + " #{i + 1}"
# end
@slide = @site.slides.create!(file_params)
@slides << @slide
end
if params[:ajax]
view = render_to_string(:partial => 'cms_admin/slides/slide', :collection => @slides, :layout => false)
render :json => {:filelink => @slide.file.url, :view => view.gsub("\n", '')}
else
flash[:success] = I18n.t('cms.slides.created')
redirect_to :action => :index
end
rescue ActiveRecord::RecordInvalid
logger.detailed_error($!)
if params[:ajax]
render :nothing => true, :status => :unprocessable_entity
else
flash.now[:error] = I18n.t('cms.slides.creation_failure')
render :action => :new
end
end
def update
@slide.update_attributes!(params[:file])
flash[:success] = I18n.t('cms.slides.updated')
redirect_to :action => :edit, :id => @slide
rescue ActiveRecord::RecordInvalid
logger.detailed_error($!)
flash.now[:error] = I18n.t('cms.slides.update_failure')
render :action => :edit
end
def destroy
@slide.destroy
respond_to do |format|
format.js
format.html do
flash[:success] = I18n.t('cms.slides.deleted')
redirect_to :action => :index
end
end
end
def reorder
(params[:cms_slide] || []).each_with_index do |id, index|
if (cms_slide = Cms::Slide.find_by_id(id))
cms_slide.update_attributes(:position => index)
end
end
render :nothing => true
end
protected
def build_slide
@slide = @site.slides.new
end
def load_slide
@slide = @site.slides.find(params[:id])
rescue ActiveRecord::RecordNotFound
flash[:error] = I18n.t('cms.slides.not_found')
redirect_to :action => :index
end
end