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