80 lines
2.7 KiB
Ruby
80 lines
2.7 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
# License: AGPL-3.0-or-later WITH Web-Template-Output-Additional-Permission-3.0-or-later
|
|
class EventsController < ApplicationController
|
|
include Controllers::EventHelper
|
|
|
|
helper_method :current_event_editor?
|
|
before_action :authenticate_nonprofit_user!, only: :name_and_id
|
|
before_action :authenticate_event_editor!, only: %i[update soft_delete stats create duplicate]
|
|
|
|
def index
|
|
@nonprofit = current_nonprofit
|
|
end
|
|
|
|
def listings
|
|
render json: QueryEventMetrics.for_listings('nonprofit', current_nonprofit.id, params)
|
|
end
|
|
|
|
def show
|
|
@event = params[:event_slug] ? Event.find_by_slug!(params[:event_slug]) : Event.find_by_id!(params[:id])
|
|
@event_background_image = FetchBackgroundImage.with_model(@event)
|
|
@nonprofit = @event.nonprofit
|
|
if @event.deleted && !current_event_editor?
|
|
redirect_to nonprofit_path(current_nonprofit)
|
|
flash[:notice] = "Sorry, we couldn't find that event"
|
|
return
|
|
end
|
|
@organizer = QueryEventOrganizer.with_event(@event.id)
|
|
end
|
|
|
|
def create
|
|
render_json do
|
|
Time.use_zone(current_nonprofit.timezone || 'UTC') do
|
|
params[:event][:start_datetime] = Chronic.parse(params[:event][:start_datetime]) if params[:event][:start_datetime].present?
|
|
params[:event][:end_datetime] = Chronic.parse(params[:event][:end_datetime]) if params[:event][:end_datetime].present?
|
|
end
|
|
flash[:notice] = 'Your draft event has been created! Well done.'
|
|
ev = current_nonprofit.events.create(params[:event])
|
|
{ url: "/events/#{ev.slug}", event: ev }
|
|
end
|
|
end
|
|
|
|
def update
|
|
Time.use_zone(current_nonprofit.timezone || 'UTC') do
|
|
params[:event][:start_datetime] = Chronic.parse(params[:event][:start_datetime]) if params[:event][:start_datetime].present?
|
|
params[:event][:end_datetime] = Chronic.parse(params[:event][:end_datetime]) if params[:event][:end_datetime].present?
|
|
end
|
|
current_event.update_attributes(params[:event])
|
|
json_saved current_event, 'Successfully updated'
|
|
end
|
|
|
|
# post 'nonprofits/:np_id/events/:event_id/duplicate'
|
|
def duplicate
|
|
render_json { InsertDuplicate.event(current_event.id, current_user.profile.id) }
|
|
end
|
|
|
|
def activities
|
|
render json: QueryTickets.for_event_activities(params[:id])
|
|
end
|
|
|
|
def soft_delete
|
|
current_event.update_attribute(:deleted, params[:delete])
|
|
render json: {}
|
|
end
|
|
|
|
def metrics
|
|
render json: QueryEventMetrics.with_event_ids([current_event.id]).first
|
|
end
|
|
|
|
def stats
|
|
@event = current_event
|
|
@url = Format::Url.concat(root_url, @event.url)
|
|
@event_background_image = FetchBackgroundImage.with_model(@event)
|
|
render layout: 'layouts/embed'
|
|
end
|
|
|
|
def name_and_id
|
|
render json: QueryEvents.name_and_id(current_nonprofit.id)
|
|
end
|
|
end
|