/** * Returns paging line. * * @param array $items list of items * @param string $sortorder the order in which items are sorted ASC or DESC * @param CUrl $url URL object containing arguments and query * * @return CDiv */ function getPagingLine(&$items, $sortorder, CUrl $url) { global $page; $rowsPerPage = CWebUser::$data['rows_per_page']; $itemsCount = count($items); $pagesCount = $itemsCount > 0 ? ceil($itemsCount / $rowsPerPage) : 1; $currentPage = getPageNumber(); if ($currentPage < 1) { $currentPage = 1; } elseif ($currentPage > $pagesCount) { $currentPage = $pagesCount; } $start = ($currentPage - 1) * $rowsPerPage; $tags = []; if ($pagesCount > 1) { // For MVC pages $page is not set if (isset($page['file'])) { CProfile::update('web.paging.lastpage', $page['file'], PROFILE_TYPE_STR); CProfile::update('web.paging.page', $currentPage, PROFILE_TYPE_INT); } elseif (isset($_REQUEST['action'])) { CProfile::update('web.paging.lastpage', $_REQUEST['action'], PROFILE_TYPE_STR); CProfile::update('web.paging.page', $currentPage, PROFILE_TYPE_INT); } // 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; if ($startPage > 1) { $url->setArgument('page', 1); $tags[] = new CLink(_('First'), $url->getUrl()); } if ($currentPage > 1) { $url->setArgument('page', $currentPage - 1); $tags[] = new CLink((new CSpan())->addClass(ZBX_STYLE_ARROW_LEFT), $url->getUrl()); } for ($p = $startPage; $p <= $endPage; $p++) { $url->setArgument('page', $p); $link = new CLink($p, $url->getUrl()); if ($p == $currentPage) { $link->addClass(ZBX_STYLE_PAGING_SELECTED); } $tags[] = $link; } if ($currentPage < $pagesCount) { $url->setArgument('page', $currentPage + 1); $tags[] = new CLink((new CSpan())->addClass(ZBX_STYLE_ARROW_RIGHT), $url->getUrl()); } if ($p < $pagesCount) { $url->setArgument('page', $pagesCount); $tags[] = new CLink(_('Last'), $url->getUrl()); } } if ($pagesCount == 1) { $table_stats = _s('Displaying %1$s of %2$s found', $itemsCount, $itemsCount); } else { $config = select_config(); $end = $start + $rowsPerPage; if ($end > $itemsCount) { $end = $itemsCount; } $total = $itemsCount; if ($config['search_limit'] < $itemsCount) { if ($sortorder == ZBX_SORT_UP) { array_pop($items); } else { array_shift($items); } $total .= '+'; } $table_stats = _s('Displaying %1$s to %2$s of %3$s found', $start + 1, $end, $total); } // trim array with items to contain items for current page $items = array_slice($items, $start, $rowsPerPage, true); return (new CDiv())->addClass(ZBX_STYLE_TABLE_PAGING)->addItem((new CDiv())->addClass(ZBX_STYLE_PAGING_BTN_CONTAINER)->addItem($tags)->addItem((new CDiv())->addClass(ZBX_STYLE_TABLE_STATS)->addItem($table_stats))); }
$icons->addItem((new CLink(SPACE, 'index.php?reconnect=1'))->addClass(ZBX_STYLE_TOP_NAV_SIGNOUT)->setAttribute('title', _('Sign out'))->addSID()); // 1st level menu $top_menu = (new CDiv())->addItem(new CLink((new CDiv())->addClass(ZBX_STYLE_LOGO), 'zabbix.php?action=dashboard.view'))->addItem((new CList($data['menu']['main_menu']))->addClass(ZBX_STYLE_TOP_NAV))->addItem($icons)->addClass(ZBX_STYLE_TOP_NAV_CONTAINER)->setId('mmenu'); $sub_menu_div = (new CDiv())->addClass(ZBX_STYLE_TOP_SUBNAV_CONTAINER)->onMouseover('javascript: MMenu.submenu_mouseOver();')->onMouseout('javascript: MMenu.mouseOut();'); // 2nd level menu foreach ($data['menu']['sub_menus'] as $label => $sub_menu) { $sub_menu_row = (new CList())->addClass(ZBX_STYLE_TOP_SUBNAV)->setId('sub_' . $label); foreach ($sub_menu as $id => $sub_page) { $url = new CUrl($sub_page['menu_url']); if ($sub_page['menu_action'] !== null) { $url->setArgument('action', $sub_page['menu_action']); } $url->setArgument('ddreset', 1)->removeArgument('sid'); $sub_menu_item = new CLink($sub_page['menu_text'], $url->getUrl()); if ($sub_page['selected']) { $sub_menu_item->addClass(ZBX_STYLE_SELECTED); } $sub_menu_row->addItem($sub_menu_item); } if ($data['menu']['selected'] === $label) { $sub_menu_row->setAttribute('style', 'display: block;'); insert_js('MMenu.def_label = ' . zbx_jsvalue($label)); } else { $sub_menu_row->setAttribute('style', 'display: none;'); } $sub_menu_div->addItem($sub_menu_row); } if ($data['server_name'] !== '') { $sub_menu_div->addItem((new CDiv($data['server_name']))->addClass(ZBX_STYLE_SERVER_NAME)); } (new CTag('header', true))->setAttribute('role', 'banner')->addItem((new CDiv())->addItem($top_menu)->addItem($sub_menu_div)->addClass(ZBX_STYLE_NAV)->setAttribute('role', 'navigation'))->show();