diff --git a/addressbook/inc/class.uiXport.inc.php b/addressbook/inc/class.uiXport.inc.php
new file mode 100644
index 0000000000..96baaa960d
--- /dev/null
+++ b/addressbook/inc/class.uiXport.inc.php
@@ -0,0 +1,319 @@
+ *
+ * ------------------------------------------------------------------------ *
+ * This program is free software; you can redistribute it and/or modify it *
+ * under the terms of the GNU General Public License as published by the *
+ * Free Software Foundation; either version 2 of the License, or (at your *
+ * option) any later version. *
+ \**************************************************************************/
+
+ /* $Id$ */
+
+ class uiXport
+ {
+ var $template;
+ var $public_functions = array(
+ 'import' => True,
+ 'export' => True
+ );
+ var $bo;
+ var $cat;
+
+ var $start;
+ var $limit;
+ var $query;
+ var $sort;
+ var $order;
+ var $filter;
+ var $cat_id;
+
+ function uiXport()
+ {
+ $this->template = $GLOBALS['phpgw']->template;
+ $this->cat = CreateObject('phpgwapi.categories');
+ $this->bo = CreateObject('addressbook.boXport',True);
+ $this->browser = CreateObject('phpgwapi.browser');
+
+ $this->_set_sessiondata();
+ }
+
+ function _set_sessiondata()
+ {
+ $this->start = $this->bo->start;
+ $this->limit = $this->bo->limit;
+ $this->query = $this->bo->query;
+ $this->sort = $this->bo->sort;
+ $this->order = $this->bo->order;
+ $this->filter = $this->bo->filter;
+ $this->cat_id = $this->bo->cat_id;
+ if($this->debug) { $this->_debug_sqsof(); }
+ }
+
+ /* Called only by index(), just prior to page footer. */
+ function save_sessiondata()
+ {
+ $data = array(
+ 'start' => $this->start,
+ 'limit' => $this->limit,
+ 'query' => $this->query,
+ 'sort' => $this->sort,
+ 'order' => $this->order,
+ 'filter' => $this->filter,
+ 'cat_id' => $this->cat_id
+ );
+ $this->bo->save_sessiondata($data);
+ }
+
+ /* Return a select form element with the categories option dialog in it */
+ function cat_option($cat_id='',$notall=False,$java=True,$multiple=False)
+ {
+ if($java)
+ {
+ $jselect = ' onChange="this.form.submit();"';
+ }
+ /* Setup all and none first */
+ $cats_link = "\n" .''."\n";
+ return $cats_link;
+ }
+
+ function import()
+ {
+ $tsvfile = get_var('tsvfile','FILES');
+ $tsvfilename = get_var('tsvfilename','POST');
+ $convert = get_var('convert','POST');
+ $conv_type = get_var('conv_type','POST');
+ $fcat_id = get_var('fcat_id','POST');
+ $private = get_var('private','POST');
+ $download = get_var('download','POST');
+
+ if($convert)
+ {
+ if($conv_type == 'none')
+ {
+ $GLOBALS['phpgw_info']['flags']['noheader'] = False;
+ $GLOBALS['phpgw_info']['flags']['noheader'] = True;
+ $GLOBALS['phpgw']->common->phpgw_header();
+ echo parse_navbar();
+ echo lang('No conversion type <none> could be located. Please choose a conversion type from the list');
+ echo ' ' . lang('OK') . '';
+ $GLOBALS['phpgw']->common->phpgw_footer();
+ $GLOBALS['phpgw']->common->phpgw_exit();
+ }
+ $buffer = $this->bo->import($tsvfile,$conv_type,$private,$fcat_id);
+
+ if($download == '')
+ {
+ if($conv_type == 'Debug LDAP' || $conv_type == 'Debug SQL')
+ {
+ // filename, default application/octet-stream, length of file, default nocache True
+ $GLOBALS['phpgw']->browser->content_header($tsvfilename,'',strlen($buffer));
+ echo $buffer;
+ }
+ else
+ {
+ $GLOBALS['phpgw']->common->phpgw_header();
+ echo parse_navbar();
+ echo "
$buffer
";
+ echo ''.lang('OK').'';
+ $GLOBALS['phpgw']->common->phpgw_footer();
+ }
+ }
+ else
+ {
+ $GLOBALS['phpgw']->common->phpgw_header();
+ echo parse_navbar();
+ echo "$buffer
";
+ echo ''.lang('OK').'';
+ $GLOBALS['phpgw']->common->phpgw_footer();
+ }
+ }
+ else
+ {
+ $GLOBALS['phpgw']->common->phpgw_header();
+ echo parse_navbar();
+
+ set_time_limit(0);
+
+ $this->template->set_file(array('import' => 'import.tpl'));
+
+ $dir_handle = opendir(PHPGW_APP_INC . SEP . 'import');
+ $i=0; $myfilearray = '';
+ while($file = readdir($dir_handle))
+ {
+ if((substr($file, 0, 1) != '.') && is_file(PHPGW_APP_INC . SEP . 'import' . SEP . $file))
+ {
+ $myfilearray[$i] = $file;
+ $i++;
+ }
+ }
+ closedir($dir_handle);
+ sort($myfilearray);
+ for($i=0;$i' . $fname . '';
+ }
+
+ $this->template->set_var('lang_none', lang('none'));
+ $this->template->set_var('lang_cancel',lang('Cancel'));
+ $this->template->set_var('lang_cat',lang('Select Category'));
+ $this->template->set_var('cancel_url',$GLOBALS['phpgw']->link('/index.php','menuaction=addressbook.uiaddressbook.index'));
+ $this->template->set_var('navbar_bg',$GLOBALS['phpgw_info']['theme']['navbar_bg']);
+ $this->template->set_var('navbar_text',$GLOBALS['phpgw_info']['theme']['navbar_text']);
+ $this->template->set_var('import_text',lang('Import from LDIF, CSV, or VCard'));
+ $this->template->set_var('action_url',$GLOBALS['phpgw']->link('/index.php','menuaction=addressbook.uiXport.import'));
+ $this->template->set_var('cat_link',$this->cat_option($this->cat_id,True,False));
+ $this->template->set_var('tsvfilename','');
+ $this->template->set_var('conv',$conv);
+ $this->template->set_var('debug',lang('Debug output in browser'));
+ $this->template->set_var('filetype',lang('LDIF'));
+ $this->template->set_var('download',lang('Submit'));
+ $this->template->set_var('start',$this->start);
+ $this->template->set_var('sort',$this->sort);
+ $this->template->set_var('order',$this->order);
+ $this->template->set_var('filter',$this->filter);
+ $this->template->set_var('query',$this->query);
+ $this->template->set_var('cat_id',$this->cat_id);
+ $this->template->set_var('lang_import_instructions',lang('import_instructions'));
+ $this->template->set_var('zip_note','');
+ if(extension_loaded('zip'))
+ {
+ $this->template->set_var('zip_note',lang('zip_note'));
+ }
+
+ $this->template->set_var('lang_exported_file',lang('enter the path to the exported file here'));
+ $this->template->set_var('lang_conv_type',lang('select the type of conversion'));
+ $this->template->set_var('lang_mark_priv',lang('Mark records as private'));
+ $this->template->set_var('lang_debug',lang('Debug output in browser'));
+ $this->template->pparse('out','import');
+ }
+// $GLOBALS['phpgw']->common->phpgw_footer();
+ }
+
+ function export()
+ {
+ $convert = get_var('convert','POST');
+ $conv_type = get_var('conv_type','POST');
+ $fcat_id = get_var('fcat_id','POST');
+ $download = get_var('download','POST');
+ $tsvfilename = get_var('tsvfilename','POST');
+
+ if($convert)
+ {
+ if($conv_type == 'none')
+ {
+ $GLOBALS['phpgw_info']['flags']['noheader'] = False;
+ $GLOBALS['phpgw_info']['flags']['noheader'] = True;
+ $GLOBALS['phpgw']->common->phpgw_header();
+ echo parse_navbar();
+ echo lang('No conversion type <none> could be located. Please choose a conversion type from the list');
+ echo ' ' . lang('OK') . '';
+ $GLOBALS['phpgw']->common->phpgw_footer();
+ $GLOBALS['phpgw']->common->phpgw_exit();
+ }
+
+ $buffer = $this->bo->export($conv_type,$fcat_id);
+
+ if(($download == 'on') || ($conv_type == 'Palm_PDB'))
+ {
+ // filename, default application/octet-stream, length of file, default nocache True
+ $this->browser->content_header($tsvfilename,'application/x-octet-stream',strlen($buffer));
+ echo $buffer;
+ }
+ else
+ {
+ $GLOBALS['phpgw']->common->phpgw_header();
+ echo parse_navbar();
+ echo "\n";
+ echo $buffer;
+ echo "\n
\n";
+ echo '' . lang('OK') . '';
+ $GLOBALS['phpgw']->common->phpgw_footer();
+ }
+ }
+ else
+ {
+ $GLOBALS['phpgw']->common->phpgw_header();
+ echo parse_navbar();
+
+ set_time_limit(0);
+
+ $this->template->set_file(array('export' => 'export.tpl'));
+
+ $dir_handle = opendir(PHPGW_APP_INC. SEP . 'export');
+ $i=0; $myfilearray = '';
+ while($file = readdir($dir_handle))
+ {
+ if((substr($file, 0, 1) != '.') && is_file(PHPGW_APP_INC . SEP . 'export' . SEP . $file))
+ {
+ $myfilearray[$i] = $file;
+ $i++;
+ }
+ }
+ closedir($dir_handle);
+ sort($myfilearray);
+ for($i=0;$i'.$fname.''."\n";
+ }
+
+ $this->template->set_var('lang_none', lang('none'));
+ $this->template->set_var('lang_cancel',lang('Cancel'));
+ $this->template->set_var('lang_cat',lang('Select Category'));
+ $this->template->set_var('lang_export_instructions',lang('Download export file (Uncheck to debug output in browser)'));
+ $this->template->set_var('lang_select',lang('Select the type of conversion:'));
+ $this->template->set_var('cat_link',$this->cat_option($this->cat_id,False,False));
+ $this->template->set_var('cancel_url',$GLOBALS['phpgw']->link('/addressbook/index.php'));
+ $this->template->set_var('navbar_bg',$GLOBALS['phpgw_info']['theme']['navbar_bg']);
+ $this->template->set_var('navbar_text',$GLOBALS['phpgw_info']['theme']['navbar_text']);
+ $this->template->set_var('export_text',lang('Export from Addressbook'));
+ $this->template->set_var('action_url',$GLOBALS['phpgw']->link('/index.php','menuaction=addressbook.uiXport.export'));
+ $this->template->set_var('filename',lang('Export file name'));
+ $this->template->set_var('conv',$conv);
+ $this->template->set_var('debug',lang(''));
+ $this->template->set_var('download',lang('Submit'));
+ $this->template->set_var('start',$this->start);
+ $this->template->set_var('sort',$this->sort);
+ $this->template->set_var('order',$this->order);
+ $this->template->set_var('filter',$this->filter);
+ $this->template->set_var('query',$this->query);
+ $this->template->set_var('cat_id',$this->cat_id);
+ $this->template->pparse('out','export');
+
+ $GLOBALS['phpgw']->common->phpgw_footer();
+ }
+ }
+ }
+?>