// isWeekend determines if $date falls on weekend.
static function isWeekend($date) {
+ // NOTE: this does not work for subgroups with different WEEKEND_START_DAY
+ // as the setting is per server. Example: a parent group in USA, with a subgroup
+ // in Saudi Arabia. Their weekends are the same.
+ // Decided NOT to introduce a configurable WEEKEND_START_DAY for groups in UI
+ // to keep UI simple, for now. See also Calendar class with the same issue.
$weekDay = date('w', strtotime($date));
return ($weekDay == WEEKEND_START_DAY || $weekDay == (WEEKEND_START_DAY + 1) % 7);
}
// isHoliday determines if $date falls on a holiday.
static function isHoliday($date) {
global $user;
- global $i18n;
- if (!$user->show_holidays) return false;
-
- // $date is expected as string in DB_DATEFORMAT.
- $month = date('m', strtotime($date));
- $day = date('d', strtotime($date));
- if (in_array($month.'/'.$day, $i18n->holidays))
- return true;
+ $holidays = $user->getHolidays();
+ if (!$holidays)
+ return false;
+ $holiday_dates = explode(',', $holidays);
+ foreach ($holiday_dates as $holiDateSpec) {
+ if (ttTimeHelper::holidayMatch($date, $holiDateSpec))
+ return true;
+ }
return false;
}
+ // holidayMatch determines if $date matches a single $holiDateSpec.
+ static function holidayMatch($date, $holiDateSpec) {
+
+ $dateArray = explode('-', $date);
+ $holiDateSpecArray = explode('-', $holiDateSpec);
+
+ // Check year.
+ for($i = 0; $i < 4; $i++) {
+ if ($dateArray[0][$i] != $holiDateSpecArray[0][$i] && $holiDateSpecArray[0][$i] != '*') // * means any digit matches
+ return false;
+ }
+ // Check month.
+ if ($dateArray[1] != $holiDateSpecArray[1])
+ return false;
+ // Check day.
+ if ($dateArray[2] != $holiDateSpecArray[2])
+ return false;
+
+ return true;
+ }
+
+ // dateInDatabaseFormat prepares a date string in DB_DATEFORMAT out of year, month, and day.
+ static function dateInDatabaseFormat($year, $month, $day) {
+ $date = "$year-";
+ if (strlen($month) == 1) $date .= '0';
+ $date .= "$month-";
+ if (strlen($day) == 1) $date .= '0';
+ $date .= $day;
+ return $date;
+ }
+
// isValidTime validates a value as a time string.
static function isValidTime($value) {
if (strlen($value)==0 || !isset($value)) return false;