steffen: server/kolab-resource-handlers/kolab-resource-handlers/resmgr resmgr.php, 1.45, 1.46
cvs at intevation.de
cvs at intevation.de
Mon Nov 1 14:09:21 CET 2004
Author: steffen
Update of /kolabrepository/server/kolab-resource-handlers/kolab-resource-handlers/resmgr
In directory doto:/tmp/cvs-serv14977/kolab-resource-handlers/resmgr
Modified Files:
resmgr.php
Log Message:
fix for issue496 (rfc2446 brokenness) + bugfixes
Index: resmgr.php
===================================================================
RCS file: /kolabrepository/server/kolab-resource-handlers/kolab-resource-handlers/resmgr/resmgr.php,v
retrieving revision 1.45
retrieving revision 1.46
diff -u -d -r1.45 -r1.46
--- resmgr.php 1 Nov 2004 02:33:27 -0000 1.45
+++ resmgr.php 1 Nov 2004 13:09:19 -0000 1.46
@@ -516,8 +516,8 @@
$parsed['scheme'] . ':' . ((strtolower($parsed['scheme']) == 'mailto') ? '' : '//');
$uri .= empty($parsed['user']) ? '' :
- urlencode($parsed['user']) .
- (empty($parsed['pass']) ? '' : ':'.urlencode($parsed['pass']))
+ ($parsed['user']) .
+ (empty($parsed['pass']) ? '' : ':'.($parsed['pass']))
. '@';
$uri .= empty($parsed['host']) ? '' :
@@ -559,9 +559,11 @@
$url = str_replace('${USER}', urlencode($resource), $url);
$url = str_replace('${FOLDER}', urlencode($folder), $url);
+ myLog("URL = $url", RM_LOG_DEBUG );
+
$parsed = parse_url($url);
- $parsed['user'] = $params['calendar_user'];
- $parsed['pass'] = $params['calendar_pass'];
+ $parsed['user'] = urlencode($params['calendar_user']);
+ $parsed['pass'] = urlencode($params['calendar_pass']);
$url = assembleUri($parsed);
$text = @file_get_contents($url);
@@ -914,7 +916,18 @@
'FR' => 'friday',
'SA' => 'saturday',
'SU' => 'sunday');
-
+ $kolab_months = array( 1 => 'january',
+ 2 => 'february',
+ 3 => 'march',
+ 4 => 'april',
+ 5 => 'may',
+ 6 => 'june',
+ 7 => 'july',
+ 8 => 'august',
+ 9 => 'september',
+ 10 => 'oktober',
+ 11 => 'november',
+ 12 => 'december' );
$rrule_list = split(';', $rrule_str);
$rrule = array();
foreach( $rrule_list as $r ) {
@@ -980,11 +993,67 @@
break;
case 'yearly':
if( $rrule['BYDAY'] ) {
- // PENDING(steffen)
+ $recur_node->append_child( $kolab_xml->create_attribute( 'type', 'weekday' ));
+ $recurrence->setType( 'weekday' );
+ $wdays = split(',', $rrule['BYDAY']);
+ $kdays = array();
+ $kdaynumbers = array();
+ foreach( $wdays as $wday ) {
+ if( ereg('([+-]?[0-9])(.*)', $wday, $regs ) ) {
+ $daynumber_node = $recur_node->append_child( $kolab_xml->create_element( 'daynumber'));
+ $daynumber_node->append_child($kolab_xml->create_text_node( $regs[1] ));
+ $day_node = $recur_node->append_child( $kolab_xml->create_element( 'day'));
+ $day_node->append_child($kolab_xml->create_text_node( $kolab_days[$regs[2]] ));
+ $kdaynumbers[] = $regs[1];
+ $kdays[] = $kolab_days[$regs[2]];
+ } else {
+ $day_node = $recur_node->append_child( $kolab_xml->create_element( 'day'));
+ $day_node->append_child($kolab_xml->create_text_node( $wday ));
+ $kdays[] = $wday;
+ }
+ }
+ if( !empty($kdaynumbers) ) $recurrence->setDaynumber($kdaynumbers);
+ $recurrence->setDay( $kday );
+ $monthnumbers = split(',', $rrule['BYMONTH']);
+ $kmonth = array();
+ foreach( $monthnumbers as $monthnumber ) {
+ $month = $kolab_months[$monthnumber];
+ $month_node = $recur_node->append_child( $kolab_xml->create_element( 'month'));
+ $month_node->append_child($kolab_xml->create_text_node( $month ));
+ $kmonth[] = $month;
+ }
+ $recurrence->setMonth($kmonth);
} else if( $rrule['BYMONTHDAY'] ) {
- // PENDING(steffen)
+ $recur_node->append_child( $kolab_xml->create_attribute( 'type', 'monthday' ));
+ $recurrence->setType( 'monthday' );
+ $daynumbers = split(',', $rrule['BYMONTHDAY']);
+ $kdaynumbers = array();
+ foreach( $daynumbers as $daynumber ) {
+ $daynumber_node = $recur_node->append_child( $kolab_xml->create_element( 'daynumber'));
+ $daynumber_node->append_child($kolab_xml->create_text_node( $daynumber ));
+ $kdaynumbers[] = $daynumber;
+ }
+ $recurrence->setDaynumber($kdaynumbers);
+ $monthnumbers = split(',', $rrule['BYMONTH']);
+ $kmonth = array();
+ foreach( $monthnumbers as $monthnumber ) {
+ $month = $kolab_months[$monthnumber];
+ $month_node = $recur_node->append_child( $kolab_xml->create_element( 'month'));
+ $month_node->append_child($kolab_xml->create_text_node( $month ));
+ $kmonth[] = $month;
+ }
+ $recurrence->setMonth($kmonth);
} else if( $rrule['BYYEARDAY'] ) {
- // PENDING(steffen)
+ $recur_node->append_child( $kolab_xml->create_attribute( 'type', 'yearday' ));
+ $recurrence->setType( 'yearday' );
+ $daynumbers = split(',', $rrule['BYMONTHDAY']);
+ $kdaynumbers = array();
+ foreach( $daynumbers as $daynumber ) {
+ $daynumber_node = $recur_node->append_child( $kolab_xml->create_element( 'daynumber'));
+ $daynumber_node->append_child($kolab_xml->create_text_node( $daynumber ));
+ $kdaynumbers[] = $daynumber;
+ }
+ $recurrence->setDaynumber($kdaynumbers);
}
break;
default:
@@ -1009,6 +1078,14 @@
$range_node->append_child( $kolab_xml->create_attribute( 'type', 'none' ));
$recurrence->setRangetype('none');
}
+ $exclusions = $itip->getAttribute('EXDATE');
+ if( !is_a( $exclusions, 'PEAR_Error' ) ) {
+ if( !is_array( $exclusions ) ) $exclusions = array( $exclusions );
+ foreach( $exclusions as $ex ) {
+ $ex_node = $recur_node->append_child( $kolab_xml->create_element( 'exclusion' ) );
+ $ex_node->append_child($kolab_xml->create_text_node( iCalDate2Kolab($ex) ));
+ }
+ }
}
@@ -1271,11 +1348,11 @@
sendITipReply(RM_ITIP_ACCEPT);
// Delete any old events that we updated
- foreach ($updated_messages as $mid) {
- myLog("Deleting $mid because of update", RM_LOG_DEBUG);
- $imap->deleteMessages($mid);
- }
- $imap->expunge();
+ if( empty( $updated_messages ) ) {
+ myLog("Deleting ".join(', ',$deleted_messages)." because of update", RM_LOG_DEBUG);
+ $imap->deleteMessages( $updated_messages );
+ $imap->expunge();
+ }
shutdown(0);
case 'CANCEL':
@@ -1347,11 +1424,12 @@
}
// Delete the messages from IMAP
- foreach ($deleted_messages as $mid) {
- myLog("Deleting $mid because of cancel", RM_LOG_DEBUG);
- $imap->deleteMessages($mid);
- }
- $imap->expunge();
+ // Delete any old events that we updated
+ if( empty( $deleted_messages ) ) {
+ myLog("Deleting ".join(', ',$deleted_messages)." because of cancel", RM_LOG_DEBUG);
+ $imap->deleteMessages( $deleted_messages );
+ $imap->expunge();
+ }
shutdown(0);
default:
More information about the commits
mailing list