fix #8131 - chinese translations
[Pman.Core] / DataObjects / Core_notify_sender.php
1 <?php
2 /**
3  * Table Definition for core_notify_sender
4  */
5 class_exists('DB_DataObject') ? '' : require_once 'DB/DataObject.php';
6
7 class Pman_Core_DataObjects_Core_notify_sender extends DB_DataObject 
8 {
9     ###START_AUTOCODE
10     /* the code below is auto generated do not remove the above tag */
11
12     public $__table = 'core_notify_sender';    // table name
13     public $id;                              // int(11)  not_null primary_key auto_increment
14     public $email;
15     public $poolname;
16     public $is_active;
17     public $priority;
18     
19     
20     
21     function emailAddrToSender($from_addr , $notify)
22     {
23         
24         $from = $from_addr->mailbox . '@' . $from_addr->host;
25
26         $ns = DB_DataObject::Factory($this->tableName());
27         $ns->setFrom(array(
28             'email' => $from,
29             'poolname' => $notify->tableName()
30         ));
31         if (!$ns->find(true)) {
32             $ns->is_active = 1;
33             $ns->priority = 1;
34             $ns->insert();
35             return false;
36         }
37         return $ns;
38     }
39     
40     
41     function emailToAddr($email)
42     {
43         require_once 'Mail/RFC822.php';
44         $parser = new Mail_RFC822();
45         $addresses = $parser->parseAddressList( $email['headers']['From'], 'localhost', false);
46         if (is_a($addresses, 'PEAR_Error')) {
47             return false;
48         }
49         return $addresses[0];
50         //print_r($email['headers']['From']);         print_R($from_addr);exit;
51
52       
53     }
54     
55     
56     function filterEmail($email, $notify)
57     {
58         //
59         if (empty($email['headers']['From']) || empty($notify)) {
60             return $email;
61         }
62         $bits = explode('@', $notify->to_email);
63         $to_dom = DB_DataObject::factory('core_domain')->loadOrCreate($bits[1]);
64         
65         $from_addr = $this->emailToAddr($email);
66         
67         $ns = $this->emailAddrToSender($from_addr, $notify);
68         if ($ns == false) {
69             return $email;
70         }
71         // is it blacklisted?
72         $bl = DB_DAtaObject::Factory('core_notify_sender_blacklist');
73         $bl->setFrom(array(
74                 'sender_id'=> $ns->id,
75                 'domain_id' => $to_dom->id
76         ));
77         if (!$bl->count()) {
78             return $email;
79         }
80         // it's blacklisted..
81         // try finding alternative.
82         $bl = DB_DAtaObject::Factory('core_notify_sender_blacklist');
83         $bl->domain_id = $to_dom->id;
84         $bad_ids = $bl->fetchAll('sender_id');
85         
86         $ns = DB_DataObject::Factory($this->tableName());
87         $ns->setFrom(array(
88              'poolname' => $notify->tableName(),
89             'is_active' => 1,
90         ));
91         $ns->whereAddIn('!id', $bad_ids, 'int');
92         if (!$ns->count()){
93             return $email; // no alternative available
94         }
95         $ns->limit(1);
96         $ns->find(true);
97         $email['headers']['From'] = $from_addr->personal . ' <' . $ns->email .'>';
98         
99         return $email;
100         
101         //check blacklist for 
102         
103          
104         
105     }
106     
107     function checkSmtpResponse($email, $notify, $errmsg)
108     {
109         $bl = DB_DataObject::factory('core_notify_sender_blacklist');
110         if (!$bl->messageIsBlacklisted($errmsg)) {
111             return; // ok.
112         }
113         // create a record.
114         
115         $bits = explode('@', $notify->to_email);
116         $to_dom = DB_DataObject::factory('core_domain')->loadOrCreate($bits[1]);
117         
118         
119         
120         $from_addr = $this->emailToAddr($email);
121         $ns = $this->emailAddrToSender($from_addr, $notify);
122       
123         $bl->setFrom(array(
124             'sender_id' => $ns->id,
125             'domain_id' => $to_dom->id,
126         ));
127         if ($bl->count()) {
128             return;
129         }
130         $bl->error_str = $errmsg;
131         $bl->added_dt = $bl->sqlValue('NOW()');
132         $bl->insert();
133         
134     }
135     
136 }