Aleksander Machniak
2013-05-01 283ac978524b62383afaa784c4ec62ca4b96882f
Fix Reply-To header handling in Reply-All action (#1489037)
3 files modified
42 ■■■■■ changed files
CHANGELOG 1 ●●●● patch | view | raw | blame | history
program/lib/Roundcube/rcube_mime.php 30 ●●●● patch | view | raw | blame | history
program/steps/mail/compose.inc 11 ●●●●● patch | view | raw | blame | history
CHANGELOG
@@ -1,6 +1,7 @@
CHANGELOG Roundcube Webmail
===========================
- Fix Reply-To header handling in Reply-All action (#1489037)
- Fix so Sender: address is added to Cc: field on reply to all (#1489011)
- Fix so addressbook_search_mode works also for group search (#1489079)
- Fix removal of a contact from a group in LDAP addressbook (#1489081)
program/lib/Roundcube/rcube_mime.php
@@ -127,10 +127,11 @@
     * @param int     $max      List only this number of addresses
     * @param boolean $decode   Decode address strings
     * @param string  $fallback Fallback charset if none specified
     * @param boolean $addronly Return flat array with e-mail addresses only
     *
     * @return array  Indexed list of addresses
     * @return array Indexed list of addresses
     */
    static function decode_address_list($input, $max = null, $decode = true, $fallback = null)
    static function decode_address_list($input, $max = null, $decode = true, $fallback = null, $addronly = false)
    {
        $a   = self::parse_address_list($input, $decode, $fallback);
        $out = array();
@@ -145,20 +146,21 @@
        foreach ($a as $val) {
            $j++;
            $address = trim($val['address']);
            $name    = trim($val['name']);
            if ($name && $address && $name != $address)
                $string = sprintf('%s <%s>', preg_match("/$special_chars/", $name) ? '"'.addcslashes($name, '"').'"' : $name, $address);
            else if ($address)
                $string = $address;
            else if ($name)
                $string = $name;
            if ($addronly) {
                $out[$j] = $address;
            }
            else {
                $name = trim($val['name']);
                if ($name && $address && $name != $address)
                    $string = sprintf('%s <%s>', preg_match("/$special_chars/", $name) ? '"'.addcslashes($name, '"').'"' : $name, $address);
                else if ($address)
                    $string = $address;
                else if ($name)
                    $string = $name;
            $out[$j] = array(
                'name'   => $name,
                'mailto' => $address,
                'string' => $string
            );
                $out[$j] = array('name' => $name, 'mailto' => $address, 'string' => $string);
            }
            if ($max && $j==$max)
                break;
program/steps/mail/compose.inc
@@ -320,6 +320,17 @@
        $fvalue .= (!empty($fvalue) ? $separator : '') . $v;
      if ($v = $MESSAGE->headers->get('Sender', false))
        $fvalue .= (!empty($fvalue) ? $separator : '') . $v;
      // When To: and Reply-To: are the same we add From: address to the list (#1489037)
      if ($v = $MESSAGE->headers->from) {
        $from    = rcube_mime::decode_address_list($v, null, false, $MESSAGE->headers->charset, true);
        $to      = rcube_mime::decode_address_list($MESSAGE->headers->to, null, false, $MESSAGE->headers->charset, true);
        $replyto = rcube_mime::decode_address_list($MESSAGE->headers->replyto, null, false, $MESSAGE->headers->charset, true);
        if (count($replyto) && !count(array_diff($to, $replyto)) && count(array_diff($from, $to))) {
          $fvalue .= (!empty($fvalue) ? $separator : '') . $v;
        }
      }
    }
  }
  else if (in_array($compose_mode, array(RCUBE_COMPOSE_DRAFT, RCUBE_COMPOSE_EDIT))) {