diff options
author | Chad Little <clittle@users.sourceforge.net> | 2004-08-19 22:12:10 +0000 |
---|---|---|
committer | Chad Little <clittle@users.sourceforge.net> | 2004-08-19 22:12:10 +0000 |
commit | 9eed6dd3675357feb4bdaeb11487e4b999e000c9 (patch) | |
tree | c0e61c76863c7456f14f77ee66bfe36afcc7ee67 /calendars | |
parent | 2b8a54b93872a444368c731be6db9c08a31618b6 (diff) | |
download | phpicalendar-9eed6dd3675357feb4bdaeb11487e4b999e000c9.tar.gz phpicalendar-9eed6dd3675357feb4bdaeb11487e4b999e000c9.tar.bz2 phpicalendar-9eed6dd3675357feb4bdaeb11487e4b999e000c9.zip |
Added separate publish for iCal and Mozilla. Added French.
Diffstat (limited to 'calendars')
-rw-r--r-- | calendars/publish.ical.php | 150 | ||||
-rw-r--r-- | calendars/publish.mozilla.php (renamed from calendars/publish.php) | 0 |
2 files changed, 150 insertions, 0 deletions
diff --git a/calendars/publish.ical.php b/calendars/publish.ical.php new file mode 100644 index 0000000..68856bd --- /dev/null +++ b/calendars/publish.ical.php @@ -0,0 +1,150 @@ +<?php + +/* +Extension to PHP iCalendar for supporting publishing from Apple iCal +Date: 11.12.2003 +Author: Dietrich Ayala +Copyright 2003 Dietrich Ayala + +Description: +This allows iCal to publish to your PHP iCalendar site *without* WebDAV support. +This helps with commercial hosts where WebDAV is not available. + +Features: +- supports publishing and deleting calendars +- does not require WebDAV + +Installation: +1. place this file in your PHP iCalendar calendars directory (or anywhere else) +2. configure path to PHP iCalendar config file (below) +3. make sure that PHP has write access to the calendars directory (or whatever you set $calendar_path to) +4. set up directory security on your calendars directory +5. turn on publishing in your PHP iCalendar config file by setting $phpicalendar_publishing to 1. + +Usage (Apple iCal): +1. Open iCal, select a calendar for publishing +2. Select "Publish" from the "Calendar" menu +3. Configure to your liking, and set the URL to (eg): http://localhost/~dietricha/calendar/calendars/publish.php +4. Click the "Publish" button + +Security: +The calendars directory should be configured to require authentication. This can be done via any methods +supported by your webserver. There is much documentation available on the web for doing per-directory +authentication for Apache. This protects any private calendar data, and prevents unauthorized users +from updating or deleting your calendar data. +There's also code below that forwards any GET requests to the PHP iCalendar front page. + +Troubleshooting: +You can turn on logging by setting the PHPICALENDAR_LOG_PUBLISHING constant to 1 below. +This will write out a log file to the same directory as this script. +Don't forget to turn off logging when done!! + +*/ + +// include PHP iCalendar configuration variables +include('../config.inc.php'); + +// set calendar path, or just use current directory +$calendar_path = (isset($calendar_path) && $calendar_path != '') ? $calendar_path : ''; + +// allow/disallow publishing + +$phpicalendar_publishing = isset($phpicalendar_publishing) ? $phpicalendar_publishing : 0; +define( 'PHPICALENDAR_PUBLISHING', $phpicalendar_publishing ); + +// toggle logging +define( 'PHPICALENDAR_LOG_PUBLISHING', 1 ); + +/* force GET requests to main calendar view +if($_SERVER['REQUEST_METHOD'] == 'GET') +{ + header('Location: '.$default_path); + return; +} +*/ +// only allow publishing if explicitly enabled +if(PHPICALENDAR_PUBLISHING == 1) +{ + // unpublishing + if($_SERVER['REQUEST_METHOD'] == 'DELETE') + { + // get calendar filename + $calendar_file = $calendar_path.substr($_SERVER['REQUEST_URI'] , ( strrpos($_SERVER['REQUEST_URI'], '/') + 1) ) ; + + logmsg('received request to delete '.$calendar_file); + + // remove calendar file + if(!unlink($calendar_file)) + { + logmsg('unable to delete the calendar file'); + } + else + { + logmsg('deleted'); + } + return; + } + + // publishing + if($_SERVER['REQUEST_METHOD'] == 'PUT') + { + // get calendar data + if($fp = fopen('php://input','r')) + { + while(!@feof($fp)) + { + $data .= fgets($fp,4096); + } + + @fclose($fp); + } + else + { + logmsg('unable to read input data'); + } + + if(isset($data)) + { + + // get calendar name + $cal_arr = explode("\n",$data); + + foreach($cal_arr as $k => $v) + { + if(strstr($v,'X-WR-CALNAME:')) + { + $arr = explode(':',$v); + $calendar_name = trim($arr[1]); + break; + } + } + + $calendar_name = isset($calendar_name) ? $calendar_name : 'default'; + + // write to file + if($fp = fopen($calendar_path.$calendar_name.'.ics','w+')) + { + fputs($fp, $data, strlen($data) ); + @fclose($fp); + } + else + { + logmsg( 'couldnt open file '.$calendar_path.$calendar_name.'.ics' ); + } + } + } +} + +// for logging +function logmsg($str){ + if(defined('PHPICALENDAR_LOG_PUBLISHING') && PHPICALENDAR_LOG_PUBLISHING == 1) + { + if($fp = fopen('publish_log.txt','a+')) + { + $str .= "\n"; + fputs($fp, $str, strlen($str) ); + fclose($fp); + } + } +} +?> diff --git a/calendars/publish.php b/calendars/publish.mozilla.php index 5910a1c..5910a1c 100644 --- a/calendars/publish.php +++ b/calendars/publish.mozilla.php |