Skip to content
Extraits de code Groupes Projets
events_controller.rb 3,51 ko
Newer Older
class EventsController < InheritedResources::Base
  before_action :set_event, only: [:show, :edit, :update, :cancel, :destroy]
  before_action :check_secret, only: [:edit, :update, :cancel, :destroy]
  before_filter :set_mailer_host
  def index
    @events = Event
    if (params[:region] && params[:region].present? && params[:region] != 'all')
      @events = @events.region(params[:region])
    end
echarp's avatar
echarp a validé
    @events = @events.tag(params[:tag]) if (params[:tag])
echarp's avatar
echarp a validé
    respond_to do |format|
      format.html {
        if (params[:year] and !params[:month])
          # Whole year calendar
          @events = @events.year params[:year]
echarp's avatar
echarp a validé
        else
          @events = @events.month(params[:year] || Date.today.year, params[:month] || Date.today.month)
echarp's avatar
echarp a validé
        end
      }

      format.rss {
        @events = @events.future_30.includes(:related_city)
echarp's avatar
echarp a validé
        @events = @events.limit params[:daylimit] if params[:daylimit]
echarp's avatar
echarp a validé
      }

      format.ics {
        @events = @events.where('start_time > ?', 360.days.ago).order :id
      }
  # POST /events
  # POST /events.json
  def create
    @event = Event.new(event_params)
    # This is a special case, required to handle the region attribute with same foreign key name
    @event.region = Region.find(params[:event][:region])

echarp's avatar
echarp a validé
      @event.valid?
      return
    end

    respond_to do |format|
      if @event.save
        # Send an event creation mail to its author
        EventMailer.create(@event).deliver

        format.html { redirect_to @event, notice: 'Event was successfully created.' }
        format.json { render action: 'show', status: :created, location: @event }
      else
        format.html { render action: 'new' }
        format.json { render json: @event.errors, status: :unprocessable_entity }
      end
    end
  end

  # PATCH/PUT /events/1
  # PATCH/PUT /events/1.json
  def update
    # This is a special case, required to handle the region attribute with same foreign key name
    @event.region = Region.find(params[:event][:region])

echarp's avatar
echarp a validé
    if params[:visu]
      @event.attributes = event_params
echarp's avatar
echarp a validé
      @event.valid?
echarp's avatar
echarp a validé
      return
    end

    respond_to do |format|
      if @event.update(event_params)
        format.html { redirect_to @event, notice: 'Event was successfully updated.' }
        format.json { head :no_content }
      else
        format.html { render action: 'edit' }
        format.json { render json: @event.errors, status: :unprocessable_entity }
      end
    end
  end

  private
    def permitted_params
      params.permit event: [:title, :start_time, :end_time, :description, :city, :locality, :url, :contact, :submitter, :tags]
    end

    # Use callbacks to share common setup or constraints between actions.
    def set_event
      if (params[:secret].present?)
        @event = Event.unscoped.where(secret: params[:secret]).find(params[:id])
      else
        @event = Event.find(params[:id])
      end
    end

    # Never trust parameters from the scary internet, only allow the white list through.
    def event_params
echarp's avatar
echarp a validé
      params.require(:event)
        .permit :title, :start_time, :end_time, :description, :city, :locality, :url, :contact, :submitter, :tags

    def check_secret
      if (params[:secret] != @event.secret)
        redirect_to @event, notice: t(:forbidden, scope: [:events, :edit])
      end
    end

    # Useful to manage absolute url in mails
    def set_mailer_host
      ActionMailer::Base.default_url_options[:host] = request.host_with_port
    end