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' => ' ')); } } 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); }
protected function _applyFilters(array $filters, $value) { $db = Zend_Registry::get('dbAdapter'); foreach ($this->reportFilters as $key => $filter) { $content = ''; if (isset($filters[$key]) && strlen($filters[$key]) > 0 || $filter->type == self::FILTER_TYPE_SPECIAL) { $content = $filters[$key]; switch ($filter->type) { case self::FILTER_TYPE_DATE: $content = date('Y-m-d', strtotime($content)); break; case self::FILTER_TYPE_STRING: break; case self::FILTER_TYPE_ENUM: /*$enumeration = new Enumeration(); $enumeration->enumerationId = (int)$content; $enumeration->populate(); $content = $enumeration->name;*/ break; case self::FILTER_TYPE_QUERY: /*$reportQuery = new ReportQuery(); $reportQuery->reportQueryId = (int)$content; $reportQuery->populate(); $content = $reportQuery->query;*/ break; case self::FILTER_TYPE_SPECIAL: $room = User::myPreferencesLocation(); if ($filter->special == 'currentPracticeId') { $content = (int) $room->building->practiceId; } else { if ($filter->special == 'currentBuildingId') { $content = (int) $room->buildingId; } else { if ($filter->special == 'currentRoomId') { $content = (int) $room->roomId; } else { if ($filter->special == 'currentUserId') { $content = (int) Zend_Auth::getInstance()->getIdentity()->personId; } } } } break; } } $options = $filter->options; foreach ($options as $optId => $optValue) { switch ($optId) { case self::FILTER_OPTIONS_DOUBLE_QUOTES: $content = '"' . $content . '"'; break; case self::FILTER_OPTIONS_SINGLE_QUOTES: $content = "'" . $content . "'"; break; case self::FILTER_OPTIONS_UPPERCASE: $content = strtoupper($content); break; case self::FILTER_OPTIONS_LOWERCASE: $content = strtolower($content); break; case self::FILTER_OPTIONS_QUOTE_ESCAPE_STRING: $content = $db->quote($content); break; } } $value = preg_replace('/\\{\\{' . $filter->name . '\\}\\}/', $content, $value); } return $value; }