24include_once
'./Services/Calendar/classes/class.ilCalendarSettings.php';
51 if(!is_object(self::$today))
71 $month = $a_month < 10 ?
'0'.$a_month : $a_month;
73 return $a_long ?
$lng->txt(
'month_'.$month.
'_long') :
$lng->txt(
'month_'.$month.
'_short');
89 $lng->loadLanguageModule(
'dateplaner');
90 static $days = array(
'Su',
'Mo',
'Tu',
'We',
'Th',
'Fr',
'Sa',
'Su');
92 return $a_long ?
$lng->txt($days[$a_day].
'_long') :
$lng->txt($days[$a_day].
'_short');
106 include_once(
'Services/Calendar/classes/class.ilDateList.php');
111 $day_diff = $a_weekstart - $start_info[
'isoday'];
118 for($i = 1; $i < 7;$i++)
138 include_once(
'Services/Calendar/classes/class.ilDateList.php');
141 $prev_month = ($a_month == 1) ? 12 : $a_month - 1;
142 $prev_year = ($prev_month == 12) ? $a_year - 1 : $a_year;
143 $next_month = $a_month == 12 ? 1 : $a_month + 1;
144 $next_year = $a_month == 12 ? $a_year + 1 : $a_year;
149 $week_day[
'year'] = $a_year;
150 $week_day[
'mon'] = $a_month;
151 $week_day[
'mday'] = 1;
152 $week_day[
'hours'] = 0;
153 $week_day[
'minutes'] = 0;
157 $first_day_offset = (($weekday - $weekstart) < 0) ? 6 : $weekday - $weekstart;
160 for($i = 0;$i < 42;$i++)
163 if($i < $first_day_offset)
165 $day = $days_in_prev_month - $first_day_offset + $i + 1;
167 $day_list->add(
new ilDate(gmmktime(0,0,0,$prev_month,
168 $days_in_prev_month - $first_day_offset + $i + 1,
172 elseif($i < $days_in_month + $first_day_offset)
174 $day = $i - $first_day_offset + 1;
177 $day_list->add(
new ilDate(gmmktime(0,0,0,$a_month,
178 $i - $first_day_offset + 1,
184 $day = $i - $days_in_month - $first_day_offset + 1;
185 $day_list->add(
new ilDate(gmmktime(0,0,0,$next_month,
186 $i - $days_in_month - $first_day_offset + 1,
190 if($i == 34 and ($day < 15 or $day == $days_in_month))
205 if (self::$init_done ==
"done")
210 $lng->loadLanguageModule(
"jscalendar");
211 $tpl->addBlockFile(
"CALENDAR_LANG_JAVASCRIPT",
"calendar_javascript",
"tpl.calendar.html",
212 "Services/Calendar");
213 $tpl->setCurrentBlock(
"calendar_javascript");
214 $tpl->setVariable(
"FULL_SUNDAY",
$lng->txt(
"l_su"));
215 $tpl->setVariable(
"FULL_MONDAY",
$lng->txt(
"l_mo"));
216 $tpl->setVariable(
"FULL_TUESDAY",
$lng->txt(
"l_tu"));
217 $tpl->setVariable(
"FULL_WEDNESDAY",
$lng->txt(
"l_we"));
218 $tpl->setVariable(
"FULL_THURSDAY",
$lng->txt(
"l_th"));
219 $tpl->setVariable(
"FULL_FRIDAY",
$lng->txt(
"l_fr"));
220 $tpl->setVariable(
"FULL_SATURDAY",
$lng->txt(
"l_sa"));
221 $tpl->setVariable(
"SHORT_SUNDAY",
$lng->txt(
"s_su"));
222 $tpl->setVariable(
"SHORT_MONDAY",
$lng->txt(
"s_mo"));
223 $tpl->setVariable(
"SHORT_TUESDAY",
$lng->txt(
"s_tu"));
224 $tpl->setVariable(
"SHORT_WEDNESDAY",
$lng->txt(
"s_we"));
225 $tpl->setVariable(
"SHORT_THURSDAY",
$lng->txt(
"s_th"));
226 $tpl->setVariable(
"SHORT_FRIDAY",
$lng->txt(
"s_fr"));
227 $tpl->setVariable(
"SHORT_SATURDAY",
$lng->txt(
"s_sa"));
228 $tpl->setVariable(
"FULL_JANUARY",
$lng->txt(
"l_01"));
229 $tpl->setVariable(
"FULL_FEBRUARY",
$lng->txt(
"l_02"));
230 $tpl->setVariable(
"FULL_MARCH",
$lng->txt(
"l_03"));
231 $tpl->setVariable(
"FULL_APRIL",
$lng->txt(
"l_04"));
232 $tpl->setVariable(
"FULL_MAY",
$lng->txt(
"l_05"));
233 $tpl->setVariable(
"FULL_JUNE",
$lng->txt(
"l_06"));
234 $tpl->setVariable(
"FULL_JULY",
$lng->txt(
"l_07"));
235 $tpl->setVariable(
"FULL_AUGUST",
$lng->txt(
"l_08"));
236 $tpl->setVariable(
"FULL_SEPTEMBER",
$lng->txt(
"l_09"));
237 $tpl->setVariable(
"FULL_OCTOBER",
$lng->txt(
"l_10"));
238 $tpl->setVariable(
"FULL_NOVEMBER",
$lng->txt(
"l_11"));
239 $tpl->setVariable(
"FULL_DECEMBER",
$lng->txt(
"l_12"));
240 $tpl->setVariable(
"SHORT_JANUARY",
$lng->txt(
"s_01"));
241 $tpl->setVariable(
"SHORT_FEBRUARY",
$lng->txt(
"s_02"));
242 $tpl->setVariable(
"SHORT_MARCH",
$lng->txt(
"s_03"));
243 $tpl->setVariable(
"SHORT_APRIL",
$lng->txt(
"s_04"));
244 $tpl->setVariable(
"SHORT_MAY",
$lng->txt(
"s_05"));
245 $tpl->setVariable(
"SHORT_JUNE",
$lng->txt(
"s_06"));
246 $tpl->setVariable(
"SHORT_JULY",
$lng->txt(
"s_07"));
247 $tpl->setVariable(
"SHORT_AUGUST",
$lng->txt(
"s_08"));
248 $tpl->setVariable(
"SHORT_SEPTEMBER",
$lng->txt(
"s_09"));
249 $tpl->setVariable(
"SHORT_OCTOBER",
$lng->txt(
"s_10"));
250 $tpl->setVariable(
"SHORT_NOVEMBER",
$lng->txt(
"s_11"));
251 $tpl->setVariable(
"SHORT_DECEMBER",
$lng->txt(
"s_12"));
252 $tpl->setVariable(
"ABOUT_CALENDAR",
$lng->txt(
"about_calendar"));
253 $tpl->setVariable(
"ABOUT_CALENDAR_LONG",
$lng->txt(
"about_calendar_long"));
254 $tpl->setVariable(
"ABOUT_TIME_LONG",
$lng->txt(
"about_time"));
255 $tpl->setVariable(
"PREV_YEAR",
$lng->txt(
"prev_year"));
256 $tpl->setVariable(
"PREV_MONTH",
$lng->txt(
"prev_month"));
257 $tpl->setVariable(
"GO_TODAY",
$lng->txt(
"go_today"));
258 $tpl->setVariable(
"NEXT_MONTH",
$lng->txt(
"next_month"));
259 $tpl->setVariable(
"NEXT_YEAR",
$lng->txt(
"next_year"));
260 $tpl->setVariable(
"SEL_DATE",
$lng->txt(
"select_date"));
261 $tpl->setVariable(
"DRAG_TO_MOVE",
$lng->txt(
"drag_to_move"));
262 $tpl->setVariable(
"PART_TODAY",
$lng->txt(
"part_today"));
263 $tpl->setVariable(
"DAY_FIRST",
$lng->txt(
"day_first"));
264 $tpl->setVariable(
"CLOSE",
$lng->txt(
"close"));
265 $tpl->setVariable(
"TODAY",
$lng->txt(
"today"));
266 $tpl->setVariable(
"TIME_PART",
$lng->txt(
"time_part"));
267 $tpl->setVariable(
"DEF_DATE_FORMAT",
$lng->txt(
"def_date_format"));
268 $tpl->setVariable(
"TT_DATE_FORMAT",
$lng->txt(
"tt_date_format"));
269 $tpl->setVariable(
"WK",
$lng->txt(
"wk"));
270 $tpl->setVariable(
"TIME",
$lng->txt(
"time"));
271 $tpl->parseCurrentBlock();
272 $tpl->setCurrentBlock(
"CalendarJS");
273 $tpl->setVariable(
"LOCATION_JAVASCRIPT_CALENDAR",
"./Services/Calendar/js/calendar.js");
274 $tpl->setVariable(
"LOCATION_JAVASCRIPT_CALENDAR_SETUP",
"./Services/Calendar/js/calendar-setup.js");
275 $tpl->setVariable(
"LOCATION_JAVASCRIPT_CALENDAR_STYLESHEET",
"./Services/Calendar/css/calendar.css");
276 $tpl->parseCurrentBlock();
278 self::$init_done =
"done";
283 if(!array_key_exists($a_tz, self::_getShortTimeZoneList()))
287 $timezone_filename = str_replace(
'/',
'_', $a_tz);
288 $timezone_filename .=
'.ics';
289 return './Services/Calendar/zoneinfo/'.$timezone_filename;
304 'Pacific/Samoa' =>
'GMT-11: Midway Islands, Samoa',
305 'US/Hawaii' =>
'GMT-10:00: Hawaii, Polynesia',
306 'US/Alaska' =>
'GMT-9:00: Alaska',
307 'America/Los_Angeles' =>
'GMT-8:00: Tijuana, Los Angeles, Seattle, Vancouver',
308 'US/Arizona' =>
'GMT-7:00: Arizona',
309 'America/Chihuahua' =>
'GMT-7:00: Chihuahua, La Paz, Mazatlan',
310 'America/Denver' =>
'GMT-7:00: Arizona, Denver, Salt Lake City, Calgary',
311 'America/Chicago' =>
'GMT-6:00: Chicago, Dallas, Kansas City, Winnipeg',
312 'America/Monterrey' =>
'GMT-6:00: Guadalajara, Mexico City, Monterrey',
313 'Canada/Saskatchewan' =>
'GMT-6:00: Saskatchewan',
314 'US/Central' =>
'GMT-6:00: Central America',
315 'America/Bogota' =>
'GMT-5:00: Bogota, Lima, Quito',
316 'US/East-Indiana' =>
'GMT-5:00: East-Indiana',
317 'America/New_York' =>
'GMT-5:00: New York, Miami, Atlanta, Detroit, Toronto',
318 'Canada/Atlantic' =>
'GMT-4:00: Atlantic (Canada)',
319 'America/La_Paz' =>
'GMT-4:00: Carcas, La Paz',
320 'America/Santiago' =>
'GMT-4:00: Santiago',
321 'Canada/Newfoundland' =>
'GMT-3:00: Newfoundland',
322 'Brazil/East' =>
'GMT-3:00: Sao Paulo',
323 'America/Argentina/Buenos_Aires' =>
'GMT-3:00: Buenes Aires, Georgtown',
324 'Etc/GMT+3' =>
'GMT-3:00: Greenland, Uruguay, Surinam',
325 'Atlantic/Cape_Verde' =>
'GMT-2:00: Cape Verde, Greenland, South Georgia',
326 'Atlantic/Azores' =>
'GMT-1:00: Azores',
327 'Africa/Casablanca' =>
'GMT+0:00: Casablanca, Monrovia',
328 'Europe/London' =>
'GMT+0:00: Dublin, Edinburgh, Lisbon, London',
329 'Europe/Berlin' =>
'GMT+1:00: Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna',
330 'Europe/Belgrade' =>
'GMT+1:00: Belgrade, Bratislava, Budapest, Ljubljana, Prague',
331 'Europe/Paris' =>
'GMT+1:00: Brussels, Copenhagen, Paris, Madrid',
332 'Europe/Sarajevo' =>
'GMT+1:00: Sarajevo, Skopje, Warsaw, Zagreb',
333 'Africa/Lagos' =>
'GMT+1:00: West-Central Africa',
334 'Europe/Athens' =>
'GMT+2:00: Athens, Beirut, Istanbul, Minsk',
335 'Europe/Bucharest' =>
'GMT+2:00: Bucharest',
336 'Africa/Harare' =>
'GMT+2:00: Harare, Pratoria',
337 'Europe/Helsinki' =>
'GMT+2:00: Helsinki, Kiev, Riga, Sofia, Tallinn, Vilnius',
338 'Asia/Jerusalem' =>
'GMT+2:00: Jerusalem',
339 'Africa/Cairo' =>
'GMT+2:00: Cairo',
340 'Asia/Baghdad' =>
'GMT+3:00: Baghdad',
341 'Asia/Kuwait' =>
'GMT+3:00: Kuwait, Riyadh',
342 'Europe/Moscow' =>
'GMT+3:00: Moscow, Saint Petersburg',
343 'Africa/Nairobi' =>
'GMT+3:00: Nairobi',
344 'Asia/Tehran' =>
'GMT+3:30: Tehran',
345 'Asia/Muscat' =>
'GMT+4:00: Abu Dhabi, Muscat',
346 'Asia/Baku' =>
'GMT+4:00: Baku, Tbilisi, Erivan',
347 'Asia/Kabul' =>
'GMT+4:00: Kabul',
348 'Asia/Karachi' =>
'GMT+5:00: Islamabad, Karachi, Taschkent',
349 'Asia/Yekaterinburg' =>
'GMT+5:00: Yekaterinburg',
350 'Asia/Calcutta' =>
'GMT+5:30: New Dehli',
351 'Asia/Katmandu' =>
'GMT+5:45: Katmandu',
352 'Asia/Novosibirsk' =>
'GMT+6:00: Almaty, Novosibirsk',
353 'Asia/Dhaka' =>
'GMT+6:00: Astana, Dhaka',
354 'Asia/Rangoon' =>
'GMT+6:00: Sri Jayawardenepura, Rangoon',
355 'Asia/Jakarta' =>
'GMT+7:00: Bangkok, Hanoi, Jakarta',
356 'Asia/Krasnoyarsk' =>
'GMT+7:00: Krasnoyarsk',
357 'Asia/Irkutsk' =>
'GMT+8:00: Irkutsk, Ulan Bator',
358 'Asia/Singapore' =>
'GMT+8:00: Kuala Lumpour, Singapore',
359 'Asia/Hong_Kong' =>
'GMT+8:00: Beijing, Chongqing, Hong kong, Urumchi',
360 'Australia/Perth' =>
'GMT+8:00: Perth',
361 'Asia/Taipei' =>
'GMT+8:00: Taipei',
362 'Asia/Yakutsk' =>
'GMT+9:00: Yakutsk',
363 'Asia/Tokyo' =>
'GMT+9:00: Osaka, Sapporo, Tokyo',
364 'Asia/Seoul' =>
'GMT+9:00: Seoul, Darwin, Adelaide',
365 'Australia/Brisbane' =>
'GMT+10:00: Brisbane',
366 'Australia/Sydney' =>
'GMT+10:00: Canberra, Melbourne, Sydney',
367 'Pacific/Guam' =>
'GMT+10:00: Guam, Port Moresby',
368 'Australia/Hobart' =>
'GMT+10:00: Hobart',
369 'Asia/Vladivostok' =>
'GMT+10:00: Vladivostok',
370 'Asia/Magadan' =>
'GMT+11:00: Salomon Islands, New Caledonia, Magadan',
371 'Pacific/Auckland' =>
'GMT+12:00: Auckland, Wellington',
372 'Pacific/Fiji' =>
'GMT+12:00: Fiji, Kamchatka, Marshall-Islands');
390 if($a_year % 100 == 0)
413 if(@function_exists(
'cal_days_in_month'))
415 return cal_days_in_month(CAL_GREGORIAN,$a_month,$a_year);
417 $months = array(0,31,
418 self::_isLeapYear($a_year) ? 29 : 28,
419 31,30,31,30,31,31,30,31,30,31);
420 return $months[(int) $a_month];
433 if(strpos($a_html_color_code,
'#') !== 0 or strlen($a_html_color_code) != 7)
439 $lum = round(hexdec(substr($a_html_color_code, 1, 2))*0.2126+
440 hexdec(substr($a_html_color_code, 3, 2))*0.7152+
441 hexdec(substr($a_html_color_code, 5, 2))*0.0722);
443 return ($lum <= 128) ?
"#FFFFFF" :
"#000000";
461 for($i = 0; $i < 24; $i++)
468 for($i = 0; $i < 24; $i++)
490 if(isset(self::$default_calendar[$a_usr_id]) and isset(self::$default_calendar[$a_usr_id][$a_type_id]))
492 return self::$default_calendar[$a_usr_id][$a_type_id];
495 include_once
'./Services/Calendar/classes/class.ilCalendarCategory.php';
497 $query =
"SELECT cat_id FROM cal_categories ".
498 "WHERE obj_id = ".$ilDB->quote($a_usr_id,
'integer').
" ".
499 "AND type = ".$ilDB->quote($a_type_id,
'integer');
513 self::$default_calendar[$a_usr_id][$a_type_id]->setType($a_type_id);
515 self::$default_calendar[$a_usr_id][$a_type_id]->setTitle($a_title);
516 self::$default_calendar[$a_usr_id][$a_type_id]->setObjId($a_usr_id);
517 self::$default_calendar[$a_usr_id][$a_type_id]->add();
519 return self::$default_calendar[$a_usr_id][$a_type_id];
539 switch(
$ilUser->getDateFormat())
542 $format =
"DD.MM.YYYY";
546 $format =
"YYYY-MM-DD";
550 $format =
"MM/DD/YYYY";
565 if((
bool)$a_for_parsing)
567 $format = str_replace(
"DD",
"d", $format);
568 $format = str_replace(
"MM",
"m", $format);
569 $format = str_replace(
"mm",
"i", $format);
570 $format = str_replace(
"YYYY",
"Y", $format);
571 $format = str_replace(
"HH",
"H", $format);
572 $format = str_replace(
"hh",
"h", $format);
582 if(!self::$init_datetimepicker)
584 $tpl->addJavaScript(
"./libs/composer/vendor/moment/moment/min/moment-with-locales.min.js");
588 $tpl->addJavaScript(
"./Services/Calendar/lib/bootstrap3_datepicker/bootstrap-datetimepicker.min.js");
590 $tpl->addJavaScript(
"Services/Form/js/Form.js");
592 self::$init_datetimepicker =
true;
608 public static function addDateTimePicker($a_id, $a_add_time =
null, array $a_custom_config =
null, $a_id2 =
null, $a_custom_config2 =
null, $a_toggle_id =
null, $a_subform_id =
null)
618 if(
$ilUser->getLanguage() !=
'ar')
620 $language =
$ilUser->getLanguage();
623 'locale' => $language
625 ,
'useCurrent' =>
false
626 ,
'calendarWeeks' =>
true
627 ,
'toolbarPlacement' =>
'top'
631 ,
'keepInvalid' =>
true
632 ,
'sideBySide' =>
true
634 ,
'format' => self::getUserDateFormat($a_add_time)
639 : array_merge($default, $a_custom_config);
641 $tpl->addOnLoadCode(
'$("#'.$a_id.
'").datetimepicker('.json_encode(
$config).
')');
647 $config2 = (!$a_custom_config2)
649 : array_merge($default, $a_custom_config2);
651 $config2[
"useCurrent"] =
false;
653 $tpl->addOnLoadCode(
'$("#'.$a_id2.
'").datetimepicker('.json_encode($config2).
')');
656 $tpl->addOnLoadCode(
'il.Form.initDateDurationPicker("'.$a_id.
'","'.$a_id2.
'","'.$a_toggle_id.
'","'.$a_subform_id.
'");');
658 else if($a_subform_id)
661 $tpl->addOnLoadCode(
'il.Form.initDatePicker("'.$a_id.
'","'.$a_subform_id.
'");');
671 public static function parseDateString($a_date, $a_add_time =
null, $a_use_generic_format =
false)
675 if(!$a_use_generic_format)
681 $out_format = $a_add_time
685 $tmp = date_parse_from_format($out_format, $a_date);
689 if(!$tmp[
"error_count"] &&
690 !$tmp[
"warning_count"])
692 $format = $tmp[
"year"].
"-".
693 str_pad($tmp[
"month"], 2,
"0", STR_PAD_LEFT).
"-".
694 str_pad($tmp[
"day"], 2,
"0", STR_PAD_LEFT);
699 str_pad($tmp[
"hour"], 2,
"0", STR_PAD_LEFT).
":".
700 str_pad($tmp[
"minute"], 2,
"0", STR_PAD_LEFT).
":".
701 str_pad($tmp[
"second"], 2,
"0", STR_PAD_LEFT);
713 ,
"warnings" =>
sizeof($tmp[
"warnings"])
716 ,
"errors" =>
sizeof($tmp[
"errors"])
732 if(is_object($a_value) &&
737 else if(trim($a_value))
741 if(is_object($parsed[
"date"]))
743 return $parsed[
"date"];
749 if(is_object($parsed[
"date"]))
751 return $parsed[
"date"];
sprintf('%.4f', $callTime)
date( 'd-M-Y', $objPHPExcel->getProperties() ->getCreated())
An exception for terminatinating execution or to throw for unit testing.
Stores calendar categories.
static _getShortTimeZoneList()
get short timezone list
static parseIncomingDate($a_value, $a_add_time=null)
Try to parse incoming value to date object.
static _isToday($date)
check if a date is today
static initDateTimePicker()
static initJSCalendar()
Init Javascript Calendar.
static _getMaxDayOfMonth($a_year, $a_month)
get max day of month 2008,2 => 29
static getHourSelection($a_format)
Get hour selectio depending on user specific hour format.
static parseDateString($a_date, $a_add_time=null, $a_use_generic_format=false)
Parse (incoming) string to date/time object.
static _numericDayToString($a_day, $a_long=true)
get
static _buildWeekDayList($a_day, $a_weekstart)
build week day list
static _buildMonthDayList($a_month, $a_year, $weekstart)
Build a month day list.
static calculateFontColor($a_html_color_code)
Calculate best font color from html hex color code.
static addDateTimePicker($a_id, $a_add_time=null, array $a_custom_config=null, $a_id2=null, $a_custom_config2=null, $a_toggle_id=null, $a_subform_id=null)
Add date time picker to element.
static $init_datetimepicker
static _isLeapYear($a_year)
check if a given year is a leap year
static _numericMonthToString($a_month, $a_long=true)
numeric month to string
static getZoneInfoFile($a_tz)
static initDefaultCalendarByType($a_type_id, $a_usr_id, $a_title, $a_create=false)
Init the default calendar for given type and user.
static getUserDateFormat($a_add_time=false, $a_for_parsing=false)
Parse current user setting into date/time format.
@classDescription Date and time handling
static _equals(ilDateTime $start, ilDateTime $end, $a_compare_field='', $a_tz='')
Check if two date are equal.
if(!is_array($argv)) $options