/**
* Generate a notify event based on watches (matching whereAdd)
*
- * Usage: $core_watch->notify('mtrack_repos', 1, '1=1')
+ * Usage: $core_watch->notify('mtrack_repos', 1, false, date()
*/
- function notify($ontable , $onid, $whereAdd = false)
+ function notify($ontable , $onid, $whereAdd = false, $when=false)
{
$w = DB_DataObject::factory('core_watch');
if ($whereAdd !== false) {
$w->whereAdd($whereAdd );
}
- $w->selectAdd();
- $w->selectAdd('distinct(person_id) as person_id');
- $people = $w->fetchAll('person_id');
+ //$w->selectAdd();
+ //$w->selectAdd('distinct(person_id) as 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 = $w->person_id;
+
+ $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") );
- $n->insert();
-
-
- }
-
+ $nn->act_start( date("Y-m-d H:i:s", $when !== false ? strtotime($when) : time()) );
+ $nn->insert();
+ }
}
// static really...
+ /**
+ *
+ * This get's called by roo->jok()
+ *
+ *
+ * it's basic usage is to fill in core_notify after an event has happend.
+ *
+ * We can also use it to notify other modules if something has happend.
+ * = eg. mtrack_ticket * watch will notify mtrack_jira::
+ *
+ * in that example:
+ * ublic $ontable; // string(128) not_null
+ public $onid; // int(11) not_null
+ public $person_id; // int(11) not_null
+ public $event; // string(128) not_null
+ public $medium; // string(128) not_null
+ public $active; // int(11) not_null
+
+ */
+
function notifyEvent($event)
{
//DB_DataObject::DebugLevel(1);
foreach($watches as $watch) {
if (!$watch->person_id) { // no people??? bugs in watch table
+ $dom = explode(':',$watch->event);
+ if (count($dom) != 2) {
+ continue;
+ }
+ $do = DB_DataObject::factory($dom[0]);
+ if (!method_exists($do,$dom[1])) {
+ continue;
+ }
+ $do->{$dom[1]}($event);
+
continue;
}