thomascube
2011-04-12 3d8b54edf74792e3996d861a6a30c41d82976261
program/steps/mail/func.inc
@@ -726,71 +726,74 @@
  $body = preg_replace_callback($replacer->mailto_pattern, array($replacer, 'mailto_callback'), $body);
  // split body into single lines
  $a_lines = preg_split('/\r?\n/', $body);
  $body = preg_split('/\r?\n/', $body);
  $quote_level = 0;
  $last = -1;
  // find/mark quoted lines...
  for ($n=0, $cnt=count($a_lines); $n < $cnt; $n++) {
    if ($a_lines[$n][0] == '>' && preg_match('/^(>+\s*)+/', $a_lines[$n], $regs)) {
  for ($n=0, $cnt=count($body); $n < $cnt; $n++) {
    if ($body[$n][0] == '>' && preg_match('/^(>+\s*)+/', $body[$n], $regs)) {
      $q = strlen(preg_replace('/\s/', '', $regs[0]));
      $a_lines[$n] = substr($a_lines[$n], strlen($regs[0]));
      $body[$n] = substr($body[$n], strlen($regs[0]));
      if ($q > $quote_level)
        $a_lines[$n] = $replacer->get_replacement($replacer->add(
          str_repeat('<blockquote>', $q - $quote_level))) . $a_lines[$n];
      else if ($q < $quote_level)
        $a_lines[$n] = $replacer->get_replacement($replacer->add(
          str_repeat('</blockquote>', $quote_level - $q))) . $a_lines[$n];
      if ($q > $quote_level) {
        $body[$n] = $replacer->get_replacement($replacer->add(
          str_repeat('<blockquote>', $q - $quote_level))) . $body[$n];
      }
      else if ($q < $quote_level) {
        $body[$n] = $replacer->get_replacement($replacer->add(
          str_repeat('</blockquote>', $quote_level - $q))) . $body[$n];
      }
      else if ($flowed) {
        // previous line is flowed
        if (isset($a_lines[$last]) && $a_lines[$n]
          && $a_lines[$last][strlen($a_lines[$last])-1] == ' ') {
        if (isset($body[$last]) && $body[$n]
          && $body[$last][strlen($body[$last])-1] == ' ') {
          // merge lines
          $a_lines[$last] .= $a_lines[$n];
          unset($a_lines[$n]);
          $body[$last] .= $body[$n];
          unset($body[$n]);
        }
        else
        else {
          $last = $n;
        }
      }
    }
    else {
      $q = 0;
      if ($flowed) {
        // sig separator - line is fixed
        if ($a_lines[$n] == '-- ') {
          $last = $n;
        if ($body[$n] == '-- ') {
          $last = $last_sig = $n;
        }
        else {
          // remove space-stuffing
          if ($a_lines[$n][0] == ' ')
            $a_lines[$n] = substr($a_lines[$n], 1);
          if ($body[$n][0] == ' ')
            $body[$n] = substr($body[$n], 1);
          // previous line is flowed?
          if (isset($a_lines[$last]) && $a_lines[$n]
            && $a_lines[$last] != '-- '
            && $a_lines[$last][strlen($a_lines[$last])-1] == ' '
          if (isset($body[$last]) && $body[$n]
            && $last != $last_sig
            && $body[$last][strlen($body[$last])-1] == ' '
          ) {
            $a_lines[$last] .= $a_lines[$n];
            unset($a_lines[$n]);
            $body[$last] .= $body[$n];
            unset($body[$n]);
          }
          else {
            $last = $n;
          }
        }
        if ($quote_level > 0)
          $a_lines[$last] = $replacer->get_replacement($replacer->add(
            str_repeat('</blockquote>', $quote_level))) . $a_lines[$last];
          $body[$last] = $replacer->get_replacement($replacer->add(
            str_repeat('</blockquote>', $quote_level))) . $body[$last];
      }
      else if ($quote_level > 0)
        $a_lines[$n] = $replacer->get_replacement($replacer->add(
          str_repeat('</blockquote>', $quote_level))) . $a_lines[$n];
        $body[$n] = $replacer->get_replacement($replacer->add(
          str_repeat('</blockquote>', $quote_level))) . $body[$n];
    }
    $quote_level = $q;
  }
  $body = join("\n", $a_lines);
  $body = join("\n", $body);
  // quote plain text (don't use Q() here, to display entities "as is")
  $table = get_html_translation_table(HTML_SPECIALCHARS);
@@ -1194,15 +1197,19 @@
 */
function rcmail_alter_html_link($matches)
{
  global $EMAIL_ADDRESS_PATTERN;
  global $RCMAIL, $EMAIL_ADDRESS_PATTERN;
  $tag = $matches[1];
  $attrib = parse_attrib_string($matches[2]);
  $end = '>';
  // Remove non-printable characters in URL (#1487805)
  $attrib['href'] = preg_replace('/[\x00-\x1F]/', '', $attrib['href']);
  if ($tag == 'link' && preg_match('/^https?:\/\//i', $attrib['href'])) {
    $attrib['href'] = "?_task=utils&amp;_action=modcss&amp;u=" . urlencode($attrib['href'])
        . "&amp;c=" . urlencode($GLOBALS['rcmail_html_container_id']);
    $tempurl = 'tmp-' . md5($attrib['href']) . '.css';
    $_SESSION['modcssurls'][$tempurl] = $attrib['href'];
    $attrib['href'] = $RCMAIL->url(array('task' => 'utils', 'action' => 'modcss', 'u' => $tempurl, 'c' => $GLOBALS['rcmail_html_container_id']));
    $end = ' />';
  }
  else if (preg_match('/^mailto:'.$EMAIL_ADDRESS_PATTERN.'(\?[^"\'>]+)?/i', $attrib['href'], $mailto)) {
@@ -1250,17 +1257,17 @@
    // IDNA ASCII to Unicode
    if ($name == $mailto)
      $name = idn_to_utf8($name);
      $name = rcube_idn_to_utf8($name);
    if ($string == $mailto)
      $string = idn_to_utf8($string);
    $mailto = idn_to_utf8($mailto);
      $string = rcube_idn_to_utf8($string);
    $mailto = rcube_idn_to_utf8($mailto);
    if ($PRINT_MODE) {
      $out .= sprintf('%s &lt;%s&gt;', Q($name), $mailto);
    }
    else if (check_email($part['mailto'], false)) {
      if ($linked) {
        $out .= html::a(array(
        $address = html::a(array(
            'href' => 'mailto:'.$mailto,
            'onclick' => sprintf("return %s.command('compose','%s',this)", JS_OBJECT_NAME, JQ($mailto)),
            'title' => $mailto,
@@ -1269,12 +1276,12 @@
        Q($name ? $name : $mailto));
      }
      else {
        $out .= html::span(array('title' => $mailto, 'class' => "rcmContactAddress"),
        $address = html::span(array('title' => $mailto, 'class' => "rcmContactAddress"),
          Q($name ? $name : $mailto));
      }
      if ($addicon && $got_writable_abook) {
        $out .= '&nbsp;' . html::a(array(
        $address = html::span(null, $address . html::a(array(
            'href' => "#add",
            'onclick' => sprintf("return %s.command('add-contact','%s',this)", JS_OBJECT_NAME, urlencode($string)),
            'title' => rcube_label('addtoaddressbook'),
@@ -1282,8 +1289,9 @@
          html::img(array(
            'src' => $CONFIG['skin_path'] . $addicon,
            'alt' => "Add contact",
          )));
          ))));
      }
      $out .= $address;
    }
    else {
      if ($name)
@@ -1414,14 +1422,14 @@
/**
 * clear message composing settings
 */
function rcmail_compose_cleanup()
function rcmail_compose_cleanup($id)
{
  if (!isset($_SESSION['compose']))
  if (!isset($_SESSION['compose_data'][$id]))
    return;
  $rcmail = rcmail::get_instance();
  $rcmail->plugins->exec_hook('attachments_cleanup', array());
  $rcmail->session->remove('compose');
  $rcmail->plugins->exec_hook('attachments_cleanup', array('group' => $id));
  unset($_SESSION['compose_data'][$id]);
}