From 2d119ddc47713acfbf52e58e6facb442fe44de65 Mon Sep 17 00:00:00 2001 From: Chris Date: Fri, 25 May 2012 16:30:36 +0800 Subject: [PATCH] sync --- DataObjects/Core_notify_recur.php | 58 +++++++++++++++++++++---------- DataObjects/core.sql | 2 +- 2 files changed, 40 insertions(+), 20 deletions(-) diff --git a/DataObjects/Core_notify_recur.php b/DataObjects/Core_notify_recur.php index 64971db5..ef53994c 100644 --- a/DataObjects/Core_notify_recur.php +++ b/DataObjects/Core_notify_recur.php @@ -12,6 +12,7 @@ class Pman_Core_DataObjects_Core_notify_recur extends DB_DataObject 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 @@ -30,7 +31,6 @@ class Pman_Core_DataObjects_Core_notify_recur extends DB_DataObject public $last_event_id; // int(11) public $method; // string(128) not_null - ###END_AUTOCODE @@ -47,8 +47,8 @@ class Pman_Core_DataObjects_Core_notify_recur extends DB_DataObject 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))); } @@ -66,21 +66,14 @@ class Pman_Core_DataObjects_Core_notify_recur extends DB_DataObject $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; } @@ -92,13 +85,40 @@ class Pman_Core_DataObjects_Core_notify_recur extends DB_DataObject 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(); + } } } diff --git a/DataObjects/core.sql b/DataObjects/core.sql index 58211908..9485bca0 100644 --- a/DataObjects/core.sql +++ b/DataObjects/core.sql @@ -347,7 +347,7 @@ CREATE TABLE core_notify ( PRIMARY KEY (id) ); -ALTER TABLE core_notify ADD COLUMN recur_id INT(11) NOT NULL AFTER `id`; +ALTER TABLE core_notify ADD COLUMN recur_id INT(11) NOT NULL; ALTER TABLE core_notify ADD COLUMN act_when DATETIME ; ALTER TABLE core_notify ADD COLUMN act_start DATETIME ; ALTER TABLE core_notify ADD COLUMN onid int(11) NOT NULL DEFAULT 0; -- 2.39.2