X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=WEB-INF%2Flib%2FPeriod.class.php;h=0e901a8d6ebf5151e888f84cef3794b0605e926f;hb=75a1eedb8977b8f2db459128bab9aaf367e3b58b;hp=492d864bbd78a680f2f7fe7ebe29affe0c917d82;hpb=993450e17195b87dc406c3135ee22dafe9b825fb;p=timetracker.git diff --git a/WEB-INF/lib/Period.class.php b/WEB-INF/lib/Period.class.php index 492d864b..0e901a8d 100644 --- a/WEB-INF/lib/Period.class.php +++ b/WEB-INF/lib/Period.class.php @@ -33,115 +33,104 @@ define('INTERVAL_THIS_YEAR', 4); define('INTERVAL_ALL_TIME', 5); define('INTERVAL_LAST_WEEK', 6); define('INTERVAL_LAST_MONTH', 7); +define('INTERVAL_LAST_DAY', 8); +/* +// Definitions for refactored code. TODO: uncomment when done. +define('INTERVAL_ALL_TIME', 0); +define('INTERVAL_CURRENT_YEAR', 10); +define('INTERVAL_PREVIOUS_YEAR', 14); +define('INTERVAL_SELECTED_YEAR', 18); +define('INTERVAL_CURRENT_MONTH', 20); +define('INTERVAL_PREVIOUS_MONTH', 24); +define('INTERVAL_SELECTED_MONTH', 28); +define('INTERVAL_CURRENT_WEEK', 30); +define('INTERVAL_PREVIOUS_WEEK', 34); +define('INTERVAL_SELECTED_WEEK', 38); +define('INTERVAL_CURRENT_DAY', 40); +define('INTERVAL_PREVIOUS_DAY', 44); +define('INTERVAL_SELECTED_DAY', 48); +*/ + +// TODO: Refactoring is needed for this class. Probably by refactoring DateAndTime first, as Period is +// basically a collection of 2 DateAndTime instances. +// +// Second problem is that "today" is (most likely?) server today, so reports may give incorrect dates +// for browser users in different time zones. Verify and fix this. class Period { - var $mBeginDate; - var $mEndDate; - - function Period($period_name=0, $date_point=null) { - global $user; - - if (!$date_point || !($date_point instanceof DateAndTime)) { - $date_point = new DateAndTime(); - } - $startWeek = $user->week_start; + var $startDate; // DateAndTime object. + var $endDate; // DateAndTime object. + + function __construct($period_type = 0, $date_point = null) { + + global $user; + + if (!$date_point || !($date_point instanceof DateAndTime)) + $date_point = new DateAndTime(); // Represents current date. TODO: verify this is needed, as this is server time, not browser today. - $date_begin = new DateAndTime(); - $date_begin->setFormat($date_point->getFormat()); - $date_end = new DateAndTime(); - $date_end->setFormat($date_point->getFormat()); + // TODO: refactoring ongoing down from here. Make code nicer, etc. + $weekStartDay = $user->week_start; + + $this->startDate = new DateAndTime(); + $this->startDate->setFormat($date_point->getFormat()); + $this->endDate = new DateAndTime(); + $this->endDate->setFormat($date_point->getFormat()); $t_arr = localtime($date_point->getTimestamp()); $t_arr[5] = $t_arr[5] + 1900; - if ($t_arr[6] < $startWeek) { - $startWeekBias = $startWeek - 7; + if ($t_arr[6] < $weekStartDay) { + $startWeekBias = $weekStartDay - 7; } else { - $startWeekBias = $startWeek; + $startWeekBias = $weekStartDay; } - switch ($period_name) { + switch ($period_type) { case INTERVAL_THIS_DAY: - $date_begin->setTimestamp($date_point->getTimestamp()); - $date_end->setTimestamp($date_point->getTimestamp()); - break; + $this->startDate->setTimestamp($date_point->getTimestamp()); + $this->endDate->setTimestamp($date_point->getTimestamp()); + break; + + case INTERVAL_LAST_DAY: + $this->startDate->setTimestamp(mktime(0,0,0,$t_arr[4]+1,$t_arr[3]-1,$t_arr[5])); + $this->endDate->setTimestamp(mktime(0,0,0,$t_arr[4]+1,$t_arr[3]-1,$t_arr[5])); + break; + case INTERVAL_THIS_WEEK: - $date_begin->setTimestamp(mktime(0,0,0,$t_arr[4]+1,$t_arr[3]-$t_arr[6]+$startWeekBias,$t_arr[5])); - $date_end->setTimestamp(mktime(0,0,0,$t_arr[4]+1,$t_arr[3]-$t_arr[6]+6+$startWeekBias,$t_arr[5])); + $this->startDate->setTimestamp(mktime(0,0,0,$t_arr[4]+1,$t_arr[3]-$t_arr[6]+$startWeekBias,$t_arr[5])); + $this->endDate->setTimestamp(mktime(0,0,0,$t_arr[4]+1,$t_arr[3]-$t_arr[6]+6+$startWeekBias,$t_arr[5])); break; case INTERVAL_LAST_WEEK: - $date_begin->setTimestamp(mktime(0,0,0,$t_arr[4]+1,$t_arr[3]-$t_arr[6]-7+$startWeekBias,$t_arr[5])); - $date_end->setTimestamp(mktime(0,0,0,$t_arr[4]+1,$t_arr[3]-$t_arr[6]-1+$startWeekBias,$t_arr[5])); + $this->startDate->setTimestamp(mktime(0,0,0,$t_arr[4]+1,$t_arr[3]-$t_arr[6]-7+$startWeekBias,$t_arr[5])); + $this->endDate->setTimestamp(mktime(0,0,0,$t_arr[4]+1,$t_arr[3]-$t_arr[6]-1+$startWeekBias,$t_arr[5])); break; case INTERVAL_THIS_MONTH: - $date_begin->setTimestamp(mktime(0,0,0,$t_arr[4]+1,1,$t_arr[5])); - $date_end->setTimestamp(mktime(0,0,0,$t_arr[4]+2,0,$t_arr[5])); + $this->startDate->setTimestamp(mktime(0,0,0,$t_arr[4]+1,1,$t_arr[5])); + $this->endDate->setTimestamp(mktime(0,0,0,$t_arr[4]+2,0,$t_arr[5])); break; case INTERVAL_LAST_MONTH: - $date_begin->setTimestamp(mktime(0,0,0,$t_arr[4],1,$t_arr[5])); - $date_end->setTimestamp(mktime(0,0,0,$t_arr[4]+1,0,$t_arr[5])); + $this->startDate->setTimestamp(mktime(0,0,0,$t_arr[4],1,$t_arr[5])); + $this->endDate->setTimestamp(mktime(0,0,0,$t_arr[4]+1,0,$t_arr[5])); break; case INTERVAL_THIS_YEAR: - $date_begin->setTimestamp(mktime(0, 0, 0, 1, 1, $t_arr[5])); - $date_end->setTimestamp(mktime(0, 0, 0, 12, 31, $t_arr[5])); + $this->startDate->setTimestamp(mktime(0, 0, 0, 1, 1, $t_arr[5])); + $this->endDate->setTimestamp(mktime(0, 0, 0, 12, 31, $t_arr[5])); break; } - $this->mBeginDate = &$date_begin; - $this->mEndDate = &$date_end; - } - - /** - * Return all days by period - * - * @return array - */ - function getAllDays() { - $ret_array = array(); - if ($this->mBeginDate->before($this->mEndDate)) { - $d = $this->getBegin(); - while ($d->before($this->getEnd())) { - array_push($ret_array, $d); - $d = $d->nextDate(); - } - array_push($ret_array, $d); - } else { - array_push($ret_array, $this->mBeginDate); - } - return $ret_array; } function setPeriod($b_date, $e_date) { - $this->mBeginDate = $b_date; - $this->mEndDate = $e_date; - } - - // return date object - function getBegin() { - return $this->mBeginDate; - } - - // return date object - function getEnd() { - return $this->mEndDate; + $this->startDate = $b_date; + $this->endDate = $e_date; } // return date string - function getBeginDate($format="") { - return $this->mBeginDate->toString($format); + function getStartDate($format="") { + return $this->startDate->toString($format); } // return date string function getEndDate($format="") { - return $this->mEndDate->toString($format); - } - - function getArray($format="") { - $result = array(); - $d = $this->getBegin(); - while ($d->before($this->getEnd())) { - $result[] = $d->toString($format); - $d = $d->nextDate(); - } - return $result; + return $this->endDate->toString($format); } }