* Import/Export - allow import plugins to specify their own sub-templates

This commit is contained in:
nathangray 2018-11-27 15:39:58 -07:00
parent ab2b00cd13
commit cde347a463
2 changed files with 56 additions and 12 deletions

View File

@ -50,6 +50,12 @@ use EGroupware\Api\Etemplate;
Api\Header\ContentSecurityPolicy::add('script-src', "unsafe-inline"); Api\Header\ContentSecurityPolicy::add('script-src', "unsafe-inline");
$template = new Etemplate('importexport.import_dialog'); $template = new Etemplate('importexport.import_dialog');
$preserve = array();
if($definition)
{
$definition_obj = new importexport_definition($content['definition']);
}
// Load application's translations // Load application's translations
if($appname) if($appname)
@ -58,7 +64,6 @@ use EGroupware\Api\Etemplate;
} }
if($content['import'] && $definition) { if($content['import'] && $definition) {
try { try {
$definition_obj = new importexport_definition($content['definition']);
if($content['dry-run']) { if($content['dry-run']) {
// Set this so plugin doesn't do any data changes // Set this so plugin doesn't do any data changes
$definition_obj->plugin_options = (array)$definition_obj->plugin_options + array('dry_run' => true); $definition_obj->plugin_options = (array)$definition_obj->plugin_options + array('dry_run' => true);
@ -69,6 +74,7 @@ use EGroupware\Api\Etemplate;
$options['fieldsep'] = $options['fieldsep'] =
$content['delimiter'] == 'other' ? $content['other_delimiter'] : $content['delimiter']; $content['delimiter'] == 'other' ? $content['other_delimiter'] : $content['delimiter'];
} }
$options = array_merge($options, array_diff_key($content, array_flip(array('dry-run','file','import'))));
$definition_obj->plugin_options = $options; $definition_obj->plugin_options = $options;
$plugin = new $definition_obj->plugin; $plugin = new $definition_obj->plugin;
@ -216,6 +222,31 @@ use EGroupware\Api\Etemplate;
$data['no_notifications'] = true; // switch notifications off by default $data['no_notifications'] = true; // switch notifications off by default
$sel_options = self::get_select_options($data); $sel_options = self::get_select_options($data);
$readonlys = array();
if(!$definition_obj && $sel_options['definition'] && !$data['definition'])
{
$definition_obj = new importexport_definition(key($sel_options['definition']));
}
if($definition_obj)
{
$plugin = new $definition_obj->plugin;
$options = $plugin->get_options_etpl($definition_obj);
if(is_array($options))
{
$data['plugin_options_template'] = $options['name'];
$data += (array)$options['content'];
$sel_options += (array)$options['sel_options'];
$readonlys += (array)$options['readonlys'];
$preserve += (array)$options['preserv'];
}
else
{
// Fallback for not returning anything - CSV
$data['plugin_options_template'] = "importexport.import_dialog.csv";
$data['file_type'] = 'csv';
}
}
$data['message'] = $this->message; $data['message'] = $this->message;
Framework::includeJS('.','importexport','importexport'); Framework::includeJS('.','importexport','importexport');

View File

@ -2,6 +2,25 @@
<!DOCTYPE overlay PUBLIC "-//EGroupware GmbH//eTemplate 2//EN" "http://www.egroupware.org/etemplate2.dtd"> <!DOCTYPE overlay PUBLIC "-//EGroupware GmbH//eTemplate 2//EN" "http://www.egroupware.org/etemplate2.dtd">
<!-- $Id$ --> <!-- $Id$ -->
<overlay> <overlay>
<template id="importexport.import_dialog.csv" template="" lang="" group="0" version="1.9.005">
<grid>
<columns>
<column/>
<column/>
</columns>
<rows>
<row>
<description value="Delimiter"/>
<hbox no_lang="1" options="0,0">
<menulist>
<menupopup id="delimiter" no_lang="1" onchange="var _this = jQuery(this); var text = _this.parent().parent().find('input'); if(_this.val() =='other') {text.val('');text.show(); text.focus();} else {text.hide();}"/>
</menulist>
<textbox id="other_delimiter" size="2" maxlength="1" class="hide"/>
</hbox>
</row>
</rows>
</grid>
</template>
<template id="importexport.import_dialog" template="" lang="" group="0" version="1.9.005"> <template id="importexport.import_dialog" template="" lang="" group="0" version="1.9.005">
<grid> <grid>
<columns> <columns>
@ -22,21 +41,15 @@
<row> <row>
<description value="Import definition"/> <description value="Import definition"/>
<menulist> <menulist>
<menupopup id="definition"/> <menupopup id="definition" onchange="1"/>
</menulist> </menulist>
</row> </row>
<row>
<description value="Delimiter"/>
<hbox no_lang="1" options="0,0">
<menulist>
<menupopup id="delimiter" no_lang="1" onchange="var _this = jQuery(this); var text = _this.parent().parent().find('input'); if(_this.val() =='other') {text.val('');text.show(); text.focus();} else {text.hide();}"/>
</menulist>
<textbox id="other_delimiter" size="2" maxlength="1" class="hide"/>
</hbox>
</row>
<row> <row>
<description value="Please select file to import"/> <description value="Please select file to import"/>
<file id="file"/> <file id="file" accept="@file_type"/>
</row>
<row disabled="!@plugin_options_template">
<template template="@plugin_options_template"/>
</row> </row>
<row> <row>
<box id="preview_box" span="all" class="preview"> <box id="preview_box" span="all" class="preview">