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
  def update
    @widget = Widget.load_widget_from_memcache(params[:widget_memcache_id])
    redirect_to :action => 'list' and return unless @widget
    redirect_to :action => 'list' and return unless @widget.editable_by?(current_user)
    handle_attached_picture @widget
    @widget.attributes = params[:widget]
    @widget.save_widget_to_memcache current_user
    if params['Publish.x'.to_sym]
      Widget.transaction do
        if @widget.save
          total_widget_performers = @widget.widget_performers.map{|widget_performer| WidgetPerformer.find_or_create :widget_id => @widget.id, :performer_id => widget_performer.performer_id}
          widget_performer_ids = total_widget_performers.map(&:id)
          WidgetPerformer.delete_all(['widget_id = ? AND id NOT IN (?)', @widget.id, widget_performer_ids.empty? ? [0] : widget_performer_ids]) # Clear out any performers that had been removed from this widget
          total_widget_venues = @widget.widget_venues.map{|widget_venue| WidgetVenue.find_or_create :widget_id => @widget.id, :venue_location_id => widget_venue.venue_location_id}
          widget_venue_ids = total_widget_venues.map(&:id)
          WidgetVenue.delete_all(['widget_id = ? AND id NOT IN (?)', @widget.id, widget_venue_ids.empty? ? [0] : widget_venue_ids]) # Clear out any venue_locations that had been removed from this widget
          redirect_to :action => 'edit', :id => @widget, :published => true
        else
          field_error_message = @widget.errors.full_messages[0]
          flash.now[:notice] = field_error_message
          render :action => 'edit'
        end
      end
    else
      redirect_to :action => 'edit', :widget_memcache_id => @widget.widget_memcache_id
    end
  end