$nw->insert();
}
-
- function notify($ontable , $onid, $whereAdd)
+ /**
+ * Generate a notify event based on watches (matching whereAdd)
+ *
+ * Usage: $core_watch->notify('mtrack_repos', 1, false, date()
+ */
+ function notify($ontable , $onid, $whereAdd = false, $when=false)
{
$w = DB_DataObject::factory('core_watch');
- $w->whereAdd($whereAdd);
+ if ($whereAdd !== false) {
+ $w->whereAdd($whereAdd );
+ }
$w->selectAdd();
$w->selectAdd('distinct(person_id) as person_id');
- $people = $w->fetchAll('person_id');
- $nn = DB_DataObject::Factory('core_notify');
- $nn->ontable = $ontable;
- $nn->onid = $onid;
- foreach($people as $p) {
- if (!$p) { // no people??? bugs in watch table
+ foreach($w->fetchAll() as $w) {
+ if (!$w->person_id) { // no people??? bugs in watch table
continue;
}
- $n = clone($nn);
- $n->person_id = $p;
- $nf = clone($n);
+
+ $nn = DB_DataObject::Factory('core_notify');
+ $nn->ontable = $ontable;
+ $nn->onid = $onid;
+ $nn->evtype = $w->medium;
+ $nn->person_id = $p;
+
+ $nf = clone($nn);
$nf->whereAdd('sent < act_when');
if ($nf->count()) {
// we have a item in the queue for that waiting to be sent..
continue;
}
- $n->act_start( date("Y-m-d H:i:s") );
+ $nn->act_start( date("Y-m-d H:i:s", $when !== false ? strtotime($when) : time()) );
$n->insert();
-
+
}
}
-
+ // static really...
function notifyEvent($event)
{
+ //DB_DataObject::DebugLevel(1);
// see if there are any watches on events..
-
+ // notify everyone flagged except the person doing it...
+ // this is very basic logic... -
+ // if more intelligence is needed...
+ // then it 'rules' will have to be added by the watched object....
+ // anyway leave that for another day..
+ if (empty($event->action)) {
+ return;
+ }
$w = DB_DataObject::factory('core_watch');
$w->ontable = $event->on_table;
$w->whereAdd('onid = 0 OR onid='. ((int) $event->on_id));
+
$w->event = $event->action;
+ $w->active = 1;
- $w->selectAdd();
- $w->selectAdd('distinct(person_id) as person_id');
- $people = $w->fetchAll('person_id');
+ $w->whereAdd('person_id != '. (int) $event->person_id);
+
+ $watches = $w->fetchAll();
+ $nn = DB_DataObject::Factory('core_notify');
+ $nn->ontable = $event->on_table;
+ $nn->onid = $event->on_id;
+
+ foreach($watches as $watch) {
+ if (!$watch->person_id) { // no people??? bugs in watch table
+ continue;
+ }
+
+ $n = clone($nn);
+ $n->trigger_person_id = $event->person_id;
+ $n->trigger_event_id = $event->id;
+ $n->person_id = $watch->person_id;
+ $n->watch_id = $watch->id;
+
+ // does this watch already have a flag...
+ $nf = clone($n);
+ $nf->whereAdd('sent < act_when');
+ if ($nf->count()) {
+ // we have a item in the queue for that waiting to be sent..
+ continue;
+ }
+
+ $n->act_start( date("Y-m-d H:i:s") );
+ $n->insert();
+
+
+ }