* code for task#1066.

This commit is contained in:
zhujinyong
2013-01-06 08:12:41 +00:00
parent 0c1b21dd4d
commit b6da64af0e
13 changed files with 376 additions and 322 deletions
+12 -285
View File
@@ -13,8 +13,6 @@
<?php
class todoModel extends model
{
const DAY_IN_FUTURE = 20300101;
/**
* Create a todo.
*
@@ -233,40 +231,41 @@ class todoModel extends model
*/
public function getList($date = 'today', $account = '', $status = 'all', $limit = 0, $pager = null, $orderBy="date, status, begin")
{
$this->loadModel('date');
$todos = array();
if($date == 'today')
{
$begin = $this->today();
$begin = $this->date->today();
$end = $begin;
}
elseif($date == 'yesterday')
{
$begin = $this->yesterday();
$begin = $this->date->yesterday();
$end = $begin;
}
elseif($date == 'thisweek')
{
extract($this->getThisWeek());
extract($this->date->getThisWeek());
}
elseif($date == 'lastweek')
{
extract($this->getLastWeek());
extract($this->date->getLastWeek());
}
elseif($date == 'thismonth')
{
extract($this->getThisMonth());
extract($this->date->getThisMonth());
}
elseif($date == 'lastmonth')
{
extract($this->getLastMonth());
extract($this->date->getLastMonth());
}
elseif($date == 'thisseason')
{
extract($this->getThisSeason());
extract($this->date->getThisSeason());
}
elseif($date == 'thisyear')
{
extract($this->getThisYear());
extract($this->date->getThisYear());
}
elseif($date == 'future')
{
@@ -281,7 +280,7 @@ class todoModel extends model
elseif($date == 'before')
{
$begin = '1970-01-01';
$end = $this->yesterday();
$end = $this->date->yesterday();
}
else
{
@@ -310,8 +309,8 @@ class todoModel extends model
{
if($todo->type == 'task') $todo->name = $this->dao->findById($todo->idvalue)->from(TABLE_TASK)->fetch('name');
if($todo->type == 'bug') $todo->name = $this->dao->findById($todo->idvalue)->from(TABLE_BUG)->fetch('title');
$todo->begin = $this->formatTime($todo->begin);
$todo->end = $this->formatTime($todo->end);
$todo->begin = $this->date->formatTime($todo->begin);
$todo->end = $this->date->formatTime($todo->end);
/* If is private, change the title to private. */
if($todo->private and $this->app->user->account != $todo->account) $todo->name = $this->lang->todo->thisIsPrivate;
@@ -319,278 +318,6 @@ class todoModel extends model
}
return $todos;
}
/**
* Build date list, for selection use.
*
* @param int $before
* @param int $after
* @access public
* @return void
*/
public function buildDateList($before = 7, $after = 7)
{
$today = strtotime($this->today());
$delta = 60 * 60 * 24;
$dates = array();
$weekList = range(1, 7);
$weekDateList = explode(',', $this->lang->todo->weekDateList);
for($i = -1 * $before; $i <= $after; $i ++)
{
$time = $today + $i * $delta;
$label = date(DT_DATE1, $time);
if($i == 0)
{
$label .= " ({$this->lang->todo->today})";
}
else
{
if($this->cookie->lang == 'zh-cn' or $this->cookie->lang == 'zh-tw')
{
$label .= str_replace($weekList, $weekDateList, date(" ({$this->lang->todo->week}N)", $time));
}
else
{
$label .= date($this->lang->todo->week, $time);
}
}
$date = date(DT_DATE2, $time);
$dates[$date] = $label;
}
$dates[self::DAY_IN_FUTURE] = $this->lang->todo->dayInFuture;
return $dates;
}
/**
* Build hour time list.
*
* @param int $begin
* @param int $end
* @param int $delta
* @access public
* @return array
*/
public function buildTimeList($begin, $end, $delta)
{
$times = array();
for($hour = $begin; $hour <= $end; $hour ++)
{
for($minutes = 0; $minutes < 60; $minutes += $delta)
{
$time = sprintf('%02d%02d', $hour, $minutes);
$label = sprintf('%02d:%02d', $hour, $minutes);
$times[$time] = $label;
}
}
return $times;
}
/**
* Get today.
*
* @access public
* @return date
*/
public function today()
{
return date(DT_DATE2, time());
}
/**
* Get yesterday
*
* @access public
* @return date
*/
public function yesterday()
{
return date(DT_DATE1, strtotime('yesterday'));
}
/**
* Get tomorrow.
*
* @access public
* @return date
*/
public function tomorrow()
{
return date(DT_DATE1, strtotime('tomorrow'));
}
/**
* Get the day before yesterday.
*
* @access public
* @return date
*/
public function twoDaysAgo()
{
return date(DT_DATE1, strtotime('-2 days'));
}
/**
* Get now time period.
*
* @param int $delta
* @access public
* @return string the current time period, like 0915
*/
public function now($delta = 10)
{
$range = range($delta, 60 - $delta, $delta);
$hour = date('H', time());
$minute = date('i', time());
if($minute > 60 - $delta)
{
$hour += 1;
$minute = 00;
}
else
{
for($i = 0; $i < $delta; $i ++)
{
if(in_array($minute + $i, $range))
{
$minute = $minute + $i;
break;
}
}
}
return sprintf('%02d%02d', $hour, $minute);
}
/**
* Format time 0915 to 09:15
*
* @param string $time
* @access public
* @return string
*/
public function formatTime($time)
{
if(strlen($time) != 4 or $time == '2400') return '';
return substr($time, 0, 2) . ':' . substr($time, 2, 2);
}
/**
* Get the begin and end date of this week.
*
* @access public
* @return array
*/
public function getThisWeek()
{
$baseTime = $this->getMiddleOfThisWeek();
$begin = date(DT_DATE1, strtotime('last monday', $baseTime)) . ' 00:00:00';
$end = date(DT_DATE1, strtotime('next sunday', $baseTime)) . ' 23:59:59';
return array('begin' => $begin, 'end' => $end);
}
/**
* Get the begin and end date of last week.
*
* @access public
* @return array
*/
public function getLastWeek()
{
$baseTime = $this->getMiddleOfLastWeek();
$begin = date(DT_DATE1, strtotime('last monday', $baseTime)) . ' 00:00:00';
$end = date(DT_DATE1, strtotime('next sunday', $baseTime)) . ' 23:59:59';
return array('begin' => $begin, 'end' => $end);
}
/**
* Get the time at the middle of this week.
*
* If today in week is 1, move it one day in future. Else is 7, move it back one day. To keep the time geted in this week.
*
* @access public
* @return time
*/
public function getMiddleOfThisWeek()
{
$baseTime = time();
$weekDay = date('N');
if($weekDay == 1) $baseTime = time() + 86400;
if($weekDay == 7) $baseTime = time() - 86400;
return $baseTime;
}
/**
* Get middle of last week
*
* @access public
* @return time
*/
public function getMiddleOfLastWeek()
{
$baseTime = time();
$weekDay = date('N');
$baseTime = time() - 86400 * 7;
if($weekDay == 1) $baseTime = time() - 86400 * 4; // Make sure is last thursday.
if($weekDay == 7) $baseTime = time() - 86400 * 10; // Make sure is last thursday.
return $baseTime;
}
/**
* Get this month begin and end time
*
* @access public
* @return array
*/
public function getThisMonth()
{
$begin = date('Y-m') . '-01 00:00:00';
$end = date('Y-m', strtotime('next month')) . '-00 23:59:59';
return array('begin' => $begin, 'end' => $end);
}
/**
* Get last month begin and end time
*
* @access public
* @return array
*/
public function getLastMonth()
{
$begin = date('Y-m', strtotime('last month')) . '-01 00:00:00';
$end = date('Y-m', strtotime('this month')) . '-00 23:59:59';
return array('begin' => $begin, 'end' => $end);
}
public function getThisSeason()
{
$year = date("Y-");
$month = date("n");
if($month % 3)
{
$seasonBegin = $month - ($month % 3) + 1;
$seasonEnd = $seasonBegin + 3;
}
else
{
$seasonEnd = $month + 1;
$seasonBegin = $seasonEnd - 3;
}
if(strlen($seasonBegin) == 1) $seasonBegin = "0$seasonBegin";
if(strlen($seasonEnd) == 1) $seasonEnd = "0$seasonEnd";
$begin = $year . $seasonBegin;
$end = $year . $seasonEnd;
return array('begin' => $begin, 'end' => $end);
}
public function getThisYear()
{
$begin = date(DT_DATE1, strtotime('1/1 this year'));
$end = date(DT_DATE1, strtotime('1/1 next year -1 day'));
return array('begin' => $begin, 'end' => $end);
}
}