OSDN Git Service

t#32471:add profiles
[pettanr/pettanr.git] / vendor / plugins / item / lib / item.rb
1 =begin
2 module ActiveRecord
3   class Base
4     module Item
5       def self.included(base)
6         base.extend(ClassMethods)
7         base.__send__ :include, InstanceMethods
8       end
9       
10       module ClassMethods
11         # class_name
12         # table_name
13         
14         def singular
15         end
16         
17         def plural
18         end
19         
20         def item_name
21         end
22         
23         def path_name
24         end
25         
26         def self.default_page_size
27           25
28         end
29         
30         def self.max_page_size
31           100
32         end
33         
34         def self.page prm = nil
35           page = prm.to_i
36           page = 1 if page < 1
37           page
38         end
39         
40         def self.page_size prm = self.default_page_size
41           page_size = prm.to_i
42           page_size = self.max_page_size if page_size > self.max_page_size
43           page_size = self.default_page_size if page_size < 1
44           page_size
45         end
46         
47         def self.list_where
48           'panels.publish > 0'
49         end
50         
51         def self.list page = 1, page_size = self.default_page_size
52           PanelPicture.where(self.list_where()).includes(PanelPicture.list_opt).order('panel_pictures.updated_at desc').offset((page -1) * page_size).limit(page_size)
53         end
54         
55         def self.list_paginate page = 1, page_size = self.default_page_size
56           Kaminari.paginate_array(Array.new(PanelPicture.where(self.list_where()).includes(PanelPicture.list_opt).count, nil)).page(page).per(page_size)
57         end
58         
59         def self.list_opt
60           {:panel => {:author => {}}, :picture => {:artist => {}, :license => {}} }
61         end
62         
63         def self.list_json_opt
64           {:include => {:panel => {:include => {:author => {}}}, :picture => {:include => {:artist => {}, :license => {}}} }}
65         end
66         
67         def self.show cid, au
68           opt = {}
69           opt.merge!(PanelPicture.show_opt)
70           res = PanelPicture.find(cid, opt)
71           raise ActiveRecord::Forbidden unless res.visible?(au)
72           res
73         end
74         
75         def self.show_opt
76           {:include => {:panel => {:author => {}}, :picture => {:artist => {}, :license => {}}}}
77         end
78         
79         def self.show_json_opt
80           {:include => {:panel => {:include => {:author => {}}}, :picture => {:include => {:artist => {}, :license => {}}} }}
81         end
82         
83       end
84       
85       module InstanceMethods
86         private
87         
88         public
89         
90         def item_name
91         end
92         
93         def item_id 
94           self.new_record? ? '0' : self.id.to_s
95         end
96         
97         def tag_item_id c = nil
98           self.item_name + self.item_id + c.to_s
99         end
100         
101         def tag_item_field_id field_name
102           self.tag_item_id + field_name.to_s
103         end
104         
105         def path_name with_engine = false
106           self.class.path_name(with_engine)
107         end
108         
109         def form_template with_engine = false
110           self.path_name(with_engine) + '/form'
111         end
112         
113         def tag_item_attributes column = nil, opt = {}
114           {
115             :id => self.field_tag_id(column), :panel_id => self.tag_panel_id, 
116             :element_id => self.tag_element_id, :element_type => self.tag_element_type
117           }.merge(opt)
118         end
119         
120         def field_tag_attributes column, no_attr, opt = {}
121           self.tag_attributes(column).merge(
122             {:column => column, :new_index => self.tag_new_index, :no_attr => no_attr}
123           ).merge(opt)
124         end
125         
126         #render element by body
127         def any_tag_attributes name = nil, opt = {}
128           r = self.tag_attributes(name)
129           r.merge!(
130             {:new_index => self.tag_new_index}
131           ) if self.new_index
132           r.merge(opt)
133         end
134         
135         def select_tag_attributes(selected, column, no_attr)
136           [
137             :last, :first, 
138             {:html => {:selected => selected}}, 
139             self.field_tag_attributes(column, no_attr)
140           ]
141         end
142         
143         def tag_attr column = nil, opt = {}
144           self.tag_attributes(column, opt).to_attr
145         end
146         
147         def field_tag_attr column, no_attr, opt = {}
148           self.field_tag_attributes(column, no_attr, opt).to_attr
149         end
150         
151         def any_tag_attr name = nil, opt = {}
152           self.any_tag_attributes(name, opt).to_attr
153         end
154         
155       end
156       
157     end
158     include Item
159   end
160 end
161
162 =end