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;
}
while($w->fetch()){
$notifytimes = $w->notifyTimes(2);
- var_dump($notifytimes);
- }
- foreach($notifytimes as $newTimes){
$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....)
- $newSearch->whereAdd("act_start == $newTimes");
- $newSearch->delete(DB_DATAOBJECT_WHEREADD_ONLY);
+
+ 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();
+ }
}
}