projects
/
squirrelmail.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Unify address book searches. See ChangeLog comments. Also, fixed bug wherein file...
[squirrelmail.git]
/
class
/
mime
/
Rfc822Header.class.php
diff --git
a/class/mime/Rfc822Header.class.php
b/class/mime/Rfc822Header.class.php
index d509503558afa892cc9b6c31019b3da2b65698ab..0d33f7542d17e3c5e90836a870a006e2033ab3f0 100644
(file)
--- a/
class/mime/Rfc822Header.class.php
+++ b/
class/mime/Rfc822Header.class.php
@@
-5,7
+5,7
@@
*
* This file contains functions needed to handle headers in mime messages.
*
*
* This file contains functions needed to handle headers in mime messages.
*
- * @copyright
© 2003-2007
The SquirrelMail Project Team
+ * @copyright
2003-2011
The SquirrelMail Project Team
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
* @version $Id$
* @package squirrelmail
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
* @version $Id$
* @package squirrelmail
@@
-29,6
+29,11
@@
class Rfc822Header {
* @var mixed
*/
var $date = -1;
* @var mixed
*/
var $date = -1;
+ /**
+ * Original date header as fallback for unparsable dates
+ * @var mixed
+ */
+ var $date_unparsed = '';
/**
* Subject header
* @var string
/**
* Subject header
* @var string
@@
-234,6
+239,7
@@
class Rfc822Header {
$d = strtr($value, array(' ' => ' '));
$d = explode(' ', $d);
$this->date = getTimeStamp($d);
$d = strtr($value, array(' ' => ' '));
$d = explode(' ', $d);
$this->date = getTimeStamp($d);
+ $this->date_unparsed = strtr($value,'<>',' ');
break;
case 'subject':
$this->subject = $value;
break;
case 'subject':
$this->subject = $value;
@@
-343,7
+349,7
@@
class Rfc822Header {
$value = $this->stripComments($value);
$this->mlist('id', $value);
break;
$value = $this->stripComments($value);
$this->mlist('id', $value);
break;
- case 'x-spam-status':
+
case 'x-spam-status':
$this->x_spam_status = $this->parseSpamStatus($value);
break;
default:
$this->x_spam_status = $this->parseSpamStatus($value);
break;
default:
@@
-503,7
+509,7
@@
class Rfc822Header {
$sComment = trim(implode(' ',$aComment));
$sPersonal .= $sComment;
}
$sComment = trim(implode(' ',$aComment));
$sPersonal .= $sComment;
}
- $oAddr =
&
new AddressStructure();
+ $oAddr = new AddressStructure();
if ($sPersonal && substr($sPersonal,0,2) == '=?') {
$oAddr->personal = encodeHeader($sPersonal);
} else {
if ($sPersonal && substr($sPersonal,0,2) == '=?') {
$oAddr->personal = encodeHeader($sPersonal);
} else {
@@
-560,7
+566,7
@@
class Rfc822Header {
if ($sGroup) {
$aAddress[] = $this->createAddressObject($aStack,$aComment,$sEmail,$sGroup);
$oAddr = end($aAddress);
if ($sGroup) {
$aAddress[] = $this->createAddressObject($aStack,$aComment,$sEmail,$sGroup);
$oAddr = end($aAddress);
- if(!$oAddr || ((isset($oAddr)) && !
$oAddr->mailbox
&& !$oAddr->personal)) {
+ if(!$oAddr || ((isset($oAddr)) && !
strlen($oAddr->mailbox)
&& !$oAddr->personal)) {
$sEmail = $sGroup . ':;';
}
$aAddress[] = $this->createAddressObject($aStack,$aComment,$sEmail,$sGroup);
$sEmail = $sGroup . ':;';
}
$aAddress[] = $this->createAddressObject($aStack,$aComment,$sEmail,$sGroup);
@@
-601,8
+607,13
@@
class Rfc822Header {
$aAddrBookAddress = $this->parseAddress($aAddr['email'],true);
} else {
$iPosAt = strpos($aAddr['email'], '@');
$aAddrBookAddress = $this->parseAddress($aAddr['email'],true);
} else {
$iPosAt = strpos($aAddr['email'], '@');
- $oAddr->mailbox = substr($aAddr['email'], 0, $iPosAt);
- $oAddr->host = substr($aAddr['email'], $iPosAt+1);
+ if ($iPosAt === FALSE) {
+ $oAddr->mailbox = $aAddr['email'];
+ $oAddr->host = FALSE;
+ } else {
+ $oAddr->mailbox = substr($aAddr['email'], 0, $iPosAt);
+ $oAddr->host = substr($aAddr['email'], $iPosAt+1);
+ }
if (isset($aAddr['name'])) {
$oAddr->personal = $aAddr['name'];
} else {
if (isset($aAddr['name'])) {
$oAddr->personal = $aAddr['name'];
} else {
@@
-611,18
+622,18
@@
class Rfc822Header {
}
}
}
}
}
}
- if (!$grouplookup && !
$oAddr->mailbox
) {
+ if (!$grouplookup && !
strlen($oAddr->mailbox)
) {
$oAddr->mailbox = trim($sEmail);
$oAddr->mailbox = trim($sEmail);
- if ($sHost &&
$oAddr->mailbox
) {
+ if ($sHost &&
strlen($oAddr->mailbox)
) {
$oAddr->host = $sHost;
}
} else if (!$grouplookup && !$oAddr->host) {
$oAddr->host = $sHost;
}
} else if (!$grouplookup && !$oAddr->host) {
- if ($sHost &&
$oAddr->mailbox
) {
+ if ($sHost &&
strlen($oAddr->mailbox)
) {
$oAddr->host = $sHost;
}
}
}
$oAddr->host = $sHost;
}
}
}
- if (!$aAddrBookAddress &&
$oAddr->mailbox
) {
+ if (!$aAddrBookAddress &&
strlen($oAddr->mailbox)
) {
$aProcessedAddress[] = $oAddr;
} else {
$aProcessedAddress = array_merge($aProcessedAddress,$aAddrBookAddress);
$aProcessedAddress[] = $oAddr;
} else {
$aProcessedAddress = array_merge($aProcessedAddress,$aAddrBookAddress);
@@
-631,7
+642,10
@@
class Rfc822Header {
if ($ar) {
return $aProcessedAddress;
} else {
if ($ar) {
return $aProcessedAddress;
} else {
- return $aProcessedAddress[0];
+ if (isset($aProcessedAddress[0]))
+ return $aProcessedAddress[0];
+ else
+ return '';
}
}
}
}
@@
-642,15
+656,16
@@
class Rfc822Header {
* X-MS-Mail-Priority is not parsed because it always coincides
* with one of the other headers.
*
* X-MS-Mail-Priority is not parsed because it always coincides
* with one of the other headers.
*
- * NOTE: this is actually a duplicate from the function in
- * functions/imap_messages. I'm not sure if it's ok here to call
+ * NOTE: this is actually a duplicate from the code in
+ * functions/imap_messages:parseFetch().
+ * I'm not sure if it's ok here to call
* that function?
* @param string $sValue literal priority name
* @return integer
*/
function parsePriority($sValue) {
// don't use function call inside array_shift.
* that function?
* @param string $sValue literal priority name
* @return integer
*/
function parsePriority($sValue) {
// don't use function call inside array_shift.
- $aValue =
split('/\w
/',trim($sValue));
+ $aValue =
preg_split('/\s
/',trim($sValue));
$value = strtolower(array_shift($aValue));
if ( is_numeric($value) ) {
$value = strtolower(array_shift($aValue));
if ( is_numeric($value) ) {
@@
-847,14
+862,20
@@
class Rfc822Header {
* @param mixed $arr string or array of strings
* @param string $separator
* @param boolean $encoded (since 1.4.0) return encoded or plain text addresses
* @param mixed $arr string or array of strings
* @param string $separator
* @param boolean $encoded (since 1.4.0) return encoded or plain text addresses
+ * @param boolean $unconditionally_quote (since 1.4.21/1.5.2) When TRUE, always
+ * quote the personal part,
+ * whether or not it is
+ * encoded, otherwise quoting
+ * is only added if the
+ * personal part is not encoded
* @return string
*/
* @return string
*/
- function getAddr_s($arr, $separator = ',
',$encoded=false
) {
+ function getAddr_s($arr, $separator = ',
', $encoded=false, $unconditionally_quote=FALSE
) {
$s = '';
if (is_array($arr)) {
foreach($arr as $arg) {
$s = '';
if (is_array($arr)) {
foreach($arr as $arg) {
- if ($this->getAddr_s($arg, $separator, $encoded)) {
+ if ($this->getAddr_s($arg, $separator, $encoded
, $unconditionally_quote
)) {
$s .= $separator;
}
}
$s .= $separator;
}
}
@@
-865,9
+886,9
@@
class Rfc822Header {
foreach ($addr as $addr_o) {
if (is_object($addr_o)) {
if ($encoded) {
foreach ($addr as $addr_o) {
if (is_object($addr_o)) {
if ($encoded) {
- $s .= $addr_o->getEncodedAddress() . $separator;
+ $s .= $addr_o->getEncodedAddress(
$unconditionally_quote
) . $separator;
} else {
} else {
- $s .= $addr_o->getAddress() . $separator;
+ $s .= $addr_o->getAddress(
TRUE, FALSE, $unconditionally_quote
) . $separator;
}
}
}
}
}
}
@@
-875,9
+896,9
@@
class Rfc822Header {
} else {
if (is_object($addr)) {
if ($encoded) {
} else {
if (is_object($addr)) {
if ($encoded) {
- $s .= $addr->getEncodedAddress();
+ $s .= $addr->getEncodedAddress(
$unconditionally_quote
);
} else {
} else {
- $s .= $addr->getAddress();
+ $s .= $addr->getAddress(
TRUE, FALSE, $unconditionally_quote
);
}
}
}
}
}
}
@@
-928,6
+949,7
@@
class Rfc822Header {
}
/**
}
/**
+//FIXME: This needs some documentation (inside the function too)! Don't code w/out comments!
* @param mixed $address array or string
* @param boolean $recurs
* @return mixed array, boolean
* @param mixed $address array or string
* @param boolean $recurs
* @return mixed array, boolean
@@
-950,13
+972,14
@@
class Rfc822Header {
}
} else {
if (!is_array($this->cc)) $this->cc = array();
}
} else {
if (!is_array($this->cc)) $this->cc = array();
+ if (!is_array($this->to)) $this->to = array();
$srch_addr = $this->parseAddress($address);
$results = array();
foreach ($this->to as $to) {
$srch_addr = $this->parseAddress($address);
$results = array();
foreach ($this->to as $to) {
- if (
$to->host == $srch_addr->host
) {
- if (
$to->mailbox == $srch_addr->mailbox
) {
+ if (
strtolower($to->host) == strtolower($srch_addr->host)
) {
+ if (
strtolower($to->mailbox) == strtolower($srch_addr->mailbox)
) {
$results[] = $srch_addr;
$results[] = $srch_addr;
- if (
$to->personal == $srch_addr->personal
) {
+ if (
strtolower($to->personal) == strtolower($srch_addr->personal)
) {
if ($recurs) {
return array($results, true);
} else {
if ($recurs) {
return array($results, true);
} else {
@@
-967,10
+990,10
@@
class Rfc822Header {
}
}
foreach ($this->cc as $cc) {
}
}
foreach ($this->cc as $cc) {
- if (
$cc->host == $srch_addr->host
) {
- if (
$cc->mailbox == $srch_addr->mailbox
) {
+ if (
strtolower($cc->host) == strtolower($srch_addr->host)
) {
+ if (
strtolower($cc->mailbox) == strtolower($srch_addr->mailbox)
) {
$results[] = $srch_addr;
$results[] = $srch_addr;
- if (
$cc->personal == $srch_addr->personal
) {
+ if (
strtolower($cc->personal) == strtolower($srch_addr->personal)
) {
if ($recurs) {
return array($results, true);
} else {
if ($recurs) {
return array($results, true);
} else {