24 include_once
'./Services/Calendar/classes/class.ilCalendarSettings.php';
51 if (!is_object(self::$today)) {
70 $month = $a_month < 10 ?
'0' . $a_month : $a_month;
72 return $a_long ? $lng->txt(
'month_' . $month .
'_long') : $lng->txt(
'month_' . $month .
'_short');
88 $lng->loadLanguageModule(
'dateplaner');
89 static $days =
array(
'Su',
'Mo',
'Tu',
'We',
'Th',
'Fr',
'Sa',
'Su');
91 return $a_long ? $lng->txt($days[$a_day] .
'_long') : $lng->txt($days[$a_day] .
'_short');
105 include_once(
'Services/Calendar/classes/class.ilDateList.php');
108 $start = clone $a_day;
110 $day_diff = $a_weekstart - $start_info[
'isoday'];
111 if ($day_diff == 7) {
115 $day_list->add($start);
116 for (
$i = 1;
$i < 7;
$i++) {
118 $day_list->add($start);
135 include_once(
'Services/Calendar/classes/class.ilDateList.php');
138 $prev_month = ($a_month == 1) ? 12 : $a_month - 1;
139 $prev_year = ($prev_month == 12) ? $a_year - 1 : $a_year;
140 $next_month = $a_month == 12 ? 1 : $a_month + 1;
141 $next_year = $a_month == 12 ? $a_year + 1 : $a_year;
143 $days_in_month = self::_getMaxDayOfMonth($a_year, $a_month);
144 $days_in_prev_month = self::_getMaxDayOfMonth($a_year, $prev_month);
146 $week_day[
'year'] = $a_year;
147 $week_day[
'mon'] = $a_month;
148 $week_day[
'mday'] = 1;
149 $week_day[
'hours'] = 0;
150 $week_day[
'minutes'] = 0;
154 $first_day_offset = (($weekday - $weekstart) < 0) ? 6 : $weekday - $weekstart;
157 for (
$i = 0;
$i < 42;
$i++) {
158 if (
$i < $first_day_offset) {
159 $day = $days_in_prev_month - $first_day_offset +
$i + 1;
161 $day_list->add(
new ilDate(
167 $days_in_prev_month - $first_day_offset + $i + 1,
172 } elseif (
$i < $days_in_month + $first_day_offset) {
173 $day =
$i - $first_day_offset + 1;
176 $day_list->add(
new ilDate(
182 $i - $first_day_offset + 1,
188 $day =
$i - $days_in_month - $first_day_offset + 1;
189 $day_list->add(
new ilDate(
195 $i - $days_in_month - $first_day_offset + 1,
201 if (
$i == 34 and ($day < 15 or $day == $days_in_month)) {
215 if (self::$init_done ==
"done") {
219 $lng->loadLanguageModule(
"jscalendar");
221 "CALENDAR_LANG_JAVASCRIPT",
222 "calendar_javascript",
226 $tpl->setCurrentBlock(
"calendar_javascript");
227 $tpl->setVariable(
"FULL_SUNDAY", $lng->txt(
"l_su"));
228 $tpl->setVariable(
"FULL_MONDAY", $lng->txt(
"l_mo"));
229 $tpl->setVariable(
"FULL_TUESDAY", $lng->txt(
"l_tu"));
230 $tpl->setVariable(
"FULL_WEDNESDAY", $lng->txt(
"l_we"));
231 $tpl->setVariable(
"FULL_THURSDAY", $lng->txt(
"l_th"));
232 $tpl->setVariable(
"FULL_FRIDAY", $lng->txt(
"l_fr"));
233 $tpl->setVariable(
"FULL_SATURDAY", $lng->txt(
"l_sa"));
234 $tpl->setVariable(
"SHORT_SUNDAY", $lng->txt(
"s_su"));
235 $tpl->setVariable(
"SHORT_MONDAY", $lng->txt(
"s_mo"));
236 $tpl->setVariable(
"SHORT_TUESDAY", $lng->txt(
"s_tu"));
237 $tpl->setVariable(
"SHORT_WEDNESDAY", $lng->txt(
"s_we"));
238 $tpl->setVariable(
"SHORT_THURSDAY", $lng->txt(
"s_th"));
239 $tpl->setVariable(
"SHORT_FRIDAY", $lng->txt(
"s_fr"));
240 $tpl->setVariable(
"SHORT_SATURDAY", $lng->txt(
"s_sa"));
241 $tpl->setVariable(
"FULL_JANUARY", $lng->txt(
"l_01"));
242 $tpl->setVariable(
"FULL_FEBRUARY", $lng->txt(
"l_02"));
243 $tpl->setVariable(
"FULL_MARCH", $lng->txt(
"l_03"));
244 $tpl->setVariable(
"FULL_APRIL", $lng->txt(
"l_04"));
245 $tpl->setVariable(
"FULL_MAY", $lng->txt(
"l_05"));
246 $tpl->setVariable(
"FULL_JUNE", $lng->txt(
"l_06"));
247 $tpl->setVariable(
"FULL_JULY", $lng->txt(
"l_07"));
248 $tpl->setVariable(
"FULL_AUGUST", $lng->txt(
"l_08"));
249 $tpl->setVariable(
"FULL_SEPTEMBER", $lng->txt(
"l_09"));
250 $tpl->setVariable(
"FULL_OCTOBER", $lng->txt(
"l_10"));
251 $tpl->setVariable(
"FULL_NOVEMBER", $lng->txt(
"l_11"));
252 $tpl->setVariable(
"FULL_DECEMBER", $lng->txt(
"l_12"));
253 $tpl->setVariable(
"SHORT_JANUARY", $lng->txt(
"s_01"));
254 $tpl->setVariable(
"SHORT_FEBRUARY", $lng->txt(
"s_02"));
255 $tpl->setVariable(
"SHORT_MARCH", $lng->txt(
"s_03"));
256 $tpl->setVariable(
"SHORT_APRIL", $lng->txt(
"s_04"));
257 $tpl->setVariable(
"SHORT_MAY", $lng->txt(
"s_05"));
258 $tpl->setVariable(
"SHORT_JUNE", $lng->txt(
"s_06"));
259 $tpl->setVariable(
"SHORT_JULY", $lng->txt(
"s_07"));
260 $tpl->setVariable(
"SHORT_AUGUST", $lng->txt(
"s_08"));
261 $tpl->setVariable(
"SHORT_SEPTEMBER", $lng->txt(
"s_09"));
262 $tpl->setVariable(
"SHORT_OCTOBER", $lng->txt(
"s_10"));
263 $tpl->setVariable(
"SHORT_NOVEMBER", $lng->txt(
"s_11"));
264 $tpl->setVariable(
"SHORT_DECEMBER", $lng->txt(
"s_12"));
265 $tpl->setVariable(
"ABOUT_CALENDAR", $lng->txt(
"about_calendar"));
266 $tpl->setVariable(
"ABOUT_CALENDAR_LONG", $lng->txt(
"about_calendar_long"));
267 $tpl->setVariable(
"ABOUT_TIME_LONG", $lng->txt(
"about_time"));
268 $tpl->setVariable(
"PREV_YEAR", $lng->txt(
"prev_year"));
269 $tpl->setVariable(
"PREV_MONTH", $lng->txt(
"prev_month"));
270 $tpl->setVariable(
"GO_TODAY", $lng->txt(
"go_today"));
271 $tpl->setVariable(
"NEXT_MONTH", $lng->txt(
"next_month"));
272 $tpl->setVariable(
"NEXT_YEAR", $lng->txt(
"next_year"));
273 $tpl->setVariable(
"SEL_DATE", $lng->txt(
"select_date"));
274 $tpl->setVariable(
"DRAG_TO_MOVE", $lng->txt(
"drag_to_move"));
275 $tpl->setVariable(
"PART_TODAY", $lng->txt(
"part_today"));
276 $tpl->setVariable(
"DAY_FIRST", $lng->txt(
"day_first"));
277 $tpl->setVariable(
"CLOSE", $lng->txt(
"close"));
278 $tpl->setVariable(
"TODAY", $lng->txt(
"today"));
279 $tpl->setVariable(
"TIME_PART", $lng->txt(
"time_part"));
280 $tpl->setVariable(
"DEF_DATE_FORMAT", $lng->txt(
"def_date_format"));
281 $tpl->setVariable(
"TT_DATE_FORMAT", $lng->txt(
"tt_date_format"));
282 $tpl->setVariable(
"WK", $lng->txt(
"wk"));
283 $tpl->setVariable(
"TIME", $lng->txt(
"time"));
284 $tpl->parseCurrentBlock();
285 $tpl->setCurrentBlock(
"CalendarJS");
286 $tpl->setVariable(
"LOCATION_JAVASCRIPT_CALENDAR",
"./Services/Calendar/js/calendar.js");
287 $tpl->setVariable(
"LOCATION_JAVASCRIPT_CALENDAR_SETUP",
"./Services/Calendar/js/calendar-setup.js");
288 $tpl->parseCurrentBlock();
290 self::$init_done =
"done";
295 if (!array_key_exists($a_tz, self::_getShortTimeZoneList())) {
298 $timezone_filename = str_replace(
'/',
'_', $a_tz);
299 $timezone_filename .=
'.ics';
300 return './Services/Calendar/zoneinfo/' . $timezone_filename;
315 'Pacific/Samoa' =>
'GMT-11: Midway Islands, Samoa',
316 'US/Hawaii' =>
'GMT-10:00: Hawaii, Polynesia',
317 'US/Alaska' =>
'GMT-9:00: Alaska',
318 'America/Los_Angeles' =>
'GMT-8:00: Tijuana, Los Angeles, Seattle, Vancouver',
319 'US/Arizona' =>
'GMT-7:00: Arizona',
320 'America/Chihuahua' =>
'GMT-7:00: Chihuahua, La Paz, Mazatlan',
321 'America/Denver' =>
'GMT-7:00: Arizona, Denver, Salt Lake City, Calgary',
322 'America/Chicago' =>
'GMT-6:00: Chicago, Dallas, Kansas City, Winnipeg',
323 'America/Monterrey' =>
'GMT-6:00: Guadalajara, Mexico City, Monterrey',
324 'Canada/Saskatchewan' =>
'GMT-6:00: Saskatchewan',
325 'US/Central' =>
'GMT-6:00: Central America',
326 'America/Bogota' =>
'GMT-5:00: Bogota, Lima, Quito',
327 'US/East-Indiana' =>
'GMT-5:00: East-Indiana',
328 'America/New_York' =>
'GMT-5:00: New York, Miami, Atlanta, Detroit, Toronto',
329 'Canada/Atlantic' =>
'GMT-4:00: Atlantic (Canada)',
330 'America/La_Paz' =>
'GMT-4:00: Carcas, La Paz',
331 'America/Santiago' =>
'GMT-4:00: Santiago',
332 'Canada/Newfoundland' =>
'GMT-3:00: Newfoundland',
333 'Brazil/East' =>
'GMT-3:00: Sao Paulo',
334 'America/Argentina/Buenos_Aires' =>
'GMT-3:00: Buenes Aires, Georgtown',
335 'Etc/GMT+3' =>
'GMT-3:00: Greenland, Uruguay, Surinam',
336 'Atlantic/Cape_Verde' =>
'GMT-2:00: Cape Verde, Greenland, South Georgia',
337 'Atlantic/Azores' =>
'GMT-1:00: Azores',
338 'Africa/Casablanca' =>
'GMT+0:00: Casablanca, Monrovia',
339 'Europe/London' =>
'GMT+0:00: Dublin, Edinburgh, Lisbon, London',
340 'Europe/Berlin' =>
'GMT+1:00: Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna',
341 'Europe/Belgrade' =>
'GMT+1:00: Belgrade, Bratislava, Budapest, Ljubljana, Prague',
342 'Europe/Paris' =>
'GMT+1:00: Brussels, Copenhagen, Paris, Madrid',
343 'Europe/Sarajevo' =>
'GMT+1:00: Sarajevo, Skopje, Warsaw, Zagreb',
344 'Africa/Lagos' =>
'GMT+1:00: West-Central Africa',
345 'Europe/Athens' =>
'GMT+2:00: Athens, Beirut, Istanbul, Minsk',
346 'Europe/Bucharest' =>
'GMT+2:00: Bucharest',
347 'Africa/Harare' =>
'GMT+2:00: Harare, Pratoria',
348 'Europe/Helsinki' =>
'GMT+2:00: Helsinki, Kiev, Riga, Sofia, Tallinn, Vilnius',
349 'Asia/Jerusalem' =>
'GMT+2:00: Jerusalem',
350 'Africa/Cairo' =>
'GMT+2:00: Cairo',
351 'Asia/Baghdad' =>
'GMT+3:00: Baghdad',
352 'Asia/Kuwait' =>
'GMT+3:00: Kuwait, Riyadh',
353 'Europe/Moscow' =>
'GMT+3:00: Moscow, Saint Petersburg',
354 'Africa/Nairobi' =>
'GMT+3:00: Nairobi',
355 'Asia/Tehran' =>
'GMT+3:30: Tehran',
356 'Asia/Muscat' =>
'GMT+4:00: Abu Dhabi, Muscat',
357 'Asia/Baku' =>
'GMT+4:00: Baku, Tbilisi, Erivan',
358 'Asia/Kabul' =>
'GMT+4:00: Kabul',
359 'Asia/Karachi' =>
'GMT+5:00: Islamabad, Karachi, Taschkent',
360 'Asia/Yekaterinburg' =>
'GMT+5:00: Yekaterinburg',
361 'Asia/Calcutta' =>
'GMT+5:30: New Dehli',
362 'Asia/Katmandu' =>
'GMT+5:45: Katmandu',
363 'Asia/Novosibirsk' =>
'GMT+6:00: Almaty, Novosibirsk',
364 'Asia/Dhaka' =>
'GMT+6:00: Astana, Dhaka',
365 'Asia/Rangoon' =>
'GMT+6:00: Sri Jayawardenepura, Rangoon',
366 'Asia/Jakarta' =>
'GMT+7:00: Bangkok, Hanoi, Jakarta',
367 'Asia/Krasnoyarsk' =>
'GMT+7:00: Krasnoyarsk',
368 'Asia/Irkutsk' =>
'GMT+8:00: Irkutsk, Ulan Bator',
369 'Asia/Singapore' =>
'GMT+8:00: Kuala Lumpour, Singapore',
370 'Asia/Hong_Kong' =>
'GMT+8:00: Beijing, Chongqing, Hong kong, Urumchi',
371 'Australia/Perth' =>
'GMT+8:00: Perth',
372 'Asia/Taipei' =>
'GMT+8:00: Taipei',
373 'Asia/Yakutsk' =>
'GMT+9:00: Yakutsk',
374 'Asia/Tokyo' =>
'GMT+9:00: Osaka, Sapporo, Tokyo',
375 'Asia/Seoul' =>
'GMT+9:00: Seoul, Darwin, Adelaide',
376 'Australia/Brisbane' =>
'GMT+10:00: Brisbane',
377 'Australia/Sydney' =>
'GMT+10:00: Canberra, Melbourne, Sydney',
378 'Pacific/Guam' =>
'GMT+10:00: Guam, Port Moresby',
379 'Australia/Hobart' =>
'GMT+10:00: Hobart',
380 'Asia/Vladivostok' =>
'GMT+10:00: Vladivostok',
381 'Asia/Magadan' =>
'GMT+11:00: Salomon Islands, New Caledonia, Magadan',
382 'Pacific/Auckland' =>
'GMT+12:00: Auckland, Wellington',
383 'Pacific/Fiji' =>
'GMT+12:00: Fiji, Kamchatka, Marshall-Islands');
398 if ($a_year % 4 == 0) {
400 if ($a_year % 100 == 0) {
421 if (@function_exists(
'cal_days_in_month')) {
422 return cal_days_in_month(CAL_GREGORIAN, $a_month, $a_year);
424 $months =
array(0,31,
425 self::_isLeapYear($a_year) ? 29 : 28,
426 31,30,31,30,31,31,30,31,30,31);
427 return $months[(int) $a_month];
440 if (strpos($a_html_color_code,
'#') !== 0 or strlen($a_html_color_code) != 7) {
445 $lum = round(hexdec(substr($a_html_color_code, 1, 2))*0.2126+
446 hexdec(substr($a_html_color_code, 3, 2))*0.7152+
447 hexdec(substr($a_html_color_code, 5, 2))*0.0722);
449 return ($lum <= 128) ?
"#FFFFFF" :
"#000000";
466 for (
$i = 0;
$i < 24;
$i++) {
472 for (
$i = 0;
$i < 24;
$i++) {
492 if (isset(self::$default_calendar[$a_usr_id]) and isset(self::$default_calendar[$a_usr_id][$a_type_id])) {
493 return self::$default_calendar[$a_usr_id][$a_type_id];
496 include_once
'./Services/Calendar/classes/class.ilCalendarCategory.php';
498 $query =
"SELECT cat_id FROM cal_categories " .
499 "WHERE obj_id = " . $ilDB->quote($a_usr_id,
'integer') .
" " .
500 "AND type = " . $ilDB->quote($a_type_id,
'integer');
512 self::$default_calendar[$a_usr_id][$a_type_id]->setType($a_type_id);
514 self::$default_calendar[$a_usr_id][$a_type_id]->setTitle($a_title);
515 self::$default_calendar[$a_usr_id][$a_type_id]->setObjId($a_usr_id);
516 self::$default_calendar[$a_usr_id][$a_type_id]->add();
518 return self::$default_calendar[$a_usr_id][$a_type_id];
538 switch ($ilUser->getDateFormat()) {
555 if ($a_add_time == 2) {
561 if ((
bool) $a_for_parsing) {
577 if (!self::$init_datetimepicker) {
578 $tpl->addJavaScript(
"./libs/bower/bower_components/moment/min/moment-with-locales.min.js");
582 $tpl->addJavaScript(
"./libs/bower/bower_components/eonasdan-bootstrap-datetimepicker/build/js/bootstrap-datetimepicker.min.js");
584 $tpl->addJavaScript(
"Services/Form/js/Form.js");
586 self::$init_datetimepicker =
true;
602 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)
606 self::initDateTimePicker();
612 if ($ilUser->getLanguage() !=
'ar') {
613 $language = $ilUser->getLanguage();
616 'locale' => $language
618 ,
'useCurrent' =>
false 619 ,
'calendarWeeks' =>
true 620 ,
'toolbarPlacement' =>
'top' 624 ,
'keepInvalid' =>
true 625 ,
'sideBySide' =>
true 627 ,
'format' => self::getUserDateFormat($a_add_time)
632 : array_merge($default, $a_custom_config);
634 $tpl->addOnLoadCode(
'$("#' . $a_id .
'").datetimepicker(' . json_encode(
$config) .
')');
639 $config2 = (!$a_custom_config2)
641 : array_merge($default, $a_custom_config2);
643 $config2[
"useCurrent"] =
false;
645 $tpl->addOnLoadCode(
'$("#' . $a_id2 .
'").datetimepicker(' . json_encode($config2) .
')');
648 $tpl->addOnLoadCode(
'il.Form.initDateDurationPicker("' . $a_id .
'","' . $a_id2 .
'","' . $a_toggle_id .
'","' . $a_subform_id .
'");');
649 } elseif ($a_subform_id) {
651 $tpl->addOnLoadCode(
'il.Form.initDatePicker("' . $a_id .
'","' . $a_subform_id .
'");');
661 public static function parseDateString($a_date, $a_add_time = null, $a_use_generic_format =
false)
665 if (!$a_use_generic_format) {
666 $out_format = self::getUserDateFormat($a_add_time,
true);
668 $out_format = $a_add_time
672 $tmp = date_parse_from_format($out_format, $a_date);
676 if (!$tmp[
"error_count"] &&
677 !$tmp[
"warning_count"]) {
679 str_pad($tmp[
"month"], 2,
"0", STR_PAD_LEFT) .
"-" .
680 str_pad($tmp[
"day"], 2,
"0", STR_PAD_LEFT);
684 str_pad($tmp[
"hour"], 2,
"0", STR_PAD_LEFT) .
":" .
685 str_pad($tmp[
"minute"], 2,
"0", STR_PAD_LEFT) .
":" .
686 str_pad($tmp[
"second"], 2,
"0", STR_PAD_LEFT);
696 ,
"warnings" =>
sizeof($tmp[
"warnings"])
699 ,
"errors" =>
sizeof($tmp[
"errors"])
715 if (is_object($a_value) &&
718 } elseif (trim($a_value)) {
720 $parsed = self::parseDateString($a_value, $a_add_time);
721 if (is_object($parsed[
"date"])) {
722 return $parsed[
"date"];
725 $parsed = self::parseDateString($a_value, $a_add_time,
true);
726 if (is_object($parsed[
"date"])) {
727 return $parsed[
"date"];
static _buildMonthDayList($a_month, $a_year, $weekstart)
Build a month day list.
static initDateTimePicker()
static _numericDayToString($a_day, $a_long=true)
get
static getHourSelection($a_format)
Get hour selectio depending on user specific hour format.
static _isLeapYear($a_year)
check if a given year is a leap year
static getZoneInfoFile($a_tz)
Stores calendar categories.
static _buildWeekDayList($a_day, $a_weekstart)
build week day list
static _getShortTimeZoneList()
get short timezone list
static _numericMonthToString($a_month, $a_long=true)
numeric month to string
static _getMaxDayOfMonth($a_year, $a_month)
get max day of month 2008,2 => 29
static _equals(ilDateTime $start, ilDateTime $end, $a_compare_field='', $a_tz='')
Check if two date are equal.
foreach($_POST as $key=> $value) $res
static getUserDateFormat($a_add_time=false, $a_for_parsing=false)
Parse current user setting into date/time format.
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.
date( 'd-M-Y', $objPHPExcel->getProperties() ->getCreated())
static calculateFontColor($a_html_color_code)
Calculate best font color from html hex color code.
static $init_datetimepicker
Create styles array
The data for the language used.
static parseDateString($a_date, $a_add_time=null, $a_use_generic_format=false)
Parse (incoming) string to date/time object.
static initDefaultCalendarByType($a_type_id, $a_usr_id, $a_title, $a_create=false)
Init the default calendar for given type and user.
Add data(end) time
Method that wraps PHPs time in order to allow simulations with the workflow.
static initJSCalendar()
Init Javascript Calendar.
static _isToday($date)
check if a date is today
static parseIncomingDate($a_value, $a_add_time=null)
Try to parse incoming value to date object.
if(!isset($_REQUEST['ReturnTo'])) if(!isset($_REQUEST['AuthId'])) $options