+ $w->generateNotificationsSingle();
+
+ }
+ }
+
+
+ function generateNotificationsSingle()
+ {
+
+
+ $notifytimes = $this->notifyTimes(2);
+ ////print_R($notifytimes);
+
+ $newSearch = DB_DataObject::factory('core_notify');
+ $newSearch->whereAdd( 'act_start > NOW()');
+ $newSearch->recur_id = $this->id;
+ $old = $newSearch->fetchAll('act_start', 'id');
+ // returns array('2012-12-xx'=>12, 'date' => id....)
+
+
+
+ foreach($notifytimes as $time){
+
+ if (isset($old[$time])) {
+ // we already have it...
+
+ $oo = DB_DataObject::Factory('core_notify');
+ $oo->get($old[$time]);
+ $oc = clone($oo);
+ $oo->evtype = $this->method()->name;
+ $oo->update($oc);
+
+ unset($old[$time]);
+ continue;
+ }
+ if (strtotime($time) < time()) {
+ // will not get deleted..
+ //echo "SKIP BEFORE NOW";
+ unset($old[$time]);
+ continue;
+ }
+ // do not have a notify event... creat it..
+ $add = DB_DataObject::factory('core_notify');
+ $add->setFrom(array(
+ "recur_id" => $this->id,
+ "act_start" => $time,
+ "act_when" => $time,
+ "person_id" => $this->person_id,
+ "onid" => $this->onid,
+ "ontable" => $this->ontable,
+ 'evtype' => $this->method()->name,
+ ));
+ $add->insert();
+ }
+ foreach($old as $date => $id ) {
+ $del = DB_DataObject::factory('core_notify');
+ $del->get($id);
+ $del->delete();
+ }
+ //echo("UPDATED");
+
+ }
+
+ function onUpdate($old, $request,$roo)
+ {
+ $this->generateNotificationsSingle();
+
+ }
+ function onInsert($request,$roo)
+ {
+ $this->generateNotificationsSingle();
+
+ }
+ function beforeDelete($dependants_array, $roo)
+ {
+ $n = DB_DataObject::Factory("core_notify");
+ $n->recur_id = $this->id;
+ $n->whereAdd('act_start > NOW() OR act_when > NOW()');
+ // should delete old events that have not occurred...
+ $n->delete(DB_DATAOBJECT_WHEREADD_ONLY);
+ }
+
+ function toRooSingleArray($authUser, $request)
+ {
+ $ret = $this->toArray();
+
+ if(!empty($ret['keyword_filters'])){
+ $keywords = array_unique(array_filter(explode(',', $ret['keyword_filters'])));
+
+ $clipping_keywords = DB_DataObject::factory('clipping_keywords');
+ $clipping_keywords->whereAddIn('id', $keywords, 'int');