X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=functions%2Faddressbook.php;h=9bce2351bab9a360eb51c219d31a2520e33aa8e1;hb=793ee86a81a9465cb8d942e92f1cc12e9d15b834;hp=ef757cf6e78fe39d8cd097701165c221f9b19fd8;hpb=abd74f7defe104b7d691be5670f59a46b0b7d025;p=squirrelmail.git diff --git a/functions/addressbook.php b/functions/addressbook.php index ef757cf6..9bce2351 100644 --- a/functions/addressbook.php +++ b/functions/addressbook.php @@ -1,5 +1,4 @@ $addrbook_global_table)); } + /* + * hook allows to include different address book backends. + * plugins should extract $abook and $r from arguments + * and use same add_backend commands as above functions. + */ + $hookReturn = do_hook('abook_init', $abook, $r); + $abook = $hookReturn[1]; + $r = $hookReturn[2]; + if ($onlylocal) { return $abook; } @@ -213,12 +222,10 @@ class AddressBook { function full_address($row) { global $addrsrch_fullname, $data_dir, $username; - - if (($prefix = getPref($data_dir, $username, 'addrsrch_fullname') or - isset($addrsrch_fullname) and $prefix = $addrsrch_fullname) - and $prefix !== 'noprefix') { - $name = ($prefix === 'nickname') ? $row['nickname'] - : $row['name']; + $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 { return trim($row['email']); @@ -538,8 +545,32 @@ class addressbook_backend { } -/* Sort array by the key "name" */ +/** + * Sort array by the key "name" + */ function alistcmp($a,$b) { + $abook_sort_order=get_abook_sort(); + + switch ($abook_sort_order) { + case 0: + case 1: + $abook_sort='nickname'; + break; + case 4: + case 5: + $abook_sort='email'; + break; + case 6: + case 7: + $abook_sort='label'; + break; + case 2: + case 3: + case 8: + default: + $abook_sort='name'; + } + if ($a['backend'] > $b['backend']) { return 1; } else { @@ -547,9 +578,69 @@ function alistcmp($a,$b) { return -1; } } - return (strtolower($a['name']) > strtolower($b['name'])) ? 1 : -1; + + if( (($abook_sort_order+2) % 2) == 1) { + return (strtolower($a[$abook_sort]) < strtolower($b[$abook_sort])) ? 1 : -1; + } else { + return (strtolower($a[$abook_sort]) > strtolower($b[$abook_sort])) ? 1 : -1; + } +} + +/** + * Address book sorting options + * + * returns address book sorting order + * @return integer book sorting options order + */ +function get_abook_sort() { + global $data_dir, $username; + + /* get sorting order */ + if(sqgetGlobalVar('abook_sort_order', $temp, SQ_GET)) { + $abook_sort_order = (int) $temp; + + if ($abook_sort_order < 0 or $abook_sort_order > 8) + $abook_sort_order=8; + + setPref($data_dir, $username, 'abook_sort_order', $abook_sort_order); + } else { + /* get previous sorting options. default to unsorted */ + $abook_sort_order = getPref($data_dir, $username, 'abook_sort_order', 8); + } + + return $abook_sort_order; } +/** + * 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 + * @return string html code with sorting images and urls + */ +function show_abook_sort_button($abook_sort_order, $alt_tag, $Down, $Up ) { + global $form_url; + + /* Figure out which image we want to use. */ + if ($abook_sort_order != $Up && $abook_sort_order != $Down) { + $img = 'sort_none.png'; + $which = $Up; + } elseif ($abook_sort_order == $Up) { + $img = 'up_pointer.png'; + $which = $Down; + } else { + $img = 'down_pointer.png'; + $which = 8; + } + + /* Now that we have everything figured out, show the actual button. */ + return ' ' . $alt_tag . ''; +} /* PHP 5 requires that the class be made first, which seems rather @@ -570,5 +661,12 @@ if((isset($addrbook_dsn) && !empty($addrbook_dsn)) || include_once(SM_PATH . 'functions/abook_database.php'); } +/* + * hook allows adding different address book classes. + * class must follow address book class coding standards. + * + * see addressbook_backend class and functions/abook_*.php files. + */ +do_hook('abook_add_class'); ?>