summaryrefslogtreecommitdiff
path: root/app/controllers/trigger_controller.rb
blob: c49e0b981fae217f1e84feb6b1106d0bb3a8e53b (plain)
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
class TriggerController < ApplicationController
  TIFF_FUFFIX = ".tiff"
  PDF_SUFFIX = ".pdf"
  TMP_DIR = "/tmp/"

  def voicemail
    if !params[:sip_account_id].blank?
      sip_account = SipAccount.where(:id => params[:sip_account_id].to_i).first
      if sip_account
        sip_account.voicemail_messages.where(:notification => nil).each do |message|
          message.notification = false
          message.save
          if !File.exists?( message.file_path )
            next
          end

          user = sip_account.sip_accountable
          if user.class != User
            next
          end

          if  user.email.blank?
            next
          end

          voicemail_settings = sip_account.voicemail_setting
          if !voicemail_settings
            voicemail_settings = VoicemailSetting.new(:notify => user.send_voicemail_as_email_attachment, :attachment => user.send_voicemail_as_email_attachment, :mark_read => user.send_voicemail_as_email_attachment)
          end

          message.notification = voicemail_settings.notify
          if voicemail_settings.notify
            if Notifications.new_voicemail(message, voicemail_settings.attachment).deliver
              if voicemail_settings.purge
                message.delete
                next
              end
              message.save
              if voicemail_settings.mark_read
                message.mark_read
              end
            end
          else
            message.save
          end
        end

        render(
          :status => 200,
          :layout => false,
          :content_type => 'text/plain',
          :text => "<!-- OK -->",
        )
      else
        render(
          :status => 404,
          :layout => false,
          :content_type => 'text/plain',
          :text => "<!-- Account not found -->",
        )
      end
    end
  end

  def fax
    if !params[:fax_account_id].blank?
      fax_account = FaxAccount.where(:id => params[:fax_account_id].to_i).first
      if fax_account
        fax_account.fax_documents.where(:state => 'received').each do |fax_document|

          tiff_file = File.basename(fax_document.tiff.to_s)

          if !File.exists?( "#{TMP_DIR}#{tiff_file}" ) 
            fax_document.state = 'unsuccessful'
            fax_document.save
            next
          end

          paper_size = "letter"
          pdf_file = "#{TMP_DIR}#{File.basename(tiff_file, TIFF_FUFFIX)}#{PDF_SUFFIX}"

          system "tiff2pdf \\
            -o \"#{pdf_file}\" \\
            -p #{paper_size} \\
            -a \"#{fax_document.remote_station_id}\" \\
            -c \"AMOOMA Gemeinschaft version #{GsParameter.get('GEMEINSCHAFT_VERSION')}\" \\
            -t \"#{fax_document.remote_station_id}\" \"#{TMP_DIR}#{tiff_file}\""

          if !File.exists?( pdf_file ) 
            fax_document.state = 'unsuccessful'
            fax_document.save
            next
          end

          fax_document.document = File.open(pdf_file)
          fax_document.state = 'successful'
          
          if fax_document.save
            Notifications.new_fax(fax_document).deliver
            File.delete("#{TMP_DIR}#{tiff_file}");
            File.delete(pdf_file);
            fax_document.tiff = nil
            fax_document.save
          else
            fax_document.state = 'unsuccessful'
            fax_document.save
          end
        end

        render(
          :status => 200,
          :layout => false,
          :content_type => 'text/plain',
          :text => "<!-- OK -->",
        )
      else
        render(
          :status => 404,
          :layout => false,
          :content_type => 'text/plain',
          :text => "<!-- Account not found -->",
        )
      end
    end
  end
end