public $__table = 'core_notify_recur'; // table name
public $id; // int(11) not_null primary_key auto_increment
public $person_id; // int(11) not_null
+ public $recur_id; //INT(11) not_null
public $dtstart; // datetime(19) not_null binary
public $dtend; // datetime(19) not_null binary
public $last_event_id; // int(11)
public $method; // string(128) not_null
-
###END_AUTOCODE
function notifytimesRange($advance) {
- $start = date('Y-m-d H:i:s', max(strtotime("NOW - 24 HOURS"), strtotime($this->dtstart)));
- $end = date('Y-m-d H:i:s', min(strtotime("NOW + $advance DAYS"), strtotime($this->dtend)));
+ $start = date('Y-m-d H:i:s', max(strtotime("NOW"), strtotime($this->dtstart)));
+ $end = date('Y-m-d H:i:s', min(strtotime("NOW + $advance DAYS"), strtotime($this->dtend)));
}
$ret = array();
$hours = array_unique(json_decode($this->freq_hour));
$days = json_decode($this->freq_day);
+
foreach($days as $d){
foreach($hours as $h){
- $ret[] = date('Y-m-d', strtotime($d)) . ' ' . $h;
+ $date = new DateTime(date('Y-m-d', strtotime($d)) . ' ' . $h, new DateTimeZone($this->tz));
+ $date->setTimezone(new DateTimeZone('Asia/Hong_Kong'));
+ $ret[] = $date->format('Y-m-d H:i:s');
}
}
- return $this->applyTimezoneToList($ret);
- }
- function applyTimezoneToList($ar)
- {
- $ret = array();
- foreach($ar as $a) {
- $date = new DateTime($a);
- $date->setTimezone(new DateTimeZone($this->tz));
- $ret[] = $date->format('Y-m-d H:i');
- }
return $ret;
}
function generateNotifications(){
- //$this->notifytimes(2);
- //DB_DataObject::debugLevel(1);
+ //DB_DataObject::debugLevel(1);
$w = DB_DataObject::factory($this->tableName());
- //$this->notifytimes(2);
$w->find();
- //$test = $w->fetchAll();
-
- //$test = $this->notifytimes(2);
- //$test = array();
while($w->fetch()){
+ $notifytimes = $w->notifyTimes(2);
+ $newSearch = DB_DataObject::factory('core_notify');
+ $newSearch->whereAdd( 'act_start > NOW() and act_start < NOW() + INTERVAL 2 DAY');
+ $newSearch->recur_id = $w->id;
+ $old = $newSearch->fetchAll('act_start', 'id');
+ // returns array('2012-12-xx'=>12, 'date' => id....)
- $notifytime = $w->notifyTimes(2);
- var_dump($notifytime);
-// $this->id = $w->id;
-// $this->person_id = $w->person_id;
-// $this->dtstart = $w->dtstart;
-// $this->dtend = $w->dtend;
-// $this->tz = $w->tz;
-// $this->updated_dt = $w->updated_dt;
-// $this->last_applied_dt = $w->last_applied_dt;
-// $this->freq = $w->freq;
-// $this->freq_day = $w->freq_day;
-// $this->freq_hour = $w->freq_hour;
-// $this->onid = $w->onid;
-// $this->ontable = $w->ontable;
-// $this->last_event_id = $w->last_event_id;
-// $this->method = $w->method;
- //$this->dtstart = $w->dtstart;
- //$this->dtend = $w->dtend;
- //$this = clone($w);
- //$w->notifytimes(2);
- //var_dump($w->notifytimes(2));
+
+ foreach($notifytimes as $time){
+ if (strtotime($time) < time()) {
+ continue;
+ }
+ if (isset($old[$time])) {
+ // we already have it...
+ unset($old[$time]);
+ continue;
+ }
+
+ // do not have a notify event... creat it..
+ $add = DB_DataObject::factory('core_notify');
+ $add->setFrom(array(
+ "recur_id" => $w->id,
+ "act_start" => $time,
+ "act_when" => $time,
+ "person_id" => $w->person_id,
+ "onid" => $w->onid,
+ "ontable" => $w->ontable
+ ));
+ $add->insert();
+ }
+ foreach($old as $date => $id ) {
+ $del = DB_DataObject::factory('core_notify');
+ $del->get($id);
+ $del->delete();
+ }
+
}
-// foreach($test as $item){
-// error_log($item);
-// }
-
}
}