formatting

This commit is contained in:
Miles Lott 2002-03-19 02:58:50 +00:00
parent 31e6ac71a4
commit 33549dcf9e
3 changed files with 104 additions and 98 deletions

View File

@ -26,7 +26,7 @@
$GLOBALS['phpgw']->template->set_block('import','ffooter','ffooterhandle'); $GLOBALS['phpgw']->template->set_block('import','ffooter','ffooterhandle');
$GLOBALS['phpgw']->template->set_block('import','imported','importedhandle'); $GLOBALS['phpgw']->template->set_block('import','imported','importedhandle');
if ($action == 'download' && (!$fieldsep || !$csvfile || !($fp=fopen($csvfile,'r')))) if($action == 'download' && (!$fieldsep || !$csvfile || !($fp=fopen($csvfile,'rb'))))
{ {
$action = ''; $action = '';
} }
@ -39,20 +39,20 @@
$CPre = '|['; $CPreReg = '\|\['; // |{csv-fieldname} is expanded to the value of the csv-field $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 $CPos = ']'; $CPosReg = '\]'; // if used together with @ (replacement is eval-ed) value gets autom. quoted
function dump_array( $arr ) function dump_array($arr)
{ {
while (list($key,$val) = each($arr)) while(is_array($arr) && (list($key,$val) = each($arr)))
{ {
$ret .= ($ret ? ',' : '(') . "'$key' => '$val'\n"; $ret .= ($ret ? ',' : '(') . "'$key' => '$val'\n";
} }
return $ret.')'; return $ret.')';
} }
function index( $value,$arr ) function index($value,$arr)
{ {
while (list ($key,$val) = each($arr)) while(is_array($arr) && (list($key,$val) = each($arr)))
{ {
if ($value == $val) if($value == $val)
{ {
return $key; return $key;
} }
@ -61,19 +61,19 @@
} }
// find in Addressbook, at least n_family AND (n_given OR org_name) have to match // find in Addressbook, at least n_family AND (n_given OR org_name) have to match
function addr_id( $n_family,$n_given,$org_name ) function addr_id($n_family,$n_given,$org_name)
{ {
$addrs = $GLOBALS['phpgw']->contacts->read( 0,0,array('id'),'',"n_family=$n_family,n_given=$n_given,org_name=$org_name" ); $addrs = $GLOBALS['phpgw']->contacts->read(0,0,array('id'),'',"n_family=$n_family,n_given=$n_given,org_name=$org_name");
if (!count($addrs)) if(!count($addrs))
{ {
$addrs = $GLOBALS['phpgw']->contacts->read( 0,0,array('id'),'',"n_family=$n_family,n_given=$n_given" ); $addrs = $GLOBALS['phpgw']->contacts->read(0,0,array('id'),'',"n_family=$n_family,n_given=$n_given");
} }
if (!count($addrs)) if(!count($addrs))
{ {
$addrs = $GLOBALS['phpgw']->contacts->read( 0,0,array('id'),'',"n_family=$n_family,org_name=$org_name" ); $addrs = $GLOBALS['phpgw']->contacts->read(0,0,array('id'),'',"n_family=$n_family,org_name=$org_name");
} }
if (count($addrs)) if(count($addrs))
{ {
return $addrs[0]['id']; return $addrs[0]['id'];
} }
@ -81,50 +81,50 @@
return False; return False;
} }
$cat2id = array( ); $cat2id = array();
function cat_id($cats) function cat_id($cats)
{ {
if (!$cats) if(!$cats)
{ {
return ''; return '';
} }
$cats = split('[,;]',$cats); $cats = split('[,;]',$cats);
while (list($k,$cat) = each($cats)) while(list($k,$cat) = each($cats))
{ {
if (isset($cat2id[$cat])) if(isset($cat2id[$cat]))
{ {
$ids[$cat] = $cat2id[$cat]; // cat is in cache $ids[$cat] = $cat2id[$cat]; // cat is in cache
} }
else else
{ {
if (!is_object($GLOBALS['phpgw']->categories)) if(!is_object($GLOBALS['phpgw']->categories))
{ {
$GLOBALS['phpgw']->categories = createobject('phpgwapi.categories'); $GLOBALS['phpgw']->categories = createobject('phpgwapi.categories');
} }
if ($id = $GLOBALS['phpgw']->categories->name2id( addslashes($cat) )) if($id = $GLOBALS['phpgw']->categories->name2id(addslashes($cat)))
{ // cat exists { // cat exists
$cat2id[$cat] = $ids[$cat] = $id; $cat2id[$cat] = $ids[$cat] = $id;
} }
else else
{ // create new cat { // create new cat
$GLOBALS['phpgw']->categories->add( array('name' => $cat,'descr' => $cat )); $GLOBALS['phpgw']->categories->add(array('name' => $cat,'descr' => $cat));
$cat2id[$cat] = $ids[$cat] = $GLOBALS['phpgw']->categories->name2id( addslashes($cat) ); $cat2id[$cat] = $ids[$cat] = $GLOBALS['phpgw']->categories->name2id(addslashes($cat));
} }
} }
} }
$id_str = implode( ',',$ids ); $id_str = implode(',',$ids);
if (count($ids) > 1) // multiple cats need to be in ',' if(count($ids) > 1) // multiple cats need to be in ','
{ {
$id_str = ",$id_str,"; $id_str = ",$id_str,";
} }
return $id_str; return $id_str;
} }
switch ($action) switch($action)
{ {
case '': // Start, ask Filename case '': // Start, ask Filename
$GLOBALS['phpgw']->template->set_var('lang_csvfile',lang('CSV-Filename')); $GLOBALS['phpgw']->template->set_var('lang_csvfile',lang('CSV-Filename'));
@ -141,7 +141,7 @@
case 'download': case 'download':
$GLOBALS['phpgw']->preferences->read_repository(); $GLOBALS['phpgw']->preferences->read_repository();
$defaults = $GLOBALS['phpgw_info']['user']['preferences']['addressbook']['cvs_import']; $defaults = $GLOBALS['phpgw_info']['user']['preferences']['addressbook']['cvs_import'];
if (!is_array($defaults)) if(!is_array($defaults))
{ {
$defaults = array(); $defaults = array();
} }
@ -157,33 +157,33 @@
$addr_names = $GLOBALS['phpgw']->contacts->stock_contact_fields + array( $addr_names = $GLOBALS['phpgw']->contacts->stock_contact_fields + array(
'cat_id' => 'Categories: @cat_id(Cat1,Cat2)', 'cat_id' => 'Categories: @cat_id(Cat1,Cat2)',
'access' => 'Access: public,private', 'access' => 'Access: public,private',
'owner' => 'Owner: defaults to user' 'owner' => 'Owner: defaults to user'
); );
while (list($field,$name) = each($addr_names)) while(list($field,$name) = each($addr_names))
{ {
if ($dn = display_name($field)) if($dn = display_name($field))
{ {
$addr_names[$field] = $dn; $addr_names[$field] = $dn;
} }
} }
$addr_name_options = "<option value=\"\">none\n"; $addr_name_options = "<option value=\"\">none\n";
reset($addr_names); reset($addr_names);
while (list($field,$name) = each($addr_names)) while(list($field,$name) = each($addr_names))
{ {
$addr_name_options .= "<option value=\"$field\">".$GLOBALS['phpgw']->strip_html($name)."\n"; $addr_name_options .= "<option value=\"$field\">".$GLOBALS['phpgw']->strip_html($name)."\n";
} }
$csv_fields = fgetcsv($fp,8000,$fieldsep); $csv_fields = fgetcsv($fp,8000,$fieldsep);
$csv_fields[] = 'no CSV 1'; // eg. for static assignments $csv_fields[] = 'no CSV 1'; // eg. for static assignments
$csv_fields[] = 'no CSV 2'; $csv_fields[] = 'no CSV 2';
$csv_fields[] = 'no CSV 3'; $csv_fields[] = 'no CSV 3';
while (list($csv_idx,$csv_field) = each($csv_fields)) while(list($csv_idx,$csv_field) = each($csv_fields))
{ {
$GLOBALS['phpgw']->template->set_var('csv_field',$csv_field); $GLOBALS['phpgw']->template->set_var('csv_field',$csv_field);
$GLOBALS['phpgw']->template->set_var('csv_idx',$csv_idx); $GLOBALS['phpgw']->template->set_var('csv_idx',$csv_idx);
if ($def = $defaults[$csv_field]) if($def = $defaults[$csv_field])
{ {
list( $addr,$trans ) = explode($PSep,$def,2); list($addr,$trans) = explode($PSep,$def,2);
$GLOBALS['phpgw']->template->set_var('trans',$trans); $GLOBALS['phpgw']->template->set_var('trans',$trans);
$GLOBALS['phpgw']->template->set_var('addr_fields',str_replace('="'.$addr.'">','="'.$addr.'" selected>',$addr_name_options)); $GLOBALS['phpgw']->template->set_var('addr_fields',str_replace('="'.$addr.'">','="'.$addr.'" selected>',$addr_name_options));
} }
@ -204,53 +204,53 @@
rename($old,$csvfile); rename($old,$csvfile);
$hiddenvars .= '<input type="hidden" name="csvfile" value="'.$csvfile.'">'; $hiddenvars .= '<input type="hidden" name="csvfile" value="'.$csvfile.'">';
$help_on_trans = "<a name='help'><b>How to use Translation's</b><p>". $help_on_trans = "<a name='help'><b>How to use Translation's</b><p>".
"Translations enable you to change / adapt the content of each CSV field for your needs. <br>". "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>". "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 ". "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>". "usefull for the last pair, as they are worked from left to right.<p>".
"First example: <b>1${ASep}private${PSep}public</b><br>". "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>". "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). ". "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 ". "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>". "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>". "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.). ". "It will read a date of the form '2001-05-20 08:00:00.00000000000000000' (and many more, see the regular expr.). ".
"The&nbsp;[&nbsp;.:-]-separated fields are read and assigned in different order to @mktime(). Please note to use ". "The&nbsp;[&nbsp;.:-]-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.) ". "${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>". "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 ". "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>". "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>". "<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 ". "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>". "<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 ". "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: ". "csv-field 'Note' (which gots already assingned to the description) and construct a short subject: ".
"<b>@substr(${CPre}Note$CPos,0,60).' ...'</b><p>". "<b>@substr(${CPre}Note$CPos,0,60).' ...'</b><p>".
"Their is one important user-function for the Info Log:<br>". "Their is one important user-function for the Info Log:<br>".
"<b>@addr_id(${CPre}NFamily$CPos,${CPre}NGiven$CPos,${CPre}Company$CPos)</b> ". "<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 ". "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 ". "<i>NFamily</i> AND (<i>NGiven</i> OR <i>Company</i>). This is necessary to link your imported InfoLog-entrys ".
"with the addressbook.<br>". "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 ". "<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>". "will be automaticaly added.<p>".
"I hope that helped to understand the features, if not <a href='mailto:RalfBecker@outdoor-training.de'>ask</a>."; "I hope that helped to understand the features, if not <a href='mailto:RalfBecker@outdoor-training.de'>ask</a>.";
$GLOBALS['phpgw']->template->set_var('help_on_trans',lang($help_on_trans)); // I don't think anyone will translate this $GLOBALS['phpgw']->template->set_var('help_on_trans',lang($help_on_trans)); // I don't think anyone will translate this
break; break;
case 'import': case 'import':
$fp=fopen($csvfile,"r"); $fp=fopen($csvfile,'rb');
$csv_fields = fgetcsv($fp,8000,$fieldsep); $csv_fields = fgetcsv($fp,8000,$fieldsep);
$csv_fields[] = 'no CSV 1'; // eg. for static assignments $csv_fields[] = 'no CSV 1'; // eg. for static assignments
$csv_fields[] = 'no CSV 2'; $csv_fields[] = 'no CSV 2';
$csv_fields[] = 'no CSV 3'; $csv_fields[] = 'no CSV 3';
$addr_fields = array_diff($addr_fields,array( '' )); // throw away empty / not assigned entrys $addr_fields = array_diff($addr_fields,array('')); // throw away empty / not assigned entrys
$defaults = array(); $defaults = array();
while (list($csv_idx,$addr) = each($addr_fields)) while(list($csv_idx,$addr) = each($addr_fields))
{ // convert $trans[$csv_idx] into array of pattern => value { // convert $trans[$csv_idx] into array of pattern => value
$defaults[$csv_fields[$csv_idx]] = $addr; $defaults[$csv_fields[$csv_idx]] = $addr;
if ($trans[$csv_idx]) if($trans[$csv_idx])
{ {
$defaults[$csv_fields[$csv_idx]] .= $PSep.$trans[$csv_idx]; $defaults[$csv_fields[$csv_idx]] .= $PSep.$trans[$csv_idx];
} }
@ -263,17 +263,17 @@
$log = "<table border=1>\n\t<tr><td>#</td>\n"; $log = "<table border=1>\n\t<tr><td>#</td>\n";
reset($addr_fields); reset($addr_fields);
while (list($csv_idx,$addr) = each($addr_fields)) while(list($csv_idx,$addr) = each($addr_fields))
{ // convert $trans[$csv_idx] into array of pattern => value { // convert $trans[$csv_idx] into array of pattern => value
// if (!$debug) echo "<p>$csv_idx: ".$csv_fields[$csv_idx].": $addr".($trans[$csv_idx] ? ': '.$trans[$csv_idx] : '')."</p>"; // if (!$debug) echo "<p>$csv_idx: ".$csv_fields[$csv_idx].": $addr".($trans[$csv_idx] ? ': '.$trans[$csv_idx] : '')."</p>";
$pat_reps = explode($PSep,stripslashes($trans[$csv_idx])); $pat_reps = explode($PSep,stripslashes($trans[$csv_idx]));
$replaces = ''; $values = ''; $replaces = ''; $values = '';
if ($pat_reps[0] != '') if($pat_reps[0] != '')
{ {
while (list($k,$pat_rep) = each($pat_reps)) while(list($k,$pat_rep) = each($pat_reps))
{ {
list($pattern,$replace) = explode($ASep,$pat_rep,2); list($pattern,$replace) = explode($ASep,$pat_rep,2);
if ($replace == '') if($replace == '')
{ {
$replace = $pattern; $pattern = '^.*$'; $replace = $pattern; $pattern = '^.*$';
} }
@ -288,42 +288,47 @@
} }
$log .= "\t\t<td><b>$addr</b></td>\n"; $log .= "\t\t<td><b>$addr</b></td>\n";
} }
if ($start < 1) $start = 1; if($start < 1)
for ($i = 1; $i < $start && fgetcsv($fp,8000,$fieldsep); ++$i); // overread lines before our start-record {
$start = 1;
}
for($i = 1; $i < $start && fgetcsv($fp,8000,$fieldsep); ++$i); // overread lines before our start-record
for ($anz = 0; $anz < $max && ($fields = fgetcsv($fp,8000,$fieldsep)); ++$anz) for($anz = 0; $anz < $max && ($fields = fgetcsv($fp,8000,$fieldsep)); ++$anz)
{ {
$log .= "\t</tr><tr><td>".($start+$anz)."</td>\n"; $log .= "\t</tr><tr><td>".($start+$anz)."</td>\n";
reset($addr_fields); $values = array(); reset($addr_fields); $values = array();
while (list($csv_idx,$addr) = each($addr_fields)) while(list($csv_idx,$addr) = each($addr_fields))
{ {
//echo "<p>$csv: $addr".($trans[$csv] ? ': '.$trans[$csv] : '')."</p>"; //echo "<p>$csv: $addr".($trans[$csv] ? ': '.$trans[$csv] : '')."</p>";
$val = $fields[$csv_idx]; $val = $fields[$csv_idx];
if (isset($trans[$csv_idx])) if(isset($trans[$csv_idx]))
{ {
$trans_csv = $trans[$csv_idx]; $trans_csv = $trans[$csv_idx];
while (list($pattern,$replace) = each($trans_csv)) while(list($pattern,$replace) = each($trans_csv))
{ {
if (ereg((string) $pattern,$val)) if(ereg((string) $pattern,$val))
{ {
// echo "<p>csv_idx='$csv_idx',info='$addr',trans_csv=".dump_array($trans_csv).",ereg_replace('$pattern','$replace','$val') = "; // 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); $val = ereg_replace((string) $pattern,str_replace($VPre,'\\',$replace),(string) $val);
// echo "'$val'</p>"; // echo "'$val'</p>";
$reg = $CPreReg.'([a-zA-Z_0-9]+)'.$CPosReg; $reg = $CPreReg.'([a-zA-Z_0-9]+)'.$CPosReg;
while (ereg($reg,$val,$vars)) while(ereg($reg,$val,$vars))
{ // expand all CSV fields { // expand all CSV fields
$val = str_replace($CPre.$vars[1].$CPos,$val[0] == '@' ? "'".addslashes($fields[index($vars[1],$csv_fields)])."'" : $fields[index($vars[1],$csv_fields)],$val); $val = str_replace($CPre . $vars[1] . $CPos, $val[0] == '@' ? "'"
. addslashes($fields[index($vars[1], $csv_fields)])
. "'" : $fields[index($vars[1], $csv_fields)], $val);
} }
if ($val[0] == '@') if($val[0] == '@')
{ {
$val = 'return '.substr($val,1).';'; $val = 'return '.substr($val,1).';';
// echo "<p>eval('$val')="; // echo "<p>eval('$val')=";
$val = eval($val); $val = eval($val);
// echo "'$val'</p>"; // echo "'$val'</p>";
} }
if ($pattern[0] != '@' || $val) if($pattern[0] != '@' || $val)
{ {
break; break;
} }
@ -336,7 +341,7 @@
} }
// if (!isset($values['datecreated'])) $values['datecreated'] = $values['startdate']; // if (!isset($values['datecreated'])) $values['datecreated'] = $values['startdate'];
if (!$debug) if(!$debug)
{ {
$GLOBALS['phpgw']->contacts->add( $values['owner'] ? $values['owner'] : $GLOBALS['phpgw_info']['user']['account_id'], $GLOBALS['phpgw']->contacts->add( $values['owner'] ? $values['owner'] : $GLOBALS['phpgw_info']['user']['account_id'],
$values,$values['access'],$values['cat_id']); $values,$values['access'],$values['cat_id']);
@ -345,9 +350,9 @@
} }
$log .= "\t</tr>\n</table>\n"; $log .= "\t</tr>\n</table>\n";
$GLOBALS['phpgw']->template->set_var('anz_imported',$debug ? lang( '%1 records read (not yet imported, you may go back and uncheck Test Import)', $GLOBALS['phpgw']->template->set_var('anz_imported',$debug ? lang('%1 records read (not yet imported, you may go back and uncheck Test Import)',
$anz,'<a href="javascript:history.back()">','</a>' ) : $anz,'<a href="javascript:history.back()">','</a>') :
lang( '%1 records imported',$anz )); lang('%1 records imported',$anz));
$GLOBALS['phpgw']->template->set_var('log',$log); $GLOBALS['phpgw']->template->set_var('log',$log);
$GLOBALS['phpgw']->template->parse('importedhandle','imported'); $GLOBALS['phpgw']->template->parse('importedhandle','imported');
break; break;

View File

@ -15,9 +15,9 @@
// Only Modify the $file and $title variables..... // Only Modify the $file and $title variables.....
$file = Array $file = Array
( (
'Site Configuration' => $GLOBALS['phpgw']->link('/index.php','menuaction=admin.uiconfig.index&appname=' . $appname), 'Site Configuration' => $GLOBALS['phpgw']->link('/index.php','menuaction=admin.uiconfig.index&appname=' . $appname),
'Edit custom fields' => $GLOBALS['phpgw']->link('/index.php','menuaction=addressbook.uifields.index'), 'Edit custom fields' => $GLOBALS['phpgw']->link('/index.php','menuaction=addressbook.uifields.index'),
'Global Categories' => $GLOBALS['phpgw']->link('/index.php','menuaction=admin.uicategories.index&appname=' . $appname . '&global_cats=True') 'Global Categories' => $GLOBALS['phpgw']->link('/index.php','menuaction=admin.uicategories.index&appname=' . $appname . '&global_cats=True')
); );
//Do not modify below this line //Do not modify below this line
display_section($appname,$appname,$file); display_section($appname,$appname,$file);

View File

@ -20,6 +20,7 @@
$setup_info['addressbook']['author'] = 'Joseph Engo, Miles Lott'; $setup_info['addressbook']['author'] = 'Joseph Engo, Miles Lott';
$setup_info['addressbook']['note'] = 'The phpgwapi manages contact data. Addressbook manages servers for its remote capability.'; $setup_info['addressbook']['note'] = 'The phpgwapi manages contact data. Addressbook manages servers for its remote capability.';
/* Tables */ /* Tables */
$setup_info['addressbook']['tables'][] = 'phpgw_addressbook_servers'; $setup_info['addressbook']['tables'][] = 'phpgw_addressbook_servers';
@ -36,7 +37,7 @@
/* Dependencies for this app to work */ /* Dependencies for this app to work */
$setup_info['addressbook']['depends'][] = array( $setup_info['addressbook']['depends'][] = array(
'appname' => 'phpgwapi', 'appname' => 'phpgwapi',
'versions' => Array('0.9.15', '0.9.16') 'versions' => Array('0.9.15', '0.9.16')
); );
?> ?>