}
// Use custom fields plugin if it is enabled.
-if (in_array('cf', explode(',', $user->plugins))) {
+if ($user->isPluginEnabled('cf')) {
require_once('plugins/CustomFields.class.php');
$custom_fields = new CustomFields($user->team_id);
}
// Report settings are stored in session bean before we get here.
$bean = new ActionForm('reportBean', new Form('reportForm'), $request);
-// At the moment, we distinguish 2 types of export to file:
-// 1) export to xml
-// 2) export to csv
+// This file handles 2 types of export to a file:
+// 1) xml
+// 2) csv
+// Export to pdf is handled separately in topdf.php.
$type = $request->getParameter('type');
// Also, there are 2 variations of report: totals only, or normal. Totals only means that the report
-// is grouped by (either date, user, client, project, task or cf_1) and user only needs to see subtotals by group.
+// is grouped by (either date, user, client, project, task, or cf_1) and user only needs to see subtotals by group.
$totals_only = $bean->getAttribute('chtotalsonly');
// Obtain items.
else
$items = ttReportHelper::getItems($bean);
+// Build a string to use as filename for the files being downloaded.
+$filename = strtolower($i18n->getKey('title.report')).'_'.$bean->mValues['start_date'].'_'.$bean->mValues['end_date'];
+
header('Pragma: public'); // This is needed for IE8 to download files over https.
header('Content-Type: text/html; charset=utf-8');
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Cache-Control: private', false);
-
+
// Handle 2 cases of possible exports individually.
// 1) entries exported to xml
if ('xml' == $type) {
header('Content-Type: application/xml');
- header('Content-Disposition: attachment; filename="timesheet.xml"');
-
+ header('Content-Disposition: attachment; filename="'.$filename.'.xml"');
+
print "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
print "<rows>\n";
-
+
$group_by = $bean->getAttribute('group_by');
if ($totals_only) {
// Totals only report. Print subtotals.
print "\t<duration><![CDATA[".$val."]]></duration>\n";
}
if ($bean->getAttribute('chcost')) {
- print "\t<cost><![CDATA[";
- if ($user->canManageTeam() || $user->isClient())
- print $subtotal['cost'];
- else
- print $subtotal['expenses'];
- print "]]></cost>\n";
+ print "\t<cost><![CDATA[";
+ if ($user->canManageTeam() || $user->isClient())
+ print $subtotal['cost'];
+ else
+ print $subtotal['expenses'];
+ print "]]></cost>\n";
}
print "</row>\n";
}
} else {
// Normal report.
- foreach ($items as $item) {
+ foreach ($items as $item) {
print "<row>\n";
print "\t<date><![CDATA[".$item['date']."]]></date>\n";
if ($bean->getAttribute('chstart')) print "\t<start><![CDATA[".$item['start']."]]></start>\n";
if ($bean->getAttribute('chfinish')) print "\t<finish><![CDATA[".$item['finish']."]]></finish>\n";
if ($bean->getAttribute('chduration')) {
- $duration = $item['duration'];
+ $duration = $item['duration'];
if($duration && defined('EXPORT_DECIMAL_DURATION') && isTrue(EXPORT_DECIMAL_DURATION))
$duration = time_to_decimal($duration);
print "\t<duration><![CDATA[".$duration."]]></duration>\n";
}
if ($bean->getAttribute('chnote')) print "\t<note><![CDATA[".$item['note']."]]></note>\n";
if ($bean->getAttribute('chcost')) {
- print "\t<cost><![CDATA[";
- if ($user->canManageTeam() || $user->isClient())
- print $item['cost'];
- else
- print $item['expense'];
- print "]]></cost>\n";
+ print "\t<cost><![CDATA[";
+ if ($user->canManageTeam() || $user->isClient())
+ print $item['cost'];
+ else
+ print $item['expense'];
+ print "]]></cost>\n";
}
+ if ($bean->getAttribute('chpaid')) print "\t<paid><![CDATA[".$item['paid']."]]></paid>\n";
if ($bean->getAttribute('chinvoice')) print "\t<invoice><![CDATA[".$item['invoice']."]]></invoice>\n";
print "</row>\n";
- }
+ }
}
-
+
print "</rows>";
-}
+}
// 2) entries exported to csv
if ('csv' == $type) {
header('Content-Type: application/csv');
- header('Content-Disposition: attachment; filename="timesheet.csv"');
-
+ header('Content-Disposition: attachment; filename="'.$filename.'.csv"');
+
// Print UTF8 BOM first to identify encoding.
$bom = chr(239).chr(187).chr(191); // 0xEF 0xBB 0xBF in the beginning of the file is UTF8 BOM.
print $bom; // Without this Excel does not display UTF8 characters properly.
$group_by = $bean->getAttribute('group_by');
if ($totals_only) {
// Totals only report.
-
- // Determine group_by header.
+
+ // Determine group_by header.
if ('cf_1' == $group_by)
$group_by_header = $custom_fields->fields[0]['label'];
else {
if ($bean->getAttribute('chduration')) print ',"'.$i18n->getKey('label.duration').'"';
if ($bean->getAttribute('chcost')) print ',"'.$i18n->getKey('label.cost').'"';
print "\n";
-
+
// Print subtotals.
foreach ($subtotals as $subtotal) {
print '"'.$subtotal['name'].'"';
if ($bean->getAttribute('chduration')) {
$val = $subtotal['time'];
- if($val && defined('EXPORT_DECIMAL_DURATION') && isTrue(EXPORT_DECIMAL_DURATION))
+ if($val && defined('EXPORT_DECIMAL_DURATION') && isTrue(EXPORT_DECIMAL_DURATION))
$val = time_to_decimal($val);
- print ',"'.$val.'"';
+ print ',"'.$val.'"';
}
if ($bean->getAttribute('chcost')) {
- if ($user->canManageTeam() || $user->isClient())
+ if ($user->canManageTeam() || $user->isClient())
print ',"'.$subtotal['cost'].'"';
else
print ',"'.$subtotal['expenses'].'"';
if ($bean->getAttribute('chduration')) print ',"'.$i18n->getKey('label.duration').'"';
if ($bean->getAttribute('chnote')) print ',"'.$i18n->getKey('label.note').'"';
if ($bean->getAttribute('chcost')) print ',"'.$i18n->getKey('label.cost').'"';
+ if ($bean->getAttribute('chpaid')) print ',"'.$i18n->getKey('label.paid').'"';
if ($bean->getAttribute('chinvoice')) print ',"'.$i18n->getKey('label.invoice').'"';
print "\n";
}
if ($bean->getAttribute('chnote')) print ',"'.str_replace('"','""',$item['note']).'"';
if ($bean->getAttribute('chcost')) {
- if ($user->canManageTeam() || $user->isClient())
- print ',"'.$item['cost'].'"';
- else
- print ',"'.$item['expense'].'"';
+ if ($user->canManageTeam() || $user->isClient())
+ print ',"'.$item['cost'].'"';
+ else
+ print ',"'.$item['expense'].'"';
}
+ if ($bean->getAttribute('chpaid')) print ',"'.$item['paid'].'"';
if ($bean->getAttribute('chinvoice')) print ',"'.str_replace('"','""',$item['invoice']).'"';
print "\n";
}
}
}
-?>
\ No newline at end of file