RETURN_THROWS();
}
- PHP_IMAP_CHECK_MSGNO(msgno, 3);
+ // TODO Fix for UID and normal MSGNO
+ //PHP_IMAP_CHECK_MSGNO(msgno, 3);
if (flags && ((flags & ~(FT_UID|FT_PEEK|FT_INTERNAL)) != 0)) {
zend_argument_value_error(5, "must be a bitmask of FT_UID, FT_PEEK, and FT_INTERNAL");
require_once __DIR__.'/setup/imap_include.inc';
// create a new mailbox and add 10 new messages to it
-$mail_box = setup_test_mailbox('bug80438', 10);
-
-// Delete messages to remove the numerical ordering
-imap_delete($mail_box, 5);
-imap_delete($mail_box, 6);
-imap_delete($mail_box, 7);
-imap_delete($mail_box, 8);
-imap_expunge($mail_box);
+$mail_box = setup_test_mailbox_for_uid_tests('bug80438');
$message_number_array = imap_search($mail_box, 'ALL', SE_UID);
--EXPECT--
Create a temporary mailbox and add 10 msgs
New mailbox created
+Delete 4 messages for Unique ID generation
array(6) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
- int(3)
+ int(7)
[3]=>
- int(4)
+ int(8)
[4]=>
int(9)
[5]=>
Ordered message number: int(1)
Unique ID: int(2)
Ordered message number: int(2)
-Unique ID: int(3)
+Unique ID: int(7)
Ordered message number: int(3)
-Unique ID: int(4)
+Unique ID: int(8)
Ordered message number: int(4)
Unique ID: int(9)
Ordered message number: int(5)
--- /dev/null
+--TEST--
+imap_body() passing a unique ID
+--SKIPIF--
+<?php
+require_once(__DIR__.'/setup/skipif.inc');
+?>
+--FILE--
+<?php
+
+require_once(__DIR__.'/setup/imap_include.inc');
+
+$imap_mail_box = setup_test_mailbox_for_uid_tests("imapbodyuid", $msg_no, $uid);
+
+var_dump(imap_body($imap_mail_box, $uid, FT_UID) === imap_body($imap_mail_box, $msg_no));
+
+imap_close($imap_mail_box);
+
+?>
+--CLEAN--
+<?php
+$mailbox_suffix = 'imapbodyuid';
+require_once(__DIR__ . '/setup/clean.inc');
+?>
+--EXPECT--
+Create a temporary mailbox and add 10 msgs
+New mailbox created
+Delete 4 messages for Unique ID generation
+bool(true)
--- /dev/null
+--TEST--
+imap_clearflag_full() passing a unique ID
+--SKIPIF--
+<?php
+require_once(__DIR__.'/setup/skipif.inc');
+?>
+--FILE--
+<?php
+
+require_once(__DIR__.'/setup/imap_include.inc');
+
+$imap_mail_box = setup_test_mailbox_for_uid_tests("imapclearflagfulluid");
+
+/* This works on the assumption that UID message 3 to 6 inclusive are deleted. */
+
+imap_setflag_full($imap_mail_box, '2,8,9', '\Answered', ST_UID);
+imap_setflag_full($imap_mail_box, '7,10', '\Deleted', ST_UID);
+imap_setflag_full($imap_mail_box, '7:9', '\Flagged', ST_UID);
+
+// Testing individual entry
+imap_clearflag_full($imap_mail_box, '10', '\Deleted', ST_UID);
+// Testing multiple entries entry
+imap_clearflag_full($imap_mail_box, '2,9', '\Answered', ST_UID);
+// Testing entry range
+imap_clearflag_full($imap_mail_box, '7:8', '\Flagged', ST_UID);
+
+
+echo 'ALL: ';
+var_dump(imap_search($imap_mail_box, 'ALL'));
+echo 'ALL (with UID correspondance): ';
+var_dump(imap_search($imap_mail_box, 'ALL', SE_UID));
+echo 'ANSWERED: ';
+var_dump(imap_search($imap_mail_box, 'ANSWERED'));
+echo 'DELETED: ';
+var_dump(imap_search($imap_mail_box, 'DELETED'));
+echo 'FLAGGED: ';
+var_dump(imap_search($imap_mail_box, 'FLAGGED'));
+
+imap_close($imap_mail_box);
+
+?>
+--CLEAN--
+<?php
+$mailbox_suffix = 'imapclearflagfulluid';
+require_once(__DIR__ . '/setup/clean.inc');
+?>
+--EXPECT--
+Create a temporary mailbox and add 10 msgs
+New mailbox created
+Delete 4 messages for Unique ID generation
+ALL: array(6) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+ [3]=>
+ int(4)
+ [4]=>
+ int(5)
+ [5]=>
+ int(6)
+}
+ALL (with UID correspondance): array(6) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(7)
+ [3]=>
+ int(8)
+ [4]=>
+ int(9)
+ [5]=>
+ int(10)
+}
+ANSWERED: array(1) {
+ [0]=>
+ int(4)
+}
+DELETED: array(1) {
+ [0]=>
+ int(3)
+}
+FLAGGED: array(1) {
+ [0]=>
+ int(5)
+}
--- /dev/null
+--TEST--
+imap_delete() passing a unique ID
+--SKIPIF--
+<?php
+require_once(__DIR__.'/setup/skipif.inc');
+?>
+--FILE--
+<?php
+
+require_once(__DIR__.'/setup/imap_include.inc');
+
+$imap_mail_box = setup_test_mailbox_for_uid_tests("imapdeleteuid", $msg_no, $uid);
+
+imap_delete($imap_mail_box, $uid, FT_UID);
+var_dump(imap_search($imap_mail_box, 'DELETED', SE_UID));
+imap_expunge($imap_mail_box);
+
+echo 'After expunging: ';
+var_dump(imap_search($imap_mail_box, 'DELETED', SE_UID));
+
+var_dump(imap_search($imap_mail_box, 'ALL', SE_UID));
+
+imap_close($imap_mail_box);
+
+?>
+--CLEAN--
+<?php
+$mailbox_suffix = 'imapdeleteuid';
+require_once(__DIR__ . '/setup/clean.inc');
+?>
+--EXPECT--
+Create a temporary mailbox and add 10 msgs
+New mailbox created
+Delete 4 messages for Unique ID generation
+array(1) {
+ [0]=>
+ int(9)
+}
+After expunging: bool(false)
+array(5) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(7)
+ [3]=>
+ int(8)
+ [4]=>
+ int(10)
+}
--- /dev/null
+--TEST--
+imap_fetch_overview() passing a unique ID
+--SKIPIF--
+<?php
+require_once(__DIR__.'/setup/skipif.inc');
+?>
+--FILE--
+<?php
+
+require_once(__DIR__.'/setup/imap_include.inc');
+
+$imap_mail_box = setup_test_mailbox_for_uid_tests("imapfetchoverviewuid", $msg_no, $uid);
+
+// Usage of == because comparing objects
+var_dump(imap_fetch_overview($imap_mail_box, $uid, FT_UID) == imap_fetch_overview($imap_mail_box, $msg_no));
+
+imap_close($imap_mail_box);
+
+?>
+--CLEAN--
+<?php
+$mailbox_suffix = 'imapfetchoverviewuid';
+require_once(__DIR__ . '/setup/clean.inc');
+?>
+--EXPECT--
+Create a temporary mailbox and add 10 msgs
+New mailbox created
+Delete 4 messages for Unique ID generation
+bool(true)
--- /dev/null
+--TEST--
+imap_fetchbody() passing a unique ID
+--SKIPIF--
+<?php
+require_once(__DIR__.'/setup/skipif.inc');
+?>
+--FILE--
+<?php
+
+require_once(__DIR__.'/setup/imap_include.inc');
+
+$imap_mail_box = setup_test_mailbox_for_uid_tests("imapfetchbodyuid", $msg_no, $uid);
+
+$section = '2';
+var_dump(imap_fetchbody($imap_mail_box, $uid, $section, FT_UID) === imap_fetchbody($imap_mail_box, $msg_no, $section));
+
+imap_close($imap_mail_box);
+
+?>
+--CLEAN--
+<?php
+$mailbox_suffix = 'imapfetchbodyuid';
+require_once(__DIR__ . '/setup/clean.inc');
+?>
+--EXPECT--
+Create a temporary mailbox and add 10 msgs
+New mailbox created
+Delete 4 messages for Unique ID generation
+bool(true)
--- /dev/null
+--TEST--
+imap_fetchheader() passing a unique ID
+--SKIPIF--
+<?php
+require_once(__DIR__.'/setup/skipif.inc');
+?>
+--FILE--
+<?php
+
+require_once(__DIR__.'/setup/imap_include.inc');
+
+$imap_mail_box = setup_test_mailbox_for_uid_tests("imapfetchheaderuid", $msg_no, $uid);
+
+var_dump(imap_fetchheader($imap_mail_box, $uid, FT_UID) === imap_fetchheader($imap_mail_box, $msg_no));
+
+imap_close($imap_mail_box);
+
+?>
+--CLEAN--
+<?php
+$mailbox_suffix = 'imapfetchheaderuid';
+require_once(__DIR__ . '/setup/clean.inc');
+?>
+--EXPECT--
+Create a temporary mailbox and add 10 msgs
+New mailbox created
+Delete 4 messages for Unique ID generation
+bool(true)
--- /dev/null
+--TEST--
+imap_fetchmime() passing a unique ID
+--SKIPIF--
+<?php
+require_once(__DIR__.'/setup/skipif.inc');
+?>
+--FILE--
+<?php
+
+require_once(__DIR__.'/setup/imap_include.inc');
+
+$imap_mail_box = setup_test_mailbox_for_uid_tests("imapfetchmimeuid", $msg_no, $uid);
+
+$section = '2';
+var_dump(imap_fetchbody($imap_mail_box, $uid, $section, FT_UID) === imap_fetchbody($imap_mail_box, $msg_no, $section));
+
+imap_close($imap_mail_box);
+
+?>
+--CLEAN--
+<?php
+$mailbox_suffix = 'imapfetchmimeuid';
+require_once(__DIR__ . '/setup/clean.inc');
+?>
+--EXPECT--
+Create a temporary mailbox and add 10 msgs
+New mailbox created
+Delete 4 messages for Unique ID generation
+bool(true)
--- /dev/null
+--TEST--
+imap_fetchstructure() passing a unique ID
+--SKIPIF--
+<?php
+require_once(__DIR__.'/setup/skipif.inc');
+?>
+--FILE--
+<?php
+
+require_once(__DIR__.'/setup/imap_include.inc');
+
+$imap_mail_box = setup_test_mailbox_for_uid_tests("imapfetchstructureuid", $msg_no, $uid);
+
+// Usage of == because comparing objects
+var_dump(imap_fetchstructure($imap_mail_box, $uid, FT_UID) == imap_fetchstructure($imap_mail_box, $msg_no));
+
+imap_close($imap_mail_box);
+
+?>
+--CLEAN--
+<?php
+$mailbox_suffix = 'imapfetchstructureuid';
+require_once(__DIR__ . '/setup/clean.inc');
+?>
+--EXPECT--
+Create a temporary mailbox and add 10 msgs
+New mailbox created
+Delete 4 messages for Unique ID generation
+bool(true)
--- /dev/null
+--TEST--
+imap_savebody() passing a unique ID
+--SKIPIF--
+<?php
+require_once(__DIR__.'/setup/skipif.inc');
+?>
+--FILE--
+<?php
+
+require_once(__DIR__.'/setup/imap_include.inc');
+
+$imap_mail_box = setup_test_mailbox_for_uid_tests("imapsavebodyuid", $msg_no, $uid);
+
+$section = '';
+
+$stream_uid = fopen('php://memory', 'w+');
+imap_savebody($imap_mail_box, $stream_uid, $uid, $section, FT_UID);
+
+$stream_msg_no = fopen('php://memory', 'w+');
+imap_savebody($imap_mail_box, $stream_msg_no, $msg_no, $section);
+
+// Compare what was written.
+rewind($stream_uid);
+rewind($stream_msg_no);
+var_dump(stream_get_contents($stream_uid) === stream_get_contents($stream_msg_no));
+
+imap_close($imap_mail_box);
+
+?>
+--CLEAN--
+<?php
+$mailbox_suffix = 'imapsavebodyuid';
+require_once(__DIR__ . '/setup/clean.inc');
+?>
+--EXPECT--
+Create a temporary mailbox and add 10 msgs
+New mailbox created
+Delete 4 messages for Unique ID generation
+bool(true)
--- /dev/null
+--TEST--
+imap_search() with unique ID (SE_UID) flag
+--SKIPIF--
+<?php
+require_once(__DIR__.'/setup/skipif.inc');
+?>
+--FILE--
+<?php
+
+require_once(__DIR__.'/setup/imap_include.inc');
+
+$imap_mail_box = setup_test_mailbox_for_uid_tests("imapsearchuid");
+
+var_dump(imap_search($imap_mail_box, 'ALL', SE_UID));
+
+imap_close($imap_mail_box);
+
+?>
+--CLEAN--
+<?php
+$mailbox_suffix = 'imapsearchuid';
+require_once(__DIR__ . '/setup/clean.inc');
+?>
+--EXPECT--
+Create a temporary mailbox and add 10 msgs
+New mailbox created
+Delete 4 messages for Unique ID generation
+array(6) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(7)
+ [3]=>
+ int(8)
+ [4]=>
+ int(9)
+ [5]=>
+ int(10)
+}
--- /dev/null
+--TEST--
+imap_setflag_full() basic test
+--SKIPIF--
+<?php
+require_once(__DIR__.'/setup/skipif.inc');
+?>
+--FILE--
+<?php
+
+require_once(__DIR__.'/setup/imap_include.inc');
+
+$imap_mail_box = setup_test_mailbox("imapsetflagfullbasic", 10);
+
+// Testing individual entry
+imap_setflag_full($imap_mail_box, '1', '\Answered');
+
+// Testing multiple entries entry
+imap_setflag_full($imap_mail_box, '2,7', '\Deleted');
+
+// Testing entry range
+imap_setflag_full($imap_mail_box, '3:5', '\Flagged');
+
+echo 'ALL: ';
+var_dump(imap_search($imap_mail_box, 'ALL'));
+echo 'ANSWERED: ';
+var_dump(imap_search($imap_mail_box, 'ANSWERED'));
+echo 'DELETED: ';
+var_dump(imap_search($imap_mail_box, 'DELETED'));
+echo 'FLAGGED: ';
+var_dump(imap_search($imap_mail_box, 'FLAGGED'));
+
+imap_close($imap_mail_box);
+
+?>
+--CLEAN--
+<?php
+$mailbox_suffix = 'imapsetflagfullbasic';
+require_once(__DIR__ . '/setup/clean.inc');
+?>
+--EXPECT--
+Create a temporary mailbox and add 10 msgs
+New mailbox created
+ALL: array(10) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+ [3]=>
+ int(4)
+ [4]=>
+ int(5)
+ [5]=>
+ int(6)
+ [6]=>
+ int(7)
+ [7]=>
+ int(8)
+ [8]=>
+ int(9)
+ [9]=>
+ int(10)
+}
+ANSWERED: array(1) {
+ [0]=>
+ int(1)
+}
+DELETED: array(2) {
+ [0]=>
+ int(2)
+ [1]=>
+ int(7)
+}
+FLAGGED: array(3) {
+ [0]=>
+ int(3)
+ [1]=>
+ int(4)
+ [2]=>
+ int(5)
+}
--- /dev/null
+--TEST--
+imap_setflag_full() passing a unique ID
+--SKIPIF--
+<?php
+require_once(__DIR__.'/setup/skipif.inc');
+?>
+--FILE--
+<?php
+
+require_once(__DIR__.'/setup/imap_include.inc');
+
+$imap_mail_box = setup_test_mailbox_for_uid_tests("imapsetflagfulluid");
+
+/* This works on the assumption that UID message 3 to 6 inclusive are deleted. */
+
+// Testing individual entry
+imap_setflag_full($imap_mail_box, '8', '\Answered', ST_UID);
+
+// Testing multiple entries entry
+imap_setflag_full($imap_mail_box, '7,10', '\Deleted', ST_UID);
+
+// Testing entry range
+imap_setflag_full($imap_mail_box, '7:9', '\Flagged', ST_UID);
+
+// Testing entry range invalid
+var_dump(imap_setflag_full($imap_mail_box, '4:9', '\Seen', ST_UID));
+
+
+echo 'ALL: ';
+var_dump(imap_search($imap_mail_box, 'ALL'));
+echo 'ALL (with UID correspondance): ';
+var_dump(imap_search($imap_mail_box, 'ALL', SE_UID));
+echo 'ANSWERED: ';
+var_dump(imap_search($imap_mail_box, 'ANSWERED'));
+echo 'DELETED: ';
+var_dump(imap_search($imap_mail_box, 'DELETED'));
+echo 'FLAGGED: ';
+var_dump(imap_search($imap_mail_box, 'FLAGGED'));
+echo 'SEEN: ';
+var_dump(imap_search($imap_mail_box, 'SEEN'));
+
+imap_close($imap_mail_box);
+
+?>
+--CLEAN--
+<?php
+$mailbox_suffix = 'imapsetflagfulluid';
+require_once(__DIR__ . '/setup/clean.inc');
+?>
+--EXPECT--
+Create a temporary mailbox and add 10 msgs
+New mailbox created
+Delete 4 messages for Unique ID generation
+bool(true)
+ALL: array(6) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+ [3]=>
+ int(4)
+ [4]=>
+ int(5)
+ [5]=>
+ int(6)
+}
+ALL (with UID correspondance): array(6) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(7)
+ [3]=>
+ int(8)
+ [4]=>
+ int(9)
+ [5]=>
+ int(10)
+}
+ANSWERED: array(1) {
+ [0]=>
+ int(4)
+}
+DELETED: array(2) {
+ [0]=>
+ int(3)
+ [1]=>
+ int(6)
+}
+FLAGGED: array(3) {
+ [0]=>
+ int(3)
+ [1]=>
+ int(4)
+ [2]=>
+ int(5)
+}
+SEEN: array(3) {
+ [0]=>
+ int(3)
+ [1]=>
+ int(4)
+ [2]=>
+ int(5)
+}
--- /dev/null
+--TEST--
+imap_sort() basics
+--SKIPIF--
+<?php
+require_once(__DIR__.'/setup/skipif.inc');
+?>
+--FILE--
+<?php
+
+require_once(__DIR__.'/setup/imap_include.inc');
+
+$imap_mail_box = setup_test_mailbox_for_uid_tests("imapsortbasic");
+
+var_dump(imap_sort($imap_mail_box, SORTSUBJECT, 0));
+var_dump(imap_sort($imap_mail_box, SORTSUBJECT, 0, SE_UID));
+
+imap_close($imap_mail_box);
+
+?>
+--CLEAN--
+<?php
+$mailbox_suffix = 'imapsortbasic';
+require_once(__DIR__ . '/setup/clean.inc');
+?>
+--EXPECT--
+Create a temporary mailbox and add 10 msgs
+New mailbox created
+Delete 4 messages for Unique ID generation
+array(6) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(6)
+ [2]=>
+ int(2)
+ [3]=>
+ int(3)
+ [4]=>
+ int(4)
+ [5]=>
+ int(5)
+}
+array(6) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(10)
+ [2]=>
+ int(2)
+ [3]=>
+ int(7)
+ [4]=>
+ int(8)
+ [5]=>
+ int(9)
+}
--- /dev/null
+--TEST--
+imap_undelete() passing a unique ID
+--SKIPIF--
+<?php
+require_once(__DIR__.'/setup/skipif.inc');
+?>
+--FILE--
+<?php
+
+require_once(__DIR__.'/setup/imap_include.inc');
+
+$imap_mail_box = setup_test_mailbox_for_uid_tests("imapundeleteuid", $msg_no, $uid);
+
+imap_delete($imap_mail_box, $uid, FT_UID);
+imap_undelete($imap_mail_box, $uid, FT_UID);
+imap_expunge($imap_mail_box);
+
+var_dump(imap_search($imap_mail_box, 'ALL', SE_UID));
+
+imap_close($imap_mail_box);
+
+?>
+--CLEAN--
+<?php
+$mailbox_suffix = 'imapundeleteuid';
+require_once(__DIR__ . '/setup/clean.inc');
+?>
+--EXPECT--
+Create a temporary mailbox and add 10 msgs
+New mailbox created
+Delete 4 messages for Unique ID generation
+array(6) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(7)
+ [3]=>
+ int(8)
+ [4]=>
+ int(9)
+ [5]=>
+ int(10)
+}
return $mailbox;
}
+function setup_test_mailbox_for_uid_tests(string $mailbox_suffix, &$msg_no = null, &$msg_uid = null)
+{
+ $mail_box = setup_test_mailbox($mailbox_suffix, 10);
+ echo "Delete 4 messages for Unique ID generation\n";
+ // Delete messages to remove the numerical ordering
+ imap_delete($mail_box, 3);
+ imap_delete($mail_box, 4);
+ imap_delete($mail_box, 5);
+ imap_delete($mail_box, 6);
+ imap_expunge($mail_box);
+ $msg_no = 5;
+ $msg_uid = 9;
+
+ return $mail_box;
+}
+
/**
* Populate a mailbox with generic emails
*