Class: Orange::EventResource

Inherits:
ModelResource show all
Defined in:
lib/orange-more/events/resources/event_resource.rb

Constant Summary collapse

ORANGE_EVENTBRITE_KEY =

For integration with Eventbrite. Application key needs user key for full access.

"ODQ5MDMzZWQwOWRl"

Instance Attribute Summary

Attributes inherited from ModelResource

#model_class

Instance Method Summary collapse

Methods inherited from ModelResource

#afterDelete, #afterNew, #afterSave, #beforeDelete, #create, #delete, #do_list_view, #do_view, #edit, #find_one, #index, #list, #new, new, #onDelete, #onNew, #onSave, #save, #show, #table_row, use, #view, #view_opts

Methods inherited from RoutableResource

#routable, #route

Methods inherited from Resource

#afterLoad, call_me, #do_view, #init, #initialize, #options, #orange, #orange_name, #routable, #set_orange, set_orange, #view, #view_opts

Methods included from ClassInheritableAttributes

#cattr_accessor, #cattr_reader, #cattr_writer, eval_in_accessor_module, fetch_value, store_value

Constructor Details

This class inherits a constructor from Orange::Resource

Instance Method Details

#beforeNew(packet, params = {}) ⇒ Object

Todo - eventbrite crashes when date in past



59
60
61
62
# File 'lib/orange-more/events/resources/event_resource.rb', line 59

def beforeNew(packet, params = {})
  eventbrite_synchronize(packet, params)
  true
end

#beforeSave(packet, model, params = {}) ⇒ Object

Todo - eventbrite crashes when date in past



65
66
67
68
# File 'lib/orange-more/events/resources/event_resource.rb', line 65

def beforeSave(packet, model, params = {})
  eventbrite_synchronize(packet, params)
  true
end

#eventbrite_eventsObject



137
138
139
140
141
142
143
144
145
# File 'lib/orange-more/events/resources/event_resource.rb', line 137

def eventbrite_events
  list = []
  begin
    list = eventbrite_user.events
  rescue
    return false
  end
  list
end

#eventbrite_synchronize(packet, params = {}) ⇒ Object



70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/orange-more/events/resources/event_resource.rb', line 70

def eventbrite_synchronize(packet, params = {})
  venue_id = params.delete('orange_venue_id')
  if params['link_to_eventbrite'] != "0" 
    if venue_id == "new"
      v = EventBright::Venue.new(eventbrite_user)
      v.organizer_id = eventbrite_user.organizers.first.id
    else
      v = eventbrite_user.venues.select{|v| v.id == venue_id.to_i }.first
    end
    update_venue(v, params)
    if params['eventbrite_id'] == "new"
      e = EventBright::Event.new(eventbrite_user)
      e.organizer = eventbrite_user.organizers.first
    else
      e = eventbrite_user.events.select{|e| e.id == params['eventbrite_id'].to_i }.first
    end
    params['eventbrite_id'] = update_event(e, params, v)
  else
    params['eventbrite_id'] = nil
  end
  params
end

#eventbrite_userObject



18
19
20
21
22
23
24
25
# File 'lib/orange-more/events/resources/event_resource.rb', line 18

def eventbrite_user
  return false unless options[:eventbrite_key]
  begin
    @eventbrite_user = EventBright::User.new(options[:eventbrite_key]) 
  rescue # If EventBright gem throws error, we're probably having issues connecting
    false
  end
end

#eventbrite_venuesObject



127
128
129
130
131
132
133
134
135
# File 'lib/orange-more/events/resources/event_resource.rb', line 127

def eventbrite_venues
  list = []
  begin
    list = eventbrite_user.venues
  rescue
    return false
  end
  list
end

#find_extras(packet, mode, opts = {}) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/orange-more/events/resources/event_resource.rb', line 27

def find_extras(packet, mode, opts = {})
  extras = {:calendars => OrangeCalendar.all}
  case mode
  when :create, :edit
    ev = eventbrite_venues
    ee = eventbrite_events
    ev_json = {} if ev
    ev.each{|v| ev_json[v.id] = v.attributes.merge(:id => v.id)} if ev
    ee_json = {} if ee
    ee.each{|v| ee_json[v.id] = v.attributes.merge(:id => v.id).reject{|k,v| [:venue, :organizer].include? k}} if ee
    extras.merge!(:eventbrite_venues => ev, :venues_json => ev_json.to_json, 
                  :eventbrite_events => ee, :events_json => ee_json.to_json
                  ) if options[:eventbrite_key]
  
  end
  extras
end

#find_list(packet, mode, opts = {}) ⇒ Object



119
120
121
# File 'lib/orange-more/events/resources/event_resource.rb', line 119

def find_list(packet, mode, opts = {})
  model_class.all(:order => [:starts.desc]) || []
end

#post_to_eventbriteObject



123
124
125
# File 'lib/orange-more/events/resources/event_resource.rb', line 123

def post_to_eventbrite
  
end

#stack_initObject



12
13
14
15
16
# File 'lib/orange-more/events/resources/event_resource.rb', line 12

def stack_init
  orange[:admin, true].add_link("Content", :resource => @my_orange_name, :text => 'Events')
  EventBright.setup(ORANGE_EVENTBRITE_KEY)
  options[:eventbrite_key] = orange.options['eventbrite_key'] || false
end

#synchronize_attendees(packet, params = {}) ⇒ Object



45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/orange-more/events/resources/event_resource.rb', line 45

def synchronize_attendees(packet, params = {})
  no_reroute = params.delete(:no_reroute)
  params = params.with_defaults(:resource_id => packet['route.resource_id'])
  if packet.request.post? && orange.loaded?(:members) && 
    event_orange = model_class.get(params[:resource_id])
    event = eventbrite_user.events.select{|e| e.id.to_s == event_orange.eventbrite_id}.first
    orange[:members, true].add_attendee_group(packet, "Eventbrite Attendee", "#{event.title} - #{event.id}")
    emails = event.attendees.map{|a| a.email}
    orange[:members, true].batch_update_interest_mailchimp(packet, emails, "Eventbrite Attendee", "#{event.title} - #{event.id}")
  end
  packet.reroute(@my_orange_name, :orange, packet['route.resource_id'], 'edit') unless no_reroute
end

#update_event(event, params, venue) ⇒ Object



93
94
95
96
97
98
99
100
101
102
103
104
105
106
# File 'lib/orange-more/events/resources/event_resource.rb', line 93

def update_event(event, params, venue)
  event.venue = venue
  event.title = params["name"]
  event.description = params["description"]
  event.start_date = params["starts_date"] + " " + params["starts_time"]
  event.end_date = params["ends_date"] + " " + params["ends_time"]
  if(event.start_date > event.end_date)
    raise "An event can't end before it starts."
  else
    event.status = "live"
    event.save
  end
  return event.id
end

#update_venue(venue, params) ⇒ Object



108
109
110
111
112
113
114
115
116
117
# File 'lib/orange-more/events/resources/event_resource.rb', line 108

def update_venue(venue, params)
  venue.name = params["location_name"]
  venue.address = params["location_address"]
  venue.address_2 = params["location_address2"]
  venue.city = params["location_city"]
  venue.region = params["location_state"]
  venue.postal_code = params["location_zip"]
  venue.country_code = "US"
  venue.save
end