$header['from'] = $from;
$header['replyto'] = $identity->getValue('replyto_addr');
- $header['to'] = $imp_ui->getAddressList(Horde_Util::getFormData('to'), Horde_Util::getFormData('to_list'), Horde_Util::getFormData('to_field'), Horde_Util::getFormData('to_new'));
+ $header['to'] = $imp_ui->getAddressList(Horde_Util::getFormData('to'));
if ($prefs->getValue('compose_cc')) {
- $header['cc'] = $imp_ui->getAddressList(Horde_Util::getFormData('cc'), Horde_Util::getFormData('cc_list'), Horde_Util::getFormData('cc_field'), Horde_Util::getFormData('cc_new'));
+ $header['cc'] = $imp_ui->getAddressList(Horde_Util::getFormData('cc'));
}
if ($prefs->getValue('compose_bcc')) {
- $header['bcc'] = $imp_ui->getAddressList(Horde_Util::getFormData('bcc'), Horde_Util::getFormData('bcc_list'), Horde_Util::getFormData('bcc_field'), Horde_Util::getFormData('bcc_new'));
+ $header['bcc'] = $imp_ui->getAddressList(Horde_Util::getFormData('bcc'));
}
$message = Horde_Util::getFormData('message');
new IMP_Application(array('init' => true, 'tz' => true));
/* The message text and headers. */
+$expand = array();
+$header = array('to' => '', 'cc' => '', 'bcc' => '');
$msg = '';
-$header = array();
+
+/* Get the list of headers to display. */
+$display_hdrs = array('to' => _("To: "));
+if ($prefs->getValue('compose_cc')) {
+ $display_hdrs['cc'] = _("Cc: ");
+}
+if ($prefs->getValue('compose_bcc')) {
+ $display_hdrs['bcc'] = ("Bcc: ");
+}
/* Set the current identity. */
$identity = Horde_Prefs_Identity::singleton(array('imp', 'imp'));
$compose_disable = !IMP::canCompose();
/* Initialize the IMP_Compose:: object. */
-$imp_compose = IMP_Compose::singleton(Horde_Util::getFormData('composeCache'));
+$composeCache = Horde_Util::getFormData('composeCache');
+$imp_compose = IMP_Compose::singleton($composeCache);
+
+foreach (array_keys($display_hdrs) as $val) {
+ $header[$val] = Horde_Util::getFormData($val);
+
+ /* If we are reloading the screen, check for expand matches. */
+ if ($composeCache) {
+ $expanded = array();
+ for ($i = 0; $i < 5; ++$i) {
+ if ($tmp = Horde_Util::getFormData($val . '_expand_' . $i)) {
+ $expanded[] = $tmp;
+ }
+ }
+ if (!empty($expanded)) {
+ $header['to'] = strlen($header['to'])
+ ? implode(', ', $expanded) . ', ' . $header['to']
+ : implode(', ', $expanded);
+ }
+ }
+}
/* Run through the action handlers. */
$actionID = Horde_Util::getFormData('a');
case _("Expand Names"):
$action = Horde_Util::getFormData('action');
$imp_ui = new IMP_Ui_Compose();
- $header['to'] = $imp_ui->expandAddresses(Horde_Util::getFormData('to'), $imp_compose);
- if ($action !== 'rc') {
- if ($prefs->getValue('compose_cc')) {
- $header['cc'] = $imp_ui->expandAddresses(Horde_Util::getFormData('cc'), $imp_compose);
- }
- if ($prefs->getValue('compose_bcc')) {
- $header['bcc'] = $imp_ui->expandAddresses(Horde_Util::getFormData('bcc'), $imp_compose);
+
+ foreach (array_keys($display_hdrs) as $val) {
+ if (($val == 'to') || ($action != 'rc')) {
+ $res = $imp_ui->expandAddresses($header[$val], $imp_compose);
+ if (is_string($res)) {
+ $header[$val] = $res;
+ } else {
+ $header[$val] = $res[0];
+ $expand[$val] = array_slice($res, 1);
+ }
}
}
+
if (!is_null($action)) {
$actionID = $action;
}
break;
}
$actions = array('r' => 'reply', 'ra' => 'reply_all', 'rl' => 'reply_list');
- $reply_msg = $imp_compose->replyMessage($actions[$actionID], $imp_contents, Horde_Util::getFormData('to'));
+ $reply_msg = $imp_compose->replyMessage($actions[$actionID], $imp_contents, $header['to']);
$header = $reply_msg['headers'];
$notification->push(_("Reply text will be automatically appended to your outgoing message."), 'horde.message');
$imp_ui = new IMP_Ui_Compose();
- $f_to = $imp_ui->getAddressList(Horde_Util::getFormData('to'));
+ $f_to = $imp_ui->getAddressList($header['to']);
try {
$imp_ui->redirectMessage($f_to, $imp_compose, $imp_contents);
}
$message = Horde_Util::getFormData('message', '');
- $f_to = Horde_Util::getFormData('to');
+ $f_to = $header['to'];
$f_cc = $f_bcc = null;
+ $old_header = $header;
$header = array();
$thismailbox = $imp_compose->getMetadata('mailbox');
$imp_ui = new IMP_Ui_Compose();
- $header['to'] = $imp_ui->getAddressList(Horde_Util::getFormData('to'));
- if ($prefs->getValue('compose_cc')) {
- $header['cc'] = $imp_ui->getAddressList(Horde_Util::getFormData('cc'));
- }
- if ($prefs->getValue('compose_bcc')) {
- $header['bcc'] = $imp_ui->getAddressList(Horde_Util::getFormData('bcc'));
+ foreach ($display_hdrs as $val) {
+ $header[$val] = $imp_ui->getAddressList($old_header[$val]);
}
switch ($actionID) {
if (empty($msg)) {
$msg = Horde_Util::getFormData('message', '');
}
-foreach (array('to', 'cc', 'bcc', 'subject') as $val) {
- if (empty($header[$val])) {
- $header[$val] = Horde_Util::getFormData($val);
- }
+if (empty($header['subject'])) {
+ $header['subject'] = Horde_Util::getFormData('subject');
}
$menu = new Horde_Mobile_card('o', _("Menu"));
-$mset = &$menu->add(new Horde_Mobile_linkset());
+$mset = $menu->add(new Horde_Mobile_linkset());
IMP_Mimp::addMIMPMenu($mset, 'compose');
if ($actionID == 'rc') {
/* Catch submits if javascript is not present. */
if (!($actionID = Horde_Util::getFormData('actionID'))) {
- foreach (array('send_message', 'save_draft', 'cancel_compose', 'add_attachment', 'compose_expand_addr') as $val) {
+ foreach (array('send_message', 'save_draft', 'cancel_compose', 'add_attachment') as $val) {
if (Horde_Util::getFormData('btn_' . $val)) {
$actionID = $val;
break;
$encoding = empty($charset) ? Horde_Nls::getEmailCharset() : $charset;
/* Is this a popup window? */
-$has_js = $browser->hasFeature('javascript');
-$isPopup = (($prefs->getValue('compose_popup') || Horde_Util::getFormData('popup')) && $has_js);
+$isPopup = ($prefs->getValue('compose_popup') || Horde_Util::getFormData('popup'));
/* Determine the composition type - text or HTML.
$rtemode is null if browser does not support it. */
$get_sig = false;
break;
-case 'compose_expand_addr':
-case 'redirect_expand_addr':
- $header['to'] = $imp_ui->expandAddresses(Horde_Util::getFormData('to'), $imp_compose);
- if ($actionID == 'compose_expand_addr') {
- $header['cc'] = $imp_ui->expandAddresses(Horde_Util::getFormData('cc'), $imp_compose);
- $header['bcc'] = $imp_ui->expandAddresses(Horde_Util::getFormData('bcc'), $imp_compose);
- }
- $get_sig = false;
- break;
-
case 'reply':
case 'reply_all':
case 'reply_auto':
break;
}
- $f_to = Horde_Util::getFormData('to', $imp_ui->getAddressList(Horde_Util::getFormData('to'), Horde_Util::getFormData('to_list'), Horde_Util::getFormData('to_field'), Horde_Util::getFormData('to_new')));
+ $f_to = $imp_ui->getAddressList(Horde_Util::getFormData('to'));
try {
$imp_ui->redirectMessage($f_to, $imp_compose, $imp_contents);
}
$header['replyto'] = $identity->getValue('replyto_addr');
- $header['to'] = $imp_ui->getAddressList(Horde_Util::getFormData('to'), Horde_Util::getFormData('to_list'), Horde_Util::getFormData('to_field'), Horde_Util::getFormData('to_new'));
+ $header['to'] = $imp_ui->getAddressList(Horde_Util::getFormData('to'));
if ($prefs->getValue('compose_cc')) {
- $header['cc'] = $imp_ui->getAddressList(Horde_Util::getFormData('cc'), Horde_Util::getFormData('cc_list'), Horde_Util::getFormData('cc_field'), Horde_Util::getFormData('cc_new'));
+ $header['cc'] = $imp_ui->getAddressList(Horde_Util::getFormData('cc'));
}
if ($prefs->getValue('compose_bcc')) {
- $header['bcc'] = $imp_ui->getAddressList(Horde_Util::getFormData('bcc'), Horde_Util::getFormData('bcc_list'), Horde_Util::getFormData('bcc_field'), Horde_Util::getFormData('bcc_new'));
+ $header['bcc'] = $imp_ui->getAddressList(Horde_Util::getFormData('bcc'));
}
$message = Horde_Util::getFormData('message');
$composeCacheID = $imp_compose->getCacheId();
/* Are we in redirect mode? */
-$redirect = in_array($actionID, array('redirect_compose', 'redirect_expand_addr'));
+$redirect = ($actionID == 'redirect_compose');
/* Attach autocompleters to the compose form elements. */
$spellcheck = false;
-if ($has_js) {
+if ($browser->hasFeature('javascript')) {
if ($redirect) {
$imp_ui->attachAutoCompleter(array('to'));
} else {
foreach (array('to', 'cc', 'bcc', 'subject') as $val) {
if (!isset($header[$val])) {
- $header[$val] = Horde_Util::getFormData($val, $imp_ui->getAddressList(Horde_Util::getFormData($val), Horde_Util::getFormData($val . '_list'), Horde_Util::getFormData($val . '_field'), Horde_Util::getFormData($val . '_new')));
+ $header[$val] = $imp_ui->getAddressList(Horde_Util::getFormData($val));
}
}
if ($registry->hasMethod('contacts/search')) {
$t->set('has_search', true);
$t->set('abook', Horde::link('#', _("Address Book"), 'widget', null, 'window.open(\'' . Horde::applicationUrl('contacts.php')->add(array('formname' => 'redirect', 'to_only' => 1)) . '\', \'contacts\', \'toolbar=no,location=no,status=no,scrollbars=yes,resizable=yes,width=550,height=300,left=100,top=100\'); return false;') . Horde::img('addressbook_browse.png') . '<br />' . _("Address Book") . '</a>');
- if (!$has_js) {
- $t->set('expand', Horde::link('#', _("Expand Names"), 'widget', null, "$('actionID').value='redirect_expand_addr';ImpCompose.uniqSubmit();return false;") . Horde::img('expand.png') . '<br />' . _("Expand Names") . '</a>', true);
- }
}
$t->set('to', Horde::label('to', _("To")));
-
- $tabindex = -1;
- if (is_array($header['to'])) {
- $t->set('multiple_to', true);
- $first_to = true;
- $to_hdrs = array();
- foreach ($header['to'] as $to_item) {
- $entry = array();
- if (count($to_item) > 1) {
- $entry['multiple'] = true;
- $entry['select_tabindex'] = ++$tabindex;
- $entry['select_name'] = htmlspecialchars($to_item[0]);
- $entry['select_to'] = array();
- for ($i = 1, $items = count($to_item); $i < $items; ++$i) {
- $entry['select_to'][] = array('val' => htmlspecialchars($to_item[$i]));
- }
- } else {
- $entry['multiple'] = null;
- $entry['input_value'] = htmlspecialchars($to_item);
- }
- $entry['input_tabindex'] = ++$tabindex;
-
- if ($first_to) {
- $first_to = false;
- $entry['help'] = Horde_Help::link('imp', 'compose-to');
- } else {
- $entry['help'] = null;
- }
- $to_hdrs[] = $entry;
- }
- $t->set('to_new_tabindex', ++$tabindex);
- $t->set('to_hdrs', $to_hdrs);
- } else {
- $t->set('input_tabindex', ++$tabindex);
- $t->set('input_value', htmlspecialchars($header['to']));
- $t->set('help', Horde_Help::link('imp', 'compose-to'));
- }
+ $t->set('input_value', htmlspecialchars($header['to']));
+ $t->set('help', Horde_Help::link('imp', 'compose-to'));
$template_output = $t->fetch(IMP_TEMPLATES . '/compose/redirect.html');
} else {
$address_array = array();
foreach ($addr_array as $val => $label) {
- $addr = array(
+ $address_array[] = array(
'id' => $val,
- 'label' => Horde::label($val, $label),
+ 'input_tabindex' => ++$tabindex,
+ 'input_value' => htmlspecialchars($header[$val]),
+ 'label' => Horde::label($val, $label)
);
-
- $first_addr = false;
- if (is_array($header[$val])) {
- $addr['multiple'] = true;
- $first_addr = true;
- $hdrs = array();
- foreach ($header[$val] as $item) {
- $entry = array();
- if (count($item) > 1) {
- $entry['multiple'] = true;
- $entry['select_tabindex'] = ++$tabindex;
- $entry['select_name'] = htmlspecialchars($item[0]);
- $entry['select_arr'] = array();
- for ($i = 1, $items = count($item); $i < $items; ++$i) {
- $entry['select_arr'][] = array('val' => htmlspecialchars($item[$i]));
- }
- $entry['input_value'] = null;
- } else {
- $entry['multiple'] = null;
- $entry['input_value'] = htmlspecialchars($item);
- }
- $entry['input_tabindex'] = ++$tabindex;
-
- if ($first_addr) {
- $first_addr = false;
- $entry['help'] = Horde_Help::link('imp', 'compose-' . $val);
- } else {
- $entry['help'] = null;
- }
- $hdrs[] = $entry;
- }
- $addr['hdrs'] = $hdrs;
- } else {
- $addr['multiple'] = false;
- $addr['input_tabindex'] = ++$tabindex;
- $addr['input_value'] = htmlspecialchars($header[$val]);
- }
- $address_array[] = $addr;
}
$t->set('addr', $address_array);
$compose_options[] = array(
'url' => Horde::link('#', '', 'widget', null, 'window.open(\'' . Horde::applicationUrl('contacts.php') . '\', \'contacts\', \'toolbar=no,location=no,status=no,scrollbars=yes,resizable=yes,width=550,height=300,left=100,top=100\'); return false;'),
'img' => Horde::img('addressbook_browse.png'),
- 'label' => $show_text ? _("Address Book") : '');
- if (!$has_js) {
- $compose_options[] = array(
- 'url' => Horde::link(
- '#', '', 'widget', null,
- "ImpCompose.uniqSubmit('compose_expand_addr'); return false;",
- '', '', array('name' => 'btn_compose_expand_addr')),
- 'img' => Horde::img('expand.png'),
- 'label' => $show_text ? _("Expand Names") : '');
- }
+ 'label' => $show_text ? _("Address Book") : ''
+ );
}
if ($spellcheck) {
$compose_options[] = array(
v5.0-git
--------
+[mms] Improved address expansion in MIMP.
[mms] Load folders on-demand in sidebar (DIMP).
[mms] Add priority setting to DIMP.
[mms] Simplify and improve priority header generation/display.
$addr = $headers[$k];
if ($session) {
try {
- Horde_Mime::encodeAddress($this->formatAddr($addr), $charset, $_SESSION['imp']['maildomain']);
+ Horde_Mime::encodeAddress(self::formatAddr($addr), $charset, $_SESSION['imp']['maildomain']);
} catch (Horde_Mime_Exception $e) {
throw new IMP_Compose_Exception(sprintf(_("Saving the draft failed. The %s header contains an invalid e-mail address: %s."), $k, $e->getMessage()), $e->getCode());
}
$headers = array();
foreach (array('to', 'cc', 'bcc', 'subject') as $val) {
- $headers[$val] = $imp_ui->getAddressList(Horde_Util::getFormData($val), Horde_Util::getFormData($val . '_list'), Horde_Util::getFormData($val . '_field'), Horde_Util::getFormData($val . '_new'));
+ $headers[$val] = $imp_ui->getAddressList(Horde_Util::getFormData($val));
}
try {
{
/* If there are angle brackets (<>), or a colon (group name
* delimiter), assume the user knew what they were doing. */
- return (!empty($addr) && (strpos($addr, '>') === false) && (strpos($addr, ':') === false))
+ return (!empty($addr) &&
+ (strpos($addr, '>') === false) &&
+ (strpos($addr, ':') === false))
? preg_replace('|\s+|', ', ', trim(strtr($addr, ';,', ' ')))
: $addr;
}
class IMP_Ui_Compose
{
/**
+ * Expand addresses in a string. Only the last address in the string will
+ * be expanded.
+ *
+ * @var string $input The input string.
+ * @var IMP_Compose $imp_compose An IMP_Compose object.
+ *
+ * @return mixed If a string, this value should be used as the new
+ * input string. If an array, the first value is the
+ * input string without the search string; the second
+ * value is the search string; and the third value is
+ * the list of matching addresses.
*/
public function expandAddresses($input, $imp_compose)
{
- $addr_list = $this->getAddressList($input);
+ $addr_list = $this->getAddressList($input, array('addr_list' => true));
if (empty($addr_list)) {
return '';
}
- $res = $imp_compose->expandAddresses($addr_list);
+ $search = array_pop($addr_list);
+
+ /* Don't search if the search string looks like an e-mail address. */
+ if ((strpos($search, '<') !== false) ||
+ (strpos($search, '@') !== false)) {
+ array_push($addr_list, $search);
+ return implode(', ', $addr_list);
+ }
+
+ $res = $imp_compose->expandAddresses($search, array('levenshtein' => true));
- if (is_array($res)) {
- $GLOBALS['notification']->push(_("Please resolve ambiguous or invalid addresses."), 'horde.warning');
+ if (count($res) == 1) {
+ array_push($addr_list, reset($res));
+ return implode(', ', $addr_list);
}
- return $res;
+ $GLOBALS['notification']->push(_("Ambiguous address found."), 'horde.warning');
+
+ return array(
+ implode(', ', $addr_list),
+ $search,
+ $res
+ );
}
/**
}
/**
+ * Given an address input, parses the input to obtain the list of
+ * addresses to use on the compose page.
+ *
+ * @param string $addr The value of the header string.
+ * @param array $opts Additional options:
+ * <pre>
+ * 'addr_list' - (boolean) Return the list of address components?
+ * DEFAULT: false
+ * </pre>
+ *
+ * @return mixed TODO
*/
- public function getAddressList($to, $to_list = array(), $to_field = array(),
- $to_new = '', $expand = false)
+ public function getAddressList($addr, $opts = array())
{
- $to = rtrim(trim($to), ',');
- if (!empty($to)) {
+ $addr = rtrim(trim($addr), ',');
+ $addr_list = array();
+
+ if (!empty($addr)) {
// Although we allow ';' to delimit addresses in the UI, need to
// convert to RFC-compliant ',' delimiter for processing.
- $clean_to = '';
- foreach (Horde_Mime_Address::explode($to, ',;') as $val) {
- $val = trim($val);
- $clean_to .= $val . (($val[Horde_String::length($val) - 1] == ';') ? ' ' : ', ');
- }
- if ($expand) {
- return $clean_to;
- } else {
- return IMP_Compose::formatAddr($clean_to);
- }
- }
-
- $tmp = array();
- if (is_array($to_field)) {
- foreach ($to_field as $key => $address) {
- $tmp[$key] = $address;
- }
- }
- if (is_array($to_list)) {
- foreach ($to_list as $key => $address) {
- if ($address != '') {
- $tmp[$key] = $address;
- }
+ foreach (Horde_Mime_Address::explode($addr, ',;') as $val) {
+ $addr_list[] = IMP_Compose::formatAddr(trim($val));
}
}
- $to_new = rtrim(trim($to_new), ',');
- if (!empty($to_new)) {
- $tmp[] = $to_new;
- }
- return implode(', ', $tmp);
+ return empty($opts['addr_list'])
+ ? implode(', ', $addr_list)
+ : $addr_list;
}
/**
<?php
-$c = &$mimp_render->add(new Horde_Mobile_card('m', $title));
+$c = $mimp_render->add(new Horde_Mobile_card('m', $title));
$c->softkey('#o', _("Menu"));
$imp_notify->setMobileObject($c);
$notification->notify(array('listeners' => 'status'));
-$f = &$c->add(new Horde_Mobile_form('compose-mimp.php'));
+$f = $c->add(new Horde_Mobile_form('compose-mimp.php'));
// Hidden Variables.
$f->add(new Horde_Mobile_hidden('composeCache', $cacheID));
$f->add(new Horde_Mobile_hidden('resume_draft', Horde_Util::getFormData('resume_draft', $resume_draft)));
if (!$prefs->isLocked('default_identity')) {
- $ib = &$f->add(new Horde_Mobile_block(new Horde_Mobile_text(_("Identity: "))));
- $ident_sel = &$ib->add(new Horde_Mobile_select('identity'));
+ $ib = $f->add(new Horde_Mobile_block(new Horde_Mobile_text(_("Identity: "))));
+ $ident_sel = $ib->add(new Horde_Mobile_select('identity'));
$default = Horde_Util::getFormData('identity', $identity->getDefault());
foreach ($select_list as $key => $select) {
$ident_sel->add($select, $key, ($key == $default));
}
}
-$f->add(new Horde_Mobile_input('to', $header['to'], _("To: ")));
-if ($prefs->getValue('compose_cc')) {
- $f->add(new Horde_Mobile_input('cc', $header['cc'], _("Cc: ")));
-}
-if ($prefs->getValue('compose_bcc')) {
- $f->add(new Horde_Mobile_input('bcc', $header['bcc'], _("Bcc: ")));
+foreach ($display_hdrs as $key => $val) {
+ $f->add(new Horde_Mobile_input($key, $header[$key], $val));
+ if (isset($expand[$key])) {
+ if (count($expand[$key][1]) > 5) {
+ $f->add(new Horde_Mobile_text(sprintf(_("Ambiguous matches for \"%s\" (first 5 matches displayed):"), $expand[$key][0])));
+ } else {
+ $f->add(new Horde_Mobile_text(sprintf(_("Ambiguous matches for \"%s\":"), $expand[$key][0])));
+ }
+
+ foreach (array_slice($expand[$key][1], 0, 5) as $key2 => $val2) {
+ $f->add(new Horde_Mobile_checkbox($key . '_expand_' . $key2, htmlspecialchars($val2), $val2, false));
+ }
+ }
}
+
$f->add(new Horde_Mobile_input('subject', $header['subject'], _("Subject: ")));
$f->add(new Horde_Mobile_textarea('message', $msg, _("Message: "), 10, 80));
<loop:addr>
<tr>
<td class="light rightAlign"><strong><tag:addr.label /> </strong></td>
-<if:addr.multiple>
-<loop:addr.hdrs>
- </tr>
- <tr>
- <td class="light"> </td>
-<if:addr.hdrs.multiple>
- <td class="item">
- <select id="<tag:addr.id />" tabindex="<tag:addr.hdrs.select_tabindex />" name="<tag:addr.id />_list[<tag:addr.hdrs.select_name />]" style="width:350px;direction:ltr">
- <option value="" selected="selected"><gettext>Choose a match or edit the address to the right:</gettext></option>
-<loop:addr.hdrs.select_arr>
- <option value="<tag:addr.hdrs.select_arr.val />"><tag:addr.hdrs.select_arr.val /></option>
-</loop:addr.hdrs.select_arr>
- </select>
- <input type="text" size="15" autocomplete="off" tabindex="<tag:addr.hdrs.input_tabindex />" name="<tag:addr.id />_field[<tag:addr.hdrs.select_name />]" value="<tag:addr.hdrs.select_name />" style="width:150px;direction:ltr" />
-<else:addr.hdrs.multiple>
- <td class="item">
- <input type="text" id="<tag:addr.id />" autocomplete="off" tabindex="<tag:addr.hdrs.input_tabindex />" name="<tag:addr.id />_field[]" value="<tag:addr.hdrs.input_value />" style="direction:ltr" />
-</else:addr.hdrs.multiple></if:addr.hdrs.multiple>
- </td>
-</loop:addr.hdrs>
-<else:addr.multiple>
<td class="item addressTr">
<input type="text" id="<tag:addr.id />" autocomplete="off" tabindex="<tag:addr.input_tabindex />" style="direction:ltr" name="<tag:addr.id />" value="<tag:addr.input_value />" />
<span id="<tag:addr.id />_loading_img" style="display:none;" class="loadingImg"></span>
<div id="<tag:addr.id />_results" class="autocomplete"></div>
</td>
-</else:addr.multiple></if:addr.multiple>
</tr>
</loop:addr>
<table cellspacing="0" width="100%">
<tr>
<td align="center"><tag:abook /></td>
- <if:expand><td align="center"><tag:expand /></td></if:expand>
</tr>
</table>
</td>
<td class="light rightAlign"><strong><tag:to /> </strong></td>
<td class="item leftAlign">
<table border="0" width="100%" cellpadding="0">
-<if:multiple_to>
-<loop:to_hdrs>
<tr>
<td class="leftAlign">
-<if:to_hdrs.multiple>
- <table border="0" cellspacing="0" cellpadding="0">
- <tr>
- <td width="350">
- <select id="to" tabindex="<tag:to_hdrs.select_tabindex />" name="to_list[<tag:to_hdrs.select_name />]" style="width:350px">
- <option value="" selected="selected"><gettext>Please select or edit in the box to the right:</gettext></option>
-<loop:to_hdrs.select_to>
- <option value="<tag:to_hdrs.select_to.val />"><tag:to_hdrs.select_to.val /></option>
-</loop:to_hdrs.select_to>
- </select>
- </td>
- <td width="150">
- <label for="to_field_<tag:to_hdrs.select_name />" class="hidden"><gettext>To field</gettext></label>
- <input type="text" size="15" tabindex="<tag:to_hdrs.input_tabindex />" id="to_field_<tag:to_hdrs.select_name />" name="to_field[<tag:to_hdrs.select_name />]" value="<tag:to_hdrs.select_name />" style="width:150px" />
- </td>
- </tr>
- </table>
-<else:to_hdrs.multiple>
- <input type="text" id="to" size="55" tabindex="<tag:to_hdrs.input_tabindex />" name="to_field[]" value="<tag:to_hdrs.input_value />" />
-</else:to_hdrs.multiple></if:to_hdrs.multiple>
- </td>
-<if:to_hdrs.help>
- <td class="rightAlign"><tag:to_hdrs.help /> </td>
-<else:to_hdrs.help>
- <td> </td>
-</else:to_hdrs.help></if:to_hdrs.help>
- </tr>
-</loop:to_hdrs>
- <tr>
- <td class="leftAlign"><input type="text" id="to" size="55" tabindex="<tag:to_new_tabindex />" name="to_new" /></td>
- <td> </td>
- </tr>
-<else:multiple_to>
- <tr>
- <td class="leftAlign">
- <input type="text" id="to" size="55" tabindex="<tag:input_tabindex />" name="to" value="<tag:input_value />" />
+ <input type="text" id="to" size="55" name="to" value="<tag:input_value />" />
<span id="to_loading_img" style="display:none;"><tag:loading_img /></span>
<div id="to_results" class="autocomplete"></div>
</td>
<td class="rightAlign"><tag:help /> </td>
</tr>
-</else:multiple_to></if:multiple_to>
</table>
</td>
</tr>