X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=functions%2Faddressbook.php;h=b65f993b667d6a9630a8360957f3433d7536865b;hb=675c2a6fd06af5eab5890baeb35c1fbea28f2649;hp=8c7648770ad6ec0b523eae86f97e3697702b09cd;hpb=828c58f18565da37215df7d138ba05485ce8c4cd;p=squirrelmail.git
diff --git a/functions/addressbook.php b/functions/addressbook.php
index 8c764877..b65f993b 100644
--- a/functions/addressbook.php
+++ b/functions/addressbook.php
@@ -1,21 +1,16 @@
error;
@@ -182,16 +180,35 @@ function addressbook_init($showerr = true, $onlylocal = false) {
* @param array $defdata values of form fields
*/
function abook_create_form($form_url,$name,$title,$button,$defdata=array()) {
- global $color;
- echo addForm($form_url, 'post', 'f_add').
- html_tag( 'table',
- html_tag( 'tr',
- html_tag( 'td', "\n". '' . $title . '' . "\n",
- 'center', $color[0]
- )
- )
- , 'center', '', 'width="90%"' ) ."\n";
- address_form($name, $button, $defdata);
+ global $oTemplate;
+
+ echo addForm($form_url, 'post', 'f_add');
+
+ if ($button == _("Update address")) {
+ $edit = true;
+ $backends = NULL;
+ } else {
+ $edit = false;
+ $backends = getWritableBackends();
+ }
+
+ $fields = array (
+ 'nickname' => 'NickName',
+ 'firstname' => 'FirstName',
+ 'lastname' => 'LastName',
+ 'email' => 'Email',
+ 'label' => 'Info',
+ );
+ $values = array();
+ foreach ($fields as $sqm=>$template) {
+ $values[$template] = isset($defdata[$sqm]) ? $defdata[$sqm] : '';
+ }
+
+ $oTemplate->assign('writable_backends', $backends);
+ $oTemplate->assign('values', $values);
+ $oTemplate->assign('edit', $edit);
+
+ $oTemplate->display('addrbook_addedit.tpl');
}
@@ -213,106 +230,21 @@ function addressbook_cmp($a,$b) {
}
/**
- * Make an input field
- * @param string $label
- * @param string $field
- * @param string $name
- * @param string $size
- * @param array $values
- * @param string $add
- */
-function addressbook_inp_field($label, $field, $name, $size, $values, $add='') {
- global $color;
- $value = ( isset($values[$field]) ? $values[$field] : '');
-
- if (is_array($value)) {
- $td_str = addSelect($name.'['.$field.']', $value);
- } else {
- $td_str = addInput($name.'['.$field.']', $value, $size);
- }
- $td_str .= $add ;
-
- return html_tag( 'tr' ,
- html_tag( 'td', ':', 'right', $color[4]) .
- html_tag( 'td', $td_str, 'left', $color[4])
- )
- . "\n";
-}
-
-/**
- * Output form to add and modify address data
- */
-function address_form($name, $submittext, $values = array()) {
- global $color, $squirrelmail_language;
-
- if ($squirrelmail_language == 'ja_JP') {
- echo html_tag( 'table',
- addressbook_inp_field(_("Nickname"), 'nickname', $name, 15, $values,
- ' ' . _("Must be unique") . '') .
- addressbook_inp_field(_("E-mail address"), 'email', $name, 45, $values, '') .
- addressbook_inp_field(_("Last name"), 'lastname', $name, 45, $values, '') .
- addressbook_inp_field(_("First name"), 'firstname', $name, 45, $values, '') .
- addressbook_inp_field(_("Additional info"), 'label', $name, 45, $values, '') .
- list_writable_backends($name) .
- html_tag( 'tr',
- html_tag( 'td',
- addSubmit($submittext, $name.'[SUBMIT]'),
- 'center', $color[4], 'colspan="2"')
- )
- , 'center', '', 'border="0" cellpadding="1" width="90%"') ."\n";
- } else {
- echo html_tag( 'table',
- addressbook_inp_field(_("Nickname"), 'nickname', $name, 15, $values,
- ' ' . _("Must be unique") . '') .
- addressbook_inp_field(_("E-mail address"), 'email', $name, 45, $values, '') .
- addressbook_inp_field(_("First name"), 'firstname', $name, 45, $values, '') .
- addressbook_inp_field(_("Last name"), 'lastname', $name, 45, $values, '') .
- addressbook_inp_field(_("Additional info"), 'label', $name, 45, $values, '') .
- list_writable_backends($name) .
- html_tag( 'tr',
- html_tag( 'td',
- addSubmit($submittext, $name.'[SUBMIT]') ,
- 'center', $color[4], 'colspan="2"')
- )
- , 'center', '', 'border="0" cellpadding="1" width="90%"') ."\n";
- }
-}
-
-/**
- * Provides list of writeable backends.
- * Works only when address is added ($name='addaddr')
- * @param string $name name of form
- * @return string html formated backend field (select or hidden)
+ * Retrieve a list of writable backends
+ * @since 1.5.2
*/
-function list_writable_backends($name) {
- global $color, $abook;
- if ( $name != 'addaddr' ) { return; }
- $writeable_abook = 1;
- if ( $abook->numbackends > 1 ) {
- $backends = $abook->get_backend_list();
- $writeable_abooks=array();
- while (list($undef,$v) = each($backends)) {
- if ($v->writeable) {
- // add each backend to array
- $writeable_abooks[$v->bnum]=$v->sname;
- // save backend number
- $writeable_abook=$v->bnum;
- }
- }
- if (count($writeable_abooks)>1) {
- // we have more than one writeable backend
- $ret=addSelect('backend',$writeable_abooks,null,true);
- return html_tag( 'tr',
- html_tag( 'td', _("Add to:"),'right', $color[4] ) .
- html_tag( 'td', $ret, 'left', $color[4] )) . "\n";
+function getWritableBackends () {
+ global $abook;
+
+ $write = array();
+ $backends = $abook->get_backend_list();
+ while (list($undef,$v) = each($backends)) {
+ if ($v->writeable) {
+ $write[$v->bnum]=$v->sname;
}
}
- // Only one backend exists or is writeable.
- return html_tag( 'tr',
- html_tag( 'td',
- addHidden('backend', $writeable_abook),
- 'center', $color[4], 'colspan="2"')) . "\n";
+
+ return $write;
}
/**
@@ -512,7 +444,8 @@ class AddressBook {
* NB: Because the backend files are included from within this function they DO NOT have access to
* vars in the global scope. This function is the global scope for the included backend !!!
*/
- $aBackend = do_hook('abook_add_class');
+ global $null;
+ $aBackend = do_hook('abook_add_class', $null);
if (isset($aBackend) && is_array($aBackend) && isset($aBackend[$backend])) {
require_once($aBackend[$backend]);
} else {
@@ -553,15 +486,14 @@ class AddressBook {
* @return string email address with real name prepended
*/
function full_address($row) {
- global $addrsrch_fullname, $data_dir, $username;
- $prefix = getPref($data_dir, $username, 'addrsrch_fullname');
- if (($prefix != "" || (isset($addrsrch_fullname) &&
- $prefix == $addrsrch_fullname)) && $prefix != 'noprefix') {
- $name = ($prefix == 'nickname' ? $row['nickname'] : $row['name']);
- return $name . ' <' . trim($row['email']) . '>';
- } else {
+ 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']);
- }
}
/**
@@ -598,7 +530,11 @@ class AddressBook {
$ret = FALSE;
}
- } else {
+ } elseif (! isset($this->backends[$bnum])) {
+ /* make sure that backend exists */
+ $this->error = _("Unknown address book backend");
+ $ret = false;
+ } else {
/* Search only one backend */
@@ -641,6 +577,10 @@ class AddressBook {
$ret = array();
if ($bnum > -1) {
+ if (!isset($this->backends[$bnum])) {
+ $this->error = _("Unknown address book backend");
+ return false;
+ }
$res = $this->backends[$bnum]->lookup($alias);
if (is_array($res)) {
return $res;
@@ -671,13 +611,17 @@ class AddressBook {
/**
* Return all addresses
* @param integer $bnum backend number
- * @return array search results
+ * @return mixed array with search results or boolean false on error.
*/
function list_addr($bnum = -1) {
$ret = array();
if ($bnum == -1) {
$sel = $this->get_backend_list('');
+ } elseif (! isset($this->backends[$bnum])) {
+ /* make sure that backend exists */
+ $this->error = _("Unknown address book backend");
+ $ret = false;
} else {
$sel = array(0 => &$this->backends[$bnum]);
}
@@ -729,6 +673,12 @@ class AddressBook {
return false;
}
+ /* make sure that backend exists */
+ if (! isset($this->backends[$bnum])) {
+ $this->error = _("Unknown address book backend");
+ return false;
+ }
+
/* Check that specified backend accept new entries */
if (!$this->backends[$bnum]->writeable) {
$this->error = _("Address book is read-only");
@@ -766,6 +716,12 @@ class AddressBook {
$alias = array(0 => $alias);
}
+ /* make sure that backend exists */
+ if (! isset($this->backends[$bnum])) {
+ $this->error = _("Unknown address book backend");
+ return false;
+ }
+
/* Check that specified backend is writable */
if (!$this->backends[$bnum]->writeable) {
$this->error = _("Address book is read-only");
@@ -821,6 +777,12 @@ class AddressBook {
$userdata['nickname'] = $userdata['email'];
}
+ /* make sure that backend exists */
+ if (! isset($this->backends[$bnum])) {
+ $this->error = _("Unknown address book backend");
+ return false;
+ }
+
/* Check that specified backend is writable */
if (!$this->backends[$bnum]->writeable) {
$this->error = _("Address book is read-only");;
@@ -971,18 +933,23 @@ class addressbook_backend {
/**
* Creates full name from given name and surname
*
- * Handles name order differences
+ * Handles name order differences. Function always runs in SquirrelMail gettext domain.
+ * Plugins don't have to switch domains before calling this function.
* @param string $firstname given name
* @param string $lastname surname
* @return string full name
* @since 1.5.2
*/
function fullname($firstname,$lastname) {
- global $squirrelmail_language;
- if ($squirrelmail_language=='ja_JP') {
- return trim($lastname . ' ' . $firstname);
- } else {
- return trim($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.
+ */
+ return trim(sprintf(dgettext('squirrelmail',"%s %s"),$firstname,$lastname));
}
}