1
2
3
4
5
6
7
8
9
10
11
12
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
class FaxDocument < ActiveRecord::Base
# attr_accessible :inbound, :transmission_time, :sent_at, :document_total_pages, :document_transferred_pages, :ecm_requested, :ecm_used, :image_resolution, :image_size, :local_station_id, :result_code, :result_text, :remote_station_id, :success, :transfer_rate, :t38_gateway_format, :t38_peer, :document
mount_uploader :document, DocumentUploader
mount_uploader :tiff, TiffUploader
validates_presence_of :document
validates_numericality_of :retry_counter, :only_integer => true, :greater_than_or_equal_to => 0
belongs_to :fax_account
belongs_to :fax_resolution
validates_presence_of :fax_resolution_id
validates_presence_of :fax_resolution
has_one :destination_phone_number, :class_name => 'PhoneNumber', :as => :phone_numberable, :dependent => :destroy
accepts_nested_attributes_for :destination_phone_number
has_many :fax_thumbnails, :order => :position, :dependent => :destroy
after_create :render_thumbnails
after_create :convert_pdf_to_tiff
# Scopes
scope :inbound, where(:state => 'inbound')
scope :outbound, where(:state => ['queued_for_sending','sending','successful','unsuccessful'])
# State Machine stuff
state_machine :initial => :new do
event :queue_for_sending do
transition [:new] => :queued_for_sending
end
event :send_now do
transition [:queued_for_sending] => :sending
end
event :cancel do
transition [:sending, :queued_for_sending] => :unsuccessful
end
event :successful_sent do
transition [:sending, :queued_for_sending] => :successful
end
event :mark_as_inbound do
transition [:new] => :inbound
end
end
def render_thumbnails
directory = "/tmp/GS-#{GsParameter.get('GEMEINSCHAFT_VERSION')}/fax_thumbnails/#{self.id}"
system('mkdir -p ' + directory)
system("cd #{directory} && convert #{Rails.root.to_s}/public#{self.document.to_s}[0-100] -colorspace Gray PNG:'fax_page.png'")
number_of_thumbnails = Dir["#{directory}/fax_page-*.png"].count
(0..(number_of_thumbnails-1)).each do |i|
fax_thumbnail = self.fax_thumbnails.build
fax_thumbnail.thumbnail = File.open("#{directory}/fax_page-#{i}.png")
fax_thumbnail.save!
end
system("rm -rf #{directory}")
self.update_attributes(:document_total_pages => number_of_thumbnails) if self.document_total_pages.nil?
end
private
def convert_pdf_to_tiff
page_size_a4 = '595 842'
page_size_command = "<< /Policies << /PageSize 3 >> /InputAttributes currentpagedevice /InputAttributes get dup { pop 1 index exch undef } forall dup 0 << /PageSize [ #{page_size_a4} ] >> put >> setpagedevice"
directory = "/tmp/GS-#{GsParameter.get('GEMEINSCHAFT_VERSION')}/faxes/#{self.id}"
system('mkdir -p ' + directory)
tiff_file_name = File.basename(self.document.to_s.downcase, ".pdf") + '.tiff'
system "cd #{directory} && gs -q -r#{self.fax_resolution.resolution_value} -dNOPAUSE -dBATCH -dSAFER -sDEVICE=tiffg3 -sOutputFile=\"#{tiff_file_name}\" -c \"#{page_size_command}\" -- \"#{Rails.root.to_s}/public#{self.document.to_s}\""
self.tiff = File.open("#{directory}/#{tiff_file_name}")
self.save
system("rm -rf #{directory}")
end
end
|