ENHANCEMENT: Use GridFields to show reports in the ReportAdmin

This commit is contained in:
Andrew O'Neil 2012-04-04 17:58:16 +12:00
parent 029f83347b
commit 4c76c8563c
4 changed files with 91 additions and 21 deletions

View File

@ -58,9 +58,9 @@ class ReportAdmin extends LeftAndMain implements PermissionProvider {
return false;
}
function currentPageID() {
function currentReport() {
$id = parent::currentPageID();
$reports = SS_Report::get_reports('ReportAdmin');
$reports = SS_Report::get_reports();
return (isset($reports[$id])) ? $reports[$id] : null;
}
@ -72,7 +72,7 @@ class ReportAdmin extends LeftAndMain implements PermissionProvider {
*/
public function Reports() {
$output = new ArrayList();
foreach(SS_Report::get_reports('ReportAdmin') as $report) {
foreach(SS_Report::get_reports() as $report) {
if($report->canView()) $output->push($report);
}
return $output;
@ -90,7 +90,7 @@ class ReportAdmin extends LeftAndMain implements PermissionProvider {
* @return boolean
*/
public static function has_reports() {
return sizeof(SS_Report::get_reports('ReportAdmin')) > 0;
return sizeof(SS_Report::get_reports()) > 0;
}
public function updatereport() {
@ -107,5 +107,67 @@ class ReportAdmin extends LeftAndMain implements PermissionProvider {
)
);
}
public function getEditForm($id = null, $fields = null) {
$fields = new FieldList();
$report = $this->currentReport();
if($report) {
// List all reports
$gridFieldConfig = GridFieldConfig::create()->addComponents(
new GridFieldToolbarHeader(),
new GridFieldSortableHeader(),
new GridFieldDataColumns(),
new GridFieldPaginator(),
new GridFieldPrintButton(),
new GridFieldExportButton()
);
$gridField = new GridField('Report',$report->title(), $report->sourceRecords(array(), null, null), $gridFieldConfig);
$displayFields = array();
$fieldCasting = array();
$fieldFormatting = array();
// Parse the column information
foreach($report->columns() as $source => $info) {
if(is_string($info)) $info = array('title' => $info);
if(isset($info['formatting'])) $fieldFormatting[$source] = $info['formatting'];
if(isset($info['csvFormatting'])) $csvFieldFormatting[$source] = $info['csvFormatting'];
if(isset($info['casting'])) $fieldCasting[$source] = $info['casting'];
$displayFields[$source] = isset($info['title']) ? $info['title'] : $source;
}
$gridField->setDisplayFields($displayFields);
$gridField->setFieldCasting($fieldCasting);
$gridField->setFieldFormatting($fieldFormatting);
$fields->push($gridField);
} else {
// List all reports
$gridFieldConfig = GridFieldConfig::create()->addComponents(
new GridFieldToolbarHeader(),
new GridFieldSortableHeader(),
new GridFieldDataColumns()
);
$gridField = new GridField('Reports','Reports', $this->Reports(), $gridFieldConfig);
$gridField->setDisplayFields(array(
'title' => 'Title',
'description' => 'Description'
));
$gridField->setFieldFormatting(array(
'title' => '<a href=\"$Link\">$value</a>'
));
$fields->push($gridField);
}
$actions = new FieldList();
$form = new Form($this, "EditForm", $fields, $actions);
$form->addExtraClass('cms-edit-form cms-panel-padded center ' . $this->BaseCSSClasses());
$this->extend('updateEditForm', $form);
return $form;
}
}

View File

@ -134,6 +134,10 @@ class SS_Report extends ViewableData {
return $this->dataClass;
}
function getLink() {
return 'admin/reports/show/' . $this->class;
}
/**
@ -197,7 +201,7 @@ class SS_Report extends ViewableData {
if (in_array($report, self::$excluded_reports)) continue; //don't use the SS_Report superclass
$reportObj = new $report;
if (method_exists($reportObj,'sort')) $reportObj->sort = $reportObj->sort(); //use the sort method to specify the sort field
$reportsArray[] = $reportObj;
$reportsArray[$report] = $reportObj;
}
}

View File

@ -1,13 +1,28 @@
<div class="cms-content center $BaseCSSClasses" data-layout-type="border">
<div class="cms-content center ss-tabset $BaseCSSClasses" data-layout-type="border">
<div class="cms-content-header north">
<h2><% _t('REPORTS','Reports') %></h2>
<div>
<% control EditForm %>
<% if Backlink %>
<a class="backlink ss-ui-button cms-panel-link" data-icon="back" href="$Backlink">
<% _t('Back', 'Back') %>
</a>
<% end_if %>
<h2 id="page-title-heading">
<% control Controller %>
<% include CMSBreadcrumbs %>
<% end_control %>
</h2>
<% end_control %>
</div>
</div>
$Tools
<div class="cms-content-fields center ui-widget-content">
<div class="cms-content-fields center ui-widget-content" data-layout-type="border">
$EditForm
</div>
</div>

View File

@ -1,11 +0,0 @@
<div class="cms-content-tools west" id="cms-content-tools-ReportAdmin">
<ul class="ui-widget-content">
<% control Reports %>
<li id="record-$ID">
<a href="admin/reports/show/$ID" title="$TreeDescription">$TreeTitle</a>
</li>
<% end_control %>
</ul>
</div>