Changeset View
Changeset View
Standalone View
Standalone View
src/applications/phrequent/export/PhrequentExcelDefaultFormat.php
- This file was added.
<?php | |||||
/** | |||||
* @group phrequent | |||||
*/ | |||||
final class PhrequentExcelDefaultFormat extends PhrequentExcelFormat { | |||||
public function getName() { | |||||
return pht('Default'); | |||||
} | |||||
public function getFileName() { | |||||
return 'phrequent_'.date('Ymd'); | |||||
} | |||||
/** | |||||
* @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 buildWorkbook( | |||||
PHPExcel $workbook, | |||||
array $events, | |||||
array $handles, | |||||
PhabricatorUser $user) { | |||||
$sheet = $workbook->setActiveSheetIndex(0); | |||||
$sheet->setTitle(pht('User Time')); | |||||
$widths = array( | |||||
20, | |||||
30, | |||||
40, | |||||
15, | |||||
15, | |||||
10, | |||||
); | |||||
foreach ($widths as $col => $width) { | |||||
if ($width !== null) { | |||||
$sheet->getColumnDimension($this->col($col))->setWidth($width); | |||||
} | |||||
} | |||||
$status_map = ManiphestTaskStatus::getTaskStatusMap(); | |||||
$pri_map = ManiphestTaskPriority::getTaskPriorityMap(); | |||||
$date_format = null; | |||||
$rows = array(); | |||||
$rows[] = array( | |||||
pht('User'), | |||||
pht('Object'), | |||||
pht('Projects'), | |||||
pht('Date Started'), | |||||
pht('Date Ended'), | |||||
pht('Hours') | |||||
); | |||||
$column_formats = array( | |||||
PHPExcel_Style_NumberFormat::FORMAT_TEXT, | |||||
PHPExcel_Style_NumberFormat::FORMAT_TEXT, | |||||
PHPExcel_Style_NumberFormat::FORMAT_TEXT, | |||||
PHPExcel_Style_NumberFormat::FORMAT_DATE_YYYYMMDD2, | |||||
PHPExcel_Style_NumberFormat::FORMAT_DATE_YYYYMMDD2, | |||||
'[h]:mm:ss', | |||||
); | |||||
$header_format = array( | |||||
'font' => array( | |||||
'bold' => true, | |||||
), | |||||
); | |||||
foreach ($events as $event) { | |||||
$event_user = null; | |||||
if ($event->getUserPHID()) { | |||||
$event_user = $handles[$event->getUserPHID()]->getRealName(); | |||||
} | |||||
$event_object = null; | |||||
$event_projects = array(); | |||||
if ($event->getObjectPHID()) { | |||||
switch (phid_get_type($event->getObjectPHID())) { | |||||
case 'TASK': | |||||
$event_task = $handles[$event->getObjectPHID()]; | |||||
foreach ($event_task->getProjectPHIDs() as $phid) { | |||||
$event_projects[] = $handles[$phid]->getName(); | |||||
} | |||||
$event_projects = implode(', ', $event_projects); | |||||
$event_object = $event_task->getTitle(); | |||||
break; | |||||
case 'DREV': | |||||
$event_revision = $handles[$event->getObjectPHID()]; | |||||
$event_repository = $handles[$event_revision->getRepositoryPHID()]; | |||||
foreach ($event_repository->getProjectPHIDs() as $phid) { | |||||
$event_projects[] = $handles[$phid]->getName(); | |||||
} | |||||
$event_projects = implode(', ', $event_projects); | |||||
$event_object = $event_revision->getTitle(); | |||||
break; | |||||
default: | |||||
$event_object = $handles[$event->getObjectPHID()]->getName(); | |||||
$event_projects = pht('Unknown'); | |||||
break; | |||||
} | |||||
} | |||||
$rows[] = array( | |||||
$event_user, | |||||
$event_object, | |||||
$event_projects, | |||||
$this->computeExcelDate($event->getDateStarted()), | |||||
$this->computeExcelDate($event->getDateEnded()), | |||||
($event->getDateEnded() - $event->getDateStarted()) / 86400, | |||||
); | |||||
} | |||||
foreach ($rows as $row => $cols) { | |||||
foreach ($cols as $col => $spec) { | |||||
$cell_name = $this->col($col).($row + 1); | |||||
$cell = $sheet | |||||
->setCellValue($cell_name, $spec, $return_cell = true); | |||||
if ($row == 0) { | |||||
$sheet->getStyle($cell_name)->applyFromArray($header_format); | |||||
} | |||||
$sheet | |||||
->getStyle($cell_name) | |||||
->getNumberFormat() | |||||
->setFormatCode($column_formats[$col]); | |||||
} | |||||
} | |||||
} | |||||
private function col($n) { | |||||
return chr(ord('A') + $n); | |||||
} | |||||
} |