-
-
Notifications
You must be signed in to change notification settings - Fork 220
/
venues_controller.rb
165 lines (136 loc) · 4.26 KB
/
venues_controller.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
require "calagator/duplicate_checking/controller_actions"
module Calagator
class VenuesController < Calagator::ApplicationController
# Provides #duplicates and #squash_many_duplicates
include DuplicateChecking::ControllerActions
require_admin only: [:duplicates, :squash_many_duplicates]
# GET /venues
def index
@search = Venue::Search.new(params.permit!)
@venues = @search.venues
flash[:failure] = @search.failure_message
return redirect_to venues_path if @search.hard_failure?
render_venues @venues
end
def render_venues venues
respond_to do |format|
format.html # index.html.erb
format.kml # index.kml.erb
format.xml { render xml: venues }
format.json { render json: venues, callback: params[:callback] }
format.js { render json: venues, callback: params[:callback] }
end
end
private :render_venues
# GET /autocomplete via AJAX
def autocomplete
@venues = Venue
.non_duplicates
.in_business
.where(["LOWER(title) LIKE ?", "%#{params[:term]}%".downcase])
.order('LOWER(title)')
render json: @venues, callback: params[:callback]
end
# GET /venues/map
def map
@venues = Venue.non_duplicates.in_business
end
# GET /venues/1
before_action :show_all_if_not_found, :ensure_progenitor, only: :show
def show_all_if_not_found
venue
rescue ActiveRecord::RecordNotFound => e
flash[:failure] = e.to_s
redirect_to venues_path
false
end
private :show_all_if_not_found
def ensure_progenitor
return unless venue.duplicate?
redirect_to venue.duplicate_of
false
end
private :ensure_progenitor
def show
render_venue venue
end
def render_venue venue
respond_to do |format|
format.html
format.xml { render xml: venue }
format.json { render json: venue, callback: params[:callback] }
format.ics { render ics: venue.events.order("start_time ASC").non_duplicates }
end
end
private :render_venue
# GET /venues/new
def new
venue
render layout: params[:layout] != "false"
end
# GET /venues/1/edit
def edit
venue
end
# POST /venues, # PUT /venues/1
before_action :prevent_evil_robots, only: [:create, :update]
def prevent_evil_robots
return unless params[:trap_field].present?
flash[:failure] = "<h3>Evil Robot</h3> We didn't save this venue because we think you're an evil robot. If you're really not an evil robot, look at the form instructions more carefully. If this doesn't work please file a bug report and let us know."
render_failure venue
false
end
private :prevent_evil_robots
def create_or_update
venue.attributes = params.permit![:venue] || {}
if venue.save
render_success venue
else
render_failure venue
end
end
alias_method :create, :create_or_update
alias_method :update, :create_or_update
def render_success venue
respond_to do |format|
format.html { redirect_to from_event || venue, flash: { success: "Venue was successfully saved." } }
format.xml { render xml: venue, status: :created, location: venue }
end
end
private :render_success
def render_failure venue
respond_to do |format|
format.html { render action: venue.new_record? ? "new" : "edit" }
format.xml { render xml: venue.errors, status: :unprocessable_entity }
end
end
private :render_failure
def from_event
Event.find_by_id(params[:from_event])
end
private :from_event
# DELETE /venues/1
before_action :prevent_destruction_of_venue_with_events, only: :destroy
def prevent_destruction_of_venue_with_events
return if venue.events.none?
message = "Cannot destroy venue that has associated events, you must reassociate all its events first."
respond_to do |format|
format.html { redirect_to venue, flash: { failure: message } }
format.xml { render xml: message, status: :unprocessable_entity }
end
false
end
private :prevent_destruction_of_venue_with_events
def destroy
venue.destroy
respond_to do |format|
format.html { redirect_to venues_path, flash: { success: %("#{venue.title}" has been deleted) } }
format.xml { head :ok }
end
end
private
def venue
@venue ||= params[:id] ? Venue.find(params[:id]) : Venue.new
end
end
end