fixed not working importexport: preferences can NOT store arrays, they need to be serialized before

This commit is contained in:
Ralf Becker 2010-11-23 15:25:22 +00:00
parent 4769db9539
commit 3ccf4a3587

View File

@ -16,22 +16,22 @@
*/
class importexport_export_ui {
const _appname = 'importexport';
public $public_functions = array(
'export_dialog' => true,
'download' => true,
);
private $js;
private $user;
/**
* holds all export plugins from all apps
*
* @var array
*/
private $export_plugins;
public function __construct() {
$this->js = $GLOBALS['egw']->js = is_object($GLOBALS['egw']->js) ? $GLOBALS['egw']->js : CreateObject('phpgwapi.javascript');
$this->js->validate_file('.','export_dialog','importexport');
@ -39,21 +39,21 @@ class importexport_export_ui {
$this->user = $GLOBALS['egw_info']['user']['user_id'];
$this->export_plugins = importexport_helper_functions::get_plugins('all','export');
$GLOBALS['egw_info']['flags']['include_xajax'] = true;
}
public function export_dialog($_content=array()) {
$tabs = 'general_tab|selection_tab|options_tab';
$sel_options = array();
$readonlys = array();
$preserv = array();
$et = new etemplate(self::_appname. '.export_dialog');
$_appname = $_content['appname'] ? $_content['appname'] : $_GET['appname'];
$_definition = $_content['definition'] ? $_content['definition'] : $_GET['definition'];
$_plugin = $_content['plugin'] ? $_content['plugin'] : $_GET['plugin'];
$_plugin = $_content['plugin'] ? $_content['plugin'] : $_GET['plugin'];
$_selection = $_content['selection'] ? $_content['selection'] : $_GET['selection'];
//error_log(__FILE__.__FUNCTION__. '::$_GET[\'appname\']='. $_appname. ',$_GET[\'definition\']='. $_definition. ',$_GET[\'plugin\']='.$_plugin. ',$_GET[\'selection\']='.$_selection);
// if appname is given and valid, list available definitions (if no definition is given)
$readonlys['appname'] = (!empty($_appname) && $GLOBALS['egw']->acl->check('run',1,$_appname));
@ -82,10 +82,10 @@ class importexport_export_ui {
if(isset($_definition) && array_key_exists($_definition,$sel_options['definition'])) {
$content['definition'] = $_definition;
}
// fill plugins
$sel_options['plugin'] = $this->export_plugins[$_appname]['export'];
// show definitions or plugins in ui?
if($content['definition'] == 'expert') {
if(isset($_plugin) && array_key_exists($_plugin,$sel_options['plugin'])) {
@ -105,7 +105,7 @@ class importexport_export_ui {
$this->js->set_onload("set_style_by_class('tr','select_plugin','display','none');");
$this->js->set_onload("set_style_by_class('tr','save_definition','display','none');");
$definition = new importexport_definition($content['definition']);
if($definition) {
$content += (array)$definition->plugin_options;
@ -113,13 +113,13 @@ class importexport_export_ui {
$content['description'] = $definition->description;
}
}
// handle selector
if($selected_plugin) {
$plugin_object = new $selected_plugin;
$content['description'] = $plugin_object->get_description();
// fill options tab
if(method_exists($plugin_object, 'get_selectors_html')) {
$content['plugin_options_html'] = $plugin_object->get_options_html();
@ -139,7 +139,7 @@ class importexport_export_ui {
$readonlys[$tabs]['options_tab'] = true;
}
}
// fill selection tab
if($definition && $definition->plugin_options['selection']) {
$_selection = $definition->plugin_options['selection'];
@ -173,18 +173,22 @@ class importexport_export_ui {
disable_button('exec[export]');
");
}
$content = array_merge($content,(array)$GLOBALS['egw_info']['user']['preferences']['importexport'][$definition->definition_id]);
if (($prefs = $GLOBALS['egw_info']['user']['preferences']['importexport'][$definition->definition_id]) &&
($prefs = unserialize($prefs)))
{
$content = array_merge($content,$prefs);
}
unset ($plugin_object);
(array)$apps = importexport_helper_functions::get_apps('export');
$sel_options['appname'] = array('' => lang('Select one')) + array_combine($apps,$apps);
$this->js->set_onload("set_style_by_class('tr','select_plugin','display','none');");
if(!$_application && !$selected_plugin) {
$content['plugin_selectors_html'] = $content['plugin_options_html'] =
$content['plugin_selectors_html'] = $content['plugin_options_html'] =
lang('You need to select an app and format first!');
$this->js->set_onload("document.getElementById('importexport.export_dialog.options_tab-tab').style.visibility='hidden';");
$this->js->set_onload("document.getElementById('importexport.export_dialog.selection_tab-tab').style.visibility='hidden';");
}
// disable preview box
$this->js->set_onload("set_style_by_class('tr','preview-box','display','none');");
@ -193,7 +197,7 @@ class importexport_export_ui {
{
//error_log(__LINE__.__FILE__.'$_content: '.print_r($_content,true));
$response = new xajaxResponse();
if ($_content['definition'] == 'expert') {
$definition = new importexport_definition();
$definition->definition_id = $_content['definition_id'] ? $_content['definition_id'] : '';
@ -207,7 +211,7 @@ class importexport_export_ui {
else {
$definition = new importexport_definition($_content['definition']);
}
if(!is_array($definition->plugin_options)) {
$definition->plugin_options = array(
'mapping' => array()
@ -217,7 +221,7 @@ class importexport_export_ui {
$definition->plugin_options,
$_content
);
if(!$definition->plugin_options['selection']) {
$response->addScript('alert("' . lang('No records selected') . '");');
return $response->getXML();
@ -233,7 +237,7 @@ class importexport_export_ui {
// Keep settings
$keep = array_diff_key($_content, array_flip(array('appname', 'definition', 'plugin', 'preview', 'export', $tabs)));
$GLOBALS['egw']->preferences->add('importexport',$definition->definition_id,$keep);
$GLOBALS['egw']->preferences->add('importexport',$definition->definition_id,serialize($keep));
// save prefs, but do NOT invalid the cache (unnecessary)
$GLOBALS['egw']->preferences->save_repository(false,'user',false);
@ -254,7 +258,7 @@ class importexport_export_ui {
'[\020]','[\021]','[\022]','[\023]','[\024]','[\025]','[\026]','[\027]',
'[\030]','[\031]','[\032]','[\033]','[\034]','[\035]','[\036]','[\037]');
$replace = $preview = '';
while(!feof($file) && $item_count < 10) {
$preview .= preg_replace($search,$replace,fgets($file,1024));
$item_count++;
@ -262,18 +266,18 @@ class importexport_export_ui {
fclose($file);
unlink($tmpfname);
// NOTE: $definition->plugin_options['charset'] may not be set,
// NOTE: $definition->plugin_options['charset'] may not be set,
// but it's the best guess atm.
$preview = $GLOBALS['egw']->translation->convert( $preview,
$definition->plugin_options['charset'],
$GLOBALS['egw']->translation->charset()
);
$response->addAssign('exec[preview-box]','innerHTML',nl2br($preview));
$response->jquery('.preview-box','show');
$response->jquery('.preview-box-buttons','show');
$response->addScript("xajax_eT_wrapper();");
return $response->getXML();
}
@ -286,7 +290,7 @@ class importexport_export_ui {
//error_log(print_r($content,true));
return $et->exec(self::_appname. '.importexport_export_ui.export_dialog',$content,$sel_options,$readonlys,$preserv,2);
}
public function ajax_get_definitions($_appname, xajaxResponse &$response = null) {
if(is_null($response)) {
$response = new xajaxResponse();
@ -297,7 +301,7 @@ class importexport_export_ui {
$response->addScript("set_style_by_class('tr','select_definition','display','none');");
return $no_return ? '' : $response->getXML();
}
$definitions = new importexport_definitions_bo(array(
'type' => 'export',
'application' => $_appname
@ -313,7 +317,7 @@ class importexport_export_ui {
}
unset($definitions);
$response->addScript("selectbox_add_option('exec[definition]','" . lang('Expert options') . "', 'expert',".($selected_plugin == $title ? 'true' : 'false').");");
if($selected_plugin == 'expert') {
$this->ajax_get_plugins($_appname, $response);
} else {
@ -323,7 +327,7 @@ class importexport_export_ui {
$response->addScript("set_style_by_class('tr','select_definition','display','table-row');");
return $no_return ? '' : $response->getXML();
}
public function ajax_get_plugins($_appname, xajaxResponse &$response = null) {
if(!is_null($response)) {
$no_return = true;
@ -334,7 +338,7 @@ class importexport_export_ui {
$response->addScript("set_style_by_class('tr','select_plugin','display','none');");
return $no_return ? '' : $response->getXML();
}
(array)$plugins = importexport_helper_functions::get_plugins($_appname,'export');
$sel_options['plugin'] = '';
$response->addScript("clear_options('exec[plugin]');");
@ -342,14 +346,14 @@ class importexport_export_ui {
if (!$selected_plugin) $selected_plugin = $plugin;
$response->addScript("selectbox_add_option('exec[plugin]','$plugin_name', '$plugin',".($selected_plugin == $plugin ? 'true' : 'false').");");
}
$this->ajax_get_plugin_description($selected_plugin,$response);
$this->ajax_get_plugin_options($selected_plugin, $response, $_definition);
$this->ajax_get_plugin_selectors($selected_plugin, $response, $_definition);
$response->addScript("set_style_by_class('tr','select_plugin','display','table-row');");
return $no_return ? '' : $response->getXML();
}
public function ajax_get_definition_description($_definition, xajaxResponse &$response=null) {
$no_return = !is_null($response);
if(is_null($response)) {
@ -365,7 +369,7 @@ class importexport_export_ui {
return $no_return ? '' : $response->getXML();
}
public function ajax_get_plugin_description($_plugin,&$_response=false) {
$no_return = !is_null($_response);
if(is_null($_response)) {
@ -384,17 +388,17 @@ class importexport_export_ui {
$this->ajax_get_plugin_options($_plugin, $_response);
}
unset ($plugin_object);
return $no_return ? '' : $response->getXML();
}
public function ajax_get_plugin_options($_plugin,&$response=false, $definition = '') {
$no_return = !is_null($response);
if(is_null($response)) {
$response = new xajaxResponse();
}
if (!$_plugin) return $no_return ? '' : $response->getXML();
$plugin_object = new $_plugin;
if (is_a($plugin_object, 'importexport_iface_export_plugin')) {
$options = $plugin_object->get_options_etpl();
@ -414,10 +418,10 @@ class importexport_export_ui {
}
unset ($plugin_object);
return $no_return ? '' : $response->getXML();
}
/**
* downloads file to client and deletes it.
*
@ -428,7 +432,7 @@ class importexport_export_ui {
$tmpfname = $_tmpfname ? $_tmpfname : $_GET['_filename'];
$tmpfname = $GLOBALS['egw_info']['server']['temp_dir'] .'/'. $tmpfname;
if (!is_readable($tmpfname)) die();
$appname = $_GET['_appname'];
$nicefname = 'egw_export_'.$appname.'-'.date('Y-m-d');
@ -442,14 +446,14 @@ class importexport_export_ui {
unlink($tmpfname);
}
public function ajax_get_plugin_selectors($_plugin,&$response=false, $definition = '') {
$no_return = !is_null($response);
if(is_null($response)) {
$response = new xajaxResponse();
}
if (!$_plugin) return $no_return ? '' : $response->getXML();
$plugin_object = new $_plugin;
if (is_a($plugin_object, 'importexport_iface_export_plugin')) {
$options = $plugin_object->get_selectors_etpl();
@ -471,11 +475,11 @@ class importexport_export_ui {
}
unset ($plugin_object);
return $no_return ? '' : $response->getXML();
}
public function ajax_get_template($_name) {
}
} // end class uiexport