Enable extrafields for customer order, proposal and invoice lines. This

feature was developed for 3.5 but was disabled (hidden) because of
a bug not possible to fix enough quickly for 3.5.0 release.
This commit is contained in:
Laurent Destailleur
2014-02-16 23:51:29 +01:00
parent 935b30470d
commit abc96b51fa
11 changed files with 62 additions and 50 deletions

View File

@@ -22,6 +22,9 @@ Fix: Page load not ending when large number of thirdparies. We
combo feature that is root cause of problem. combo feature that is root cause of problem.
Fix: [ bug #1231 ] PDF always generated in interventions Fix: [ bug #1231 ] PDF always generated in interventions
Fix: Be sure there is no duplicate default rib. Fix: Be sure there is no duplicate default rib.
Fix: Enable extrafields for customer order, proposal and invoice lines. This feature
was developed for 3.5 but was disabled (hidden) because of a bug not possible to
fix enough quickly for 3.5.0 release.
***** ChangeLog for 3.5 compared to 3.4.* ***** ***** ChangeLog for 3.5 compared to 3.4.* *****
For users: For users:

View File

@@ -665,7 +665,7 @@ else if (($action == 'addline' || $action == 'addline_predef') && $user->rights-
//Extrafields //Extrafields
$extrafieldsline = new ExtraFields($db); $extrafieldsline = new ExtraFields($db);
$extralabelsline =$extrafieldsline->fetch_name_optionals_label($object->table_element_line); $extralabelsline =$extrafieldsline->fetch_name_optionals_label($object->table_element_line);
$array_option = $extrafieldsline->getOptionalsFromPost($extralabelsline); $array_option = $extrafieldsline->getOptionalsFromPost($extralabelsline,$predef);
//Unset extrafield //Unset extrafield
if (is_array($extralabelsline)) if (is_array($extralabelsline))
{ {

View File

@@ -599,7 +599,7 @@ else if ($action == 'addline' && $user->rights->commande->creer)
//Extrafields //Extrafields
$extrafieldsline = new ExtraFields($db); $extrafieldsline = new ExtraFields($db);
$extralabelsline =$extrafieldsline->fetch_name_optionals_label($object->table_element_line); $extralabelsline =$extrafieldsline->fetch_name_optionals_label($object->table_element_line);
$array_option = $extrafieldsline->getOptionalsFromPost($extralabelsline); $array_option = $extrafieldsline->getOptionalsFromPost($extralabelsline,$predef);
//Unset extrafield //Unset extrafield
if (is_array($extralabelsline)) if (is_array($extralabelsline))
{ {
@@ -613,12 +613,12 @@ else if ($action == 'addline' && $user->rights->commande->creer)
if ((empty($idprod) || GETPOST('usenewaddlineform')) && ($price_ht < 0) && ($qty < 0)) if ((empty($idprod) || GETPOST('usenewaddlineform')) && ($price_ht < 0) && ($qty < 0))
{ {
setEventMessage($langs->trans('ErrorBothFieldCantBeNegative', $langs->transnoentitiesnoconv('UnitPriceHT'), $langs->transnoentitiesnoconv('Qty')), 'errors'); setEventMessage($langs->trans('ErrorBothFieldCantBeNegative', $langs->transnoentitiesnoconv('UnitPriceHT'), $langs->transnoentitiesnoconv('Qty')), 'errors');
$error = true; $error++;
} }
if (empty($idprod) && GETPOST('type') < 0) if (empty($idprod) && GETPOST('type') < 0)
{ {
setEventMessage($langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv('Type')), 'errors'); setEventMessage($langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv('Type')), 'errors');
$error = true; $error++;
} }
if ((empty($idprod) || GETPOST('usenewaddlineform')) && (!($price_ht >= 0) || $price_ht == '')) // Unit price can be 0 but not '' if ((empty($idprod) || GETPOST('usenewaddlineform')) && (!($price_ht >= 0) || $price_ht == '')) // Unit price can be 0 but not ''
{ {
@@ -628,12 +628,12 @@ else if ($action == 'addline' && $user->rights->commande->creer)
if ($qty == '') if ($qty == '')
{ {
setEventMessage($langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv('Qty')), 'errors'); setEventMessage($langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv('Qty')), 'errors');
$error = true; $error++;
} }
if (empty($idprod) && empty($product_desc)) if (empty($idprod) && empty($product_desc))
{ {
setEventMessage($langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv('Description')), 'errors'); setEventMessage($langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv('Description')), 'errors');
$error = true; $error++;
} }
if (! $error && ($qty >= 0) && (! empty($product_desc) || ! empty($idprod))) if (! $error && ($qty >= 0) && (! empty($product_desc) || ! empty($idprod)))
@@ -2484,7 +2484,7 @@ else
} }
// Create bill and Classify billed // Create bill and Classify billed
// Note: Even if module invoice is not enabled, we should be able to use button "Classified billed" // Note: Even if module invoice is not enabled, we should be able to use button "Classified billed"
if ($object->statut > 0 && ! $object->billed) if ($object->statut > 0 && ! $object->billed)
{ {
if (! empty($conf->facture->enabled) && $user->rights->facture->creer && empty($conf->global->WORKFLOW_DISABLE_CREATE_INVOICE_FROM_ORDER)) if (! empty($conf->facture->enabled) && $user->rights->facture->creer && empty($conf->global->WORKFLOW_DISABLE_CREATE_INVOICE_FROM_ORDER))

View File

@@ -1157,13 +1157,13 @@ else if (($action == 'addline' || $action == 'addline_predef') && $user->rights-
//Extrafields //Extrafields
$extrafieldsline = new ExtraFields($db); $extrafieldsline = new ExtraFields($db);
$extralabelsline =$extrafieldsline->fetch_name_optionals_label($object->table_element_line); $extralabelsline =$extrafieldsline->fetch_name_optionals_label($object->table_element_line);
$array_option = $extrafieldsline->getOptionalsFromPost($extralabelsline); $array_option = $extrafieldsline->getOptionalsFromPost($extralabelsline,$predef);
//Unset extrafield //Unset extrafield
if (is_array($extralabelsline)) if (is_array($extralabelsline))
{ {
// Get extra fields // Get extra fields
foreach ($extralabelsline as $key => $value) { foreach ($extralabelsline as $key => $value) {
unset($_POST["options_".$key]); unset($_POST["options_".$key.$predef]);
} }
} }

View File

@@ -2236,13 +2236,14 @@ abstract class CommonObject
/** /**
* Function to show lines of extrafields with output datas * Function to show lines of extrafields with output datas
* *
* @param object $extrafields extrafield Object * @param object $extrafields Extrafield Object
* @param string $mode Show output (view) or input (edit) for extrafield * @param string $mode Show output (view) or input (edit) for extrafield
* @param array $params optionnal parameters * @param array $params Optionnal parameters
* @param string $keyprefix Prefix string to add into name and id of field (can be used to avoid duplicate names)
* *
* @return string * @return string
*/ */
function showOptionals($extrafields,$mode='view',$params=0) function showOptionals($extrafields, $mode='view', $params=0, $keyprefix='')
{ {
global $_POST; global $_POST;
@@ -2310,7 +2311,7 @@ abstract class CommonObject
$out .= $extrafields->showOutputField($key,$value); $out .= $extrafields->showOutputField($key,$value);
break; break;
case "edit": case "edit":
$out .= $extrafields->showInputField($key,$value); $out .= $extrafields->showInputField($key,$value,'',$keyprefix);
break; break;
} }

View File

@@ -571,14 +571,15 @@ class ExtraFields
/** /**
* Return HTML string to put an input field into a page * Return HTML string to put an input field into a page
* *
* @param string $key Key of attribute * @param string $key Key of attribute
* @param string $value Value to show (for date type it must be in timestamp format) * @param string $value Value to show (for date type it must be in timestamp format)
* @param string $moreparam To add more parametes on html input tag * @param string $moreparam To add more parametes on html input tag
* @return void * @param string $keyprefix Prefix string to add into name and id of field (can be used to avoid duplicate names)
* @return void
*/ */
function showInputField($key,$value,$moreparam='') function showInputField($key,$value,$moreparam='',$keyprefix='')
{ {
global $conf,$langs; global $conf,$langs;
@@ -620,23 +621,23 @@ class ExtraFields
if(!$required && $value == '') if(!$required && $value == '')
$value = '-1'; $value = '-1';
$out = $formstat->select_date($value, 'options_'.$key, $showtime, $showtime, $required, '', 1, 1, 1, 0, 1); $out = $formstat->select_date($value, 'options_'.$key.$keyprefix, $showtime, $showtime, $required, '', 1, 1, 1, 0, 1);
//$out='<input type="text" name="options_'.$key.'" size="'.$showsize.'" maxlength="'.$newsize.'" value="'.$value.'"'.($moreparam?$moreparam:'').'>'; // TODO Missing to add $moreparam
} }
elseif (in_array($type,array('int'))) elseif (in_array($type,array('int')))
{ {
$tmp=explode(',',$size); $tmp=explode(',',$size);
$newsize=$tmp[0]; $newsize=$tmp[0];
$out='<input type="text" class="flat" name="options_'.$key.'" size="'.$showsize.'" maxlength="'.$newsize.'" value="'.$value.'"'.($moreparam?$moreparam:'').'>'; $out='<input type="text" class="flat" name="options_'.$key.$keyprefix.'" size="'.$showsize.'" maxlength="'.$newsize.'" value="'.$value.'"'.($moreparam?$moreparam:'').'>';
} }
elseif ($type == 'varchar') elseif ($type == 'varchar')
{ {
$out='<input type="text" class="flat" name="options_'.$key.'" size="'.$showsize.'" maxlength="'.$size.'" value="'.$value.'"'.($moreparam?$moreparam:'').'>'; $out='<input type="text" class="flat" name="options_'.$key.$keyprefix.'" size="'.$showsize.'" maxlength="'.$size.'" value="'.$value.'"'.($moreparam?$moreparam:'').'>';
} }
elseif ($type == 'text') elseif ($type == 'text')
{ {
require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
$doleditor=new DolEditor('options_'.$key,$value,'',200,'dolibarr_notes','In',false,false,! empty($conf->fckeditor->enabled) && $conf->global->FCKEDITOR_ENABLE_SOCIETE,5,100); $doleditor=new DolEditor('options_'.$key.$keyprefix,$value,'',200,'dolibarr_notes','In',false,false,! empty($conf->fckeditor->enabled) && $conf->global->FCKEDITOR_ENABLE_SOCIETE,5,100);
$out=$doleditor->Create(1); $out=$doleditor->Create(1);
} }
elseif ($type == 'boolean') elseif ($type == 'boolean')
@@ -647,30 +648,30 @@ class ExtraFields
} else { } else {
$checked=' value="1" '; $checked=' value="1" ';
} }
$out='<input type="checkbox" class="flat" name="options_'.$key.'" '.$checked.' '.($moreparam?$moreparam:'').'>'; $out='<input type="checkbox" class="flat" name="options_'.$key.$keyprefix.'" '.$checked.' '.($moreparam?$moreparam:'').'>';
} }
elseif ($type == 'mail') elseif ($type == 'mail')
{ {
$out='<input type="text" class="flat" name="options_'.$key.'" size="32" value="'.$value.'">'; $out='<input type="text" class="flat" name="options_'.$key.$keyprefix.'" size="32" value="'.$value.'" '.($moreparam?$moreparam:'').'>';
} }
elseif ($type == 'phone') elseif ($type == 'phone')
{ {
$out='<input type="text" class="flat" name="options_'.$key.'" size="20" value="'.$value.'">'; $out='<input type="text" class="flat" name="options_'.$key.$keyprefix.'" size="20" value="'.$value.'" '.($moreparam?$moreparam:'').'>';
} }
elseif ($type == 'price') elseif ($type == 'price')
{ {
$out='<input type="text" class="flat" name="options_'.$key.'" size="6" value="'.price($value).'"> '.$langs->getCurrencySymbol($conf->currency); $out='<input type="text" class="flat" name="options_'.$key.$keyprefix.'" size="6" value="'.price($value).'" '.($moreparam?$moreparam:'').'> '.$langs->getCurrencySymbol($conf->currency);
} }
elseif ($type == 'double') elseif ($type == 'double')
{ {
if (!empty($value)) { if (!empty($value)) {
$value=price($value); $value=price($value);
} }
$out='<input type="text" class="flat" name="options_'.$key.'" size="6" value="'.$value.'"> '; $out='<input type="text" class="flat" name="options_'.$key.$keyprefix.'" size="6" value="'.$value.'" '.($moreparam?$moreparam:'').'> ';
} }
elseif ($type == 'select') elseif ($type == 'select')
{ {
$out='<select class="flat" name="options_'.$key.'">'; $out='<select class="flat" name="options_'.$key.$keyprefix.'" '.($moreparam?$moreparam:'').'>';
foreach ($param['options'] as $key=>$val ) foreach ($param['options'] as $key=>$val )
{ {
list($val, $parent) = explode('|', $val); list($val, $parent) = explode('|', $val);
@@ -683,7 +684,7 @@ class ExtraFields
} }
elseif ($type == 'sellist') elseif ($type == 'sellist')
{ {
$out='<select class="flat" name="options_'.$key.'">'; $out='<select class="flat" name="options_'.$key.$keyprefix.'" '.($moreparam?$moreparam:'').'>';
if (is_array($param['options'])) if (is_array($param['options']))
{ {
$param_list=array_keys($param['options']); $param_list=array_keys($param['options']);
@@ -820,7 +821,7 @@ class ExtraFields
foreach ($param['options'] as $keyopt=>$val ) foreach ($param['options'] as $keyopt=>$val )
{ {
$out.='<input class="flat" type="checkbox" name="options_'.$key.'[]"'; $out.='<input class="flat" type="checkbox" name="options_'.$key.$keyprefix.'[]" '.($moreparam?$moreparam:'');
$out.=' value="'.$keyopt.'"'; $out.=' value="'.$keyopt.'"';
if ((is_array($value_arr)) && in_array($keyopt,$value_arr)) { if ((is_array($value_arr)) && in_array($keyopt,$value_arr)) {
@@ -837,7 +838,7 @@ class ExtraFields
$out=''; $out='';
foreach ($param['options'] as $keyopt=>$val ) foreach ($param['options'] as $keyopt=>$val )
{ {
$out.='<input class="flat" type="radio" name="options_'.$key.'"'; $out.='<input class="flat" type="radio" name="options_'.$key.$keyprefix.'" '.($moreparam?$moreparam:'');
$out.=' value="'.$keyopt.'"'; $out.=' value="'.$keyopt.'"';
$out.= ($value==$keyopt?'checked="checked"':''); $out.= ($value==$keyopt?'checked="checked"':'');
$out.='/>'.$val.'<br>'; $out.='/>'.$val.'<br>';
@@ -1085,9 +1086,10 @@ class ExtraFields
* return array_options array for object by extrafields value (using for data send by forms) * return array_options array for object by extrafields value (using for data send by forms)
* *
* @param array $extralabels $array of extrafields * @param array $extralabels $array of extrafields
* @param string $keyprefix Prefix string to add into name and id of field (can be used to avoid duplicate names)
* @return int 1 if array_options set / 0 if no value * @return int 1 if array_options set / 0 if no value
*/ */
function getOptionalsFromPost($extralabels) function getOptionalsFromPost($extralabels,$keyprefix='')
{ {
global $_POST; global $_POST;
@@ -1102,23 +1104,24 @@ class ExtraFields
if (in_array($key_type,array('date','datetime'))) if (in_array($key_type,array('date','datetime')))
{ {
// Clean parameters // Clean parameters
$value_key=dol_mktime($_POST["options_".$key."hour"], $_POST["options_".$key."min"], 0, $_POST["options_".$key."month"], $_POST["options_".$key."day"], $_POST["options_".$key."year"]); $value_key=dol_mktime($_POST["options_".$key.$keyprefix."hour"], $_POST["options_".$key.$keyprefix."min"], 0, $_POST["options_".$key.$keyprefix."month"], $_POST["options_".$key.$keyprefix."day"], $_POST["options_".$key.$keyprefix."year"]);
} }
else if (in_array($key_type,array('checkbox'))) else if (in_array($key_type,array('checkbox')))
{ {
$value_arr=GETPOST("options_".$key); $value_arr=GETPOST("options_".$key.$keyprefix);
$value_key=implode($value_arr,','); $value_key=implode($value_arr,',');
} }
else if (in_array($key_type,array('price','double'))) else if (in_array($key_type,array('price','double')))
{ {
$value_arr=GETPOST("options_".$key); $value_arr=GETPOST("options_".$key.$keyprefix);
$value_key=price2num($value_arr); $value_key=price2num($value_arr);
} }
else else
{ {
$value_key=GETPOST("options_".$key); $value_key=GETPOST("options_".$key.$keyprefix);
} }
$array_options["options_".$key]=$value_key;
$array_options["options_".$key]=$value_key; // No keyprefix here. keyprefix is used only for read.
} }
return $array_options; return $array_options;

View File

@@ -132,13 +132,10 @@ function invoice_admin_prepare_head($object)
$head[$h][2] = 'attributes'; $head[$h][2] = 'attributes';
$h++; $h++;
if ($conf->global->MAIN_FEATURES_LEVEL >= 2) // FIXME This feature will works when form for predefined and free product will be merged, otherwise there is duplicate fields with same name
{
$head[$h][0] = DOL_URL_ROOT.'/compta/facture/admin/facturedet_cust_extrafields.php'; $head[$h][0] = DOL_URL_ROOT.'/compta/facture/admin/facturedet_cust_extrafields.php';
$head[$h][1] = $langs->trans("ExtraFieldsLines"); $head[$h][1] = $langs->trans("ExtraFieldsLines");
$head[$h][2] = 'attributeslines'; $head[$h][2] = 'attributeslines';
$h++; $h++;
}
complete_head_from_modules($conf,$langs,$object,$head,$h,'invoice_admin','remove'); complete_head_from_modules($conf,$langs,$object,$head,$h,'invoice_admin','remove');

View File

@@ -138,13 +138,10 @@ function order_admin_prepare_head($object)
$head[$h][2] = 'attributes'; $head[$h][2] = 'attributes';
$h++; $h++;
if ($conf->global->MAIN_FEATURES_LEVEL >= 2) // FIXME This feature will works when form for predefined and free product will be merged, otherwise there is duplicate fields with same name
{
$head[$h][0] = DOL_URL_ROOT.'/admin/orderdet_extrafields.php'; $head[$h][0] = DOL_URL_ROOT.'/admin/orderdet_extrafields.php';
$head[$h][1] = $langs->trans("ExtraFieldsLines"); $head[$h][1] = $langs->trans("ExtraFieldsLines");
$head[$h][2] = 'attributeslines'; $head[$h][2] = 'attributeslines';
$h++; $h++;
}
complete_head_from_modules($conf,$langs,$object,$head,$h,'order_admin','remove'); complete_head_from_modules($conf,$langs,$object,$head,$h,'order_admin','remove');

View File

@@ -136,13 +136,10 @@ function propal_admin_prepare_head($object)
$head[$h][2] = 'attributes'; $head[$h][2] = 'attributes';
$h++; $h++;
if ($conf->global->MAIN_FEATURES_LEVEL >= 2) // FIXME This feature will works when form for predefined and free product will be merged, otherwise there is duplicate fields with same name
{
$head[$h][0] = DOL_URL_ROOT.'/comm/admin/propaldet_extrafields.php'; $head[$h][0] = DOL_URL_ROOT.'/comm/admin/propaldet_extrafields.php';
$head[$h][1] = $langs->trans("ExtraFieldsLines"); $head[$h][1] = $langs->trans("ExtraFieldsLines");
$head[$h][2] = 'attributeslines'; $head[$h][2] = 'attributeslines';
$h++; $h++;
}
complete_head_from_modules($conf,$langs,$object,$head,$h,'propal_admin','remove'); complete_head_from_modules($conf,$langs,$object,$head,$h,'propal_admin','remove');

View File

@@ -126,13 +126,20 @@ else {
<input type="text" size="5" name="buying_price" class="flat" value="<?php echo (isset($_POST["buying_price"])?$_POST["buying_price"]:''); ?>"> <input type="text" size="5" name="buying_price" class="flat" value="<?php echo (isset($_POST["buying_price"])?$_POST["buying_price"]:''); ?>">
</td> </td>
<?php <?php
$colspan++;
$coldisplay++;
if ($user->rights->margins->creer) if ($user->rights->margins->creer)
{ {
if (! empty($conf->global->DISPLAY_MARGIN_RATES)) { if (! empty($conf->global->DISPLAY_MARGIN_RATES)) {
echo '<td align="right" class="nowrap"><input type="text" size="2" name="np_marginRate" value="'.(isset($_POST["np_marginRate"])?$_POST["np_marginRate"]:'').'"><span class="hideonsmartphone">%</span></td>'; echo '<td align="right" class="nowrap"><input type="text" size="2" name="np_marginRate" value="'.(isset($_POST["np_marginRate"])?$_POST["np_marginRate"]:'').'"><span class="hideonsmartphone">%</span></td>';
$colspan++;
$coldisplay++;
} }
if (! empty($conf->global->DISPLAY_MARK_RATES)) { if (! empty($conf->global->DISPLAY_MARK_RATES)) {
echo '<td align="right" class="nowrap"><input type="text" size="2" name="np_markRate" value="'.(isset($_POST["np_markRate"])?$_POST["np_markRate"]:'').'"><span class="hideonsmartphone">%</span></td>'; echo '<td align="right" class="nowrap"><input type="text" size="2" name="np_markRate" value="'.(isset($_POST["np_markRate"])?$_POST["np_markRate"]:'').'"><span class="hideonsmartphone">%</span></td>';
$colspan++;
$coldisplay++;
} }
} }
else else
@@ -164,7 +171,7 @@ else {
$newline = new FactureLigne($this->db); $newline = new FactureLigne($this->db);
} }
if (is_object($newline)) { if (is_object($newline)) {
print $newline->showOptionals($extrafieldsline,'edit',array('style'=>$bcnd[$var],'colspan'=>$coldisplay+8)); print $newline->showOptionals($extrafieldsline, 'edit', array('style'=>$bcnd[$var], 'colspan'=>$coldisplay+8));
} }
} }
?> ?>

View File

@@ -134,13 +134,20 @@ else {
<input type="text" size="5" id="buying_price_predef" name="buying_price_predef" class="flat" value="<?php echo (isset($_POST["buying_price_predef"])?$_POST["buying_price_predef"]:''); ?>"> <input type="text" size="5" id="buying_price_predef" name="buying_price_predef" class="flat" value="<?php echo (isset($_POST["buying_price_predef"])?$_POST["buying_price_predef"]:''); ?>">
</td> </td>
<?php <?php
$colspan++;
$coldisplay++;
if ($user->rights->margins->creer) if ($user->rights->margins->creer)
{ {
if (! empty($conf->global->DISPLAY_MARGIN_RATES)) { if (! empty($conf->global->DISPLAY_MARGIN_RATES)) {
echo '<td align="right"><input type="text" size="2" name="np_marginRate_predef" value="'.(isset($_POST["np_marginRate_predef"])?$_POST["np_marginRate_predef"]:'').'">%</td>'; echo '<td align="right"><input type="text" size="2" name="np_marginRate_predef" value="'.(isset($_POST["np_marginRate_predef"])?$_POST["np_marginRate_predef"]:'').'">%</td>';
$colspan++;
$coldisplay++;
} }
if (! empty($conf->global->DISPLAY_MARK_RATES)) { if (! empty($conf->global->DISPLAY_MARK_RATES)) {
echo '<td align="right"><input type="text" size="2" name="np_markRate_predef" value="'.(isset($_POST["np_markRate_predef"])?$_POST["np_markRate_predef"]:'').'">%</td>'; echo '<td align="right"><input type="text" size="2" name="np_markRate_predef" value="'.(isset($_POST["np_markRate_predef"])?$_POST["np_markRate_predef"]:'').'">%</td>';
$colspan++;
$coldisplay++;
} }
} }
else else
@@ -172,7 +179,7 @@ else {
$newline = new FactureLigne($this->db); $newline = new FactureLigne($this->db);
} }
if (is_object($newline)) { if (is_object($newline)) {
print $newline->showOptionals($extrafieldsline,'edit',array('style'=>$bcnd[$var],'colspan'=>$coldisplay+5)); print $newline->showOptionals($extrafieldsline, 'edit', array('style'=>$bcnd[$var],'colspan'=>$coldisplay+5), '_predef');
} }
} }
?> ?>