示例#1
0
 public function view()
 {
     if (!$this->loadData()) {
         $this->dataError();
         sendBack();
     }
     $display_fields = array();
     $measure_fields = array();
     $aggregate_fields = array();
     $search_fields = array();
     $filter_fields = array();
     // get report model
     $report = $this->_uses[$this->modeltype];
     // unserialise the options from the db
     $options = unserialize($report->options);
     // overlay the defaults so we've got a full set of options
     $options = $this->expand_options($options, $report->tablename);
     // sort options by position
     $options = $this->sort_options($options);
     foreach ($options as $field => $field_options) {
         // ignore the filter field... it really isn't a field
         if (in_array($field, array('filter', 'search'))) {
             continue;
         }
         $position = $field_options['position'];
         // ignore fields that aren't meant to be displayed
         if ($field_options['normal_display_field'] !== 'false') {
             // we're always dealing with normal fields now
             $display_fields[$position] = $field;
             if ($field_options['normal_break_on'] == "true") {
                 $measure_fields[$position] = $field;
             }
             if (!empty($field_options['normal_method']) && $field_options['normal_method'] != 'dont_total') {
                 $aggregate_fields[$position] = $field_options['normal_method'] . '(' . $field . ') as ' . $field;
                 // if we're setting an aggregate field... this must not be a display field
                 unset($display_fields[$position]);
             }
         }
         // if the field is also a search field, add it to the search array
         if ($field_options['normal_enable_search'] === 'true') {
             $search_fields[$field] = $field;
         }
     }
     if (!empty($options['filter'])) {
         // loop through filter lines
         foreach (range(1, 3) as $number) {
             // filter line 1 will never have an operator
             if ($number == 1) {
                 $operator = '';
             } else {
                 $operator = $options['filter']['filter_' . $number . '_operator'] . ' ';
             }
             $field = $options['filter']['filter_' . $number . '_field'];
             $condition = $options['filter']['filter_' . $number . '_condition'];
             $value = $options['filter']['filter_' . $number . '_value'];
             // if we're dealing with a valid filter line...
             if (($number == 1 or !empty($operator)) and !empty($field) and !empty($value)) {
                 $filter_fields[$number] = $operator . $field . ' ' . $condition . ' ' . $value;
             }
         }
     }
     // output to smarty
     $this->view->set('display_fields', implode(',', $display_fields));
     $this->view->set('break_on_fields', implode(',', $measure_fields));
     $this->view->set('aggregate_fields', implode('<br />', $aggregate_fields));
     $this->view->set('search_fields', implode(',', $search_fields));
     $this->view->set('filter_fields', implode('<br />', $filter_fields));
     $rd = ReportDefinition::getDefinitionByid($report->report_definition);
     $report_definition_name = $rd->_data['name'];
     $this->view->set('report_definition', $report_definition_name);
     $hasreport = new HasReport();
     $report_list = $hasreport->getAssignedRoles($report->id);
     $this->view->set('roles', $report_list);
     // create sidebar
     $this->view->set('report', $report);
     $sidebar = new SidebarController($this->view);
     $sidebarlist = array();
     $sidebarlist['all'] = array('tag' => 'All Reports', 'link' => array('modules' => $this->_modules, 'controller' => $this->name, 'action' => 'index'));
     $sidebarlist['edit'] = array('tag' => 'Edit Report', 'link' => array('modules' => $this->_modules, 'controller' => $this->name, 'action' => 'edit', $report->idField => $report->{$report->idField}));
     if ($report->owner == EGS_USERNAME) {
         $sidebarlist['delete'] = array('tag' => 'Delete Report', 'link' => array('modules' => $this->_modules, 'controller' => $this->name, 'action' => 'delete', $report->idField => $report->{$report->idField}));
     }
     $sidebarlist['copy'] = array('tag' => 'Copy Report', 'link' => array('modules' => $this->_modules, 'controller' => $this->name, 'action' => 'copy', $report->idField => $report->{$report->idField}));
     $sidebarlist['run'] = array('tag' => 'Run Report', 'link' => array('modules' => $this->_modules, 'controller' => $this->name, 'action' => 'run', $report->idField => $report->{$report->idField}));
     if ($report->owner == EGS_USERNAME) {
         if (empty($report_list)) {
             $tag = 'Publish Report';
         } else {
             $tag = 'Amend Report Roles';
         }
         $sidebarlist['publish'] = array('tag' => $tag, 'link' => array('modules' => $this->_modules, 'controller' => $this->name, 'action' => 'publish_report', $report->idField => $report->{$report->idField}));
     }
     $sidebar->addList('Actions', $sidebarlist);
     $this->view->register('sidebar', $sidebar);
     $this->view->set('sidebar', $sidebar);
 }