Commit 9aa1e2c6 authored by Reinhard Führicht's avatar Reinhard Führicht Committed by Anja Leichsenring
Browse files

[TASK] Import/Export (impexp) move to Fluid standalone view

Resolves: #72699
Releases: master
Change-Id: I18c4dad4b2838c445188fd4a8e9b8e356c61f35f
Reviewed-on: https://review.typo3.org/45884


Reviewed-by: default avatarMorton Jonuschat <m.jonuschat@mojocode.de>
Tested-by: default avatarMorton Jonuschat <m.jonuschat@mojocode.de>
Reviewed-by: Georg Ringer's avatarGeorg Ringer <georg.ringer@gmail.com>
Tested-by: Georg Ringer's avatarGeorg Ringer <georg.ringer@gmail.com>
Reviewed-by: default avatarLudwig Rafelsberger <ludwig.rafelsberger@gmx.at>
Tested-by: default avatarLudwig Rafelsberger <ludwig.rafelsberger@gmx.at>
Reviewed-by: Anja Leichsenring's avatarAnja Leichsenring <aleichsenring@ab-softlab.de>
Tested-by: Anja Leichsenring's avatarAnja Leichsenring <aleichsenring@ab-softlab.de>
parent fb515b07
......@@ -224,29 +224,6 @@ class Export extends ImportExport
$this->saveFilesOutsideExportFile = $saveFilesOutsideExportFile;
}
/**
* Sets a thumbnail image to the exported file
*
* @param string $imgFilepath Filename reference, gif, jpg, png. Absolute path.
* @return void
*/
public function addThumbnail($imgFilepath)
{
if (@is_file($imgFilepath)) {
$imgInfo = @getimagesize($imgFilepath);
if (is_array($imgInfo)) {
$fileContent = GeneralUtility::getUrl($imgFilepath);
$this->dat['header']['thumbnail'] = array(
'imgInfo' => $imgInfo,
'content' => $fileContent,
'filesize' => strlen($fileContent),
'filemtime' => filemtime($imgFilepath),
'filename' => PathUtility::basename($imgFilepath)
);
}
}
}
/**************************
* Export / Init Page tree
*************************/
......
......@@ -25,6 +25,7 @@ use TYPO3\CMS\Core\Utility\ExtensionManagementUtility;
use TYPO3\CMS\Core\Utility\File\ExtendedFileUtility;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Core\Utility\PathUtility;
use TYPO3\CMS\Fluid\View\StandaloneView;
use TYPO3\CMS\Lang\LanguageService;
/**
......@@ -252,6 +253,11 @@ abstract class ImportExport
*/
protected $iconFactory;
/**
* @var StandaloneView
*/
protected $standaloneView = null;
/**
* The constructor
*/
......@@ -282,7 +288,7 @@ abstract class ImportExport
/**
* Displays an overview of the header-content.
*
* @return string HTML content
* @return void
*/
public function displayContentOverview()
{
......@@ -296,83 +302,50 @@ abstract class ImportExport
}
// Probably this is done to save memory space?
unset($this->dat['files']);
$out = '';
$viewData = array();
// Traverse header:
if (is_array($this->dat['header'])) {
$this->remainHeader = $this->dat['header'];
// If there is a page tree set, show that:
$lang = $this->getLanguageService();
if (is_array($this->dat['header']['pagetree'])) {
reset($this->dat['header']['pagetree']);
$lines = array();
$this->traversePageTree($this->dat['header']['pagetree'], $lines);
$rows = array();
$rows[] = '
<tr class="bgColor5 tableheader">
<td>' . $lang->getLL('impexpcore_displaycon_controls', true) . '</td>
<td>' . $lang->getLL('impexpcore_displaycon_title', true) . '</td>
<td>' . $lang->getLL('impexpcore_displaycon_size', true) . '</td>
<td>' . $lang->getLL('impexpcore_displaycon_message', true) . '</td>
' . ($this->update ? '<td>' . $lang->getLL('impexpcore_displaycon_updateMode', true) . '</td>' : '') . '
' . ($this->update ? '<td>' . $lang->getLL('impexpcore_displaycon_currentPath', true) . '</td>' : '') . '
' . ($this->showDiff ? '<td>' . $lang->getLL('impexpcore_displaycon_result', true) . '</td>' : '') . '
</tr>';
foreach ($lines as $r) {
$rows[] = '
<tr class="' . $r['class'] . '">
<td>' . $this->renderControls($r) . '</td>
<td nowrap="nowrap">' . $r['preCode'] . $r['title'] . '</td>
<td nowrap="nowrap">' . GeneralUtility::formatSize($r['size']) . '</td>
<td nowrap="nowrap">' . ($r['msg'] && !$this->doesImport ? '<span class="text-danger">' . htmlspecialchars($r['msg']) . '</span>' : '') . '</td>
' . ($this->update ? '<td nowrap="nowrap">' . $r['updateMode'] . '</td>' : '') . '
' . ($this->update ? '<td nowrap="nowrap">' . $r['updatePath'] . '</td>' : '') . '
' . ($this->showDiff ? '<td>' . $r['showDiffContent'] . '</td>' : '') . '
</tr>';
$viewData['dat'] = $this->dat;
$viewData['update'] = $this->update;
$viewData['showDiff'] = $this->showDiff;
if (!empty($lines)) {
foreach ($lines as &$r) {
$r['controls'] = $this->renderControls($r);
$r['fileSize'] = GeneralUtility::formatSize($r['size']);
$r['message'] = ($r['msg'] && !$this->doesImport ? '<span class="text-danger">' . htmlspecialchars($r['msg']) . '</span>' : '');
}
$viewData['pagetreeLines'] = $lines;
} else {
$viewData['pagetreeLines'] = array();
}
$out = '
<strong>' . $lang->getLL('impexpcore_displaycon_insidePagetree', true) . '</strong>
<br /><br />
<table border="0" cellpadding="0" cellspacing="1">' . implode('', $rows) . '</table>
<br /><br />';
}
// Print remaining records that were not contained inside the page tree:
$lines = array();
if (is_array($this->remainHeader['records'])) {
$lines = array();
if (is_array($this->remainHeader['records']['pages'])) {
$this->traversePageRecords($this->remainHeader['records']['pages'], $lines);
}
$this->traverseAllRecords($this->remainHeader['records'], $lines);
if (!empty($lines)) {
$rows = array();
$rows[] = '
<tr class="bgColor5 tableheader">
<td>' . $lang->getLL('impexpcore_displaycon_controls', true) . '</td>
<td>' . $lang->getLL('impexpcore_displaycon_title', true) . '</td>
<td>' . $lang->getLL('impexpcore_displaycon_size', true) . '</td>
<td>' . $lang->getLL('impexpcore_displaycon_message', true) . '</td>
' . ($this->update ? '<td>' . $lang->getLL('impexpcore_displaycon_updateMode', true) . '</td>' : '') . '
' . ($this->update ? '<td>' . $lang->getLL('impexpcore_displaycon_currentPath', true) . '</td>' : '') . '
' . ($this->showDiff ? '<td>' . $lang->getLL('impexpcore_displaycon_result', true) . '</td>' : '') . '
</tr>';
foreach ($lines as $r) {
$rows[] = '<tr class="' . $r['class'] . '">
<td>' . $this->renderControls($r) . '</td>
<td nowrap="nowrap">' . $r['preCode'] . $r['title'] . '</td>
<td nowrap="nowrap">' . GeneralUtility::formatSize($r['size']) . '</td>
<td nowrap="nowrap">' . ($r['msg'] && !$this->doesImport ? '<span class="text-danger">' . htmlspecialchars($r['msg']) . '</span>' : '') . '</td>
' . ($this->update ? '<td nowrap="nowrap">' . $r['updateMode'] . '</td>' : '') . '
' . ($this->update ? '<td nowrap="nowrap">' . $r['updatePath'] . '</td>' : '') . '
' . ($this->showDiff ? '<td>' . $r['showDiffContent'] . '</td>' : '') . '
</tr>';
foreach ($lines as &$r) {
$r['controls'] = $this->renderControls($r);
$r['fileSize'] = GeneralUtility::formatSize($r['size']);
$r['message'] = ($r['msg'] && !$this->doesImport ? '<span class="text-danger">' . htmlspecialchars($r['msg']) . '</span>' : '');
}
$out .= '
<strong>' . $lang->getLL('impexpcore_singlereco_outsidePagetree', true) . '</strong>
<br /><br />
<table border="0" cellpadding="0" cellspacing="1">' . implode('', $rows) . '</table>';
$viewData['remainingRecords'] = $lines;
}
}
}
return $out;
$this->standaloneView->assign('contentOverview', $viewData);
}
/**
......@@ -1263,4 +1236,13 @@ abstract class ImportExport
{
return $GLOBALS['LANG'];
}
/**
* @param StandaloneView $standaloneView The view object
* @return void
*/
public function setStandaloneView(StandaloneView $standaloneView)
{
$this->standaloneView = $standaloneView;
}
}
<form action="{moduleUrl}" method="post" id="ImportExportController" enctype="multipart/form-data">
<input type="hidden" name="id" value="{id}" />
<h3><f:translate key="title_{inData.action}" /></h3>
<div style="padding-top: 5px;"></div>
<f:render section="content" />
</form>
<f:if condition="{import.mode} == 'import'">
<f:then>
<h2>
<f:if condition="{inData.import_file}">
<f:then><f:translate key="importdata_structureHasBeenImported" /></f:then>
<f:else>
<f:if condition="{inData.file}">
<f:translate key="filterpage_structureToBeImported" />
</f:if>
</f:else>
</f:if>
</h2>
</f:then>
<f:else>
<f:if condition="{inData.action} == 'export'">
<h2><f:translate key="execlistqu_structureToBeExported" /></h2>
</f:if>
</f:else>
</f:if>
<div>
<f:if condition="{contentOverview.dat.header.pagetree -> f:count()} > 0">
<strong><f:translate key="impexpcore_displaycon_insidePagetree" /></strong>
<br /><br />
<table border="0" cellpadding="0" cellspacing="1">
<tr class="bgColor5 tableheader">
<td><f:translate key="impexpcore_displaycon_controls" /></td>
<td><f:translate key="impexpcore_displaycon_title" /></td>
<td><f:translate key="impexpcore_displaycon_size" /></td>
<td><f:translate key="impexpcore_displaycon_message" /></td>
<f:if condition="{contentOverview.update}">
<td><f:translate key="impexpcore_displaycon_updateMode" /></td>
<td><f:translate key="impexpcore_displaycon_currentPath" /></td>
</f:if>
<f:if condition="{contentOverview.showDiff}">
<td><f:translate key="impexpcore_displaycon_result" /></td>
</f:if>
</tr>
<f:for each="{contentOverview.pagetreeLines}" as="line">
<tr class="{line.class}">
<td><f:format.raw>{line.controls}</f:format.raw></td>
<td nowrap="nowrap"><f:format.raw>{line.preCode}{line.title}</f:format.raw></td>
<td nowrap="nowrap"><f:format.raw>{line.fileSize}</f:format.raw></td>
<td nowrap="nowrap"><f:format.raw>{line.message}</f:format.raw></td>
<f:if condition="{contentOverview.update}">
<td nowrap="nowrap"><f:format.raw>{line.updateMode}</f:format.raw></td>
<td nowrap="nowrap"><f:format.raw>{line.updatePath}</f:format.raw></td>
</f:if>
<f:if condition="{contentOverview.showDiff}">
<td><f:format.raw>{line.showDiffContent}</f:format.raw></td>
</f:if>
</tr>
</f:for>
</table>
<br /><br />
</f:if>
<f:if condition="{contentOverview.remainingRecords -> f:count()} > 0">
<strong><f:translate key="impexpcore_singlereco_outsidePagetree" /></strong>
<br /><br />
<table border="0" cellpadding="0" cellspacing="1">
<tr class="bgColor5 tableheader">
<td><f:translate key="impexpcore_displaycon_controls" /></td>
<td><f:translate key="impexpcore_displaycon_title" /></td>
<td><f:translate key="impexpcore_displaycon_size" /></td>
<td><f:translate key="impexpcore_displaycon_message" /></td>
<f:if condition="{contentOverview.update}">
<td><f:translate key="impexpcore_displaycon_updateMode" /></td>
<td><f:translate key="impexpcore_displaycon_currentPath" /></td>
</f:if>
<f:if condition="{contentOverview.showDiff}">
<td><f:translate key="impexpcore_displaycon_result" /></td>
</f:if>
</tr>
<f:for each="{contentOverview.remainingRecords}" as="line">
<tr class="{line.class}">
<td><f:format.raw>{line.controls}</f:format.raw></td>
<td nowrap="nowrap"><f:format.raw>{line.preCode}{line.title}</f:format.raw></td>
<td nowrap="nowrap"><f:format.raw>{line.fileSize}</f:format.raw></td>
<td nowrap="nowrap"><f:format.raw>{line.message}</f:format.raw></td>
<f:if condition="{contentOverview.update}">
<td nowrap="nowrap"><f:format.raw>{line.updateMode}</f:format.raw></td>
<td nowrap="nowrap"><f:format.raw>{line.updatePath}</f:format.raw></td>
</f:if>
<f:if condition="{contentOverview.showDiff}">
<td><f:format.raw>{line.showDiffContent}</f:format.raw></td>
</f:if>
</tr>
</f:for>
</table>
</f:if>
</div>
<table border="0" cellpadding="1" cellspacing="1">
<tr class="tableheader bgColor5">
<td colspan="2">
<f:translate key="makeadvanc_softReferences" />
</td>
</tr>
<tr class="bgColor4">
<td><label for="checkExcludeHTMLfileResources"><strong>
<f:translate key="makeadvanc_excludeHtmlCssFile" />
</strong></label>
<f:be.buttons.csh table="xMOD_tx_impexp" field="htmlCssResources" />
</td>
<td>
<input type="checkbox" name="tx_impexp[excludeHTMLfileResources]" id="checkExcludeHTMLfileResources" value="1" {f:if(condition: inData.excludeHTMLfileResources, then: ' checked="checked"')}>
</td>
</tr>
<tr class="tableheader bgColor5">
<td colspan="2">
<f:translate key="makeadvanc_files" />
</td>
</tr>
<tr class="bgColor4">
<td><label for="saveFilesOutsideExportFile"><strong>
<f:translate key="makeadvanc_saveFilesOutsideExportFile" />
<f:translate key="makeadvanc_saveFilesOutsideExportFile_limit" />
</strong></label></td>
<td>
<input type="checkbox" name="tx_impexp[saveFilesOutsideExportFile]" id="saveFilesOutsideExportFile" value="1" {f:if(condition: inData.saveFilesOutsideExportFile, then: ' checked="checked"')} />
</td>
</tr>
<tr class="tableheader bgColor5">
<td colspan="2">
<f:translate key="makeadvanc_extensionDependencies" />
</td>
</tr>
<tr class="bgColor4">
<td><strong>
<f:translate key="makeadvanc_selectExtensionsThatThe" />
</strong>
<f:be.buttons.csh table="xMOD_tx_impexp" field="extensionDependencies" />
</td>
<td>
<f:format.raw>{extensions}</f:format.raw>
</td>
</tr>
<tr class="bgColor4">
<td>&nbsp;</td>
<td>
<input class="btn btn-default" type="submit" value="{f:translate(key: 'makesavefo_update')}">
<input type="hidden" name="tx_impexp[download_export_name]" value="">
</td>
</tr>
</table>
<table border="0" cellpadding="1" cellspacing="1">
<f:if condition="{inData.pagetree.id}">
<tr class="tableheader bgColor5">
<td colspan="2">
<f:translate key="makeconfig_exportPagetreeConfiguration" />
<f:be.buttons.csh table="xMOD_tx_impexp" field="pageTreeCfg" />
</td>
</tr>
<tr class="bgColor4">
<td><strong><f:translate key="makeconfig_pageId" /></strong></td>
<td>{inData.pagetree.id}<input type="hidden" value="{inData.pagetree.id}" name="tx_impexp[pagetree][id]" /></td>
</tr>
<tr class="bgColor4">
<td>
<strong><f:translate key="makeconfig_tree" /></strong>
<f:be.buttons.csh table="xMOD_tx_impexp" field="pageTreeDisplay" />
</td>
<td>
<f:if condition="{treeHTML}">
<f:then><f:format.raw>{treeHTML}</f:format.raw></f:then>
<f:else><f:translate key="makeconfig_noTreeExportedOnly" /></f:else>
</f:if>
</td>
</tr>
<tr class="bgColor4">
<td>
<strong><f:translate key="makeconfig_levels" /></strong>
<f:be.buttons.csh table="xMOD_tx_impexp" field="pageTreeMode" />
</td>
<td><f:format.raw>{levelSelect}</f:format.raw></td>
</tr>
<tr class="bgColor4">
<td>
<strong><f:translate key="makeconfig_includeTables" /></strong>
<f:be.buttons.csh table="xMOD_tx_impexp" field="pageTreeRecordLimit" />
</td>
<td>
<f:format.raw>{tableSelect}</f:format.raw>
<br/>
<f:translate key="makeconfig_maxNumberOfRecords" />
<br/>
<f:form.textfield name="tx_impexp[pagetree][maxNumber]" value="{inData.pagetree.maxNumber}" />
<br/>
</td>
</tr>
</f:if>
<f:if condition="{records}">
<tr class="tableheader bgColor5">
<td colspan="2">
<f:translate key="makeconfig_exportSingleRecord" />
<f:be.buttons.csh table="xMOD_tx_impexp" field="singleRecord" />
</td>
</tr>
<f:format.raw>{records}</f:format.raw>
</f:if>
<f:if condition="{tableList}">
<tr class="tableheader bgColor5">
<td colspan="2"><f:translate key="makeconfig_exportTablesFromPages" /></td>
</tr>
<tr class="bgColor4">
<td>
<strong><f:translate key="makeconfig_exportSingleRecord" /></strong>
<f:be.buttons.csh table="xMOD_tx_impexp" field="tableList" />
</td>
<td>{tableList}</td>
</tr>
<tr class="bgColor4">
<td>
<strong><f:translate key="makeconfig_maxNumberOfRecords" /></strong>
<f:be.buttons.csh table="xMOD_tx_impexp" field="tableListMaxNumber" />
</td>
<td>
<f:form.textfield name="tx_impexp[listCfg][maxNumber]" value="{inData.listCfg.maxNumber}" /><br/>
</td>
</tr>
</f:if>
<tr class="tableheader bgColor5">
<td colspan="2"><f:translate key="makeconfig_relationsAndExclusions" /></td>
</tr>
<tr class="bgColor4">
<td>
<strong><f:translate key="makeconfig_includeRelationsToTables" /></strong>
<f:be.buttons.csh table="xMOD_tx_impexp" field="inclRelations" />
</td>
<td><f:format.raw>{externalReferenceTableSelect}</f:format.raw></td>
</tr>
<tr class="bgColor4">
<td>
<strong><f:translate key="makeconfig_useStaticRelationsFor" /></strong>
<f:be.buttons.csh table="xMOD_tx_impexp" field="staticRelations" />
</td>
<td><f:format.raw>{externalStaticTableSelect}</f:format.raw><br/>
<label for="checkShowStaticRelations">
<f:translate key="makeconfig_showStaticRelations" />
</label>
<f:form.checkbox name="tx_impexp[showStaticRelations]" id="checkShowStaticRelations" value="1"
checked="{inData.showStaticRelations} == 1" />
</td>
</tr>
<tr class="bgColor4">
<td>
<strong><f:translate key="makeconfig_excludeElements" /></strong>
<f:be.buttons.csh table="xMOD_tx_impexp" field="excludedElements" />
</td>
<td>
<f:for each="{inData.exclude}" key="key" as="value">
<input type="hidden" name="tx_impexp[exclude][{key}]" value="1" />
</f:for>
<f:if condition="{excludedKeys}">
<f:then>
<em>{excludedKeys}</em><hr/>
<label for="checkExclude"><f:translate key="makeconfig_clearAllExclusions" /></label>
<input type="checkbox" name="tx_impexp[exclude]" id="checkExclude" value="1" />
</f:then>
<f:else>
<f:translate key="makeconfig_noExcludedElementsYet" />
</f:else>
</f:if>
</td>
</tr>
<tr class="bgColor4">
<td>&nbsp;</td>
<td>
<input class="btn btn-default" type="submit" value="{f:translate(key: 'makeadvanc_update')}" />
<input type="hidden"
name="tx_impexp[download_export_name]"
value="{nameSuggestion -> f:format.crop(maxCharacters: 30, append: '')}" />
</td>
</tr>
</table>
<table border="0" cellpadding="1" cellspacing="1">
<tr class="tableheader bgColor5">
<td colspan="2"><f:translate key="makesavefo_presets" /></td>
</tr>
<tr class="bgColor4">
<td>
<strong><f:translate key="makesavefo_presets" /></strong>
<f:be.buttons.csh table="xMOD_tx_impexp" field="presets" />
<td>
<f:translate key="makesavefo_selectPreset" />
<br/>
<f:format.raw>{presetSelect}</f:format.raw>
<br/>
<input type="hidden" name="not-set" value="1" id="t3js-submit-field" />
<input class="btn btn-default" type="submit" value="{f:translate(key: 'makesavefo_load')}" name="preset[load]" />
<input class="btn btn-default t3js-confirm-trigger" type="button" value="{f:translate(key: 'makesavefo_save')}"
name="preset[save]" data-title="{f:translate(key: 'pleaseConfirm')}" data-message="{f:translate(key: 'makesavefo_areYouSure')}" />
<input class="btn btn-default t3js-confirm-trigger" type="button" value="{f:translate(key: 'makesavefo_delete')}"
name="preset[delete]" data-title="{f:translate(key: 'pleaseConfirm')}" data-message="{f:translate(key: 'makesavefo_areYouSure')}" />
<input class="btn btn-default t3js-confirm-trigger" type="button" value="{f:translate(key: 'makesavefo_merge')}"
name="preset[merge]" data-title="{f:translate(key: 'pleaseConfirm')}" data-message="{f:translate(key: 'makesavefo_areYouSure')}" />
<br/>
<f:translate key="makesavefo_titleOfNewPreset" />
<input type="text" name="tx_impexp[preset][title]" value="{inData.preset.title}" />
<br/>
<label for="checkPresetPublic"><f:translate key="makesavefo_public" /></label>
<f:form.checkbox name="tx_impexp[preset][public]" id="checkPresetPublic" value="1"
checked="{inData.preset.public} == 1" />
<br/>
</td>
</tr>
<tr class="tableheader bgColor5">
<td colspan="2"><f:translate key="makesavefo_outputOptions" /></td>
</tr>
<tr class="bgColor4">
<td>
<strong><f:translate key="makesavefo_metaData" /></strong>
<f:be.buttons.csh table="xMOD_tx_impexp" field="metadata" />
</td>
<td>
<f:translate key="makesavefo_title" />
<br/>
<input type="text" name="tx_impexp[meta][title]" value="{inData.meta.title}" /><br/>
<f:translate key="makesavefo_description" /><br/>
<input type="text" name="tx_impexp[meta][description]" value="{inData.meta.description}" /><br/>
<f:translate key="makesavefo_notes" /><br/>
<textarea name="tx_impexp[meta][notes]">{inData.meta.notes}</textarea><br/>
<f:if condition="{saveFolder}">
<input type="file" name="upload_1" size="30" /><br/>
<input type="hidden" name="file[upload][1][target]" value="{saveFolder}" />
<input type="hidden" name="file[upload][1][data]" value="1" /><br />
</f:if>
</td>
</tr>
<tr>
<td>
<strong><f:translate key="makesavefo_fileFormat" /></strong>
<f:be.buttons.csh table="xMOD_tx_impexp" field="fileFormat" />
</td>
<td>
<f:format.raw>{filetypeSelect}</f:format.raw><br/>
<f:translate key="makesavefo_maxSizeOfFiles" /><br/>
<input type="text" name="tx_impexp[maxFileSize]" value="{inData.maxFileSize}" />
<br/>
<f:format.raw>{fileName}</f:format.raw>
</td>
</tr>
<tr>
<td>&nbsp;</td>
<td>
<input class="btn btn-default" type="submit" value="{f:translate(key: 'makesavefo_update')}" /> -
<input class="btn btn-default" type="submit" value="{f:translate(key: 'makesavefo_downloadExport')}" name="tx_impexp[download_export]" />
<f:if condition="{hasSaveFolder}">
- <input class="btn btn-default" type="submit" value="{f:translate(key: 'importdata_saveToFilename')}" name="tx_impexp[save_export]" />
</f:if>
</td>
</tr>
</table>
<table border="0" cellpadding="1" cellspacing="1">
<tr>
<th colspan="2"><f:translate key="importdata_selectFileToImport" /></th>
</tr>
<tr>
<td valign="top">
<f:translate key="importdata_file" />
<f:be.buttons.csh table="xMOD_tx_impexp" field="importFile" />
</td>
<td>
<f:form.select name="tx_impexp[file]" value="{inData.file}" options="{fileSelectOptions}" />
<br />
{importPath}
<f:if condition="{import.compress}">
<f:then></f:then>
<f:else><br /><span class="text-danger"><f:translate key="importdata_noteNoDecompressorAvailable" /></span></f:else>
</f:if>
</td>
</tr>
<tr>
<th colspan="2">
<f:translate key="importdata_importOptions" />
</th>
</tr>
<tr>
<td valign="top">
<f:translate key="importdata_update" />
<f:be.buttons.csh table="xMOD_tx_impexp" field="update" />
</td>