<?php
/**
* abook_util.php
*
* The following functions are utility functions for templates. Do not
* echo output in these functions.
*
* @copyright 2005-2020 The SquirrelMail Project Team
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
* @version $Id: abook_util.php 14845 2020年01月07日 08:09:34Z pdontthink $
* @package squirrelmail
*/
/**
* Display a column header with sort buttons
*
* @param string $field Which field to display
* @param array $current_page_args All known query string arguments
* for the current page request; structured
* as an associative array of key/value pairs
*
* @author Steve Brown
* @since 1.5.2
*/
global $abook_sort_order, $nbsp;
switch ($field) {
case 'nickname':
$alt =
_ ("Sort by nickname");
$down = 0;
$up = 1;
$has_sort = true;
break;
case 'fullname':
$alt =
_ ("Sort by name");
$down = 2;
$up = 3;
$has_sort = true;
break;
case 'email':
$alt =
_ ("Sort by email");
$down = 4;
$up = 5;
$has_sort = true;
break;
case 'info':
$alt =
_ ("Sort by info");
$down = 6;
$up = 7;
$has_sort = true;
break;
default:
return 'BAD SORT FIELD GIVEN: "'.$field.'"';
}
// show_abook_sort_button() creates a hyperlink (using hyperlink.tpl) that encompases an image, using a getImage() call
return $str .
($has_sort ?
$nbsp .
show_abook_sort_button ($abook_sort_order, $alt, $down, $up, $current_page_args) :
'');
}
/**
* Creates an address book paginator
*
* @param boolean $abook_page_selector Whether or not to show the page selector
* @param int $abook_page_selector_max The maximum number of page links to show
* on screen
* @param int $page_number What page is being viewed - 0 if not used
* @param int $page_size Maximum number of addresses to be shown
* per page
* @param int $total_addresses The total count of addresses in the backend
* @param boolean $show_all Whether or not all addresses are being shown
* @param array $current_page_args All known query string arguments
* for the current page request; structured
* as an associative array of key/value pairs
* @param boolean $compact Whether or not to build a smaller,
* "compact" paginator
*
* @return string The paginator, ready for output
*
*/
$page_number, $page_size, $total_addresses,
$show_all, $current_page_args, $compact) {
// if showing all, just show pagination link
//
if ($show_all)
{
unset($current_page_args['show_all']);
}
// if we don't have enough information to build the paginator, return nothing
//
if (empty($page_number) || empty($page_size) || empty($total_addresses))
return '';
// calculate some values we need below
//
$show_elipses_before = FALSE;
$show_elipses_after = FALSE;
global $nbsp;
$sep = '|';
$paginator_string = '[';
$total_pages =
ceil ($total_addresses /
$page_size);
if ($page_number > $total_pages) $page_number = $total_pages;
$spacing = ($compact ? $nbsp : $nbsp . $nbsp);
// only enough addresses for one page anyway? no pagination needed
//
if ($total_pages < 2) return '';
// build "Show All" link
//
$show_all_string = '['
array_merge ($current_page_args, array('show_all' =>
1)))
. ']';
// build next/previous links for compact paginator
//
if ($compact)
{
if ($page_number > 1)
$current_page_args)
. ']['
$current_page_args)
. '][';
else
// i18n: "<<" is for the first page in the paginator. "<" is for the previous page.
$paginator_string .=
_ ("<<") .
'][' .
_ ("<") .
'][';
if ($page_number < $total_pages)
$current_page_args)
. ']['
$current_page_args)
. ']';
else
// i18n: ">>" is for the last page in the paginator. ">" is for the next page.
$paginator_string .=
_ (">") .
'][' .
_ (">>") .
']';
}
// build next/previous links for regular paginator
//
else
{
if ($page_number > 1)
$current_page_args);
else
$paginator_string .=
_ ("Previous");
$paginator_string .= $nbsp . $sep . $nbsp;
if ($page_number < $total_pages)
$current_page_args);
else
$paginator_string .=
_ ("Next");
$paginator_string .= ']';
}
// paginator is turned off - just show previous/next links
//
if (!$abook_page_selector)
{
return $paginator_string . $spacing . $show_all_string;
}
$paginator_string .= $spacing;
if ($total_pages <= $abook_page_selector_max)
{
$start_page = 1;
$end_page = $total_pages;
}
else
{
$pages_to_show = ($abook_page_selector_max % 2 ? $abook_page_selector_max : $abook_page_selector_max - 1);
$end_page =
$page_number +
floor ($pages_to_show /
2);
$start_page =
$page_number -
floor ($pages_to_show /
2);
if (!($abook_page_selector_max % 2)) $start_page--;
if ($start_page < 1)
{
$end_page += 1 - $start_page;
$start_page = 1;
}
else if ($end_page > $total_pages)
{
$start_page -= $end_page - $total_pages;
$end_page = $total_pages;
}
// do we need to insert elipses?
//
if (1 < $start_page)
{
$start_page++;
$show_elipses_before = TRUE;
}
if ($total_pages > $end_page)
{
$end_page--;
$show_elipses_after = TRUE;
}
}
// now build the actual (compact) paginator
//
if ($compact)
{
$aValues = array();
for ($i = 1; $i <= $total_pages; $i++)
$aValues[$i] = $i . '/' . $total_pages;
$temp_page_number = $current_page_args['page_number'];
unset($current_page_args['page_number']);
$current_page_args['page_number'] = $temp_page_number;
$paginator_string .=
addSelect ('page_number', $aValues,
$page_number, TRUE,
? array('onchange' => 'SubmitOnSelect(this, \''
. $page_uri
. '&page_number='
. '\')')
: array()));
// need a submit button when select widget cannot submit itself
//
{
$paginator_string .=
addSubmit (_ ("Go"), 'paginator_submit');
}
}
// now build the actual (regular) paginator
//
else
{
$paginator_string .= '[' . $nbsp;
if ($show_elipses_before)
. $nbsp . '...' . $nbsp;
for ($x = $start_page; $x <= $end_page; $x++)
{
if ($x == $page_number)
$paginator_string .= $x . $nbsp;
else
}
if ($show_elipses_after)
$paginator_string .= '...' . $nbsp
. $nbsp;
$paginator_string .= ']';
}
$paginator_string .= $spacing . $show_all_string;
return $paginator_string;
}
/**
* Build a page (pagination) link for use with the address book list page
*
* @param int $page_number The page number for the link
* @param string $text The link text
* @param array $current_page_args All known query string arguments
* for the current page request; structured
* as an associative array of key/value pairs
*
*/
$current_page_args['page_number'] = $page_number;
}