On 12/17/2009 07:28 PM, Pierre Joye wrote:
pajoye                                   Thu, 17 Dec 2009 17:28:26 +0000

Revision: http://svn.php.net/viewvc?view=revision&revision=292262

Log:
- [DOC] add INTERNALDATE to imap_append (will merge to trunk later)

"Later" being this year or sometime in 2010?

--Jani



Changed paths:
     U   php/php-src/branches/PHP_5_3/NEWS
     U   php/php-src/branches/PHP_5_3/ext/imap/php_imap.c

Modified: php/php-src/branches/PHP_5_3/NEWS
===================================================================
--- php/php-src/branches/PHP_5_3/NEWS   2009-12-17 17:25:07 UTC (rev 292261)
+++ php/php-src/branches/PHP_5_3/NEWS   2009-12-17 17:28:26 UTC (rev 292262)
@@ -9,6 +9,7 @@
  - Changed "post_max_size" php.ini directive to allow unlimited post size by
    setting it to 0. (Rasmus)

+- Added INTERNALDATE support to imap_append. (nick at mailtrust dot com)
  - Added support for SHA-256 and SHA-512 to php's crypt. (Pierre)
  - Added realpath_cache_size() and realpath_cache_get() functions. (Stas)
  - Added FILTER_FLAG_STRIP_BACKTICK option to the filter extension. (Ilia)

Modified: php/php-src/branches/PHP_5_3/ext/imap/php_imap.c
===================================================================
--- php/php-src/branches/PHP_5_3/ext/imap/php_imap.c    2009-12-17 17:25:07 UTC 
(rev 292261)
+++ php/php-src/branches/PHP_5_3/ext/imap/php_imap.c    2009-12-17 17:28:26 UTC 
(rev 292262)
@@ -41,6 +41,7 @@
  #include "ext/standard/info.h"
  #include "ext/standard/file.h"
  #include "ext/standard/php_smart_str.h"
+#include "ext/pcre/php_pcre.h"

  #ifdef ERROR
  #undef ERROR
@@ -118,6 +119,7 @@
        ZEND_ARG_INFO(0, folder)
        ZEND_ARG_INFO(0, message)
        ZEND_ARG_INFO(0, options)
+       ZEND_ARG_INFO(0, date)
  ZEND_END_ARG_INFO()

  ZEND_BEGIN_ARG_INFO_EX(arginfo_imap_num_msg, 0, 0, 1)
@@ -1265,25 +1267,48 @@
  }
  /* }}} */

-/* {{{ proto bool imap_append(resource stream_id, string folder, string 
message [, string options])
+/* {{{ proto bool imap_append(resource stream_id, string folder, string 
message [, string options [, string internal_date]])
     Append a new message to a specified mailbox */
  PHP_FUNCTION(imap_append)
  {
        zval *streamind;
-       char *folder, *message, *flags = NULL;
-       int folder_len, message_len, flags_len = 0;
+       char *folder, *message, *internal_date = NULL, *flags = NULL;
+       int folder_len, message_len, internal_date_len = 0, flags_len = 0;
        pils *imap_le_struct;
        STRING st;

-       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, 
"rss|s",&streamind,&folder,&folder_len,&message,&message_len,&flags,&flags_len) 
== FAILURE) {
+       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, 
"rss|ss",&streamind,&folder,&folder_len,&message,&message_len,&flags,&flags_len,&internal_date,&internal_date_len)
 == FAILURE) {
                return;
        }

+       char* regex = 
"/[0-3][0-9]-((Jan)|(Feb)|(Mar)|(Apr)|(May)|(Jun)|(Jul)|(Aug)|(Sep)|(Oct)|(Nov)|(Dec))-[0-9]{4}
 [0-2][0-9]:[0-5][0-9]:[0-5][0-9] [+-][0-9]{4}/";
+       int regex_len = strlen(regex);
+       pcre_cache_entry *pce;                          /* Compiled regex */
+       zval *subpats = NULL;                           /* Parts (not used) */
+       long regex_flags = 0;                           /* Flags (not used) */
+       long start_offset = 0;                          /* Start offset (not 
used) */
+       int global = 0;
+
+       if (internal_date) {
+               /* Make sure the given internal_date string matches the RFC 
specifiedformat */
+               if ((pce = pcre_get_compiled_regex_cache(regex, regex_len 
TSRMLS_CC))== NULL) {
+                       RETURN_FALSE;
+               }
+
+               php_pcre_match_impl(pce, internal_date, internal_date_len, 
return_value, subpats, global,
+                       0, regex_flags, start_offset TSRMLS_CC);
+
+               if (!Z_LVAL_P(return_value)) {
+                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "internal date 
not correctly formatted");
+                       internal_date = NULL;
+               }
+       }
+
        ZEND_FETCH_RESOURCE(imap_le_struct, pils *,&streamind, -1, "imap", 
le_imap);

        INIT (&st, mail_string, (void *) message, message_len);

-       if (mail_append_full(imap_le_struct->imap_stream, folder, (flags ? flags : 
NIL), NIL,&st)) {
+       if (mail_append_full(imap_le_struct->imap_stream, folder, (flags ? flags : 
NIL), (internal_date ? internal_date : NIL),&st)) {
                RETURN_TRUE;
        } else {
                RETURN_FALSE;




--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to