thomascube
2009-08-10 75969686c23575e61f306ae4502f132968848096
Added 'message_compose' hook

3 files modified
88 ■■■■■ changed files
CHANGELOG 1 ●●●● patch | view | raw | blame | history
program/include/main.inc 28 ●●●● patch | view | raw | blame | history
program/steps/mail/compose.inc 59 ●●●●● patch | view | raw | blame | history
CHANGELOG
@@ -1,6 +1,7 @@
CHANGELOG RoundCube Webmail
===========================
- Added 'message_compose' hook
- Added 'imap_connect' hook (#1485956)
- Fix vcard_attachments plugin (#1486035)
- Updated PEAR::Auth_SASL to 1.0.3 version
program/include/main.inc
@@ -545,7 +545,7 @@
 * @return string   Field value or NULL if not available
 */
function get_input_value($fname, $source, $allow_html=FALSE, $charset=NULL)
  {
{
  global $OUTPUT;
  $value = NULL;
  
@@ -582,7 +582,26 @@
    return rcube_charset_convert($value, $OUTPUT->get_charset(), $charset);
  else
    return $value;
}
/**
 * Convert array of request parameters (prefixed with _)
 * to a regular array with non-prefixed keys.
 *
 * @param  int   Source to get value from (GPC)
 * @return array Hash array with all request parameters
 */
function request2param($mode = RCUBE_INPUT_GPC)
{
  $out = array();
  $src = $mode == RCUBE_INPUT_GET ? $_GET : ($mode == RCUBE_INPUT_POST ? $_POST : $_REQUEST);
  foreach ($src as $key => $value) {
    $fname = $key[0] == '_' ? substr($key, 1) : $key;
    $out[$fname] = get_input_value($key, $mode);
  }
  return $out;
}
/**
 * Remove all non-ascii and non-word chars
@@ -958,8 +977,11 @@
  {
  $args = func_get_args();
  if (class_exists('rcmail', false))
    rcmail::get_instance()->plugins->exec_hook('console', $args);
  if (class_exists('rcmail', false)) {
    $rcmail = rcmail::get_instance();
    if (is_object($rcmail->plugins))
      $rcmail->plugins->exec_hook('console', $args);
  }
  $msg = array();
  foreach ($args as $arg)
program/steps/mail/compose.inc
@@ -38,20 +38,24 @@
  rcmail_compose_cleanup();
  $_SESSION['compose'] = array(
    'id' => uniqid(rand()),
    'param' => array_map('strip_tags', $_GET),
    'param' => request2param(RCUBE_INPUT_GET),
    'mailbox' => $IMAP->get_mailbox_name(),
  );
  
  // process values like "mailto:foo@bar.com?subject=new+message&cc=another"
  if ($_SESSION['compose']['param']['_to']) {
    $mailto = explode('?', $_SESSION['compose']['param']['_to']);
  if ($_SESSION['compose']['param']['to']) {
    $mailto = explode('?', $_SESSION['compose']['param']['to']);
    if (count($mailto) > 1) {
      $_SESSION['compose']['param']['_to'] = $mailto[0];
      $_SESSION['compose']['param']['to'] = $mailto[0];
      parse_str($mailto[1], $query);
      foreach ($query as $f => $val)
        $_SESSION['compose']['param']["_$f"] = $val;
        $_SESSION['compose']['param'][$f] = $val;
    }
  }
  // pipe compose parameters thru plugins
  $plugin = $RCMAIL->plugins->exec_hook('message_compose', $_SESSION['compose']);
  $_SESSION['compose']['param'] = $plugin['param'];
  // redirect to a unique URL with all parameters stored in session
  $OUTPUT->redirect(array('_action' => 'compose', '_id' => $_SESSION['compose']['id']));
@@ -71,13 +75,13 @@
$OUTPUT->set_env('mailbox', $IMAP->get_mailbox_name());
// get reference message and set compose mode
if ($msg_uid = $_SESSION['compose']['param']['_reply_uid'])
if ($msg_uid = $_SESSION['compose']['param']['reply_uid'])
  $compose_mode = RCUBE_COMPOSE_REPLY;
else if ($msg_uid = $_SESSION['compose']['param']['_forward_uid'])
else if ($msg_uid = $_SESSION['compose']['param']['forward_uid'])
  $compose_mode = RCUBE_COMPOSE_FORWARD;
else if ($msg_uid = $_SESSION['compose']['param']['_uid'])
else if ($msg_uid = $_SESSION['compose']['param']['uid'])
  $compose_mode = RCUBE_COMPOSE_EDIT;
else if ($msg_uid = $_SESSION['compose']['param']['_draft_uid']) {
else if ($msg_uid = $_SESSION['compose']['param']['draft_uid']) {
  $RCMAIL->imap->set_mailbox($CONFIG['drafts_mbox']);
  $compose_mode = RCUBE_COMPOSE_DRAFT;
}
@@ -98,7 +102,7 @@
    $_SESSION['compose']['reply_msgid'] = $MESSAGE->headers->messageID;
    $_SESSION['compose']['references']  = trim($MESSAGE->headers->references . " " . $MESSAGE->headers->messageID);
    if (!empty($_SESSION['compose']['param']['_all']))
    if (!empty($_SESSION['compose']['param']['all']))
      $MESSAGE->reply_all = 1;
  }
  else if ($compose_mode == RCUBE_COMPOSE_DRAFT)
@@ -138,23 +142,23 @@
    case 'to':
      $fname = '_to';
      $header = 'to';
      $header = $param = 'to';
      
      // we have a set of recipients stored is session
      if (($mailto_id = $_SESSION['compose']['param']['_mailto']) && $_SESSION['mailto'][$mailto_id])
      if (($mailto_id = $_SESSION['compose']['param']['mailto']) && $_SESSION['mailto'][$mailto_id])
        $fvalue = urldecode($_SESSION['mailto'][$mailto_id]);
      
    case 'cc':
      if (!$fname)
      {
        $fname = '_cc';
        $header = 'cc';
        $header = $param = 'cc';
      }
    case 'bcc':
      if (!$fname)
      {
        $fname = '_bcc';
        $header = 'bcc';
        $header = $param = 'bcc';
      }
        
      $allow_attrib = array('id', 'class', 'style', 'cols', 'rows', 'tabindex');
@@ -164,17 +168,19 @@
    case 'replyto':
    case 'reply-to':
      $fname = '_replyto';
      $param = 'replyto';
      $allow_attrib = array('id', 'class', 'style', 'size', 'tabindex');
      $field_type = 'html_inputfield';
      break;
  }
 
  if ($fname && !empty($_POST[$fname]))
  if ($fname && !empty($_POST[$fname])) {
    $fvalue = get_input_value($fname, RCUBE_INPUT_POST, TRUE);
  else if ($fname && !$fvalue && !empty($_SESSION['compose']['param'][$fname]))
    $fvalue = $_SESSION['compose']['param'][$fname];
  else if ($header && $compose_mode == RCUBE_COMPOSE_REPLY)
  {
  }
  else if ($fname && !$fvalue && !empty($_SESSION['compose']['param'][$param])) {
    $fvalue = $_SESSION['compose']['param'][$param];
  }
  else if ($header && $compose_mode == RCUBE_COMPOSE_REPLY) {
    // get recipent address(es) out of the message headers
    if ($header=='to' && !empty($MESSAGE->headers->replyto))
      $fvalue = $MESSAGE->headers->replyto;
@@ -298,7 +304,7 @@
      $select_from->add(format_email_recipient($sql_arr['email'], $sql_arr['name']), $identity_id);
      // add signature to array
      if (!empty($sql_arr['signature']) && empty($_SESSION['compose']['param']['_nosig']))
      if (!empty($sql_arr['signature']) && empty($_SESSION['compose']['param']['nosig']))
      {
        $a_signatures[$identity_id]['text'] = $sql_arr['signature'];
        $a_signatures[$identity_id]['is_html'] = ($sql_arr['html_signature'] == 1) ? true : false;
@@ -369,6 +375,11 @@
  {
    $body = get_input_value('_message', RCUBE_INPUT_POST, true);
  }
  else if ($_SESSION['compose']['param']['body'])
  {
    $body = $_SESSION['compose']['param']['body'];
    $isHtml = false;
  }
  else if ($compose_mode)
  {
    if (($isHtml || $compose_mode == RCUBE_COMPOSE_DRAFT) && $MESSAGE->has_html_part())
@@ -392,9 +403,9 @@
    else if ($compose_mode == RCUBE_COMPOSE_DRAFT || $compose_mode == RCUBE_COMPOSE_EDIT)
      $body = rcmail_create_draft_body($body, $isHtml);
  }
  else if (!empty($_SESSION['compose']['param']['_body']))
  else if (!empty($_SESSION['compose']['param']['body']))
  {
    $body = $_SESSION['compose']['param']['_body'];
    $body = $_SESSION['compose']['param']['body'];
  }
  $out = $form_start ? "$form_start\n" : '';
@@ -719,8 +730,8 @@
  else if ($compose_mode == RCUBE_COMPOSE_DRAFT || $compose_mode == RCUBE_COMPOSE_EDIT) {
    $subject = $MESSAGE->subject;
  }
  else if (!empty($_SESSION['compose']['param']['_subject'])) {
    $subject = $_SESSION['compose']['param']['_subject'];
  else if (!empty($_SESSION['compose']['param']['subject'])) {
    $subject = $_SESSION['compose']['param']['subject'];
  }
  
  $out = $form_start ? "$form_start\n" : '';