aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWesley Miaw <josuah@users.sourceforge.net>2005-10-30 01:32:44 +0000
committerWesley Miaw <josuah@users.sourceforge.net>2005-10-30 01:32:44 +0000
commitfc81f9ebde033c58f729f392dba7914112d40720 (patch)
tree949f1a56d5a6de5695d93eb6c01adc3f24907c4f
parent966c67f92d14beaf7f6a2ba3386a8e6953cf9eb3 (diff)
downloadphpicalendar-fc81f9ebde033c58f729f392dba7914112d40720.tar.gz
phpicalendar-fc81f9ebde033c58f729f392dba7914112d40720.tar.bz2
phpicalendar-fc81f9ebde033c58f729f392dba7914112d40720.zip
Added support for recursively searching for calendars in your
$calendar_path and the new iCal calendar repository structure. The calendars are still referenced by calendar name, so all URLs are unchanged. Refactored the date parsing code out of ical_parser.php and into date_functions.php. Minor logic changes to the parser to correctly populate the TODO date and time values. Refactored the calendar name code into a new getCalendarName() function, since calendar names may no longer be determined solely by filename if using an iCal repository. Template code updated to match. Added calls to stripslashes() for calendar text data, such as the summaries and descriptions. Also put stripslashes() into people data, since people's names may contain escaped characters.
-rw-r--r--config.inc.php2
-rw-r--r--functions/calendar_functions.php194
-rw-r--r--functions/date_functions.php87
-rw-r--r--functions/ical_parser.php219
-rw-r--r--functions/list_functions.php9
-rw-r--r--functions/template.php4
-rw-r--r--rss/index.php6
7 files changed, 243 insertions, 278 deletions
diff --git a/config.inc.php b/config.inc.php
index 048b18b..a3c7517 100644
--- a/config.inc.php
+++ b/config.inc.php
@@ -39,6 +39,8 @@ $show_todos = 'yes'; // Show your todo list on the side of day and week vie
$show_completed = 'yes'; // Show completed todos on your todo list.
$allow_login = 'no'; // Set to yes to prompt for login to unlock calendars.
$login_cookies = 'no'; // Set to yes to store authentication information via (unencrypted) cookies. Set to no to use sessions.
+$support_ical = 'no'; // Set to yes to support the Apple iCal calendar database structure.
+$recursive_path = 'no'; // Set to yes to recurse into subdirectories of the calendar path.
// Calendar Caching (decreases page load times)
$save_parsed_cals = 'no'; // Saves a copy of the cal in /tmp after it's been parsed. Improves performence.
diff --git a/functions/calendar_functions.php b/functions/calendar_functions.php
index 7a5d88e..a345259 100644
--- a/functions/calendar_functions.php
+++ b/functions/calendar_functions.php
@@ -14,7 +14,7 @@
// returned.
function availableCalendars($username, $password, $cal_filename, $admin = false) {
// Import globals.
- global $allow_login, $calendar_path, $blacklisted_cals, $list_webcals, $locked_cals, $locked_map, $apache_map, $lang, $ALL_CALENDARS_COMBINED, $_SERVER;
+ global $allow_login, $calendar_path, $recursive_path, $support_ical, $blacklisted_cals, $list_webcals, $locked_cals, $locked_map, $apache_map, $lang, $ALL_CALENDARS_COMBINED, $_SERVER;
// Create the list of available calendars.
$calendars = array();
@@ -30,39 +30,20 @@ function availableCalendars($username, $password, $cal_filename, $admin = false)
if (isset($locked_map["$username:$password"])) {
$unlocked_cals = $locked_map["$username:$password"];
}
-
- // Include all local and web calendars if asking for all calendars
- // combined.
- if ($cal_filename == $ALL_CALENDARS_COMBINED || $admin) {
- // Add local calendars.
- $dir_handle = @opendir($calendar_path)
- or die(error(sprintf($lang['l_error_path'], $calendar_path), $cal_filename));
- while (($file = readdir($dir_handle)) != false) {
- // Make sure this is not a dot file and it ends with .ics,
- // and that it is not blacklisted.
- if (!preg_match("/^[^.].*\.ics$/i", $file)) continue;
- $cal_name = substr($file, 0, -4);
- if (in_array($cal_name, $blacklisted_cals)) continue;
+ // Make a local copy of the requested calendars.
+ if (!is_array($cal_filename))
+ $cal_filename_local = array($cal_filename);
+ else
+ $cal_filename_local = $cal_filename;
- // If HTTP authenticated, make sure this calendar is available
- // to the user.
- if (isset($http_user)) {
- if (!in_array($cal_name, $apache_map[$http_user])) continue;
- }
-
- // Otherwise exclude locked calendars.
- else if (!$admin &&
- in_array($cal_name, $locked_cals) &&
- !in_array($cal_name, $unlocked_cals))
- {
- continue;
- }
-
- // Add this calendar.
- array_push($calendars, "$calendar_path/$file");
- }
+ // Create the list of available calendars.
+ $calendars = array();
+
+ // This array keeps track of paths we need to search.
+ $search_paths = array($calendar_path);
- // Add web calendars.
+ // Add web calendars.
+ if ($cal_filename == $ALL_CALENDARS_COMBINED || $admin) {
if (!isset($http_user) && !$admin) {
foreach ($list_webcals as $file) {
// Make sure the URL ends with .ics.
@@ -74,55 +55,92 @@ function availableCalendars($username, $password, $cal_filename, $admin = false)
}
}
- // Otherwise just include the requested calendar.
- else {
- if(!is_array($cal_filename)) {
- $cal_filename_local = array($cal_filename);
- }
- else {
- $cal_filename_local = $cal_filename;
- }
-
- foreach($cal_filename_local as $c) {
-
- // Make sure this is not a blacklisted calendar. We don't have
- // to remove a .ics suffix because it would not have been passed
- // in the argument.
- if (in_array($c, $blacklisted_cals))
- exit(error($lang['l_error_restrictedcal'], $c));
-
- // If HTTP authenticated, make sure this calendar is available
- // to the user.
- if (isset($http_user)) {
- if (!in_array($c, $apache_map[$http_user])) {
- // Use the invalid calendar message so that the user is
- // not made aware of locked calendars.
- exit(error($lang['l_error_invalidcal'], $c));
+ // Set some booleans that will dictate our search.
+ $find_all = ($cal_filename == $ALL_CALENDARS_COMBINED || $admin);
+
+ // Process all search paths.
+ while (!empty($search_paths)) {
+ // Read the next search path.
+ $search_path = array_pop($search_paths);
+
+ // This array keeps track of filenames we need to look at.
+ $files = array();
+
+ // Build the list of files we need to check.
+ if ($find_all || $recursive_path == 'yes') {
+ // Open the directory.
+ $dir_handle = @opendir($search_path)
+ or die(error(sprintf($lang['l_error_path'], $search_path), $cal_filename));
+ if ($dir_handle === false)
+ die(error(sprintf($lang['l_error_path'], $search_path), $cal_filename));
+
+ // Add each file in the directory that does not begin with a dot.
+ while (false !== ($file = readdir($dir_handle))) {
+ // Make sure this is not a dot file.
+ if (preg_match("/^\./", $file)) continue;
+ array_push($files, "$search_path/$file");
+ }
+ } else {
+ foreach ($cal_filename_local as $filename) {
+ array_push($files, "$search_path/$filename");
}
}
- // Otherwise make sure this calendar is not locked.
- else if (in_array($c, $locked_cals) &&
- !in_array($c, $unlocked_cals))
- {
- // Use the invalid calendar message so that the user is
- // not made aware of locked calendars.
- exit(error($lang['l_error_invalidcal'], $c));
- }
+ // Process files.
+ foreach ($files as $file) {
+ // Push directories onto the search paths if recursive paths is
+ // turned on.
+ if (is_dir($file)) {
+ if ($recursive_path == 'yes') {
+ array_push($search_paths, $file);
+ }
+ continue;
+ }
+
+ // Make sure the file is real.
+ if (!is_file($file)) continue;
+
+ // Make sure the file ends in .ics.
+ if (!preg_match("/^.*\.ics$/i", $file)) continue;
+
+ // Make sure this is not a blacklisted calendar.
+ $cal_name = getCalendarName($file);
+ if (in_array($cal_name, $blacklisted_cals)) continue;
+
+ // If HTTP authenticated, make sure this calendar is available
+ // to the user.
+ if (isset($http_user)) {
+ if (!in_array($cal_name, $apache_map[$http_user])) continue;
+ }
- // Add this calendar.
- array_push($calendars, "$calendar_path/$c.ics");
+ // Make sure this calendar is not locked.
+ if (!$admin &&
+ in_array($cal_name, $locked_cals) &&
+ !in_array($cal_name, $unlocked_cals))
+ {
+ continue;
+ }
+
+ // Add this calendar if we're looking for it, and remove it's name
+ // from the local list because we've found it.
+ if ($find_all || in_array($cal_name, $cal_filename_local)) {
+ array_push($calendars, $file);
+ $cal_filename_local = array_diff($cal_filename_local, array($cal_name));
+
+ // If the local list is empty, we're done.
+ if (empty($cal_filename_local))
+ break 2;
+ }
}
}
-
+
// Return the sorted calendar list.
natcasesort($calendars);
return $calendars;
}
// This function returns the result of the availableCalendars function
-// but only includes the calendar filename (including the .ics) and not
-// the entire path.
+// but only includes the calendar names.
//
// $username = The username. Empty if no username provided.
// $password = The password. Empty if no password provided.
@@ -136,7 +154,7 @@ function availableCalendarNames($username, $password, $cal_filename, $admin = fa
// Strip the paths off the calendars.
foreach (array_keys($calendars) as $key) {
- $calendars[$key] = basename($calendars[$key]);
+ $calendars[$key] = getCalendarName($key);
}
// Return the sorted calendar names.
@@ -144,6 +162,34 @@ function availableCalendarNames($username, $password, $cal_filename, $admin = fa
return $calendars;
}
+// This function returns the calendar name for the specified calendar
+// path.
+//
+// $cal_path = The path to the calendar file.
+function getCalendarName($cal_path) {
+ global $support_ical;
+
+ // If iCal is supported, check the directory for an Info.plist.
+ if ($support_ical == 'yes') {
+ // Look for the Info.plist file.
+ $plist_filename = dirname($cal_path)."/Info.plist";
+ if (is_file($plist_filename)) {
+ // Read the Info.plist.
+ $handle = fopen($plist_filename, 'r');
+ $contents = fread($handle, filesize($plist_filename));
+ fclose($handle);
+
+ // Pull out the calendar name.
+ $num_matches = preg_match("/<key>Title<\/key>\s*?<string>(.+?)<\/string>/i", $contents, $matches);
+ if ($num_matches > 0)
+ return $matches[1];
+ }
+ }
+
+ // At this point, just pull the name off the file.
+ return substr(basename($cal_path), 0, -4);
+}
+
// This function prints out the calendars available to the user, for
// selection. Should be enclosed within a <select>...</select>, which
// is not printed out by this function.
@@ -158,9 +204,8 @@ function display_ical_list($cals, $pick=FALSE) {
//
// Only display the calendar name, replace all instances of "32" with " ",
// and remove the .ics suffix.
- $cal_displayname_tmp = basename($cal_tmp);
+ $cal_displayname_tmp = getCalendarName($cal_tmp);
$cal_displayname_tmp = str_replace("32", " ", $cal_displayname_tmp);
- $cal_displayname_tmp = substr($cal_displayname_tmp, 0, -4);
// If this is a webcal, add 'Webcal' to the display name.
if (preg_match("/^(https?|webcal):\/\//i", $cal_tmp)) {
@@ -172,8 +217,7 @@ function display_ical_list($cals, $pick=FALSE) {
// label to the display name.
else {
// Strip path and .ics suffix.
- $cal_tmp = basename($cal_tmp);
- $cal_tmp = substr($cal_tmp, 0, -4);
+ $cal_tmp = getCalendarName($cal_tmp);
// Add calendar label.
$cal_displayname_tmp .= " $calendar_lang";
@@ -212,4 +256,4 @@ function display_ical_list($cals, $pick=FALSE) {
}
}
return $return;
-} \ No newline at end of file
+}
diff --git a/functions/date_functions.php b/functions/date_functions.php
index a541a99..f6bfd53 100644
--- a/functions/date_functions.php
+++ b/functions/date_functions.php
@@ -206,4 +206,91 @@ $return = "
return $return;
}
+
+// Returns an array of the date and time extracted from the data
+// passed in. This array contains (unixtime, date, time, allday).
+//
+// $data = A string representing a date-time per RFC2445.
+// $property = The property being examined, e.g. DTSTART, DTEND.
+// $field = The full field being examined, e.g. DTSTART;TZID=US/Pacific
+function extractDateTime($data, $property, $field) {
+ global $tz_array;
+
+ // Initialize values.
+ unset($unixtime, $date, $time, $allday);
+
+ // What the heck is this doing in here?
+ $data = str_replace ('/softwarestudio.org/Olson_20011030_5/', '', $data);
+
+ // Check for zulu time.
+ $zulu_time = false;
+ if (substr($data,-1) == 'Z') $zulu_time = true;
+ $data = str_replace('Z', '', $data);
+
+ // Remove some substrings we don't want to look at.
+ $data = str_replace('T', '', $data);
+ $field = str_replace(';VALUE=DATE-TIME', '', $field);
+
+ // Extract date-only values.
+ if ((preg_match('/^'.$property.';VALUE=DATE/i', $field)) || (ereg ('^([0-9]{4})([0-9]{2})([0-9]{2})$', $data))) {
+ // Pull out the date value. Minimum year is 1970.
+ ereg ('([0-9]{4})([0-9]{2})([0-9]{2})', $data, $dt_check);
+ if ($dt_check[1] < 1970) {
+ $data = '1971'.$dt_check[2].$dt_check[3];
+ }
+
+ // Set the values.
+ $unixtime = strtotime($data);
+ $date = date('Ymd', $unixtime);
+ $allday = $data;
+ }
+
+ // Extract date-time values.
+ else {
+ // Pull out the timezone, or use GMT if zulu time was indicated.
+ if (preg_match('/^'.$property.';TZID=/i', $field)) {
+ $tz_tmp = explode('=', $field);
+ $tz_dt = $tz_tmp[1];
+ unset($tz_tmp);
+ } elseif ($zulu_time) {
+ $tz_dt = 'GMT';
+ }
+
+ // Pull out the date and time values. Minimum year is 1970.
+ preg_match ('/([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{0,2})([0-9]{0,2})/', $data, $regs);
+ if ($regs[1] < 1970) {
+ $regs[1] = '1971';
+ }
+ $date = $regs[1] . $regs[2] . $regs[3];
+ $time = $regs[4] . $regs[5];
+ $unixtime = mktime($regs[4], $regs[5], 0, $regs[2], $regs[3], $regs[1]);
+
+ // Check for daylight savings time.
+ $dlst = date('I', $unixtime);
+ $server_offset_tmp = chooseOffset($unixtime);
+ if (isset($tz_dt)) {
+ if (array_key_exists($tz_dt, $tz_array)) {
+ $offset_tmp = $tz_array[$tz_dt][$dlst];
+ } else {
+ $offset_tmp = '+0000';
+ }
+ } elseif (isset($calendar_tz)) {
+ if (array_key_exists($calendar_tz, $tz_array)) {
+ $offset_tmp = $tz_array[$calendar_tz][$dlst];
+ } else {
+ $offset_tmp = '+0000';
+ }
+ } else {
+ $offset_tmp = $server_offset_tmp;
+ }
+
+ // Set the values.
+ $unixtime = calcTime($offset_tmp, $server_offset_tmp, $unixtime);
+ $date = date('Ymd', $unixtime);
+ $time = date('Hi', $unixtime);
+ }
+
+ // Return the results.
+ return array($unixtime, $date, $time, $allday);
+}
?>
diff --git a/functions/ical_parser.php b/functions/ical_parser.php
index 5086e07..60ca5c9 100644
--- a/functions/ical_parser.php
+++ b/functions/ical_parser.php
@@ -99,8 +99,7 @@ $calnumber = 1;
foreach ($cal_filelist as $filename) {
// Find the real name of the calendar.
- $actual_calname = str_replace($calendar_path, '', $filename);
- $actual_calname = str_replace('/', '', str_replace('.ics', '', $actual_calname));
+ $actual_calname = getCalendarName($filename);
if ($parse_file) {
@@ -805,101 +804,17 @@ foreach ($cal_filelist as $filename) {
// Start VTODO Parsing
//
case 'DUE':
- $data = str_replace ('/softwarestudio.org/Olson_20011030_5/', '', $data);
- $zulu_time = false;
- if (substr($data,-1) == 'Z') $zulu_time = true;
- $data = str_replace('T', '', $data);
- $data = str_replace('Z', '', $data);
- if (preg_match("/^DUE;VALUE=DATE/i", $field)) {
- $allday_start = $data;
- $start_date = $allday_start;
- $start_unixtime = strtotime($data);
- $due_date = date('Ymd', $start_unixtime);
- } else {
- if (preg_match("/^DUE;TZID=/i", $field)) {
- $tz_tmp = explode('=', $field);
- $tz_due = $tz_tmp[1];
- unset($tz_tmp);
- } elseif ($zulu_time) {
- $tz_due = 'GMT';
- }
-
- ereg ('([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{0,2})([0-9]{0,2})', $data, $regs);
- $due_date = $regs[1] . $regs[2] . $regs[3];
- $due_time = $regs[4] . $regs[5];
- $start_unixtime = mktime($regs[4], $regs[5], 0, $regs[2], $regs[3], $regs[1]);
-
- $dlst = date('I', $start_unixtime);
- $server_offset_tmp = chooseOffset($start_unixtime);
- if (isset($tz_due)) {
- if (array_key_exists($tz_due, $tz_array)) {
- $offset_tmp = $tz_array[$tz_due][$dlst];
- } else {
- $offset_tmp = '+0000';
- }
- } elseif (isset($calendar_tz)) {
- if (array_key_exists($calendar_tz, $tz_array)) {
- $offset_tmp = $tz_array[$calendar_tz][$dlst];
- } else {
- $offset_tmp = '+0000';
- }
- } else {
- $offset_tmp = $server_offset_tmp;
- }
- $start_unixtime = calcTime($offset_tmp, $server_offset_tmp, $start_unixtime);
- $due_date = date('Ymd', $start_unixtime);
- $due_time = date('Hi', $start_unixtime);
- unset($server_offset_tmp);
- }
+ $datetime = extractDateTime($data, $property, $field);
+ $due_date = $datetime[1];
+ $due_time = $datetime[2];
break;
case 'COMPLETED':
- $data = str_replace ('/softwarestudio.org/Olson_20011030_5/', '', $data);
- $zulu_time = false;
- if (substr($data,-1) == 'Z') $zulu_time = true;
- $data = str_replace('T', '', $data);
- $data = str_replace('Z', '', $data);
- if (preg_match("/^COMPLETED;VALUE=DATE/i", $field)) {
- $allday_start = $data;
- $start_date = $allday_start;
- } else {
- if (preg_match("/^COMPLETED;TZID=/i", $field)) {
- $tz_tmp = explode('=', $field);
- $tz_completed = $tz_tmp[1];
- unset($tz_tmp);
- } elseif ($zulu_time) {
- $tz_completed = 'GMT';
- }
-
- ereg ('([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{0,2})([0-9]{0,2})', $data, $regs);
- $completed_date = $regs[1] . $regs[2] . $regs[3];
- $completed_time = $regs[4] . $regs[5];
- $start_unixtime = mktime($regs[4], $regs[5], 0, $regs[2], $regs[3], $regs[1]);
-
- $dlst = date('I', $start_unixtime);
- $server_offset_tmp = chooseOffset($start_unixtime);
- if (isset($tz_completed)) {
- if (array_key_exists($tz_completed, $tz_array)) {
- $offset_tmp = $tz_array[$tz_completed][$dlst];
- } else {
- $offset_tmp = '+0000';
- }
- } elseif (isset($calendar_tz)) {
- if (array_key_exists($calendar_tz, $tz_array)) {
- $offset_tmp = $tz_array[$calendar_tz][$dlst];
- } else {
- $offset_tmp = '+0000';
- }
- } else {
- $offset_tmp = $server_offset_tmp;
- }
- $start_unixtime = calcTime($offset_tmp, $server_offset_tmp, $start_unixtime);
- $completed_date = date('Ymd', $start_unixtime);
- $completed_time = date('Hi', $start_unixtime);
- unset($server_offset_tmp);
- }
- break;
-
+ $datetime = extractDateTime($data, $property, $field);
+ $completed_date = $datetime[1];
+ $completed_time = $datetime[2];
+ break;
+
case 'PRIORITY':
$vtodo_priority = "$data";
break;
@@ -914,111 +829,24 @@ foreach ($cal_filelist as $filename) {
case 'CATEGORIES':
$vtodo_categories = "$data";
- break;
+ break;
//
// End VTODO Parsing
case 'DTSTART':
- $data = str_replace ('/softwarestudio.org/Olson_20011030_5/', '', $data);
- $zulu_time = false;
- if (substr($data,-1) == 'Z') $zulu_time = true;
- $data = str_replace('T', '', $data);
- $data = str_replace('Z', '', $data);
- $field = str_replace(';VALUE=DATE-TIME', '', $field);
- if ((preg_match("/^DTSTART;VALUE=DATE/i", $field)) || (ereg ('^([0-9]{4})([0-9]{2})([0-9]{2})$', $data))) {
- ereg ('([0-9]{4})([0-9]{2})([0-9]{2})', $data, $dtstart_check);
- if ($dtstart_check[1] < 1970) {
- $data = '1971'.$dtstart_check[2].$dtstart_check[3];
- }
- $allday_start = $data;
- $start_date = $allday_start;
- $start_unixtime = strtotime($data);
- } else {
- if (preg_match("/^DTSTART;TZID=/i", $field)) {
- $tz_tmp = explode('=', $field);
- $tz_dtstart = $tz_tmp[1];
- unset($tz_tmp);
- } elseif ($zulu_time) {
- $tz_dtstart = 'GMT';
- }
-
- preg_match ('/([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{0,2})([0-9]{0,2})/', $data, $regs);
- if ($regs[1] < 1970) {
- $regs[1] = '1971';
- }
- $start_date = $regs[1] . $regs[2] . $regs[3];
- $start_time = $regs[4] . $regs[5];
- $start_unixtime = mktime($regs[4], $regs[5], 0, $regs[2], $regs[3], $regs[1]);
-
- $dlst = date('I', $start_unixtime);
- $server_offset_tmp = chooseOffset($start_unixtime);
- if (isset($tz_dtstart)) {
- if (array_key_exists($tz_dtstart, $tz_array)) {
- $offset_tmp = $tz_array[$tz_dtstart][$dlst];
- } else {
- $offset_tmp = '+0000';
- }
- } elseif (isset($calendar_tz)) {
- if (array_key_exists($calendar_tz, $tz_array)) {
- $offset_tmp = $tz_array[$calendar_tz][$dlst];
- } else {
- $offset_tmp = '+0000';
- }
- } else {
- $offset_tmp = $server_offset_tmp;
- }
- $start_unixtime = calcTime($offset_tmp, $server_offset_tmp, $start_unixtime);
- $start_date = date('Ymd', $start_unixtime);
- $start_time = date('Hi', $start_unixtime);
- unset($server_offset_tmp, $offset_tmp, $tz_dtstart);
- }
+ $datetime = extractDateTime($data, $property, $field);
+ $start_unixtime = $datetime[0];
+ $start_date = $datetime[1];
+ $start_time = $datetime[2];
+ $allday_start = $datetime[3];
break;
case 'DTEND':
- $data = str_replace ('/softwarestudio.org/Olson_20011030_5/', '', $data);
- $zulu_time = false;
- if (substr($data,-1) == 'Z') $zulu_time = true;
- $data = str_replace('T', '', $data);
- $data = str_replace('Z', '', $data);
- $field = str_replace(';VALUE=DATE-TIME', '', $field);
- if (preg_match("/^DTEND;VALUE=DATE/i", $field)) {
- preg_match ('/([0-9]{4})([0-9]{2})([0-9]{2})/', $data, $dtend_check);
- if ($dtend_check[1] < 1970) {
- $data = '1971'.$dtend_check[2].$dtend_check[3];
- }
- $allday_end = $data;
- } else {
- if (preg_match("/^DTEND;TZID=/i", $field)) {
- $tz_tmp = explode('=', $field);
- $tz_dtend = $tz_tmp[1];
- unset($tz_tmp);
- } elseif ($zulu_time) {
- $tz_dtend = 'GMT';
- }
-
- preg_match ('/([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{0,2})([0-9]{0,2})/', $data, $regs);
- if ($regs[1] < 1970) {
- $regs[1] = '1971';
- }
- $end_date = $regs[1] . $regs[2] . $regs[3];
- $end_time = $regs[4] . $regs[5];
- $end_unixtime = mktime($regs[4], $regs[5], 0, $regs[2], $regs[3], $regs[1]);
-
- $dlst = date('I', $end_unixtime);
- $server_offset_tmp = chooseOffset($end_unixtime);
- if (isset($tz_dtend)) {
- $offset_tmp = $tz_array[$tz_dtend][$dlst];
- } elseif (isset($calendar_tz)) {
- $offset_tmp = $tz_array[$calendar_tz][$dlst];
- } else {
- $offset_tmp = $server_offset_tmp;
- }
- $end_unixtime = calcTime($offset_tmp, $server_offset_tmp, $end_unixtime);
- $end_date = date('Ymd', $end_unixtime);
- $end_time = date('Hi', $end_unixtime);
- unset($server_offset_tmp, $offset_tmp, $tz_dtend);
-
- }
+ $datetime = extractDateTime($data, $property, $field);
+ $end_unixtime = $datetime[0];
+ $end_date = $datetime[1];
+ $end_time = $datetime[2];
+ $allday_end = $datetime[3];
break;
case 'EXDATE':
@@ -1042,6 +870,7 @@ foreach ($cal_filelist as $filename) {
$data = str_replace("\\t", "&nbsp;", $data);
$data = str_replace("\\r", "<br />", $data);
$data = str_replace('$', '&#36;', $data);
+ $data = stripslashes($data);
$data = htmlentities(urlencode($data));
if ($valarm_set == FALSE) {
$summary = $data;
@@ -1055,6 +884,7 @@ foreach ($cal_filelist as $filename) {
$data = str_replace("\\t", "&nbsp;", $data);
$data = str_replace("\\r", "<br />", $data);
$data = str_replace('$', '&#36;', $data);
+ $data = stripslashes($data);
$data = htmlentities(urlencode($data));
if ($valarm_set == FALSE) {
$description = $data;
@@ -1141,17 +971,18 @@ foreach ($cal_filelist as $filename) {
case 'ATTENDEE':
$field = str_replace("ATTENDEE;CN=", "", $field);
$data = str_replace ("mailto:", "", $data);
- $attendee[] = array ('name' => $field, 'email' => $data);
+ $attendee[] = array ('name' => stripslashes($field), 'email' => stripslashes($data));
break;
case 'ORGANIZER':
$field = str_replace("ORGANIZER;CN=", "", $field);
$data = str_replace ("mailto:", "", $data);
- $organizer[] = array ('name' => $field, 'email' => $data);
+ $organizer[] = array ('name' => stripslashes($field), 'email' => stripslashes($data));
break;
case 'LOCATION':
$data = str_replace("\\n", "<br />", $data);
$data = str_replace("\\t", "&nbsp;", $data);
$data = str_replace("\\r", "<br />", $data);
+ $data = stripslashes($data);
$location = $data;
break;
case 'URL':
diff --git a/functions/list_functions.php b/functions/list_functions.php
index 85a4ebd..5d62fb7 100644
--- a/functions/list_functions.php
+++ b/functions/list_functions.php
@@ -2,12 +2,13 @@
function list_jumps() {
global $second_offset, $lang, $cal;
+ $calName = getCalendarName($cal);
$today = date('Ymd', strtotime("now + $second_offset seconds"));
$return = '<option value="#">'.$lang['l_jump'].'</option>';
- $return .= '<option value="day.php?cal='.$cal.'&amp;getdate='.$today.'">'.$lang['l_goday'].'</option>';
- $return .= '<option value="week.php?cal='.$cal.'&amp;getdate='.$today.'">'.$lang['l_goweek'].'</option>';
- $return .= '<option value="month.php?cal='.$cal.'&amp;getdate='.$today.'">'.$lang['l_gomonth'].'</option>';
- $return .= '<option value="year.php?cal='.$cal.'&amp;getdate='.$today.'">'.$lang['l_goyear'].'</option>';
+ $return .= '<option value="day.php?cal='.$calName.'&amp;getdate='.$today.'">'.$lang['l_goday'].'</option>';
+ $return .= '<option value="week.php?cal='.$calName.'&amp;getdate='.$today.'">'.$lang['l_goweek'].'</option>';
+ $return .= '<option value="month.php?cal='.$calName.'&amp;getdate='.$today.'">'.$lang['l_gomonth'].'</option>';
+ $return .= '<option value="year.php?cal='.$calName.'&amp;getdate='.$today.'">'.$lang['l_goyear'].'</option>';
return $return;
}
diff --git a/functions/template.php b/functions/template.php
index 0162938..e18b101 100644
--- a/functions/template.php
+++ b/functions/template.php
@@ -21,7 +21,7 @@ class Page {
// Print Calendar Checkboxes
$COLUMNS_TO_PRINT = 3;
$column = 1;
- $filelist = availableCalendarNames('', '', '', true);
+ $filelist = availableCalendars('', '', '', true);
foreach ($filelist as $file) {
if ($column > $COLUMNS_TO_PRINT) {
$delete_table .= '</tr>';
@@ -31,7 +31,7 @@ class Page {
$delete_table .= '<tr>';
}
- $cal_filename_tmp = substr($file,0,-4);
+ $cal_filename_tmp = getCalendarName($file);
$cal_tmp = urlencode($file);
$cal_displayname_tmp = str_replace("32", " ", $cal_filename_tmp);
diff --git a/rss/index.php b/rss/index.php
index dc1c8d7..e888a1f 100644
--- a/rss/index.php
+++ b/rss/index.php
@@ -19,12 +19,12 @@ if (empty($default_path)) {
$current_view = "rssindex";
$display_date = "RSS Info";
-$filelist = availableCalendarNames($username, $password, $ALL_CALENDARS_COMBINED);
+$filelist = availableCalendars($username, $password, $ALL_CALENDARS_COMBINED);
foreach ($filelist as $file) {
// $cal_filename is the filename of the calendar without .ics
// $cal is a urlencoded version of $cal_filename
// $cal_displayname is $cal_filename with occurrences of "32" replaced with " "
- $cal_filename_tmp = substr($file,0,-4);
+ $cal_filename_tmp = getCalendarName($file);
$cal_tmp = urlencode($cal_filename_tmp);
$cal_displayname_tmp = str_replace("32", " ", $cal_filename_tmp);
$rss_list .= '<font class="V12" color="blue"><b>'.$cal_displayname_tmp.' '. $calendar_lang.'</b></font><br />';
@@ -75,4 +75,4 @@ $page->replace_tags(array(
$page->output();
-?> \ No newline at end of file
+?>

© 2014-2024 Faster IT GmbH | imprint | privacy policy