Add handling of zip file collections of .csv, .vcf, or .ldif files; Cleanup template and add lang calls for import instructions.

This commit is contained in:
Miles Lott 2003-12-03 01:13:14 +00:00
parent ca4fd40dd9
commit 9efb12491d
4 changed files with 116 additions and 43 deletions

View File

@ -133,7 +133,15 @@
$contacts = new import_conv; $contacts = new import_conv;
$buffer = $contacts->import_start_file($buffer); $buffer = $contacts->import_start_file($buffer);
$fp = fopen($tsvfile,'r');
if($tsvfile['type'] == 'application/zip')
{
$fp = $this->unzip($tsvfile['tmp_name'],$contacts->type);
}
else
{
$fp = fopen($tsvfile['tmp_name'],'r');
}
if($contacts->type == 'csv') if($contacts->type == 'csv')
{ {
while($data = fgetcsv($fp,8000,',')) while($data = fgetcsv($fp,8000,','))
@ -269,6 +277,56 @@
return $buffer; return $buffer;
} }
/* Use the Zip extension to open a zip file, hopefully containing multiple .vcf files
* Return a pointer to a temporary file that will then contain all files concatenated.
*/
function unzip($filename,$type)
{
$ext = '';
switch($type)
{
case 'vcard':
$ext = '.vcf';
break;
case 'csv':
$ext = '.csv';
break;
case 'ldif':
$ext = '.ldif';
break;
default:
return False;
}
/* Open the (uploaded) zip file */
$zip = zip_open($filename);
$temp = tempnam('/tmp','zip2vcf');
/* Open a temp file for read/write */
$fp = fopen($temp, 'w+');
$out = '';
/* Now read each entry in the zip file */
while($dirent = zip_read($zip))
{
if(zip_entry_open($zip,$dirent,'r'))
{
//echo '<br>zip_entry_name==' . zip_entry_name($dirent);
/* If an allowed extenstion based on conversion type */
if(ereg($ext,zip_entry_name($dirent)))
{
/* Write the data to our temp file */
$data = zip_entry_read($dirent,zip_entry_filesize($dirent));
//echo $data;
fwrite($fp,$data);
}
zip_entry_close($dirent);
}
}
rewind($fp);
return $fp;
}
function export($conv_type,$cat_id='') function export($conv_type,$cat_id='')
{ {
if($conv_type == 'none') if($conv_type == 'none')

View File

@ -101,6 +101,7 @@
$cat_id = get_var('cat_id','POST'); $cat_id = get_var('cat_id','POST');
$fcat_id = get_var('fcat_id','POST'); $fcat_id = get_var('fcat_id','POST');
$private = get_var('private','POST'); $private = get_var('private','POST');
$download = get_var('download','POST');
if($convert) if($convert)
{ {
@ -115,11 +116,11 @@
$GLOBALS['phpgw']->common->phpgw_footer(); $GLOBALS['phpgw']->common->phpgw_footer();
$GLOBALS['phpgw']->common->phpgw_exit(); $GLOBALS['phpgw']->common->phpgw_exit();
} }
$buffer = $this->bo->import($tsvfile['tmp_name'],$conv_type,$private,$fcat_id); $buffer = $this->bo->import($tsvfile,$conv_type,$private,$fcat_id);
if($download == '') if($download == '')
{ {
if($conv_type == 'Debug LDAP' || $conv_type == 'Debug SQL' ) if($conv_type == 'Debug LDAP' || $conv_type == 'Debug SQL')
{ {
// filename, default application/octet-stream, length of file, default nocache True // filename, default application/octet-stream, length of file, default nocache True
$GLOBALS['phpgw']->browser->content_header($tsvfilename,'',strlen($buffer)); $GLOBALS['phpgw']->browser->content_header($tsvfilename,'',strlen($buffer));
@ -189,6 +190,19 @@
$this->template->set_var('filter',$this->filter); $this->template->set_var('filter',$this->filter);
$this->template->set_var('query',$this->query); $this->template->set_var('query',$this->query);
$this->template->set_var('cat_id',$this->cat_id); $this->template->set_var('cat_id',$this->cat_id);
$this->template->set_var('lang_import_instructions',lang('import_instructions'));
if(extension_loaded('zip'))
{
$this->template->set_var('zip_note',lang('zip_note'));
}
else
{
$this->template->set_var('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'); $this->template->pparse('out','import');
} }
// $GLOBALS['phpgw']->common->phpgw_footer(); // $GLOBALS['phpgw']->common->phpgw_footer();

View File

@ -147,3 +147,9 @@ work phone addressbook en Work Phone
you must select a vcard. (*.vcf) addressbook en You must select a vcard. (*.vcf) you must select a vcard. (*.vcf) addressbook en You must select a vcard. (*.vcf)
you must select at least 1 column to display addressbook en You must select at least 1 column to display you must select at least 1 column to display addressbook en You must select at least 1 column to display
zip code common en ZIP Code zip code common en ZIP Code
import_instructions addressbook en In Netscape, open the Addressbook and select <b>Export</b> from the <b>File</b> menu. The file exported will be in LDIF format.<p>Or, in Outlook, select your Contacts folder, select <b>Import and Export...</b> from the <b>File</b> menu and export your contacts into a comma separated text (CSV) file. <p>Or, in Palm Desktop 4.0 or greater, visit your addressbook and select <b>Export</b> from the <b>File</b> menu. The file exported will be in VCard format.
zip_note addressbook en <p><b>Note:</b> The file may be a zip file collection of .csv, .vcf, or .ldif files. However, do not mix file types per import.
enter the path to the exported file here addressbook en Enter the path to the exported file here
select the type of conversion addressbook en Select the type of conversion
mark records as private addressbook en Mark records as private
debug output in browser addressbook en Debug output in browser

View File

@ -1,50 +1,45 @@
<!-- BEGIN import --> <!-- BEGIN import -->
<CENTER> <div align="center">
<TABLE WIDTH=90%> <table width="90%">
<TR BGCOLOR="{navbar_bg}"> <tr bgcolor="{navbar_bg}">
<TD><B><FONT SIZE=+2 COLOR="{navbar_text}"><CENTER>{import_text}</CENTER></FONT></B> <th colspan="2"><b>{import_text}</b></th>
</TD> </tr>
</TR> <tr>
<TR> <td>
<TD> <table width="85%">
<TABLE WIDTH=85%> <tr>
<TR> <td><form enctype="multipart/form-data" action="{action_url}" method="post">
<TD><FORM ENCTYPE="multipart/form-data" action="{action_url}" method="post"> <ol>
<OL> <li>{lang_import_instructions}{zip_note}</li>
<LI>In Netscape, open the Addressbook and select <b>Export</b> from the <b>File</b> menu. <li>{lang_exported_file}
The file exported will be in LDIF format. <input name="tsvfile" size="48" type="file" value="{tsvfilename}"><p></li>
<P>Or, in Outlook, select your Contacts folder, select <b>Import <li>{lang_conv_type}:
and Export...</b> from the <b>File</b> <select name="conv_type">
menu and export your contacts into a comma separated text (CSV) file. <option value="none">&lt;none&gt;</option>
<P>Or, in Palm Desktop 4.0 or greater, visit your addressbook and select <b>Export</b> from the <b>File</b> menu.
The file exported will be in VCard format.<P>
</LI>
<LI>Enter the path to the exported file here:
<INPUT NAME="tsvfile" SIZE="48" TYPE="file" VALUE="{tsvfilename}"><P></LI>
<LI>Select the type of conversion:
<SELECT NAME="conv_type">
<OPTION VALUE="none">&lt;none&gt;</OPTION>
{conv} {conv}
</SELECT><P></LI> </select><p></li>
<LI>{lang_cat}:{cat_link}</LI> <li>{lang_cat}:{cat_link}</li>
<LI><INPUT NAME="private" TYPE="checkbox" VALUE="private" CHECKED>Mark records as private</LI> <li><input name="private" type="checkbox" value="private" checked>{lang_mark_priv}</li>
<LI><INPUT NAME="download" TYPE="checkbox" VALUE="{debug}" CHECKED>Debug output in browser</LI> <li><input name="download" type="checkbox" value="{debug}" checked>{lang_debug}</li>
<LI><INPUT NAME="convert" TYPE="submit" VALUE="{download}"></LI> </ol>
</OL> </tr>
</table>
</td>
</tr>
<tr>
<td width="8%">
<div align="left">
<input name="convert" type="submit" value="{download}">
</ol>
<input type="hidden" name="sort" value="{sort}"> <input type="hidden" name="sort" value="{sort}">
<input type="hidden" name="order" value="{order}"> <input type="hidden" name="order" value="{order}">
<input type="hidden" name="filter" value="{filter}"> <input type="hidden" name="filter" value="{filter}">
<input type="hidden" name="query" value="{query}"> <input type="hidden" name="query" value="{query}">
<input type="hidden" name="start" value="{start}"> <input type="hidden" name="start" value="{start}">
</FORM></TD> </form>
</TR> </td>
</TABLE>
</TD>
</TR>
<tr>
<td width="8%"> <td width="8%">
<div align="left">
<form action="{cancel_url}" method="post"> <form action="{cancel_url}" method="post">
<input type="hidden" name="sort" value="{sort}"> <input type="hidden" name="sort" value="{sort}">
<input type="hidden" name="order" value="{order}"> <input type="hidden" name="order" value="{order}">
@ -58,6 +53,6 @@
<td width="64%">&nbsp;</td> <td width="64%">&nbsp;</td>
<td width="32">&nbsp;</td> <td width="32">&nbsp;</td>
</tr> </tr>
</TABLE> </table>
</CENTER> </div>
<!-- END import --> <!-- END import -->