/**
  * Handler to view a generated report file
  *
  * @param type $data
  * @param type $form
  */
 public function viewreport($request)
 {
     $item = 1;
     $allowed = array('html', 'pdf', 'csv');
     $ext = $request->getExtension();
     if (!in_array($ext, $allowed)) {
         return $this->httpError(404);
     }
     $reportID = (int) $request->param('ID');
     $fileID = (int) $request->param('OtherID');
     $report = AdvancedReport::get()->byID($reportID);
     if (!$report || !$report->canView()) {
         return $this->httpError(404);
     }
     $file = $report->{strtoupper($ext) . 'File'}();
     if (!$file || !strlen($file->Content)) {
         return $this->httpError(404);
     }
     $mimeType = HTTP::get_mime_type($file->Name);
     header("Content-Type: {$mimeType}; name=\"" . addslashes($file->Name) . "\"");
     header("Content-Disposition: attachment; filename=" . addslashes($file->Name));
     header("Content-Length: {$file->getSize()}");
     header("Pragma: ");
     session_write_close();
     ob_flush();
     flush();
     // Push the file while not EOF and connection exists
     echo base64_decode($file->Content);
     exit;
 }
 public function getCMSFields($params = null)
 {
     $fields = new FieldList();
     // tabbed or untabbed
     $fields->push(new TabSet("Root", $mainTab = new Tab("Main")));
     $mainTab->setTitle(_t('SiteTree.TABMAIN', "Main"));
     $reports = array();
     $reportObjs = AdvancedReport::get()->filter(array('ReportID' => 0));
     if ($reportObjs && $reportObjs->count()) {
         foreach ($reportObjs as $obj) {
             if ($obj instanceof CombinedReport) {
                 continue;
             }
             $reports[$obj->ID] = $obj->Title . '(' . $obj->ClassName . ')';
         }
     }
     $fields->addFieldsToTab('Root.Main', array(new DropdownField('ReportID', 'Related report', $reports), new TextField('Title'), new KeyValueField('Parameters', 'Parameters to pass to the report'), new NumericField('Sort')));
     return $fields;
 }
 /**
  * @return AdvancedReport
  */
 public function getReport()
 {
     return AdvancedReport::get()->byID($this->reportID);
 }