DataObjects/Core_watch.php
[Pman.Core] / DataObjects / Core_watch.php
1 <?php
2 /**
3  * Table Definition for core_watch
4  *
5  * works with 'core_notify'
6  *
7  * any object can call
8  *   $watch->notify($ontable, $onid)
9  *
10  *   in which case it should create a core_notify event.
11  *
12  *
13  * 
14  */
15 require_once 'DB/DataObject.php';
16
17 class Pman_Core_DataObjects_Core_watch extends DB_DataObject 
18 {
19     ###START_AUTOCODE
20     /* the code below is auto generated do not remove the above tag */
21
22     public $__table = 'core_watch';                      // table name
23     public $ontable;                         // string(128)  not_null primary_key
24     public $onid;                            // int(11)  not_null primary_key
25     public $person_id;                         // int(11)  not_null primary_key
26     public $event;                           // string(128)  not_null primary_key
27     public $medium;                          // string(128)  not_null primary_key
28     public $active;                          // int(11)  not_null
29
30     
31     /* the code above is auto generated do not remove the tag below */
32     ###END_AUTOCODE
33     /** make sure there is a watch for this user.. */
34     
35     function ensureNotify(  $ontable, $onid, $person_id, $whereAdd)
36     {
37         $w = DB_DataObject::factory('core_watch');
38         $w->ontable = $ontable;
39         $w->onid = $onid;
40         $w->person_id = $person_id;
41         if (empty($w->person_id)) {
42             return;
43         }
44         
45         $nw = clone($w);
46         $w->whereAdd($whereAdd);
47         
48         
49         if ($w->count()) {
50             return;
51         }
52         $nw->medium = 'email';
53         $nw->active = 1;
54         $nw->insert();
55         
56         
57     }
58     
59     function notify($ontable , $onid, $whereAdd)
60     {
61         $w = DB_DataObject::factory('core_watch');
62         $w->whereAdd($whereAdd);
63         $w->selectAdd();
64         $w->selectAdd('distinct(person_id) as person_id');
65         $people = $w->fetchAll('person_id');
66         $nn = DB_DataObject::Factory('core_notify');
67         $nn->ontable = $ontable;
68         $nn->onid = $onid;
69         foreach($people as $p) {
70             if (!$p) { // no people??? bugs in watch table
71                 continue;
72             }
73             $n = clone($nn);
74             $n->person_id = $p;
75             $nf = clone($n);
76             $nf->whereAdd('sent < act_when');
77             if ($nf->count()) {
78                 // we have a item in the queue for that waiting to be sent..
79                 continue;
80             }
81             $n->act_when = date("Y-m-d H:i:s");
82             $n->insert();
83             
84             
85         }
86         
87         
88         
89     }
90     /***
91      * The purpose of this is to gather all the events that have
92      * occured in the system (where watches exist)
93      * Do we want to send the user 1 email ?? or multiple...
94      * --> I guess multiple emails..
95      *
96      * so we need to return
97      *
98      *  array(
99           $USER_ID => array(
100                 $OBJECT:$ID, $OBJECT:$ID, $OBJECT:$ID, .....
101           )
102      * )
103      *
104      * The mailer can then go through and call each object ??
105      *
106      *
107      * -- Things we can watch..
108      *
109      * mtrack_change <- this is a neat log of all events.
110      *  which logs these things
111      *     Individual Ticket changes (already)
112      *     a Project -> which means ticket changes... which again can be discovered via mtrack_changes..
113      *     a Repo for Commits (-- which will be handled by mtrack_changes)
114      *     Wiki changes.. later...
115      *     
116      *
117      *
118      */
119     
120     function watched($medium, $watcher = null)
121     {
122         $w = DB_DataObject::factory('core_watch');
123         if ($watcher) {
124             $w->person_id = $watcher;
125         }
126         $w->active = 1;
127         $w->medium = $medium;
128         $ar = $w->fetchAll();
129         $ret = array();
130         foreach($ar as $o) {
131             if (!isset($ret[$o->person_id])) {
132                 $ret[$o->person_id] = array();
133             }
134             $ret[$o->person_id][] = $o->ontable .':'. $o->onid;
135         }
136         
137         return $ret;
138     }
139 }