OSDN Git Service

add: license publisher
[pettanr/pettanr.git] / app / models / sheet_panel.rb
1 class SheetPanel < Peta::Element
2   load_manifest
3   belongs_to :panel
4   belongs_to :sheet
5   accepts_nested_attributes_for :panel, :allow_destroy => true
6   #alias_attribute :attr_y, :y
7   
8   validates :sheet_id, :numericality => {:allow_blank => true}
9   validates :panel_id, :numericality => {:allow_blank => true}
10   validates :x, :presence => true, :numericality => true
11   validates :y, :presence => true, :numericality => true
12   validates :z, :presence => true, :numericality => {:greater_than => 0}
13   validates :t, :presence => true, :numericality => {:greater_than_or_equal_to => 0}
14   
15   def y
16     self.attributes['y']
17   end
18   
19   def supply_default
20     self.x = 15
21     self.y = 15
22     if self.sheet
23       self.t = self.sheet.new_t 
24       self.z = self.sheet.new_z 
25     else
26       self.sheet_id = nil
27       self.panel_id = nil
28       self.z = 1
29       self.t = nil
30     end
31   end
32   
33   def overwrite
34   end
35   
36   def self.by_author_list_includes
37     {
38       :sheet => {
39         :author => {}
40       }
41     }
42   end
43   
44   def self.show_opt
45     {:include => {
46       :sheet => {
47         :author => {}
48       }, 
49       :panel => {
50         :author => {}, 
51         :panel_pictures => {:picture => {:artist => {}, :license => {}}}, 
52         :speech_balloons =>{:balloon => {}, :speech => {}}
53       }
54     }}
55   end
56   
57   def elements
58     self.panel.elements
59   end
60   
61   def sheet_panel_as_json au
62     panel_include = if self.panel and self.panel.visible?(au)
63       {:include => {}, :methods => :elements}
64     else
65       {:include => {}}
66     end
67     self.to_json({:include => {:sheet => {:include => {:author => {}}}, :panel => panel_include}})
68   end
69   
70   def self.list_as_json_text ary, au
71     '[' + ary.map {|i| i.sheet_panel_as_json(au) }.join(',') + ']'
72   end
73   
74   def licensed_pictures
75     if self.panel
76       self.panel.licensed_pictures
77     else
78       {}
79     end
80   end
81   
82   def copyable?
83     if self.panel and self.panel.publish?
84       true
85     else
86       false
87     end
88   end
89   
90   def allow? operators
91     return nil if self.sheet_id == nil or self.panel_id == nil
92     self.sheet.own?(operators) and self.panel.usable?(operators)
93   end
94   
95   def store operators, old_t = nil
96     res = false
97     self.class.transaction do
98       case self.allow? operators
99       when true
100         self.rotate old_t
101       when false
102         raise ActiveRecord::Forbidden
103       else
104       end
105       res = self.save
106       raise ActiveRecord::Rollback unless res
107       res = self.class.validate_t(self.sheet_id) 
108       unless res
109         self.errors.add :t, 'unserialized'
110         raise ActiveRecord::Rollback 
111       end
112     end
113     res
114   end
115   
116 end