class EpisodesController < ApplicationController session :off, :only => [:index, :show, :home] before_filter :login_required, :except => [:index, :show, :home] before_filter :load_episode_lists caches_page :index, :show, :home cache_sweeper :episode_sweeper, :only => [:create, :update, :destroy] after_filter :cache_index, :only => [:home] # GET /episodes # GET /episodes.xml def index @episodes = @program.episodes respond_to do |format| format.html # index.rhtml format.xml { render :xml => @program.to_rss('mp3') } # format.yaml { render :xml => @episodes.to_yaml } end end # GET /episodes/1 # GET /episodes/1.xml def show @episode = Episode.find_by_permalink(params[:id]) respond_to do |format| format.html format.xml { render :xml => @episode.to_xml } end end # GET /episodes/new def new @episode = Episode.new end # POST /episodes # POST /episodes.xml def create @episode = Episode.new(params[:episode]) @episode.program_id = params[:program_id] respond_to do |format| if @episode.save flash[:notice] = 'Episode was successfully created.' format.html { redirect_to program_url(@episode.program_id) } format.xml do headers["Location"] = episode_url(@episode.program_id, @episode) render :nothing => true, :status => "201 Created" end else format.html { render :action => "new" } format.xml { render :xml => @episode.errors.to_xml } end end end # GET /episodes/1;edit def edit @episode = Episode.find_by_permalink(params[:id]) end # PUT /episodes/1 # PUT /episodes/1.xml def update @episode = Episode.find_by_permalink(params[:id]) respond_to do |format| if @episode.update_attributes(params[:episode]) format.html { redirect_to program_url(@episode.program_id) } format.xml { render :nothing => true } else format.html { render :action => "edit" } format.xml { render :xml => @episode.errors.to_xml } end end end # DELETE /episodes/1 # DELETE /episodes/1.xml def destroy @episode = Episode.find_by_permalink(params[:id]) @episode.destroy respond_to do |format| format.html { redirect_to program_url(params[:program_id]) } format.js # Execute destroy.rjs format.xml { render :nothing => true } end end ### Non-CRUD Actions ## # Show the most recent episode. def home if @episode = @program.episodes.first render :action => 'show' else redirect_to programs_url # No data...send to page where some can be made end end protected def cache_index if (params[:program_id].to_i == 1) && (ActionController::Base.perform_caching) FileUtils.cp File.join(RAILS_ROOT, 'public', 'programs', '1', 'episodes;home.html'), File.join(RAILS_ROOT, 'public', 'index.html') end end end