Class: Refinery::Widgets::TemplatePart

Inherits:
Core::BaseModel
  • Object
show all
Defined in:
app/models/refinery/widgets/template_part.rb

Instance Method Summary collapse

Instance Method Details

#sychronize_widgets!(page) ⇒ Object



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
# File 'app/models/refinery/widgets/template_part.rb', line 13

def sychronize_widgets!(page)
  page_part = page.parts.select{|pp| pp.title == self.name }.first
  if page_part
    page_part_ids = page_part.widgets.select{|w| w.widget_id? && w.layout? }.collect{|x| x.widget_id }
    template_part_ids = self.widgets.collect{|x| x.id } 
    missing = template_part_ids - page_part_ids
    missing.each do |w_id|
      page_part.add_ref_widget_for! Widget.find(w_id)
    end
    extras = page_part_ids - template_part_ids
    extras.each do |w_id|
      page_part.widgets.find{|x| x.widget_id == w_id }.destroy
    end
    if page_part.locked?
      unless page_part_ids == template_part_ids
        self.widgets.sort_by(&:position).each do |widget|
          page_part.widgets.find{|w| w.widget_id == widget.id }.update_attribute(:position, widget.position)
        end
      end
    end
    if page_part.locked != self.locked
      page_part.locked = self.locked
      page_part.save!
    end
  end
end