--- report2.php_orig 2020-01-28 10:16:34.000000000 +0200 +++ report2.php 2020-03-19 11:13:22.722679012 +0200 @@ -42,6 +42,7 @@ 'filter_set' => [T_ZBX_STR, O_OPT, P_SYS, null, null], 'from' => [T_ZBX_RANGE_TIME, O_OPT, P_SYS, null, null], 'to' => [T_ZBX_RANGE_TIME, O_OPT, P_SYS, null, null], + 'exportFile' => [T_ZBX_STR, O_OPT, P_SYS, null, null] ]; check_fields($fields); validateTimeSelectorPeriod(getRequest('from'), getRequest('to')); @@ -167,10 +168,12 @@ $reportWidget->setControls((new CTag('nav', true, (new CList()) - ->addItem(new CLink($triggerData['hostname'], '?filter_groupid='.$_REQUEST['filter_groupid'])) + ->addItem(new CLink($triggerData['hostname'], (new CUrl('report2.php')) + ->setArgument('page', CPagerHelper::loadPage('report2.php', null)) + ->getUrl() + )) ->addItem($triggerData['description']) - )) - ->setAttribute('aria-label', _('Content controls')) + ))->setAttribute('aria-label', _('Content controls')) ); $table = (new CTableInfo()) @@ -182,6 +185,7 @@ } elseif (hasRequest('filter_hostid')) { $reportWidget->setControls((new CForm('get')) + ->cleanItems() ->setAttribute('aria-label', _('Main filter')) ->addItem((new CList()) ->addItem([ @@ -192,6 +196,7 @@ AVAILABILITY_REPORT_BY_TEMPLATE => _('By trigger template') ]) ]) + ->addItem(new CSubmit('exportFile', _('Export to CSV'))) )); /* @@ -456,7 +461,25 @@ CArrayHelper::sort($triggers, ['host_name', 'description']); - $paging = getPagingLine($triggers, ZBX_SORT_UP, new CUrl('report2.php')); + if(hasRequest('exportFile')) { + ob_end_clean(); + $csvText = "Host Name Problems Ok\n"; + foreach ($triggers as $trigger) { + $availability = calculateAvailability($trigger['triggerid'], $data['filter']['timeline']['from_ts'], $data['filter']['timeline']['to_ts']); + $csvText .= $trigger['hosts'][0]['name'].";".$trigger['description'].";".sprintf('%.4f%%', $availability['true']).";".sprintf('%.4f%%', $availability['false'])."\n"; + } + $filename = 'temp/report2_'.time().".csv"; + + header('Content-Description: File Transfer'); + header('Content-Type: application/force-download'); + header('Content-Disposition: attachment; filename='.$filename); + die( $csvText); + } + + // pager + $page_num = getRequest('page', 1); + CPagerHelper::savePage($page['file'], $page_num); + $paging = CPagerHelper::paginate($page_num, $triggers, ZBX_SORT_UP, new CUrl('report2.php')); foreach ($triggers as $trigger) { $availability = calculateAvailability($trigger['triggerid'], $data['filter']['timeline']['from_ts'],