port all widgets
[shapado:shapado.git] / app / models / widgets / widget.rb
1 class Widget
2   include Mongoid::Document
3
4   identity :type => String
5   field :name, :type => String, :required => true
6   field :settings, :type => Hash
7
8   embedded_in :group, :inverse_of => :widgets
9
10   def self.types
11     types = %w[UsersWidget BadgesWidget TopUsersWidget TagCloudWidget PagesWidget]
12     if AppConfig.enable_groups
13       types += %w[GroupsWidget TopGroupsWidget]
14     end
15
16     types
17   end
18
19   def partial_name
20     "widgets/#{self.name}"
21   end
22
23   def up
24     self.move_to("up")
25   end
26
27   def down
28     self.move_to("down")
29   end
30
31   def move_to(pos)
32     pos ||= "up"
33     widgets = group.widgets
34     current_pos = widgets.index(self)
35     if pos == "up"
36       pos = current_pos-1
37     elsif pos == "down"
38       pos = current_pos+1
39     end
40
41     if pos >= widgets.size
42       pos = 0
43     elsif pos < 0
44       pos = widgets.size-1
45     end
46
47     widgets[current_pos], widgets[pos] = widgets[pos], widgets[current_pos]
48     group.widgets = widgets
49     group.save
50   end
51
52   def update_settings(params)
53     ##TODO: check what's going in
54     self.settings = params[:settings]
55   end
56
57   def description
58     @description ||= I18n.t("widgets.#{self.name}.description") if self.name
59   end
60 end
61