steffen: server/kolab-resource-handlers/kolab-resource-handlers/resmgr olhacks.php, 1.3, 1.4

cvs at intevation.de cvs at intevation.de
Tue Apr 12 11:58:51 CEST 2005


Author: steffen

Update of /kolabrepository/server/kolab-resource-handlers/kolab-resource-handlers/resmgr
In directory doto:/tmp/cvs-serv11628/kolab-resource-handlers/resmgr

Modified Files:
	olhacks.php 
Log Message:
Issue665

Index: olhacks.php
===================================================================
RCS file: /kolabrepository/server/kolab-resource-handlers/kolab-resource-handlers/resmgr/olhacks.php,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- olhacks.php	7 Apr 2005 00:09:16 -0000	1.3
+++ olhacks.php	12 Apr 2005 09:58:49 -0000	1.4
@@ -20,6 +20,7 @@
 
 require_once 'kolabfilter/misc.php';
 require_once HORDE_BASE . '/lib/core.php';
+require_once 'Horde/NLS.php';
 require_once 'Horde/MIME.php';
 require_once 'Horde/MIME/Message.php';
 require_once 'Horde/MIME/Headers.php';
@@ -31,8 +32,43 @@
   "The invitation was originally sent by\n%s.\n\n".
   "Diese Einladung wurde von Outlook weitergeleitet\n".
   "und vom Kolab-Server in gute Form gebracht.\n".
-  "Die Einladung wurde urspünglich von\n%s geschikt.\n";
+  "Die Einladung wurde ursprünglich von\n%s geschickt.\n";
+
+/*static*/ function olhacks_mime_parse( &$text ) {
+  /* Taken from Horde's MIME/Structure.php */
+  require_once 'Mail/mimeDecode.php';
+
+  /* Set up the options for the mimeDecode class. */
+  $decode_args = array();
+  $decode_args['include_bodies'] = true;
+  $decode_args['decode_bodies'] = false;
+  $decode_args['decode_headers'] = false;
+  
+  $mimeDecode = &new Mail_mimeDecode($text, MIME_PART_EOL);
+  if (!($structure = $mimeDecode->decode($decode_args))) {
+    return false;
+  }
+  
+  /* Put the object into imap_parsestructure() form. */
+  MIME_Structure::_convertMimeDecodeData($structure);
+  
+  return array($structure->headers, $ret = &MIME_Structure::parse($structure));
+}
+
+/* static */ function copy_header( $name, &$msg_headers, &$headerarray ) {
+  $lname = strtolower($name);
+  if( array_key_exists($lname, $headerarray)) {
+    if( is_array( $headerarray[$lname] ) ) {
+      foreach( $headerarray[$lname] as $h ) {
+	$msg_headers->addHeader($name, $h );	
+      }
+    } else {
+      $msg_headers->addHeader($name, $headerarray[$lname] );
+    }
+  }
+}
 
+/* main entry point */
 function olhacks_embedical( $fqhostname, $sender, $recipients, $origfrom, $subject, $tmpfname ) {
   myLog("Encapsulating iCal message forwarded by $sender", RM_LOG_DEBUG);
   global $forwardtext;
@@ -49,7 +85,7 @@
   fclose($handle);
 
   // Parse existing message
-  $mime = &MIME_Structure::parseTextMIMEMessage($requestText);
+  list( $headers, $mime) = olhacks_mime_parse($requestText);
   $parts = $mime->contentTypeMap();
   if( count($parts) != 1 || $parts[1] != 'text/calendar' ) {
     myLog("Message does not contain exactly one toplevel text/calendar part, passing through", 
@@ -60,23 +96,29 @@
 
   // Construct new MIME message with original message attached
   $toppart = &new MIME_Message();
-  $textpart = &new MIME_Part('text/plain', sprintf($forwardtext,$origfrom,$origfrom), 'UTF-8' );
-  $msgpart = &new MIME_Part($basepart->getType(), $basepart->toString(), 
+  $dorigfrom = Mail_mimeDecode::_decodeHeader($origfrom);
+  $textpart = &new MIME_Part('text/plain', sprintf($forwardtext,$dorigfrom,$dorigfrom), 'UTF-8' );
+  $msgpart = &new MIME_Part($basepart->getType(), $basepart->transferDecode(), 
 			    $basepart->getCharset() );
   $toppart->addPart($textpart);
   $toppart->addPart($msgpart);
   
   // Build the reply headers.
   $msg_headers = &new MIME_Headers();
-  $msg_headers->addReceivedHeader();
+  copy_header( 'Received', $msg_headers, $headers );
+  //$msg_headers->addReceivedHeader();
   $msg_headers->addMessageIdHeader();
-  $msg_headers->addHeader('Date', date('r'));
-  $msg_headers->addHeader('From', "$sender");
-  if( $subject !== false ) $msg_headers->addHeader('Subject', $subject );
+  //myLog("Headers=".print_r($headers,true), RM_LOG_DEBUG);
+  copy_header( 'Date', $msg_headers, $headers );
+  copy_header( 'Resent-Date', $msg_headers, $headers );
+  copy_header( 'Subject', $msg_headers, $headers );
+  $msg_headers->addHeader('From', $sender);
   foreach( $recipients as $recip ) {
     $msg_headers->addHeader('To', $recip);
   }
+  $msg_headers->addHeader('X-Kolab-Forwarded', 'TRUE');
   $msg_headers->addMIMEHeaders($toppart);
+  copy_header( 'Content-Transfer-Encoding', $msg_headers, $headers );
 
   if (is_object($msg_headers)) {
     $headerArray = $toppart->encode($msg_headers->toArray(), $toppart->getCharset());





More information about the commits mailing list