DataObjects/Core_notify.php
[Pman.Core] / DataObjects / Core_notify.php
1 <?php
2 /**
3  *
4  * Table is designed to be used with a mailer to notify or issue
5  * emails (or maybe others later??)
6  *
7  *
8 CREATE TABLE  core_notify  (
9   `id` int(11)  NOT NULL AUTO_INCREMENT,
10   `recur_id` INT(11) NOT NULL;
11   `act_when` DATETIME NOT NULL,
12   `onid` int(11)  NOT NULL DEFAULT 0,
13   `ontable` varchar(128)  NOT NULL DEFAULT '',
14   `person_id` int(11)  NOT NULL DEFAULT 0,
15   `msgid` varchar(128)  NOT NULL  DEFAULT '',
16   `sent` DATETIME  NOT NULL,
17   `event_id` int(11)  NOT NULL DEFAULT 0,
18   PRIMARY KEY (`id`),
19   INDEX `lookup`(`act_when`, `msgid`)
20 );
21 **/
22
23 require_once 'DB/DataObject.php';
24
25 class Pman_Core_DataObjects_Core_notify extends DB_DataObject 
26 {
27     ###START_AUTOCODE
28     /* the code below is auto generated do not remove the above tag */
29
30     public $__table = 'core_notify';                     // table name
31     public $id;                              // int(11)  not_null primary_key auto_increment
32     public $recur_id;                        // int(11) not_null
33     public $act_when;                        // datetime(19)  not_null multiple_key binary
34     public $onid;                            // int(11)  not_null
35     public $ontable;                         // string(128)  not_null
36     public $person_id;                       // int(11)  not_null
37     public $msgid;                           // string(128)  not_null
38     public $sent;                            // datetime(19)  not_null binary
39     public $event_id;                        // int(11)  
40     public $watch_id;                        // int(11)  
41     public $trigger_person_id;                 // int(11)
42     public $trigger_event_id;              // int(11)  
43     public $evtype;                         // event type (or method to call)fall
44     
45     /* the code above is auto generated do not remove the tag below */
46     ###END_AUTOCODE
47     
48     function person($set = false)
49     {
50         if ($set !== false) {
51             $this->person_id = is_object($set) ? $set->id : $set;
52             return;
53         }
54         $c = DB_DataObject::Factory('Person');
55         $c->get($this->person_id);
56         return $c;
57         
58     }
59     function object($set = false)
60     {
61         if ($set !== false) {
62             $this->ontable = $set->tableName();
63             $this->onid = $set->id;
64             return $set;
65         }
66         $c = DB_DataObject::factory($this->ontable);
67         
68         if ($this->onid == 0) {
69             return $c; // empty dataobject.
70         }
71         
72         $c->autoJoin();
73         
74         if ($c->get($this->onid)) {
75             return $c;
76         }
77         return false;
78         
79     }
80     
81     
82     function act_start($set = false)
83     {
84         if ($set === false) {
85             return $this->act_start;
86         }
87         $this->act_when = $set;
88         $this->act_start = $set;
89         return $set;
90     }
91     
92     function event()
93     {
94
95         $c = DB_DataObject::factory('Events');
96         
97         if ($c->get($this->event_id)) {
98             return $c;
99         }
100         return false;
101         
102     }
103     function delivered()
104     {
105         return !empty($this->msgid);
106     }
107     
108     function status() // used by commandline reporting at present..
109     {
110         switch($this->event_id) {
111             case -1:
112                 return 'DELIVERED';   //not valid..
113             case 0:
114                 return 'PENDING';
115             default:
116                 $p ='';
117                 if (strtotime($this->act_when) > time()) {
118                     $p = "RETRY: {$this->act_when} ";
119                 }
120                 return  $p. $this->event()->remarks;
121         }
122         
123     }
124     
125     function applyFilters($q, $au, $roo)
126     {
127         if (isset($q['ontable']) && !in_array($q['ontable'], array('Person', 'Events' . 'core_watch'))) {
128             // this will only work on tables not joined to ours.
129             
130             //DB_DAtaObject::DebugLevel(1);
131             // then we can build a join..
132             $d = DB_DataObject::Factory($q['ontable']);
133             $d->autoJoin();
134             //$this->selectAdd($d->_query['data_select']); -- this will cause the same dataIndex...
135             $this->_join .= "
136                 LEFT JOIN {$d->tableName()} ON {$this->tableName()}.onid = {$d->tableName()}.id
137                 {$d->_join}
138             "; 
139             $this->selectAs($d, 'core_notify_%s');
140         } 
141         if (isset($q['query']['person_id_name']) ) {
142             $this->whereAdd( "join_person_id_id.name LIKE '{$this->escape($q['query']['person_id_name'])}%'");
143              
144         }
145          if (!empty($q['query']['status'])) {
146             switch ($q['query']['status']) {
147                 
148                 case 'SUCCESS';
149                     $this->whereAdd("msg_id  != ''");
150                     break;
151                 case 'FAILED';
152                     $this->whereAdd('event_id > 0 AND act_when <= NOW() ');
153                     
154                     break;
155                 case 'PENDING';
156                     $this->whereAdd('event_id = 0 OR (event_id  > 0 AND act_when > NOW() )');
157                     break;
158                 case 'ALL':
159                 default:
160                     break;
161             }
162         }
163         
164         
165         
166         
167         
168         
169     }
170     
171 }