Exemple #1
0
/**
 * Returns paging line.
 *
 * @param array $items				list of items
 *
 * @return CTable
 */
function getPagingLine(&$items)
{
    global $page;
    $config = select_config();
    $searchLimit = '';
    if ($config['search_limit'] < count($items)) {
        array_pop($items);
        $searchLimit = '+';
    }
    $rowsPerPage = CWebUser::$data['rows_per_page'];
    $itemsCount = count($items);
    $pagesCount = $itemsCount > 0 ? ceil($itemsCount / $rowsPerPage) : 1;
    $currentPage = getPageNumber();
    if ($currentPage < 1) {
        $currentPage = 1;
    }
    if ($itemsCount < ($currentPage - 1) * $rowsPerPage) {
        $currentPage = $pagesCount;
    }
    $start = ($currentPage - 1) * $rowsPerPage;
    CProfile::update('web.paging.lastpage', $page['file'], PROFILE_TYPE_STR);
    CProfile::update('web.paging.page', $currentPage, PROFILE_TYPE_INT);
    // trim array with items to contain items for current page
    $items = array_slice($items, $start, $rowsPerPage, true);
    // viewed pages (better to use not odd)
    $pagingNavRange = 11;
    $endPage = $currentPage + floor($pagingNavRange / 2);
    if ($endPage < $pagingNavRange) {
        $endPage = $pagingNavRange;
    }
    if ($endPage > $pagesCount) {
        $endPage = $pagesCount;
    }
    $startPage = $endPage > $pagingNavRange ? $endPage - $pagingNavRange + 1 : 1;
    $pageLine = array();
    $table = null;
    if ($pagesCount > 1) {
        $url = CUrlFactory::getContextUrl();
        if ($startPage > 1) {
            $url->setArgument('page', 1);
            $pageLine[] = new CLink('<< ' . _x('First', 'page navigation'), $url->getUrl(), null, null, true);
            $pageLine[] = '&nbsp;&nbsp;';
        }
        if ($currentPage > 1) {
            $url->setArgument('page', $currentPage - 1);
            $pageLine[] = new CLink('< ' . _x('Previous', 'page navigation'), $url->getUrl(), null, null, true);
            $pageLine[] = ' | ';
        }
        for ($p = $startPage; $p <= $pagesCount; $p++) {
            if ($p > $endPage) {
                break;
            }
            if ($p == $currentPage) {
                $pagespan = new CSpan($p, 'bold textcolorstyles');
            } else {
                $url->setArgument('page', $p);
                $pagespan = new CLink($p, $url->getUrl(), null, null, true);
            }
            $pageLine[] = $pagespan;
            $pageLine[] = ' | ';
        }
        array_pop($pageLine);
        if ($currentPage < $pagesCount) {
            $pageLine[] = ' | ';
            $url->setArgument('page', $currentPage + 1);
            $pageLine[] = new CLink(_x('Next', 'page navigation') . ' >', $url->getUrl(), null, null, true);
        }
        if ($p < $pagesCount) {
            $pageLine[] = '&nbsp;&nbsp;';
            $url->setArgument('page', $pagesCount);
            $pageLine[] = new CLink(_x('Last', 'page navigation') . ' >>', $url->getUrl(), null, null, true);
        }
        $table = new CTable(null, 'paging');
        $table->addRow(new CCol($pageLine));
    }
    $viewFromPage = ($currentPage - 1) * $rowsPerPage + 1;
    $viewTillPage = $currentPage * $rowsPerPage;
    if ($viewTillPage > $itemsCount) {
        $viewTillPage = $itemsCount;
    }
    $pageView = array();
    $pageView[] = _('Displaying') . SPACE;
    if ($itemsCount > 0) {
        $pageView[] = new CSpan($viewFromPage, 'info');
        $pageView[] = SPACE . _('to') . SPACE;
    }
    $pageView[] = new CSpan($viewTillPage, 'info');
    $pageView[] = SPACE . _('of') . SPACE;
    $pageView[] = new CSpan($itemsCount, 'info');
    $pageView[] = $searchLimit;
    $pageView[] = SPACE . _('found');
    $pageView = new CSpan($pageView);
    zbx_add_post_js('insertInElement("numrows", ' . zbx_jsvalue($pageView->toString()) . ', "div");');
    return $table;
}
Exemple #2
0
/**
 * Returns header with sorting options.
 *
 * @param string obj			Header item.
 * @param string $tabfield		Table field.
 * @param string $sortField		Sorting field.
 * @param string $sortOrder		Sorting order.
 * @param string $link			Sorting link.
 *
 * @return CColHeader
 */
function make_sorting_header($obj, $tabfield, $sortField, $sortOrder, $link = null)
{
    $sortorder = $sortField == $tabfield && $sortOrder == ZBX_SORT_UP ? ZBX_SORT_DOWN : ZBX_SORT_UP;
    $link = CUrlFactory::getContextUrl($link);
    $link->setArgument('sort', $tabfield);
    $link->setArgument('sortorder', $sortorder);
    zbx_value2array($obj);
    $arrow = null;
    if ($tabfield == $sortField) {
        if ($sortorder == ZBX_SORT_UP) {
            $arrow = (new CSpan())->addClass(ZBX_STYLE_ARROW_DOWN);
        } else {
            $arrow = (new CSpan())->addClass(ZBX_STYLE_ARROW_UP);
        }
    }
    return new CColHeader(new CLink([$obj, $arrow], $link->getUrl()));
}