mirror of
https://github.com/Combodo/iTop.git
synced 2026-02-13 07:24:13 +01:00
N°3123 - DisplayBock BlockCvs
This commit is contained in:
@@ -30,6 +30,7 @@ use Combodo\iTop\Application\UI\Base\Layout\UIContentBlock;
|
||||
use Combodo\iTop\Application\UI\DisplayBlock\BlockChart\BlockChart;
|
||||
use Combodo\iTop\Application\UI\DisplayBlock\BlockChartAjaxBars\BlockChartAjaxBars;
|
||||
use Combodo\iTop\Application\UI\DisplayBlock\BlockChartAjaxPie\BlockChartAjaxPie;
|
||||
use Combodo\iTop\Application\UI\DisplayBlock\BlockCsv\BlockCsv;
|
||||
use Combodo\iTop\Application\UI\DisplayBlock\BlockList\BlockList;
|
||||
|
||||
require_once(APPROOT.'/application/utils.inc.php');
|
||||
@@ -457,6 +458,10 @@ HTML;
|
||||
$oBlock = $this->RenderSummary($aExtraParams);
|
||||
break;
|
||||
|
||||
case 'csv':
|
||||
$oBlock = $this->RenderCsv($oAppContext, $sId);
|
||||
break;
|
||||
|
||||
case 'search':
|
||||
$oBlock = $this->RenderSearch($oPage, $sId, $aExtraParams);
|
||||
break;
|
||||
@@ -1323,6 +1328,44 @@ JS
|
||||
return $oBlock;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param \ApplicationContext $oAppContext
|
||||
* @param string|null $sId
|
||||
*
|
||||
* @return iUIBlock
|
||||
* @throws \ArchivedObjectException
|
||||
* @throws \CoreException
|
||||
*/
|
||||
protected function RenderCsv(ApplicationContext $oAppContext, string $sId = null)
|
||||
{
|
||||
$oBlock = new BlockCsv($sId);
|
||||
$oBlock->bAdvancedMode = utils::ReadParam('advanced', false);
|
||||
|
||||
$oBlock->sCsvFile = strtolower($this->m_oFilter->GetClass()).'.csv';
|
||||
$oBlock->sDownloadLink = utils::GetAbsoluteUrlAppRoot().'webservices/export.php?expression='.urlencode($this->m_oFilter->ToOQL(true)).'&format=csv&filename='.urlencode($oBlock->sCsvFile);
|
||||
$oBlock->sLinkToToggle = utils::GetAbsoluteUrlAppRoot().'pages/UI.php?operation=search&'.$oAppContext->GetForLink().'&filter='.rawurlencode($this->m_oFilter->serialize()).'&format=csv';
|
||||
// Pass the parameters via POST, since expression may be very long
|
||||
$aParamsToPost = array(
|
||||
'expression' => $this->m_oFilter->ToOQL(true),
|
||||
'format' => 'csv',
|
||||
'filename' => $oBlock->sCsvFile,
|
||||
'charset' => 'UTF-8',
|
||||
);
|
||||
if ($oBlock->bAdvancedMode) {
|
||||
$oBlock->sDownloadLink .= '&fields_advanced=1';
|
||||
$aParamsToPost['fields_advance'] = 1;
|
||||
$oBlock->sChecked = 'CHECKED';
|
||||
} else {
|
||||
$oBlock->sLinkToToggle = $oBlock->sLinkToToggle.'&advanced=1';
|
||||
$oBlock->sChecked = '';
|
||||
}
|
||||
$oBlock->sAjaxLink = utils::GetAbsoluteUrlAppRoot().'webservices/export.php';
|
||||
|
||||
$oBlock->sCharsetNotice = false;
|
||||
$oBlock->sJsonParams = json_encode($aParamsToPost);
|
||||
return $oBlock;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
/*!
|
||||
* copyright Copyright (C) 2010-2020 Combodo SARL
|
||||
* license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
|
||||
@import "display-block/all";
|
||||
@@ -1,4 +0,0 @@
|
||||
/*!
|
||||
* copyright Copyright (C) 2010-2020 Combodo SARL
|
||||
* license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
@@ -21,6 +21,5 @@
|
||||
@import "base/all";
|
||||
@import "components/all";
|
||||
@import "layout/all";
|
||||
@import "application/all";
|
||||
@import "pages/all";
|
||||
@import "themes/all";
|
||||
|
||||
@@ -242,6 +242,7 @@ return array(
|
||||
'Combodo\\iTop\\Application\\UI\\DisplayBlock\\BlockChartAjaxBars\\BlockChartAjaxBars' => $baseDir . '/sources/application/UI/DisplayBlock/BlockChartAjaxBars/BlockChartAjaxBars.php',
|
||||
'Combodo\\iTop\\Application\\UI\\DisplayBlock\\BlockChartAjaxPie\\BlockChartAjaxPie' => $baseDir . '/sources/application/UI/DisplayBlock/BlockChartAjaxPie/BlockChartAjaxPie.php',
|
||||
'Combodo\\iTop\\Application\\UI\\DisplayBlock\\BlockChart\\BlockChart' => $baseDir . '/sources/application/UI/DisplayBlock/BlockChart/BlockChart.php',
|
||||
'Combodo\\iTop\\Application\\UI\\DisplayBlock\\BlockCsv\\BlockCsv' => $baseDir . '/sources/application/UI/DisplayBlock/BlockCsv/BlockCsv.php',
|
||||
'Combodo\\iTop\\Application\\UI\\DisplayBlock\\BlockList\\BlockList' => $baseDir . '/sources/application/UI/DisplayBlock/BlockList/BlockList.php',
|
||||
'Combodo\\iTop\\Application\\UI\\Helper\\UIHelper' => $baseDir . '/sources/application/UI/Helper/UIHelper.php',
|
||||
'Combodo\\iTop\\Composer\\iTopComposer' => $baseDir . '/sources/Composer/iTopComposer.php',
|
||||
|
||||
@@ -472,6 +472,7 @@ class ComposerStaticInit0018331147de7601e7552f7da8e3bb8b
|
||||
'Combodo\\iTop\\Application\\UI\\DisplayBlock\\BlockChartAjaxBars\\BlockChartAjaxBars' => __DIR__ . '/../..' . '/sources/application/UI/DisplayBlock/BlockChartAjaxBars/BlockChartAjaxBars.php',
|
||||
'Combodo\\iTop\\Application\\UI\\DisplayBlock\\BlockChartAjaxPie\\BlockChartAjaxPie' => __DIR__ . '/../..' . '/sources/application/UI/DisplayBlock/BlockChartAjaxPie/BlockChartAjaxPie.php',
|
||||
'Combodo\\iTop\\Application\\UI\\DisplayBlock\\BlockChart\\BlockChart' => __DIR__ . '/../..' . '/sources/application/UI/DisplayBlock/BlockChart/BlockChart.php',
|
||||
'Combodo\\iTop\\Application\\UI\\DisplayBlock\\BlockCsv\\BlockCsv' => __DIR__ . '/../..' . '/sources/application/UI/DisplayBlock/BlockCsv/BlockCsv.php',
|
||||
'Combodo\\iTop\\Application\\UI\\DisplayBlock\\BlockList\\BlockList' => __DIR__ . '/../..' . '/sources/application/UI/DisplayBlock/BlockList/BlockList.php',
|
||||
'Combodo\\iTop\\Application\\UI\\Helper\\UIHelper' => __DIR__ . '/../..' . '/sources/application/UI/Helper/UIHelper.php',
|
||||
'Combodo\\iTop\\Composer\\iTopComposer' => __DIR__ . '/../..' . '/sources/Composer/iTopComposer.php',
|
||||
|
||||
44
pages/UI.php
44
pages/UI.php
@@ -212,47 +212,47 @@ function SetObjectBreadCrumbEntry(DBObject $oObj, WebPage $oPage)
|
||||
function DisplaySearchSet($oP, $oFilter, $bSearchForm = true, $sBaseClass = '', $sFormat = '', $bDoSearch = true, $bSearchFormOpen = true)
|
||||
{
|
||||
//search block
|
||||
$oBlockForm=null;
|
||||
if ($bSearchForm)
|
||||
{
|
||||
$oBlockForm = null;
|
||||
if ($bSearchForm) {
|
||||
$aParams = array('open' => $bSearchFormOpen, 'table_id' => '1');
|
||||
if (!empty($sBaseClass))
|
||||
{
|
||||
if (!empty($sBaseClass)) {
|
||||
$aParams['baseClass'] = $sBaseClass;
|
||||
}
|
||||
$oBlockForm = new DisplayBlock($oFilter, 'search', false /* Asynchronous */, $aParams);
|
||||
|
||||
if (!$bDoSearch)
|
||||
{
|
||||
if (!$bDoSearch) {
|
||||
$oBlockForm->Display($oP, 0);
|
||||
}
|
||||
}
|
||||
if ($bDoSearch)
|
||||
{
|
||||
$oBlock = new DisplayBlock($oFilter, 'list', false);
|
||||
if ($bDoSearch) {
|
||||
if (strtolower($sFormat) == 'csv') {
|
||||
$oBlock = new DisplayBlock($oFilter, 'csv', false);
|
||||
// Adjust the size of the Textarea containing the CSV to fit almost all the remaining space
|
||||
$oP->add_ready_script(" $('#1>textarea').height($('#1').parent().height() - $('#0').outerHeight() - 30).width( $('#1').parent().width() - 20);"); // adjust the size of the block
|
||||
} else {
|
||||
$oBlock = new DisplayBlock($oFilter, 'list', false);
|
||||
|
||||
// Breadcrumb
|
||||
//$iCount = $oBlock->GetDisplayedCount();
|
||||
$sPageId = "ui-search-".$oFilter->GetClass();
|
||||
$sLabel = MetaModel::GetName($oFilter->GetClass());
|
||||
$oP->SetBreadCrumbEntry($sPageId, $sLabel, '', '', 'fas fa-search', iTopWebPage::ENUM_BREADCRUMB_ENTRY_ICON_TYPE_CSS_CLASSES);
|
||||
// Breadcrumb
|
||||
//$iCount = $oBlock->GetDisplayedCount();
|
||||
$sPageId = "ui-search-".$oFilter->GetClass();
|
||||
$sLabel = MetaModel::GetName($oFilter->GetClass());
|
||||
$oP->SetBreadCrumbEntry($sPageId, $sLabel, '', '', 'fas fa-search', iTopWebPage::ENUM_BREADCRUMB_ENTRY_ICON_TYPE_CSS_CLASSES);
|
||||
}
|
||||
if ($bSearchForm) {
|
||||
//add search block
|
||||
$sTableId = utils::ReadParam('_table_id_', null, false, 'raw_data');
|
||||
if($sTableId=='')
|
||||
{
|
||||
if ($sTableId == '') {
|
||||
$sTableId = 'result_1';
|
||||
}
|
||||
$aExtraParams['table_id']=$sTableId;
|
||||
$oUIBlockForm=$oBlockForm->GetDisplay($oP,'search_1');
|
||||
$aExtraParams['table_id'] = $sTableId;
|
||||
$oUIBlockForm = $oBlockForm->GetDisplay($oP, 'search_1');
|
||||
//add result block
|
||||
$oUIBlock=$oBlock->GetDisplay($oP, $sTableId);
|
||||
$oUIBlock = $oBlock->GetDisplay($oP, $sTableId);
|
||||
$oUIBlock->AddCSSClasses("display_block sf_results_area");
|
||||
//$oUIBlockForm->AddSubBlock($oUIBlock);
|
||||
$oP->AddUiBlock($oUIBlockForm);
|
||||
$oP->AddUiBlock($oUIBlock);
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
$oBlock->Display($oP, 1);
|
||||
}
|
||||
}
|
||||
|
||||
41
sources/application/UI/DisplayBlock/BlockCsv/BlockCsv.php
Normal file
41
sources/application/UI/DisplayBlock/BlockCsv/BlockCsv.php
Normal file
@@ -0,0 +1,41 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright Copyright (C) 2010-2020 Combodo SARL
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
|
||||
namespace Combodo\iTop\Application\UI\DisplayBlock\BlockCsv;
|
||||
|
||||
|
||||
use Combodo\iTop\Application\UI\Base\UIBlock;
|
||||
|
||||
/**
|
||||
* Class BlockCsv
|
||||
*
|
||||
* @package Combodo\iTop\Application\UI\DisplayBlock\BlockCsv
|
||||
*/
|
||||
class BlockCsv extends UIBlock
|
||||
{
|
||||
// Overloaded constants
|
||||
public const BLOCK_CODE = 'ibo-block-csv';
|
||||
public const DEFAULT_HTML_TEMPLATE_REL_PATH = 'application/display-block/block-csv/layout';
|
||||
public const DEFAULT_JS_TEMPLATE_REL_PATH = 'application/display-block/block-csv/layout';
|
||||
|
||||
/** @var string */
|
||||
public $sDownloadLink;
|
||||
/** @var string */
|
||||
public $sCsvFile;
|
||||
/** @var string */
|
||||
public $sCharsetNotice;
|
||||
/** @var string */
|
||||
public $sChecked;
|
||||
/** @var string */
|
||||
public $sLinkToToggle;
|
||||
/** @var bool */
|
||||
public $bAdvancedMode;
|
||||
/** @var string */
|
||||
public $sAjaxLink;
|
||||
/** @var string */
|
||||
public $sJsonParams;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
{# @copyright Copyright (C) 2010-2020 Combodo SARL #}
|
||||
{# @license http://opensource.org/licenses/AGPL-3.0 #}
|
||||
{% apply spaceless %}
|
||||
<div id="{{ oUIBlock.GetId() }}" class="{{ oUIBlock.GetBlockCode() }}">
|
||||
<div>
|
||||
<table style="width:100%" class="transparent">
|
||||
<tr>
|
||||
<td><a href="{{ oUIBlock.sDownloadLink }}">{{ 'UI:Download-CSV'|dict_format(oUIBlock.sCsvFile) }}</a>{{ oUIBlock.sCharsetNotice }}</td>
|
||||
<td style="text-align:right">
|
||||
<input type="checkbox" {{ oUIBlock.sChecked }} onClick="window.location.href='{{ oUIBlock.sLinkToToggle }}'">
|
||||
{{ 'UI:CSVExport:AdvancedMode'|dict_s }}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
{% if oUIBlock.bAdvancedMode %}
|
||||
<p>
|
||||
{{ 'UI:CSVExport:AdvancedMode+'|dict_s }}
|
||||
</p>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
<div id="csv_content_loading">
|
||||
<div style="width: 250px; height: 20px; background: url(../setup/orange-progress.gif); border: 1px #999 solid; margin-left:auto; margin-right: auto; text-align: center;">
|
||||
{{ 'UI:Loading'|dict_s }}
|
||||
</div>
|
||||
</div>
|
||||
<textarea id="csv_content" style="display:none;"></textarea>
|
||||
</div>
|
||||
{% endapply %}
|
||||
12
templates/application/display-block/block-csv/layout.js.twig
Normal file
12
templates/application/display-block/block-csv/layout.js.twig
Normal file
@@ -0,0 +1,12 @@
|
||||
{# @copyright Copyright (C) 2010-2020 Combodo SARL #}
|
||||
{# @license http://opensource.org/licenses/AGPL-3.0 #}
|
||||
{% apply spaceless %}
|
||||
$.post(
|
||||
'{{ oUIBlock.sAjaxLink|raw }}',
|
||||
{{ oUIBlock.sJsonParams|raw }},
|
||||
function(data) {
|
||||
$('#csv_content').html(data);
|
||||
$('#csv_content_loading').hide();
|
||||
$('#csv_content').show();
|
||||
});
|
||||
{% endapply %}
|
||||
Reference in New Issue
Block a user