public function getResultsAction() { $viewId = (int) $this->_getParam('viewId'); $params = $this->_getAllParams(); $filterParams = array(); foreach ($params as $key => $value) { if (substr($key, 0, 7) != 'filter_') { continue; } $index = substr($key, 7); $x = explode('_', $index); if (!isset($x[1])) { continue; } $index = str_replace('_', '.', $index); $filterParams[$index] = $value; } $reportView = new ReportView(); $reportView->reportViewId = $viewId; $reportView->populate(); $reportBase = $reportView->reportBase; $filterBase = $reportView->reportBase->unserializedFilters; $filters = array(); if ($filterBase !== null) { foreach ($filterBase as $key => $filter) { $value = $filter->defaultValue; if (isset($filterParams[$key]) && strlen($filterParams[$key]) > 0) { $value = $filterParams[$key]; } $filters[$key] = $value; } } $data = $reportBase->executeQueries($filters, $reportView); if (strlen($reportView->showResultsIn) <= 0 || $reportView->showResultsIn != 'grid') { $showResultsOptions = $reportView->unserializedShowResultsOptions; switch ($reportView->showResultsIn) { case 'file': $separator = $showResultsOptions['separator']; $lineEndings = $showResultsOptions['lineEndings']; $resultsSeparator = $showResultsOptions['resultsSeparator']; $includeHeaderRow = isset($showResultsOptions['includeHeaderRow']) && $showResultsOptions['includeHeaderRow'] ? true : false; $queriesData = array(); $sep = ""; foreach ($data as $queryData) { $contents = array(); if ($includeHeaderRow) { foreach ($queryData['rows'] as $row) { $headers = array(); foreach ($row as $key => $value) { $headers[] = $key; } $contents[] = implode($separator, $headers); break; } } foreach ($queryData['rows'] as $row) { $rows = array(); foreach ($row as $key => $value) { $rows[] = $value; } $contents[] = implode($separator, $rows); } switch ($lineEndings) { case 'windows': $sep = "\r\n"; break; case 'mac': $sep = "\r"; break; case 'linux': $sep = "\n"; break; default: $sep = ""; break; } $queriesData[] = implode($sep, $contents); } $flatfile = implode($sep . $resultsSeparator . $sep, $queriesData); $this->_forward('flat', 'files', null, array('data' => $flatfile)); return; case 'xml': $xml = $this->_generateResultsXML($data); $this->_forward('xml', 'files', null, array('data' => $xml->asXML())); return; case 'pdf': $xml = $this->_generateResultsXML($data); //PdfController::toXML($data,'Report',null); $xmlData = $xml->asXML(); $xmlData = preg_replace('/dataNode=/', 'xfa:dataNode=', $xmlData); $xmlData = preg_replace('/<\\?.*\\?>/', '', $xmlData); $this->_forward('pdf-merge-attachment', 'pdf', null, array('attachmentReferenceId' => $reportView->reportViewId, 'xmlData' => $xmlData)); return; case 'graph': // to be implemented break; } } //trigger_error(print_r($data,true),E_USER_NOTICE); $json = Zend_Controller_Action_HelperBroker::getStaticHelper('json'); $json->suppressExit = true; $json->direct($data); }
/** * Constructor * * @param Report $report The report this view is based on. */ public function __construct(Report $report) { parent::__construct($report); }
public function processReorderMappingTransformAction() { $viewId = (int) $this->_getParam('viewId'); $mappingId = $this->_getParam('mappingId'); $from = $this->_getParam('from'); $to = $this->_getParam('to'); $reportView = new ReportView(); $reportView->reportViewId = $viewId; $reportView->populate(); $columnDefinitions = $reportView->unserializedColumnDefinitions; if ($columnDefinitions !== null && isset($columnDefinitions[$mappingId])) { $row = $columnDefinitions[$mappingId]; if (isset($row->transforms[$from])) { $fromTransform = $row->transforms[$from]; unset($columnDefinitions[$mappingId]->transforms[$from]); $tmpTransforms = array(); foreach ($row->transforms as $id => $transform) { $tmpTransforms[$id] = $transform; if ($to == $id) { $tmpTransforms[$from] = $fromTransform; } } $columnDefinitions[$mappingId]->transforms = $tmpTransforms; $reportView->serializedColumnDefinitions = $columnDefinitions; $reportView->persist(); } } $rows = array(); foreach ($columnDefinitions[$mappingId]->transforms as $id => $transform) { $rows[] = $this->_generateTransformGridRowData($transform); } $json = Zend_Controller_Action_HelperBroker::getStaticHelper('json'); $json->suppressExit = true; $json->direct(array('rows' => $rows)); }
public function getReportAction() { $baseId = (int) $this->_getParam('baseId'); $data = array('filters' => array(), 'views' => array()); $reportBase = new ReportBase(); $reportBase->reportBaseId = $baseId; $reportBase->populate(); foreach ($reportBase->reportFilters as $reportFilter) { $filter = array(); $filter['id'] = $reportFilter->id; $filter['name'] = $reportFilter->name; $filter['defaultValue'] = $reportFilter->defaultValue; $filter['type'] = $reportFilter->type; $filter['options'] = $reportFilter->options; $list = null; if ($reportFilter->type == ReportBase::FILTER_TYPE_ENUM) { $enumerationClosure = new EnumerationClosure(); $filter['enums'] = array(); $paths = $enumerationClosure->generatePaths($reportFilter->enumName['id']); foreach ($paths as $id => $name) { $filter['enums'][] = array('id' => $id, 'name' => $name); } } else { if ($reportFilter->type == ReportBase::FILTER_TYPE_QUERY) { $reportQuery = new ReportQuery(); $reportQuery->reportQueryId = (int) $reportFilter->query; $reportQuery->populate(); $filter['queries'] = $reportQuery->executeQuery(); if ($reportFilter->includeBlank) { array_unshift($filter['queries'], array('id' => '', 'name' => '&nbsp;')); } } else { if ($reportFilter->type == ReportBase::FILTER_TYPE_LIST_BUILDING) { $orm = new Building(); $list = array('ormIterator' => $orm->getIterator(), 'id' => 'buildingId', 'name' => 'displayName'); } else { if ($reportFilter->type == ReportBase::FILTER_TYPE_LIST_PRACTICE) { $orm = new Practice(); $list = array('ormIterator' => $orm->getIterator(), 'id' => 'practiceId', 'name' => 'name'); } else { if ($reportFilter->type == ReportBase::FILTER_TYPE_LIST_PROVIDER) { $orm = new Provider(); $list = array('ormIterator' => $orm->getIter(), 'id' => 'personId', 'name' => 'displayName'); } else { if ($reportFilter->type == ReportBase::FILTER_TYPE_LIST_ROOM) { $orm = new Room(); $list = array('ormIterator' => $orm->getIterator(), 'id' => 'roomId', 'name' => 'displayName'); } else { if ($reportFilter->type == ReportBase::FILTER_TYPE_LIST_BUILDING_PREF || $reportFilter->type == ReportBase::FILTER_TYPE_LIST_ROOM_PREF || $reportFilter->type == ReportBase::FILTER_TYPE_LIST_PROVIDER_PREF) { $room = User::myPreferencesLocation(); $practiceId = (int) $room->building->practiceId; $buildingId = (int) $room->buildingId; if ($reportFilter->type == ReportBase::FILTER_TYPE_LIST_BUILDING_PREF) { $orm = new Building(); $orm->practiceId = $practiceId; $list = array('ormIterator' => $orm->getIteratorByPracticeId(), 'id' => 'buildingId', 'name' => 'displayName'); } else { if ($reportFilter->type == ReportBase::FILTER_TYPE_LIST_ROOM_PREF) { $orm = new Room(); $orm->buildingId = $buildingId; $list = array('ormIterator' => $orm->getIteratorByBuildingId(), 'id' => 'roomId', 'name' => 'displayName'); } else { $orm = new Provider(); $list = array('ormIterator' => $orm->getIteratorByPracticeId($practiceId), 'id' => 'personId', 'name' => 'displayName'); } } } } } } } } } if ($list !== null) { $filter['lists'] = array(); foreach ($list['ormIterator'] as $row) { $filter['lists'][] = array('id' => $row->{$list['id']}, 'name' => htmlspecialchars($row->{$list['name']})); } } $data['filters'][] = $filter; } $reportView = new ReportView(); $filters = array('reportBaseId' => $reportBase->reportBaseId, 'active' => 1); $reportViewIterator = $reportView->getIteratorByFilters($filters); foreach ($reportViewIterator as $view) { $row = array(); $row['id'] = $view->reportViewId; $row['data'] = array(); $row['data'][] = $view->displayName; $row['data'][] = $view->runQueriesImmediately; $row['data'][] = strlen($view->showResultsIn) > 0 ? $view->showResultsIn : 'grid'; $data['views'][] = $row; } $this->view->filterTypes = ReportBase::getFilterTypes(); $json = Zend_Controller_Action_HelperBroker::getStaticHelper('json'); $json->suppressExit = true; $json->direct($data); }
public static function generateResults($viewId, $filterParams) { $reportView = new ReportView(); $reportView->reportViewId = $viewId; $reportView->populate(); $reportBase = $reportView->reportBase; $filterBase = $reportView->reportBase->unserializedFilters; $filters = array(); if ($filterBase !== null) { foreach ($filterBase as $key => $filter) { $value = $filter->defaultValue; if (isset($filterParams[$key]) && strlen($filterParams[$key]) > 0) { $value = $filterParams[$key]; } $filters[$key] = $value; } } $data = $reportBase->executeQueries($filters, $reportView); $ret = array('data' => $data, 'type' => $reportView->showResultsIn, 'customizeColumnNames' => $reportView->customizeColumnNames); if (strlen($reportView->showResultsIn) <= 0 || $reportView->showResultsIn != 'grid') { $showResultsOptions = $reportView->unserializedShowResultsOptions; switch ($reportView->showResultsIn) { case 'file': $separator = $showResultsOptions['separator']; $lineEndings = $showResultsOptions['lineEndings']; $resultsSeparator = $showResultsOptions['resultsSeparator']; $includeHeaderRow = isset($showResultsOptions['includeHeaderRow']) && $showResultsOptions['includeHeaderRow'] ? true : false; $queriesData = array(); $sep = ""; foreach ($data as $queryData) { $contents = array(); if ($includeHeaderRow) { $contents[] = implode($separator, $queryData['headers']); } foreach ($queryData['rows'] as $row) { $contents[] = implode($separator, $row['data']); } switch ($lineEndings) { case 'windows': $sep = "\r\n"; break; case 'mac': $sep = "\r"; break; case 'linux': $sep = "\n"; break; default: $sep = ""; break; } $queriesData[] = implode($sep, $contents); } $flatfile = implode($sep . $resultsSeparator . $sep, $queriesData); $ret['value'] = $flatfile; return $ret; case 'xml': $xml = self::_generateResultsXML($data); $ret['value'] = $xml->asXML(); return $ret; case 'pdf': $xml = self::_generateResultsXML($data); //PdfController::toXML($data,'Report',null); $xmlData = $xml->asXML(); $xmlData = preg_replace('/dataNode=/', 'xfa:dataNode=', $xmlData); $xmlData = preg_replace('/<\\?.*\\?>/', '', $xmlData); $ret['value'] = array('attachmentReferenceId' => $reportView->reportViewId, 'xmlData' => $xmlData); return $ret; case 'graph': // to be implemented break; case 'pqri': $ret['value'] = NQFPQRIReport::generatePQRIXML($data); return $ret; } } return $ret; }
public function executeQueries(array $filters, ReportView $view) { $config = Zend_Registry::get('config'); $dbName = $config->database->params->dbname; $db = Zend_Registry::get('dbAdapter'); $ret = array(); $reportFilters = array(); foreach ($this->reportFilters as $key => $filter) { $reportFilters['{{' . $filter->name . '}}'] = $filter; } //trigger_error(print_r($reportFilters,true),E_USER_NOTICE); $reportQuery = new ReportQuery(); $reportQueryIterator = $reportQuery->getIteratorByBaseId($this->reportBaseId); foreach ($reportQueryIterator as $query) { $row = array(); $row['reportQuery'] = $query->toArray(); $queryValue = $query->query; $tokens = $this->_extractTokens($queryValue); if (isset($tokens[0])) { // tokens defined // check for undefined/orphaned filter $undefinedTokens = array(); foreach ($tokens as $token) { if (!isset($reportFilters[$token])) { $undefinedTokens[] = $token; } } if (isset($undefinedTokens[0])) { $error = 'Query "' . $query->displayName . '" contains undefined tokens: ' . implode(', ', $undefinedTokens); $row['error'] = $error; trigger_error($error, E_USER_NOTICE); $ret[] = $row; continue; } $queryValue = $this->_applyFilters($filters, $queryValue, $tokens); } $columnDefinitions = $view->unserializedColumnDefinitions; switch ($query->type) { case ReportQuery::TYPE_SQL: trigger_error($queryValue, E_USER_NOTICE); try { if ($view->customizeColumnNames) { $results = array(); $stmt = $db->query($queryValue, array(), Zend_Db::FETCH_NUM); $columnInfo = array(); $rowCount = $stmt->rowCount(); for ($i = 0; $i < $rowCount; $i++) { $fetchRow = $stmt->fetch(Zend_Db::FETCH_NUM, null, $i); if ($i == 0) { for ($ctr = 0, $rowLen = count($fetchRow); $ctr < $rowLen; $ctr++) { $columnMeta = $stmt->getColumnMeta($ctr); $resultSetName = $dbName . '.' . $columnMeta['table'] . '.' . $columnMeta['name']; foreach ($columnDefinitions as $id => $mapping) { // id, queryId, queryName, resultSetName, displayName, transform if ($mapping->resultSetName == $resultSetName) { $columnInfo[$ctr] = $mapping; break; } } } } $tmp = array(); foreach ($columnInfo as $index => $mapping) { $tmp[$mapping->displayName] = $this->_applyTransforms($mapping->transforms, $fetchRow[$index]); } $tmpResult = array(); foreach ($columnDefinitions as $id => $mapping) { // id, queryId, queryName, resultSetName, displayName, transform $tmpResult[$mapping->displayName] = $tmp[$mapping->displayName]; } $results[] = $tmpResult; } } else { $results = $db->fetchAll($queryValue); } $row['rows'] = $results; } catch (Exception $e) { $uniqErrCode = uniqid(); $row['error'] = 'There was a problem executing query: ' . $query->displayName . '. Contact your administrator with error code: ' . $uniqErrCode; trigger_error('Exception error (' . $uniqErrCode . '): ' . $e->getMessage(), E_USER_NOTICE); trigger_error('SQL Query (' . $uniqErrCode . '): ' . $queryValue, E_USER_NOTICE); } $ret[] = $row; break; case ReportQuery::TYPE_NSDR: $nsdr = explode("\n", $queryValue); $results = array(); foreach ($nsdr as $key => $value) { $tokens = $this->_extractTokens($queryValue); if (isset($tokens[0])) { $value = $this->_applyFilters($filters, $value); } $resultSetName = ReportView::extractNamespace($value); $displayName = ReportView::metaDataPrettyName($resultSetName); $nsdrResult = NSDR::populate($value); $tmp = array('Name' => $displayName, 'Value' => ''); $tmp['Value'] = $nsdrResult[$value]; $results[] = $tmp; } if ($view->customizeColumnNames) { $tmpResults = $results; $results = array(); foreach ($columnDefinitions as $id => $mapping) { // id, queryId, queryName, resultSetName, displayName, transform if ($mapping->queryId != $query->reportQueryId && $mapping->queryName != $query->displayName) { continue; } $displayName = ReportView::metaDataPrettyName($mapping->resultSetName); $tmp = array('Name' => $displayName, 'Value' => ''); if (isset($tmpResults[$displayName])) { $tmp['Value'] = $this->_applyTransforms($mapping->transforms, $tmpResults[$displayName]); } $results[] = $tmp; } } $row['rows'] = $results; $ret[] = $row; break; } } return $ret; }
/** * Constructor * * Saves the report and initializes local storage. * * @param Report $report */ public function __construct(Report $report) { parent::__construct($report); $this->tpl = array(); $this->output = null; }