N°3111 - Fix Portal export

This commit is contained in:
Eric
2020-07-21 16:39:55 +02:00
parent bd14096d43
commit 5b04143711
7 changed files with 52 additions and 22 deletions

View File

@@ -345,10 +345,10 @@ abstract class BulkExport
$this->oBulkExportResult->Set('format', $this->sFormatCode);
$this->oBulkExportResult->Set('search', $this->oSearch->serialize());
$this->oBulkExportResult->Set('chunk_size', $this->iChunkSize);
$this->oBulkExportResult->Set('temp_file_path', $this->sTmpFile);
$this->oBulkExportResult->Set('localize_output', $this->bLocalizeOutput);
}
$this->oBulkExportResult->Set('status_info', json_encode($this->GetStatusInfo()));
$this->oBulkExportResult->Set('temp_file_path', $this->sTmpFile);
utils::PushArchiveMode(false);
$ret = $this->oBulkExportResult->DBWrite();
utils::PopArchiveMode();
@@ -420,6 +420,11 @@ abstract class BulkExport
public function GetStatistics()
{
}
public function SetFields($sFields)
{
}
public function GetDownloadFileName()

View File

@@ -353,7 +353,8 @@ EOF
$fStartExcel = microtime(true);
$writer = new XLSXWriter();
$oDateTimeFormat = new DateTimeFormat($this->aStatusInfo['date_format']);
$sDateFormat = isset($this->aStatusInfo['date_format']) ? $this->aStatusInfo['date_format'] : (string)AttributeDateTime::GetFormat();
$oDateTimeFormat = new DateTimeFormat($sDateFormat);
$writer->setDateTimeFormat($oDateTimeFormat->ToExcel());
$oDateFormat = new DateTimeFormat($oDateTimeFormat->ToDateFormat());
$writer->setDateFormat($oDateFormat->ToExcel());

View File

@@ -365,29 +365,37 @@ EOF
{
throw new BulkExportMissingParameterException('fields');
}
else if(($sQueryId !== null) && ($sQueryId !== null))
else
{
$oSearch = DBObjectSearch::FromOQL('SELECT QueryOQL WHERE id = :query_id', array('query_id' => $sQueryId));
$oQueries = new DBObjectSet($oSearch);
if ($oQueries->Count() > 0)
if (($sQueryId !== null) && ($sQueryId !== null))
{
$oQuery = $oQueries->Fetch();
if (($sFields === null) || ($sFields === ''))
$oSearch = DBObjectSearch::FromOQL('SELECT QueryOQL WHERE id = :query_id', array('query_id' => $sQueryId));
$oQueries = new DBObjectSet($oSearch);
if ($oQueries->Count() > 0)
{
// No 'fields' parameter supplied, take the fields from the query phrasebook definition
$sFields = trim($oQuery->Get('fields'));
if ($sFields === '')
$oQuery = $oQueries->Fetch();
if (($sFields === null) || ($sFields === ''))
{
throw new BulkExportMissingParameterException('fields');
// No 'fields' parameter supplied, take the fields from the query phrasebook definition
$sFields = trim($oQuery->Get('fields'));
if ($sFields === '')
{
throw new BulkExportMissingParameterException('fields');
}
}
}
}
else
{
throw BulkExportException('Invalid value for the parameter: query. There is no Query Phrasebook with id = '.$sQueryId, Dict::Format('Core:BulkExport:InvalidParameter_Query', $sQueryId));
else
{
throw BulkExportException('Invalid value for the parameter: query. There is no Query Phrasebook with id = '.$sQueryId, Dict::Format('Core:BulkExport:InvalidParameter_Query', $sQueryId));
}
}
}
$this->SetFields($sFields);
}
public function SetFields($sFields)
{
// Interpret (and check) the list of fields
//
$aSelectedClasses = $this->oSearch->GetSelectedClasses();

View File

@@ -20,8 +20,8 @@ function ExportStartExport() {
var oParams = {};
oParams.operation = 'export_build';
oParams.format = sFormat;
oParams.expression = sOQL;
oParams.fields = sFields;
oParams.token = sToken;
oParams.start = 1;
$.post(GetAbsoluteUrlAppRoot() + 'pages/ajax.render.php', oParams, function (data) {
if (data == null) {
ExportError('Export failed (no data provided), please contact your administrator');

View File

@@ -28,6 +28,7 @@ use AttributeImage;
use AttributeSet;
use AttributeTagSet;
use BinaryExpression;
use BulkExport;
use CMDBSource;
use Combodo\iTop\Portal\Brick\AbstractBrick;
use Combodo\iTop\Portal\Brick\ManageBrick;
@@ -245,11 +246,18 @@ class ManageBrickController extends BrickController
}
$sFields = implode(',', $aFields);
$sFormat = 'xlsx';
$oSearch->UpdateContextFromUser();
$oExporter = BulkExport::FindExporter($sFormat, $oSearch);
$oExporter->SetObjectList($oSearch);
$oExporter->SetFormat($sFormat);
$oExporter->SetChunkSize(EXPORTER_DEFAULT_CHUNK_SIZE);
$oExporter->SetFields($sFields);
$aData = array(
'oBrick' => $oBrick,
'sBrickId' => $sBrickId,
'sFields' => $sFields,
'sOQL' => $oSearch->ToOQL(),
'sToken' => $oExporter->SaveState(),
);
return $this->render(static::EXCEL_EXPORT_TEMPLATE_PATH, $aData);

View File

@@ -27,9 +27,8 @@
<script type="text/javascript">
var sDataState = 'not-yet-started';
var sOQL = {{ sOQL|json_encode|raw }};
var sToken = {{ sToken|raw }};
var sFormat = 'xlsx';
var sFields = "{{ sFields }}";
$(document).ready(function () {
window.setTimeout(function () {

View File

@@ -2464,6 +2464,10 @@ EOF
$data = '';
if ($token === null)
{
if (!ContextTag::Check('backoffice'))
{
throw new Exception('Missing token');
}
$sFormat = utils::ReadParam('format', '');
$sExpression = utils::ReadParam('expression', null, false, 'raw_data');
$iQueryId = utils::ReadParam('query', null);
@@ -2499,6 +2503,11 @@ EOF
else
{
$oExporter = BulkExport::FindExporterFromToken($token);
if (utils::ReadParam('start', 0, false, 'integer') == 1)
{
// From portal, the first call is using a token
$data .= $oExporter->GetHeader();
}
}
if ($oExporter)