*
* Functions require SM_PATH and support of forms.php functions
*
- * @copyright © 1999-2007 The SquirrelMail Project Team
+ * @copyright © 1999-2009 The SquirrelMail Project Team
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
* @version $Id$
* @package squirrelmail
}
$r = $abook->add_backend('local_file',array('filename'=>$abook_global_filename,
- 'name' => _("Global address book"),
+ 'name' => _("Global Address Book"),
'detect_writeable' => false,
'line_length' => $abook_file_line_length,
'writeable'=> $abook_global_file_writeable,
$r = $abook->add_backend('database',
Array('dsn' => $addrbook_global_dsn,
'owner' => 'global',
- 'name' => _("Global address book"),
+ 'name' => _("Global Address Book"),
'writeable' => $addrbook_global_writeable,
'listing' => $addrbook_global_listing,
'table' => $addrbook_global_table));
}
/**
- * Display the "new address" form
+ * Constructs the "new address" form
+ *
+ * NOTE! The form is not closed - the caller
+ * must add the closing form tag itself.
*
- * Form is not closed and you must add closing form tag.
* @since 1.5.1
- * @param string $form_url form action url
- * @param string $name form name
- * @param string $title form title
- * @param string $button form button name
- * @param array $defdata values of form fields
+ *
+ * @param string $form_url Form action url
+ * @param string $name Form name
+ * @param string $title Form title
+ * @param string $button Form button name
+ * @param int $backend The current backend being displayed
+ * @param array $defdata Values of form fields
+ *
+ * @return string The desired address form display code
+ *
*/
-function abook_create_form($form_url,$name,$title,$button,$defdata=array()) {
+function abook_create_form($form_url, $name, $title, $button,
+ $backend, $defdata=array()) {
+
global $oTemplate;
- echo addForm($form_url, 'post', 'f_add');
+ $output = addForm($form_url, 'post', 'f_add');
if ($button == _("Update address")) {
$edit = true;
$oTemplate->assign('writable_backends', $backends);
$oTemplate->assign('values', $values);
$oTemplate->assign('edit', $edit);
+ $oTemplate->assign('current_backend', $backend);
- $oTemplate->display('addrbook_addedit.tpl');
+ $output .= $oTemplate->fetch('addrbook_addedit.tpl');
+
+ return $output;
}
/**
* This function shows the address book sort button.
*
- * @param integer $abook_sort_order current sort value
- * @param string $alt_tag alt tag value (string visible to text only browsers)
- * @param integer $Down sort value when list is sorted ascending
- * @param integer $Up sort value when list is sorted descending
+ * @param integer $abook_sort_order Current sort value
+ * @param string $alt_tag The alt tag value (string
+ * visible to text only browsers)
+ * @param integer $Down Sort value when list is sorted
+ * ascending
+ * @param integer $Up Sort value when list is sorted
+ * descending
+ * @param array $uri_extra Any additional parameters to add
+ * to the button's link, as an
+ * associative array of key/value pairs
+ * (OPTIONAL; default none)
+ *
* @return string html code with sorting images and urls
+ *
*/
-function show_abook_sort_button($abook_sort_order, $alt_tag, $Down, $Up ) {
+function show_abook_sort_button($abook_sort_order, $alt_tag,
+ $Down, $Up, $uri_extra=array() ) {
+
global $form_url, $icon_theme_path;
/* Figure out which image we want to use. */
$which = 8;
}
+ $uri_extra['abook_sort_order'] = $which;
+ $uri = set_uri_vars($form_url, $uri_extra, FALSE);
+
/* Now that we have everything figured out, show the actual button. */
- return ' <a href="' . $form_url .'?abook_sort_order=' . $which .
- '" style="text-decoration:none" title="'.$alt_tag.'">' .
- getIcon($icon_theme_path, $img, $text_icon, $alt_tag) .
- '</a>';
+ return create_hyperlink($uri,
+ getIcon($icon_theme_path, $img, $text_icon, $alt_tag),
+ '', '', '', '', '',
+ array('style' => 'text-decoration:none',
+ 'title' => $alt_tag),
+ FALSE);
}
* Constructor function.
*/
function AddressBook() {
- $this->localbackendname = _("Personal address book");
+ $this->localbackendname = _("Personal Address Book");
}
/**
function full_address($row) {
global $data_dir, $username;
$addrsrch_fullname = getPref($data_dir, $username, 'addrsrch_fullname');
- if ($addrsrch_fullname == 'fullname')
- return $row['name'] . ' <' . trim($row['email']) . '>';
- else if ($addrsrch_fullname == 'nickname')
- return $row['nickname'] . ' <' . trim($row['email']) . '>';
- else // "noprefix"
- return trim($row['email']);
+
+ // allow multiple addresses in one row (poor person's grouping - bah)
+ // (separate with commas)
+ //
+ $return = '';
+ $addresses = explode(',', $row['email']);
+ foreach ($addresses as $address) {
+
+ if (!empty($return)) $return .= ', ';
+
+ if ($addrsrch_fullname == 'fullname')
+ $return .= '"' . $row['name'] . '" <' . trim($address) . '>';
+ else if ($addrsrch_fullname == 'nickname')
+ $return .= '"' . $row['nickname'] . '" <' . trim($address) . '>';
+ else // "noprefix"
+ $return .= trim($address);
+
+ }
+
+ return $return;
}
/**
/**
- * Lookup an address by alias.
+ * Lookup an address by the indicated field.
+ *
* Only possible in local backends.
- * @param string $alias
- * @param integer backend number
- * @return array lookup results. False, if not found.
+ *
+ * @param string $value The value to look up
+ * @param integer $bnum The number of the backend to
+ * look within (OPTIONAL; defaults
+ * to look in all local backends)
+ * @param integer $field The field to look in, should be one
+ * of the SM_ABOOK_FIELD_* constants
+ * defined in include/constants.php
+ * (OPTIONAL; defaults to nickname field)
+ * NOTE: uniqueness is only guaranteed
+ * when the nickname field is used here;
+ * otherwise, the first matching address
+ * is returned.
+ *
+ * @return mixed Array with lookup results when the value
+ * was found, an empty array if the value was
+ * not found, or false if an error occured.
+ *
*/
- function lookup($alias, $bnum = -1) {
+ function lookup($value, $bnum = -1, $field = SM_ABOOK_FIELD_NICKNAME) {
$ret = array();
$this->error = _("Unknown address book backend");
return false;
}
- $res = $this->backends[$bnum]->lookup($alias);
+ $res = $this->backends[$bnum]->lookup($value, $field);
if (is_array($res)) {
return $res;
} else {
for ($i = 0 ; $i < sizeof($sel) ; $i++) {
$backend = &$sel[$i];
$backend->error = '';
- $res = $backend->lookup($alias);
+ $res = $backend->lookup($value, $field);
+
+ // return an address if one is found
+ // (empty array means lookup concluded
+ // but no result found - in this case,
+ // proceed to next backend)
+ //
if (is_array($res)) {
- if(!empty($res))
- return $res;
+ if (!empty($res)) return $res;
} else {
- $this->error = $backend->error;
- return false;
+ $this->error = $backend->error;
+ return false;
}
}
}
/**
- * Find entry in backend by alias
- * @param string $alias name used for id
- * @return bool
+ * Find entry in backend by the indicated field
+ *
+ * @param string $value The value to look up
+ * @param integer $field The field to look in, should be one
+ * of the SM_ABOOK_FIELD_* constants
+ * defined in include/constants.php
+ * NOTE: uniqueness is only guaranteed
+ * when the nickname field is used here;
+ * otherwise, the first matching address
+ * is returned.
+ *
+ * @return mixed Array with lookup results when the value
+ * was found, an empty array if the value was
+ * not found, or false if an error occured.
+ *
*/
- function lookup($alias) {
+ function lookup($value, $field) {
$this->set_error('lookup is not implemented');
return false;
}
* @since 1.5.2
*/
function fullname($firstname,$lastname) {
- /**
- * i18n: allows to control fullname layout in address book listing
- * first %s is for first name, second %s is for last name.
- * Translate it to '%2$s %1$s', if surname must be displayed first in your language.
- * Please note that variables can be set to empty string and extra formating
- * (for example '%2$s, %1$s' as in 'Smith, John') might break. Use it only for
- * setting name and surname order. scripts will remove all prepended and appended
- * whitespace.
- */
+ // i18n: allows to control fullname layout in address book listing
+ // first %s is for first name, second %s is for last name.
+ // Translate it to '%2$s %1$s', if surname must be displayed first in your language.
+ // Please note that variables can be set to empty string and extra formating
+ // (for example '%2$s, %1$s' as in 'Smith, John') might break. Use it only for
+ // setting name and surname order. scripts will remove all prepended and appended
+ // whitespace.
return trim(sprintf(dgettext('squirrelmail',"%s %s"),$firstname,$lastname));
}
}