コード例 #1
0
 public function testLoadAllFormats()
 {
     ManiphestExcelFormat::loadAllFormats();
     $this->assertTrue(true);
 }
コード例 #2
0
 /**
  * @phutil-external-symbol class PHPExcel
  * @phutil-external-symbol class PHPExcel_IOFactory
  * @phutil-external-symbol class PHPExcel_Style_NumberFormat
  * @phutil-external-symbol class PHPExcel_Cell_DataType
  */
 public function handleRequest(AphrontRequest $request)
 {
     $viewer = $this->getViewer();
     $key = $request->getURIData('key');
     $ok = @(include_once 'PHPExcel.php');
     if (!$ok) {
         $dialog = $this->newDialog();
         $inst1 = pht('This system does not have PHPExcel installed. This software ' . 'component is required to export tasks to Excel. Have your system ' . 'administrator install it from:');
         $inst2 = pht('Your PHP "%s" needs to be updated to include the ' . 'PHPExcel Classes directory.', 'include_path');
         $dialog->setTitle(pht('Excel Export Not Configured'));
         $dialog->appendChild(hsprintf('<p>%s</p>' . '<br />' . '<p>' . '<a href="http://www.phpexcel.net/">http://www.phpexcel.net/</a>' . '</p>' . '<br />' . '<p>%s</p>', $inst1, $inst2));
         $dialog->addCancelButton('/maniphest/');
         return id(new AphrontDialogResponse())->setDialog($dialog);
     }
     // TODO: PHPExcel has a dependency on the PHP zip extension. We should test
     // for that here, since it fatals if we don't have the ZipArchive class.
     $saved = id(new PhabricatorSavedQueryQuery())->setViewer($viewer)->withQueryKeys(array($key))->executeOne();
     if (!$saved) {
         $engine = id(new ManiphestTaskSearchEngine())->setViewer($viewer);
         if ($engine->isBuiltinQuery($key)) {
             $saved = $engine->buildSavedQueryFromBuiltin($key);
         }
         if (!$saved) {
             return new Aphront404Response();
         }
     }
     $formats = ManiphestExcelFormat::loadAllFormats();
     $export_formats = array();
     foreach ($formats as $format_class => $format_object) {
         $export_formats[$format_class] = $format_object->getName();
     }
     if (!$request->isDialogFormPost()) {
         $dialog = new AphrontDialogView();
         $dialog->setUser($viewer);
         $dialog->setTitle(pht('Export Tasks to Excel'));
         $dialog->appendChild(phutil_tag('p', array(), pht('Do you want to export the query results to Excel?')));
         $form = id(new PHUIFormLayoutView())->appendChild(id(new AphrontFormSelectControl())->setLabel(pht('Format:'))->setName('excel-format')->setOptions($export_formats));
         $dialog->appendChild($form);
         $dialog->addCancelButton('/maniphest/');
         $dialog->addSubmitButton(pht('Export to Excel'));
         return id(new AphrontDialogResponse())->setDialog($dialog);
     }
     $format = idx($formats, $request->getStr('excel-format'));
     if ($format === null) {
         throw new Exception(pht('Excel format object not found.'));
     }
     $saved->makeEphemeral();
     $saved->setParameter('limit', PHP_INT_MAX);
     $engine = id(new ManiphestTaskSearchEngine())->setViewer($viewer);
     $query = $engine->buildQueryFromSavedQuery($saved);
     $query->setViewer($viewer);
     $tasks = $query->execute();
     $all_projects = array_mergev(mpull($tasks, 'getProjectPHIDs'));
     $all_assigned = mpull($tasks, 'getOwnerPHID');
     $handles = id(new PhabricatorHandleQuery())->setViewer($viewer)->withPHIDs(array_merge($all_projects, $all_assigned))->execute();
     $workbook = new PHPExcel();
     $format->buildWorkbook($workbook, $tasks, $handles, $viewer);
     $writer = PHPExcel_IOFactory::createWriter($workbook, 'Excel2007');
     ob_start();
     $writer->save('php://output');
     $data = ob_get_clean();
     $mime = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
     return id(new AphrontFileResponse())->setMimeType($mime)->setDownload($format->getFileName() . '.xlsx')->setContent($data);
 }