X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=app%2Fmodels%2Fspeech.rb;h=5c5cdcd19a097896ffb6156508e96d6c2f068f03;hb=0aac365f8835eff6469a051b21f9314a337e3f1b;hp=fc1ff5b959d5053ad444d59f460fa4d7e14e5c09;hpb=278f86183f2474b2c4d219b724e76cbe07ed63dc;p=pettanr%2Fpettanr.git diff --git a/app/models/speech.rb b/app/models/speech.rb index fc1ff5b9..5c5cdcd1 100644 --- a/app/models/speech.rb +++ b/app/models/speech.rb @@ -1,3 +1,139 @@ class Speech < ActiveRecord::Base - belongs_to :balloon + belongs_to :speech_balloon + + validates :speech_balloon_id, :numericality => {:allow_blank => true} + validates :x, :presence => true, :numericality => true + validates :y, :presence => true, :numericality => true + validates :width, :presence => true, :numericality => true, :natural_number => true + validates :height, :presence => true, :numericality => true, :natural_number => true + validates :quotes, :length => {:maximum => 15}, :quotes_even => true +# validates :settings, :presence => true + + before_validation :valid_encode + + def valid_encode + ['content', 'quotes', 'settings'].each do |a| + next if attributes[a] == nil + raise Pettanr::BadRequest unless attributes[a].valid_encoding? + end + end + + def supply_default + self.x = 0 + self.y = 0 + self.width = 100 + self.height = 100 + end + + def visible? roles + if MagicNumber['run_mode'] == 0 + return false unless guest_role_check(roles) + else + return false unless reader_role_check(roles) + end + return true if self.speech_balloon.panel.own?(roles) + self.speech_balloon.panel.visible? roles + end + + def get_speech_balloon + self.speech_balloon + end + + def tag_id c = nil + 'panel' + tag_panel_id + tag_element_type + tag_element_id + tag_element_part_type + tag_element_part_id + c.to_s + end + + def field_tag_id f + self.tag_id + f.to_s + end + + def tag_panel_id + self.get_speech_balloon.panel.new_record? ? '0' : self.get_speech_balloon.panel.id.to_s + end + + def tag_element_id + self.get_speech_balloon.new_record? ? '0' : self.get_speech_balloon.id.to_s + end + + def tag_element_type + 'speech_balloon' + end + + def tag_element_part_id + self.new_record? ? '0' : self.id.to_s + end + + def tag_element_part_type + 'speech' + end + + def field_tree f + 'panels-' + self.tag_panel_id + '-speech_balloons_attributes-' + self.tag_element_id + '-speech_attributes-' + f.to_s + end + + def self.default_page_size + 25 + end + + def self.max_page_size + 100 + end + + def self.page prm = nil + page = prm.to_i + page = 1 if page < 1 + page + end + + def self.page_size prm = self.default_page_size + page_size = prm.to_i + page_size = self.max_page_size if page_size > self.max_page_size + page_size = self.default_page_size if page_size < 1 + page_size + end + + def self.list page = 1, page_size = self.default_page_size + opt = {} + opt.merge!(Speech.list_opt) + opt.merge!({:limit => page_size, :offset => (page -1) * page_size}) if page_size > 0 + opt.merge!({:conditions => 'panels.publish > 0', :order => 'speeches.updated_at desc'}) + Speech.find(:all, opt) + end + + def self.list_opt + {:include => {:speech_balloon => {:panel => {:author => {}}, :balloon => {}, :speech_balloon_template => {}} }} + end + + def self.list_json_opt + {:include => {:speech_balloon => {:include => {:panel => {:include => {:author => {} }}, :balloon => {}, :speech_balloon_template => {} }}}} + end + + def self.show cid, au + opt = {} + opt.merge!(Speech.show_opt) + res = Speech.find(cid, opt) + raise ActiveRecord::Forbidden unless res.visible?(au) + res + end + + def self.show_opt + {:include => {:speech_balloon => {:panel => {:author => {}}, :balloon => {}, :speech_balloon_template => {} }}} + end + + def self.show_json_opt + {:include => {:speech_balloon => {:include => {:panel => {:include => {:author => {} }}, :balloon => {}, :speech_balloon_template => {} }}}} + end + + def scenario + ERB::Util.html_escape(self.content) + end + + def plain_scenario + self.content + "\n" + end + + def feed + ERB::Util.html_escape(self.content) + end + end