Fix deleting widgets
[shapado:shapado.git] / app / controllers / widgets_controller.rb
1 class WidgetsController < ApplicationController
2   before_filter :login_required, :except => :embedded
3   before_filter :check_permissions, :except => :embedded
4   layout "manage"
5   tabs :default => :widgets
6
7   subtabs :widgets => [[:mainlist, "mainlist"],
8                        [:question, "question"],
9                        [:external, "external"]]
10
11   # GET /widgets
12   # GET /widgets.json
13   def index
14     @active_subtab ||= "mainlist"
15
16     @widget = Widget.new
17     @widget_list = @group.send(:"#{@active_subtab}_widgets")
18   end
19
20   def edit
21     @widget_list = @group.send(:"#{params[:tab]}_widgets")
22     @widget = @widget_list.send(params[:position]).find(params[:id])
23     respond_to do |format|
24       format.html
25       format.js do
26         render :json => {
27           :html => render_to_string(:partial => "widgets/form",
28                                     :locals => {:widget => @widget,
29                                                :position => params[:position],
30                                                :tab => params[:tab]}),
31           :success => true
32         }
33       end
34     end
35   end
36
37   # POST /widgets
38   # POST /widgets.json
39   def create
40     if Widget.types(params[:tab],current_group.has_custom_ads).include?(params[:widget][:_type])
41       @widget = params[:widget][:_type].constantize.new
42     end
43
44     @widget_list = @group.send(:"#{params[:tab]}_widgets")
45     @widget_list.send(:"#{params[:widget][:position]}") << @widget
46
47     respond_to do |format|
48       if @widget.save
49         sweep_widgets
50         flash[:notice] = I18n.t('widgets.create.notice')
51         format.html { redirect_to widgets_path(:tab => params[:tab], :anchor => @widget.id) }
52         format.json  { render :json => @widget.to_json, :status => :created, :location => widget_path(:id => @widget.id) }
53       else
54         format.html { render :action => "index" }
55         format.json  { render :json => @widget.errors, :status => :unprocessable_entity }
56       end
57     end
58   end
59
60   # PUT /widgets
61   # PUT /widgets.json
62   def update
63     @widget_list = @group.send(:"#{params[:tab]}_widgets")
64
65     @widget = nil
66     if WidgetList::POSITIONS.include? params[:position]
67       @widget = @widget_list.send(params[:position]).find(params[:id])
68       @widget.update_settings(params)
69     end
70
71     respond_to do |format|
72       if @widget.valid? && @widget.save
73         sweep_widgets
74         flash[:notice] = I18n.t('widgets.update.notice')
75         format.html { redirect_to widgets_path(:tab => params[:tab], :anchor => @widget.id) }
76         format.json  { render :json => @widget.to_json, :status => :updated, :location => widget_path(:id => @widget.id) }
77       else
78         format.html { render :action => "index" }
79         format.json  { render :json => @widget.errors, :status => :unprocessable_entity }
80       end
81     end
82   end
83
84
85   # DELETE /ads/1
86   # DELETE /ads/1.json
87   def destroy
88     widget_list = @group.send(:"#{params[:tab]}_widgets")
89
90   if WidgetList::POSITIONS.include? params[:position]
91     @widget = widget_list.send(params[:position]).find(params[:id])
92     @widget.destroy
93
94     sweep_widgets
95   end
96
97     respond_to do |format|
98       format.html { redirect_to(widgets_url) }
99       format.json { head :ok }
100       format.js { render :nothing => true }
101     end
102   end
103
104   def move
105     widget_list = @group.send(:"#{params[:tab]}_widgets")
106
107     if WidgetList::POSITIONS.include? params[:position]
108       widget_list.move_to(params[:move_to], params[:id], params[:position])
109       sweep_widgets
110     end
111
112     redirect_to widgets_path(:tab => params[:tab])
113   end
114
115   def embedded
116     @widget = current_group.external_widgets.sidebar.find(params[:id])
117     render :layout => false
118   end
119
120   private
121   def check_permissions
122     @group = current_group
123
124     if @group.nil?
125       redirect_to groups_path
126     elsif !current_user.owner_of?(@group)
127       flash[:error] = t("global.permission_denied")
128       redirect_to root_path
129     end
130   end
131 end