2001-05-23 22:15:07 +02:00
< ? php
/************************************************************************** \
* phpGroupWare - Addressbook : CSV - Import *
* http :// www . phpgroupware . org *
* Written by Ralf Becker < RalfBecker @ outdoor - training . de > *
* -------------------------------------------- *
* 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$ */
2003-08-28 16:16:30 +02:00
$GLOBALS [ 'phpgw_info' ][ 'flags' ] = array (
'currentapp' => 'addressbook' ,
'noheader' => True ,
'enable_contacts_class' => True ,
);
2001-05-23 22:15:07 +02:00
include ( '../header.inc.php' );
2003-08-28 16:16:30 +02:00
$GLOBALS [ 'phpgw_info' ][ 'flags' ][ 'app_header' ] = lang ( 'Import CSV-File into Addressbook' );
$GLOBALS [ 'phpgw' ] -> common -> phpgw_header ();
2001-12-04 02:04:21 +01:00
$GLOBALS [ 'phpgw' ] -> contacts = createobject ( 'phpgwapi.contacts' );
2003-08-28 16:16:30 +02:00
$GLOBALS [ 'phpgw' ] -> template -> set_file ( array ( 'import' => 'csv_import.tpl' ));
$GLOBALS [ 'phpgw' ] -> template -> set_block ( 'import' , 'filename' , 'filenamehandle' );
$GLOBALS [ 'phpgw' ] -> template -> set_block ( 'import' , 'fheader' , 'fheaderhandle' );
$GLOBALS [ 'phpgw' ] -> template -> set_block ( 'import' , 'fields' , 'fieldshandle' );
$GLOBALS [ 'phpgw' ] -> template -> set_block ( 'import' , 'ffooter' , 'ffooterhandle' );
$GLOBALS [ 'phpgw' ] -> template -> set_block ( 'import' , 'imported' , 'importedhandle' );
$csvfile = isset ( $_POST [ 'csvfile' ]) ? $_POST [ 'csvfile' ] : $_FILES [ 'csvfile' ][ 'tmp_name' ];
2001-12-04 02:04:21 +01:00
2003-08-28 16:16:30 +02:00
if ( $_POST [ 'action' ] == 'download' && ( ! $_POST [ 'fieldsep' ] || ! $csvfile || ! ( $fp = fopen ( $csvfile , 'rb' ))))
2001-05-23 22:15:07 +02:00
{
2003-08-28 16:16:30 +02:00
$_POST [ 'action' ] = '' ;
2002-03-19 03:58:50 +01:00
}
2001-12-04 02:04:21 +01:00
$GLOBALS [ 'phpgw' ] -> template -> set_var ( 'action_url' , $GLOBALS [ 'phpgw' ] -> link ( '/addressbook/csv_import.php' ));
2001-05-23 22:15:07 +02:00
$PSep = '||' ; // Pattern-Separator, separats the pattern-replacement-pairs in trans
$ASep = '|>' ; // Assignment-Separator, separats pattern and replacesment
$VPre = '|#' ; // Value-Prefix, is expanded to \ for ereg_replace
$CPre = '|[' ; $CPreReg = '\|\[' ; // |{csv-fieldname} is expanded to the value of the csv-field
$CPos = ']' ; $CPosReg = '\]' ; // if used together with @ (replacement is eval-ed) value gets autom. quoted
2002-03-19 03:58:50 +01:00
function dump_array ( $arr )
2001-05-23 22:15:07 +02:00
{
2002-03-19 03:58:50 +01:00
while ( is_array ( $arr ) && ( list ( $key , $val ) = each ( $arr )))
2001-05-23 22:15:07 +02:00
{
$ret .= ( $ret ? ',' : '(' ) . " ' $key ' => ' $val ' \n " ;
}
return $ret . ')' ;
}
2002-03-19 03:58:50 +01:00
function index ( $value , $arr )
2001-05-23 22:15:07 +02:00
{
2002-03-19 03:58:50 +01:00
while ( is_array ( $arr ) && ( list ( $key , $val ) = each ( $arr )))
2001-05-23 22:15:07 +02:00
{
2002-03-19 03:58:50 +01:00
if ( $value == $val )
2001-05-23 22:15:07 +02:00
{
return $key ;
}
}
return False ;
}
// find in Addressbook, at least n_family AND (n_given OR org_name) have to match
2002-03-19 03:58:50 +01:00
function addr_id ( $n_family , $n_given , $org_name )
2001-05-23 22:15:07 +02:00
{
2002-03-19 03:58:50 +01:00
$addrs = $GLOBALS [ 'phpgw' ] -> contacts -> read ( 0 , 0 , array ( 'id' ), '' , " n_family= $n_family ,n_given= $n_given ,org_name= $org_name " );
if ( ! count ( $addrs ))
2001-05-23 22:15:07 +02:00
{
2002-03-19 03:58:50 +01:00
$addrs = $GLOBALS [ 'phpgw' ] -> contacts -> read ( 0 , 0 , array ( 'id' ), '' , " n_family= $n_family ,n_given= $n_given " );
2001-05-23 22:15:07 +02:00
}
2002-03-19 03:58:50 +01:00
if ( ! count ( $addrs ))
2001-05-23 22:15:07 +02:00
{
2002-03-19 03:58:50 +01:00
$addrs = $GLOBALS [ 'phpgw' ] -> contacts -> read ( 0 , 0 , array ( 'id' ), '' , " n_family= $n_family ,org_name= $org_name " );
2001-05-23 22:15:07 +02:00
}
2002-03-19 03:58:50 +01:00
if ( count ( $addrs ))
2001-05-23 22:15:07 +02:00
{
return $addrs [ 0 ][ 'id' ];
}
2002-03-19 03:58:50 +01:00
return False ;
2001-05-23 22:15:07 +02:00
}
2002-03-19 03:58:50 +01:00
$cat2id = array ();
2001-05-23 22:15:07 +02:00
function cat_id ( $cats )
{
2002-03-19 03:58:50 +01:00
if ( ! $cats )
2001-05-23 22:15:07 +02:00
{
return '' ;
}
2002-02-14 19:42:19 +01:00
$cats = split ( '[,;]' , $cats );
2001-05-23 22:15:07 +02:00
2002-03-19 03:58:50 +01:00
while ( list ( $k , $cat ) = each ( $cats ))
2001-05-23 22:15:07 +02:00
{
2002-03-19 03:58:50 +01:00
if ( isset ( $cat2id [ $cat ]))
2001-05-23 22:15:07 +02:00
{
2001-12-04 02:04:21 +01:00
$ids [ $cat ] = $cat2id [ $cat ]; // cat is in cache
2001-05-23 22:15:07 +02:00
}
else
{
2002-03-19 03:58:50 +01:00
if ( ! is_object ( $GLOBALS [ 'phpgw' ] -> categories ))
2001-05-23 22:15:07 +02:00
{
2001-12-04 02:04:21 +01:00
$GLOBALS [ 'phpgw' ] -> categories = createobject ( 'phpgwapi.categories' );
2002-03-19 03:58:50 +01:00
}
if ( $id = $GLOBALS [ 'phpgw' ] -> categories -> name2id ( addslashes ( $cat )))
2001-05-23 22:15:07 +02:00
{ // cat exists
$cat2id [ $cat ] = $ids [ $cat ] = $id ;
}
else
{ // create new cat
2002-03-19 03:58:50 +01:00
$GLOBALS [ 'phpgw' ] -> categories -> add ( array ( 'name' => $cat , 'descr' => $cat ));
$cat2id [ $cat ] = $ids [ $cat ] = $GLOBALS [ 'phpgw' ] -> categories -> name2id ( addslashes ( $cat ));
2001-05-23 22:15:07 +02:00
}
}
}
2002-03-19 03:58:50 +01:00
$id_str = implode ( ',' , $ids );
2002-02-14 19:42:19 +01:00
2002-03-19 03:58:50 +01:00
if ( count ( $ids ) > 1 ) // multiple cats need to be in ','
2002-02-14 19:42:19 +01:00
{
$id_str = " , $id_str , " ;
}
return $id_str ;
2001-05-23 22:15:07 +02:00
}
2003-08-28 16:16:30 +02:00
switch ( $_POST [ 'action' ])
2001-05-23 22:15:07 +02:00
{
case '' : // Start, ask Filename
2001-12-04 02:04:21 +01:00
$GLOBALS [ 'phpgw' ] -> template -> set_var ( 'lang_csvfile' , lang ( 'CSV-Filename' ));
$GLOBALS [ 'phpgw' ] -> template -> set_var ( 'lang_fieldsep' , lang ( 'Fieldseparator' ));
2003-08-28 16:16:30 +02:00
$GLOBALS [ 'phpgw' ] -> template -> set_var ( 'fieldsep' , $_POST [ 'fieldsep' ] ? $_POST [ 'fieldsep' ] : ',' );
2001-12-04 02:04:21 +01:00
$GLOBALS [ 'phpgw' ] -> template -> set_var ( 'submit' , lang ( 'Download' ));
$GLOBALS [ 'phpgw' ] -> template -> set_var ( 'csvfile' , $csvfile );
$GLOBALS [ 'phpgw' ] -> template -> set_var ( 'enctype' , 'ENCTYPE="multipart/form-data"' );
2001-05-23 22:15:07 +02:00
$hiddenvars .= '<input type="hidden" name="action" value="download">' . " \n " ;
2003-08-28 16:16:30 +02:00
$GLOBALS [ 'phpgw' ] -> template -> parse ( 'filenamehandle' , 'filename' );
2001-05-23 22:15:07 +02:00
break ;
case 'download' :
2002-03-05 11:26:33 +01:00
$GLOBALS [ 'phpgw' ] -> preferences -> read_repository ();
$defaults = $GLOBALS [ 'phpgw_info' ][ 'user' ][ 'preferences' ][ 'addressbook' ][ 'cvs_import' ];
2002-03-19 03:58:50 +01:00
if ( ! is_array ( $defaults ))
2001-05-23 22:15:07 +02:00
{
2002-03-05 11:26:33 +01:00
$defaults = array ();
}
2001-12-04 02:04:21 +01:00
$GLOBALS [ 'phpgw' ] -> template -> set_var ( 'lang_csv_fieldname' , lang ( 'CSV-Fieldname' ));
$GLOBALS [ 'phpgw' ] -> template -> set_var ( 'lang_addr_fieldname' , lang ( 'Addressbook-Fieldname' ));
$GLOBALS [ 'phpgw' ] -> template -> set_var ( 'lang_translation' , lang ( " Translation " ) . ' <a href="#help">' . lang ( 'help' ) . '</a>' );
$GLOBALS [ 'phpgw' ] -> template -> set_var ( 'submit' , lang ( 'Import' ));
$GLOBALS [ 'phpgw' ] -> template -> set_var ( 'lang_debug' , lang ( 'Test Import (show importable records <u>only</u> in browser)' ));
2003-08-28 16:16:30 +02:00
$GLOBALS [ 'phpgw' ] -> template -> parse ( 'fheaderhandle' , 'fheader' );
2001-05-23 22:15:07 +02:00
$hiddenvars .= '<input type="hidden" name="action" value="import">' . " \n "
2003-08-28 16:16:30 +02:00
. '<input type="hidden" name="fieldsep" value="' . $_POST [ 'fieldsep' ] . " \" > \n " ;
2001-05-23 22:15:07 +02:00
2001-12-04 02:04:21 +01:00
$addr_names = $GLOBALS [ 'phpgw' ] -> contacts -> stock_contact_fields + array (
2001-05-23 22:15:07 +02:00
'cat_id' => 'Categories: @cat_id(Cat1,Cat2)' ,
'access' => 'Access: public,private' ,
2002-09-02 08:07:09 +02:00
'owner' => 'Owner: defaults to user' ,
'address2' => 'address line 2' ,
'address3' => 'address line 3' ,
2003-08-28 16:16:30 +02:00
'ophone' => 'Other Phone'
2001-05-23 22:15:07 +02:00
);
2003-04-06 14:52:24 +02:00
$config = CreateObject ( 'phpgwapi.config' , 'addressbook' );
$config -> read_repository ();
while ( list ( $name , $descr ) = @ each ( $config -> config_data [ 'custom_fields' ]))
{
$addr_names [ $name ] = $descr ;
}
unset ( $config );
2001-05-23 22:15:07 +02:00
2003-08-28 16:16:30 +02:00
foreach ( $addr_names as $field => $name )
2001-05-23 22:15:07 +02:00
{
2002-03-19 03:58:50 +01:00
if ( $dn = display_name ( $field ))
2001-05-23 22:15:07 +02:00
{
$addr_names [ $field ] = $dn ;
}
}
$addr_name_options = " <option value= \" \" >none \n " ;
2003-08-28 16:16:30 +02:00
foreach ( $addr_names as $field => $name )
2001-05-23 22:15:07 +02:00
{
2001-12-04 02:04:21 +01:00
$addr_name_options .= " <option value= \" $field\ " > " . $GLOBALS['phpgw'] ->strip_html( $name ). " \n " ;
2001-05-23 22:15:07 +02:00
}
2003-08-28 16:16:30 +02:00
$csv_fields = fgetcsv ( $fp , 8000 , $_POST [ 'fieldsep' ]);
2002-03-19 03:58:50 +01:00
$csv_fields [] = 'no CSV 1' ; // eg. for static assignments
2002-03-05 11:26:33 +01:00
$csv_fields [] = 'no CSV 2' ;
$csv_fields [] = 'no CSV 3' ;
2003-08-28 16:16:30 +02:00
foreach ( $csv_fields as $csv_idx => $csv_field )
2001-05-23 22:15:07 +02:00
{
2001-12-04 02:04:21 +01:00
$GLOBALS [ 'phpgw' ] -> template -> set_var ( 'csv_field' , $csv_field );
$GLOBALS [ 'phpgw' ] -> template -> set_var ( 'csv_idx' , $csv_idx );
2002-03-19 03:58:50 +01:00
if ( $def = $defaults [ $csv_field ])
2001-05-23 22:15:07 +02:00
{
2003-08-28 16:16:30 +02:00
list ( $addr , $_POST [ 'trans' ]) = explode ( $PSep , $def , 2 );
$GLOBALS [ 'phpgw' ] -> template -> set_var ( 'trans' , $_POST [ 'trans' ]);
2001-12-04 02:04:21 +01:00
$GLOBALS [ 'phpgw' ] -> template -> set_var ( 'addr_fields' , str_replace ( '="' . $addr . '">' , '="' . $addr . '" selected>' , $addr_name_options ));
2001-05-23 22:15:07 +02:00
}
else
{
2001-12-04 02:04:21 +01:00
$GLOBALS [ 'phpgw' ] -> template -> set_var ( 'trans' , '' );
$GLOBALS [ 'phpgw' ] -> template -> set_var ( 'addr_fields' , $addr_name_options );
2002-03-19 03:58:50 +01:00
}
2003-08-28 16:16:30 +02:00
$GLOBALS [ 'phpgw' ] -> template -> parse ( 'fieldshandle' , 'fields' , True );
2002-03-19 03:58:50 +01:00
}
2001-12-04 02:04:21 +01:00
$GLOBALS [ 'phpgw' ] -> template -> set_var ( 'lang_start' , lang ( 'Startrecord' ));
2003-08-28 16:16:30 +02:00
$GLOBALS [ 'phpgw' ] -> template -> set_var ( 'start' , $_POST [ 'start' ]);
2001-12-04 02:04:21 +01:00
$GLOBALS [ 'phpgw' ] -> template -> set_var ( 'lang_max' , lang ( 'Number of records to read (<=200)' ));
$GLOBALS [ 'phpgw' ] -> template -> set_var ( 'max' , 200 );
2003-08-28 16:16:30 +02:00
$GLOBALS [ 'phpgw' ] -> template -> parse ( 'ffooterhandle' , 'ffooter' );
2001-05-23 22:15:07 +02:00
fclose ( $fp );
2001-12-04 02:04:21 +01:00
$old = $csvfile ; $csvfile = $GLOBALS [ 'phpgw_info' ][ 'server' ][ 'temp_dir' ] . '/addrbook_import_' . basename ( $csvfile );
2001-05-23 22:15:07 +02:00
rename ( $old , $csvfile );
$hiddenvars .= '<input type="hidden" name="csvfile" value="' . $csvfile . '">' ;
2002-06-01 13:02:10 +02:00
$mktime_lotus = " ${ PSep } 0?([0-9]+)[ .:-]+0?([0-9]*)[ .:-]+0?([0-9]*)[ .:-]+0?([0-9]*)[ .:-]+0?([0-9]*)[ .:-]+0?([0-9]*).* $ASep @mktime( ${ VPre}4,${VPre}5,${VPre}6,${VPre}2,${VPre}3,${VPre } 1) " ;
2003-08-28 16:16:30 +02:00
$help_on_trans = " <a name= \" help \" ></a><b>How to use Translation's</b><p> " .
2002-03-19 03:58:50 +01:00
" Translations enable you to change / adapt the content of each CSV field for your needs. <br> " .
" General syntax is: <b>pattern1 ${ ASep } replacement1 ${ PSep } ... ${ PSep } patternN ${ ASep } replacementN</b><br> " .
" If the pattern-part of a pair is ommited it will match everything ('^.* $ '), which is only " .
" usefull for the last pair, as they are worked from left to right.<p> " .
" First example: <b>1 ${ ASep}private${PSep } public</b><br> " .
" This will translate a '1' in the CSV field to 'privat' and everything else to 'public'.<p> " .
" Patterns as well as the replacement can be regular expressions (the replacement is done via ereg_replace). " .
" If, after all replacements, the value starts with an '@' the whole value is eval()'ed, so you " .
" may use all php, phpgw plus your own functions. This is quiet powerfull, but <u>circumvents all ACL</u>.<p> " .
" Example using regular expressions and '@'-eval(): <br><b> $mktime_lotus </b><br> " .
" It will read a date of the form '2001-05-20 08:00:00.00000000000000000' (and many more, see the regular expr.). " .
" The [ .:-]-separated fields are read and assigned in different order to @mktime(). Please note to use " .
" ${ VPre } insted of a backslash (I couldn't get backslash through all the involved templates and forms.) " .
" plus the field-number of the pattern.<p> " .
" In addintion to the fields assign by the pattern of the reg.exp. you can use all other CSV-fields, with the " .
" syntax <b> ${ CPre } CSV-FIELDNAME $CPos </b>. Here is an example: <br> " .
" <b>.+ $ASep ${ CPre } Company $CPos : ${ CPre } NFamily $CPos , ${ CPre}NGiven$CPos$PSep${CPre } NFamily $CPos , ${ CPre } NGiven $CPos </b><br> " .
" It is used on the CSV-field 'Company' and constructs a something like <i>Company: FamilyName, GivenName</i> or " .
" <i>FamilyName, GivenName</i> if 'Company' is empty.<p> " .
" You can use the 'No CSV #'-fields to assign csv-values to more than on field, the following example uses the " .
" csv-field 'Note' (which gots already assingned to the description) and construct a short subject: " .
" <b>@substr( ${ CPre } Note $CPos ,0,60).' ...'</b><p> " .
" Their is one important user-function for the Info Log:<br> " .
" <b>@addr_id( ${ CPre}NFamily$CPos,${CPre}NGiven$CPos,${CPre } Company $CPos )</b> " .
" searches the addressbook for an address and returns the id if it founds an exact match of at least " .
" <i>NFamily</i> AND (<i>NGiven</i> OR <i>Company</i>). This is necessary to link your imported InfoLog-entrys " .
" with the addressbook.<br> " .
" <b>@cat_id(Cat1,...,CatN)</b> returns a (','-separated) list with the cat_id's. If a category isn't found, it " .
" will be automaticaly added.<p> " .
" I hope that helped to understand the features, if not <a href='mailto:RalfBecker@outdoor-training.de'>ask</a>. " ;
2001-12-04 02:04:21 +01:00
$GLOBALS [ 'phpgw' ] -> template -> set_var ( 'help_on_trans' , lang ( $help_on_trans )); // I don't think anyone will translate this
2001-05-23 22:15:07 +02:00
break ;
case 'import' :
2003-08-28 16:16:30 +02:00
@ set_time_limit ( 0 );
2002-03-19 03:58:50 +01:00
$fp = fopen ( $csvfile , 'rb' );
2003-08-28 16:16:30 +02:00
$csv_fields = fgetcsv ( $fp , 8000 , $_POST [ 'fieldsep' ]);
2002-03-19 03:58:50 +01:00
$csv_fields [] = 'no CSV 1' ; // eg. for static assignments
2002-03-05 11:26:33 +01:00
$csv_fields [] = 'no CSV 2' ;
$csv_fields [] = 'no CSV 3' ;
2001-05-23 22:15:07 +02:00
2003-08-28 16:16:30 +02:00
$addr_fields = array_diff ( $_POST [ 'addr_fields' ], array ( '' )); // throw away empty / not assigned entrys
2001-05-23 22:15:07 +02:00
2002-03-05 11:26:33 +01:00
$defaults = array ();
2003-08-28 16:16:30 +02:00
foreach ( $addr_fields as $csv_idx => $addr )
{ // convert $_POST['trans'][$csv_idx] into array of pattern => value
2002-03-05 11:26:33 +01:00
$defaults [ $csv_fields [ $csv_idx ]] = $addr ;
2003-08-28 16:16:30 +02:00
if ( $_POST [ 'trans' ][ $csv_idx ])
2001-05-23 22:15:07 +02:00
{
2003-08-28 16:16:30 +02:00
$defaults [ $csv_fields [ $csv_idx ]] .= $PSep . $_POST [ 'trans' ][ $csv_idx ];
2001-05-23 22:15:07 +02:00
}
}
2002-03-05 11:26:33 +01:00
$GLOBALS [ 'phpgw' ] -> preferences -> read_repository ();
$GLOBALS [ 'phpgw' ] -> preferences -> add ( 'addressbook' , 'cvs_import' , $defaults );
$GLOBALS [ 'phpgw' ] -> preferences -> save_repository ( True );
2001-05-23 22:15:07 +02:00
$log = " <table border=1> \n \t <tr><td>#</td> \n " ;
2003-08-28 16:16:30 +02:00
foreach ( $addr_fields as $csv_idx => $addr )
{ // convert $_POST['trans'][$csv_idx] into array of pattern => value
// if (!$_POST['debug']) echo "<p>$csv_idx: ".$csv_fields[$csv_idx].": $addr".($_POST['trans'][$csv_idx] ? ': '.$_POST['trans'][$csv_idx] : '')."</p>";
$pat_reps = explode ( $PSep , stripslashes ( $_POST [ 'trans' ][ $csv_idx ]));
2001-05-23 22:15:07 +02:00
$replaces = '' ; $values = '' ;
2002-03-19 03:58:50 +01:00
if ( $pat_reps [ 0 ] != '' )
2001-05-23 22:15:07 +02:00
{
2003-08-28 16:16:30 +02:00
foreach ( $pat_reps as $k => $pat_rep )
2001-05-23 22:15:07 +02:00
{
list ( $pattern , $replace ) = explode ( $ASep , $pat_rep , 2 );
2002-03-19 03:58:50 +01:00
if ( $replace == '' )
2001-05-23 22:15:07 +02:00
{
$replace = $pattern ; $pattern = '^.*$' ;
}
$values [ $pattern ] = $replace ; // replace two with only one, added by the form
$replaces .= ( $replaces != '' ? $PSep : '' ) . $pattern . $ASep . $replace ;
}
2003-08-28 16:16:30 +02:00
$_POST [ 'trans' ][ $csv_idx ] = $values ;
2001-05-23 22:15:07 +02:00
}
else
{
2003-08-28 16:16:30 +02:00
unset ( $_POST [ 'trans' ][ $csv_idx ] );
2001-05-23 22:15:07 +02:00
}
2002-03-19 03:58:50 +01:00
$log .= " \t \t <td><b> $addr </b></td> \n " ;
}
2002-05-01 14:46:20 +02:00
if ( ! in_array ( 'fn' , $addr_fields )) // autocreate full name, if not set by user
{
$log .= " \t \t <td><b>fn</b></td> \n " ;
$auto_fn = array ( 'n_prefix' , 'n_given' , 'n_middle' , 'n_family' , 'n_suffix' );
}
2003-08-28 16:16:30 +02:00
$start = $_POST [ 'start' ] < 1 ? 1 : $_POST [ 'start' ];
for ( $i = 1 ; $i < $start && fgetcsv ( $fp , 8000 , $_POST [ 'fieldsep' ]); ++ $i ); // overread lines before our start-record
2001-05-23 22:15:07 +02:00
2003-08-28 16:16:30 +02:00
for ( $anz = 0 ; $anz < $_POST [ 'max' ] && ( $fields = fgetcsv ( $fp , 8000 , $_POST [ 'fieldsep' ])); ++ $anz )
2001-05-23 22:15:07 +02:00
{
$log .= " \t </tr><tr><td> " . ( $start + $anz ) . " </td> \n " ;
reset ( $addr_fields ); $values = array ();
2002-03-19 03:58:50 +01:00
while ( list ( $csv_idx , $addr ) = each ( $addr_fields ))
2001-05-23 22:15:07 +02:00
{
2003-08-28 16:16:30 +02:00
//echo "<p>$csv: $addr".($_POST['trans'][$csv] ? ': '.$_POST['trans'][$csv] : '')."</p>";
2001-05-23 22:15:07 +02:00
$val = $fields [ $csv_idx ];
2003-08-28 16:16:30 +02:00
if ( isset ( $_POST [ 'trans' ][ $csv_idx ]))
2001-05-23 22:15:07 +02:00
{
2003-08-28 16:16:30 +02:00
$trans_csv = $_POST [ 'trans' ][ $csv_idx ];
2002-03-19 03:58:50 +01:00
while ( list ( $pattern , $replace ) = each ( $trans_csv ))
2001-05-23 22:15:07 +02:00
{
2002-03-19 03:58:50 +01:00
if ( ereg (( string ) $pattern , $val ))
2001-05-23 22:15:07 +02:00
{
// echo "<p>csv_idx='$csv_idx',info='$addr',trans_csv=".dump_array($trans_csv).",ereg_replace('$pattern','$replace','$val') = ";
$val = ereg_replace (( string ) $pattern , str_replace ( $VPre , '\\' , $replace ),( string ) $val );
// echo "'$val'</p>";
$reg = $CPreReg . '([a-zA-Z_0-9]+)' . $CPosReg ;
2002-03-19 03:58:50 +01:00
while ( ereg ( $reg , $val , $vars ))
2001-05-23 22:15:07 +02:00
{ // expand all CSV fields
2002-03-19 03:58:50 +01:00
$val = str_replace ( $CPre . $vars [ 1 ] . $CPos , $val [ 0 ] == '@' ? " ' "
. addslashes ( $fields [ index ( $vars [ 1 ], $csv_fields )])
. " ' " : $fields [ index ( $vars [ 1 ], $csv_fields )], $val );
2001-05-23 22:15:07 +02:00
}
2002-03-19 03:58:50 +01:00
if ( $val [ 0 ] == '@' )
2001-05-23 22:15:07 +02:00
{
2003-08-28 16:16:30 +02:00
if ( ! $GLOBALS [ 'phpgw_info' ][ 'user' ][ 'apps' ][ 'admin' ])
{
echo lang ( '@-eval() is only availible to admins!!!' );
}
else
{
// removing the $ to close security hole of showing vars, which contain eg. passwords
$val = 'return ' . substr ( str_replace ( '$' , '' , $val ), 1 ) . ';' ;
// echo "<p>eval('$val')=";
$val = eval ( $val );
// echo "'$val'</p>";
}
2001-05-23 22:15:07 +02:00
}
2002-03-19 03:58:50 +01:00
if ( $pattern [ 0 ] != '@' || $val )
2001-05-23 22:15:07 +02:00
{
2003-08-28 16:16:30 +02:00
break ;
2001-05-23 22:15:07 +02:00
}
}
}
}
$values [ $addr ] = $val ;
$log .= " \t \t <td> $val </td> \n " ;
}
// if (!isset($values['datecreated'])) $values['datecreated'] = $values['startdate'];
2002-05-01 14:46:20 +02:00
if ( is_array ( $auto_fn ) && ! isset ( $values [ 'fn' ])) // autocreate full name
{
reset ( $auto_fn );
while ( list ( $idx , $name ) = each ( $auto_fn ))
{
$values [ 'fn' ] .= ( $values [ 'fn' ] != '' && $values [ $name ] != '' ? ' ' : '' ) . $values [ $name ];
}
$log .= " \t \t <td> " . $values [ 'fn' ] . " </td> \n " ;
}
2003-08-28 16:16:30 +02:00
if ( ! $_POST [ 'debug' ])
2001-05-23 22:15:07 +02:00
{
2003-08-28 16:16:30 +02:00
$GLOBALS [ 'phpgw' ] -> contacts -> add ( $values [ 'owner' ] ? $values [ 'owner' ] : $GLOBALS [ 'phpgw_info' ][ 'user' ][ 'account_id' ],
$values , $values [ 'access' ], $values [ 'cat_id' ]);
2001-05-23 22:15:07 +02:00
// echo "<p>adding: ".dump_array($values)."</p>\n";
}
}
$log .= " \t </tr> \n </table> \n " ;
2003-08-28 16:16:30 +02:00
$GLOBALS [ 'phpgw' ] -> template -> set_var ( 'anz_imported' , $_POST [ 'debug' ] ? lang ( '%1 records read (not yet imported, you may go %2back%3 and uncheck Test Import)' ,
2002-03-19 03:58:50 +01:00
$anz , '<a href="javascript:history.back()">' , '</a>' ) :
lang ( '%1 records imported' , $anz ));
2001-12-04 02:04:21 +01:00
$GLOBALS [ 'phpgw' ] -> template -> set_var ( 'log' , $log );
2003-08-28 16:16:30 +02:00
$GLOBALS [ 'phpgw' ] -> template -> parse ( 'importedhandle' , 'imported' );
2001-05-23 22:15:07 +02:00
break ;
}
2001-12-04 02:04:21 +01:00
$GLOBALS [ 'phpgw' ] -> template -> set_var ( 'hiddenvars' , $hiddenvars );
2003-08-28 16:16:30 +02:00
$GLOBALS [ 'phpgw' ] -> template -> pfp ( 'out' , 'import' , True );
$GLOBALS [ 'phpgw' ] -> common -> phpgw_footer ();
2001-05-23 22:15:07 +02:00
?>