24 include_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;
146 $days_in_month = self::_getMaxDayOfMonth($a_year,$a_month);
147 $days_in_prev_month = self::_getMaxDayOfMonth($a_year,$prev_month);
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++)
463 $options[$i] = sprintf(
'%02d:00',$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)
612 self::initDateTimePicker();
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)
677 $out_format = self::getUserDateFormat($a_add_time,
true);
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))
740 $parsed = self::parseDateString($a_value, $a_add_time);
741 if(is_object($parsed[
"date"]))
743 return $parsed[
"date"];
748 $parsed = self::parseDateString($a_value, $a_add_time,
true);
749 if(is_object($parsed[
"date"]))
751 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.
if(!is_array($argv)) $options
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.