FIX generating substitution array was corrupting the array_option

This commit is contained in:
Laurent Destailleur 2023-07-22 13:29:00 +02:00
parent d64c51e860
commit 9552346a47
2 changed files with 45 additions and 40 deletions

View file

@ -448,6 +448,7 @@ abstract class CommonDocGenerator
// phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
/**
* Define array with couple substitution key => substitution value
* Note that vars into substitutions array are formatted.
*
* @param Object $object Main object to use as data source
* @param Translate $outputlangs Lang object to use for output
@ -498,14 +499,15 @@ abstract class CommonDocGenerator
$array_key.'_hour'=>dol_print_date($date, 'hour'),
$array_key.'_date'=>dol_print_date($date, 'day'),
$array_key.'_date_rfc'=>dol_print_date($date, 'dayrfc'),
$array_key.'_date_limit'=>(!empty($object->date_lim_reglement) ?dol_print_date($object->date_lim_reglement, 'day') : ''),
$array_key.'_date_end'=>(!empty($object->fin_validite) ?dol_print_date($object->fin_validite, 'day') : ''),
$array_key.'_date_limit'=>(!empty($object->date_lim_reglement) ? dol_print_date($object->date_lim_reglement, 'day') : ''),
$array_key.'_date_limit_rfc'=>(!empty($object->date_lim_reglement) ? dol_print_date($object->date_lim_reglement, 'dayrfc') : ''),
$array_key.'_date_end'=>(!empty($object->fin_validite) ? dol_print_date($object->fin_validite, 'day') : ''),
$array_key.'_date_creation'=>dol_print_date($object->date_creation, 'day'),
$array_key.'_date_modification'=>(!empty($object->date_modification) ?dol_print_date($object->date_modification, 'day') : ''),
$array_key.'_date_validation'=>(!empty($object->date_validation) ?dol_print_date($object->date_validation, 'dayhour') : ''),
$array_key.'_date_approve'=>(!empty($object->date_approve) ?dol_print_date($object->date_approve, 'day') : ''),
$array_key.'_date_delivery_planed'=>(!empty($object->delivery_date) ?dol_print_date($object->delivery_date, 'day') : ''),
$array_key.'_date_close'=>(!empty($object->date_cloture) ?dol_print_date($object->date_cloture, 'dayhour') : ''),
$array_key.'_date_modification'=>(!empty($object->date_modification) ? dol_print_date($object->date_modification, 'day') : ''),
$array_key.'_date_validation'=>(!empty($object->date_validation) ? dol_print_date($object->date_validation, 'dayhour') : ''),
$array_key.'_date_approve'=>(!empty($object->date_approve) ? dol_print_date($object->date_approve, 'day') : ''),
$array_key.'_date_delivery_planed'=>(!empty($object->delivery_date) ? dol_print_date($object->delivery_date, 'day') : ''),
$array_key.'_date_close'=>(!empty($object->date_cloture) ? dol_print_date($object->date_cloture, 'dayhour') : ''),
$array_key.'_payment_mode_code'=>$object->mode_reglement_code,
$array_key.'_payment_mode'=>($outputlangs->transnoentitiesnoconv('PaymentType'.$object->mode_reglement_code) != 'PaymentType'.$object->mode_reglement_code ? $outputlangs->transnoentitiesnoconv('PaymentType'.$object->mode_reglement_code) : $object->mode_reglement),
@ -641,6 +643,7 @@ abstract class CommonDocGenerator
// phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
/**
* Define array with couple substitution key => substitution value
* Note that vars into substitutions array are formatted.
*
* @param Object $line Object line
* @param Translate $outputlangs Lang object to use for output
@ -650,8 +653,6 @@ abstract class CommonDocGenerator
public function get_substitutionarray_lines($line, $outputlangs, $linenumber = 0)
{
// phpcs:enable
global $conf;
$resarray = array(
'line_pos' => $linenumber,
'line_fulldesc'=>doc_getlinedesc($line, $outputlangs),
@ -765,6 +766,7 @@ abstract class CommonDocGenerator
// phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
/**
* Define array with couple substitution key => substitution value
* Note that vars into substitutions array are formatted.
*
* @param Expedition $object Main object to use as data source
* @param Translate $outputlangs Lang object to use for output
@ -831,6 +833,7 @@ abstract class CommonDocGenerator
// phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
/**
* Define array with couple substitution key => substitution value
* Note that vars into substitutions array are formatted.
*
* @param ExpeditionLigne $line Object line
* @param Translate $outputlangs Lang object to use for output
@ -839,7 +842,6 @@ abstract class CommonDocGenerator
public function get_substitutionarray_shipment_lines($line, $outputlangs)
{
// phpcs:enable
global $conf;
dol_include_once('/core/lib/product.lib.php');
$resarray = array(
@ -930,6 +932,7 @@ abstract class CommonDocGenerator
// phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
/**
* Fill array with couple extrafield key => extrafield value
* Note that vars into substitutions array are formatted.
*
* @param Object $object Object with extrafields (must have $object->array_options filled)
* @param array $array_to_fill Substitution array
@ -945,49 +948,51 @@ abstract class CommonDocGenerator
if (is_array($extrafields->attributes[$object->table_element]['label'])) {
foreach ($extrafields->attributes[$object->table_element]['label'] as $key => $label) {
$formatedarrayoption = $object->array_options;
if ($extrafields->attributes[$object->table_element]['type'][$key] == 'price') {
$object->array_options['options_'.$key] = price2num($object->array_options['options_'.$key]);
$object->array_options['options_'.$key.'_currency'] = price($object->array_options['options_'.$key], 0, $outputlangs, 0, 0, -1, $conf->currency);
$formatedarrayoption['options_'.$key] = price2num($formatedarrayoption['options_'.$key]);
$formatedarrayoption['options_'.$key.'_currency'] = price($formatedarrayoption['options_'.$key], 0, $outputlangs, 0, 0, -1, $conf->currency);
//Add value to store price with currency
$array_to_fill = array_merge($array_to_fill, array($array_key.'_options_'.$key.'_currency' => $object->array_options['options_'.$key.'_currency']));
$array_to_fill = array_merge($array_to_fill, array($array_key.'_options_'.$key.'_currency' => $formatedarrayoption['options_'.$key.'_currency']));
} elseif ($extrafields->attributes[$object->table_element]['type'][$key] == 'select') {
$valueofselectkey = $object->array_options['options_'.$key];
$valueofselectkey = $formatedarrayoption['options_'.$key];
if (array_key_exists($valueofselectkey, $extrafields->attributes[$object->table_element]['param'][$key]['options'])) {
$object->array_options['options_'.$key] = $extrafields->attributes[$object->table_element]['param'][$key]['options'][$valueofselectkey];
$formatedarrayoption['options_'.$key] = $extrafields->attributes[$object->table_element]['param'][$key]['options'][$valueofselectkey];
} else {
$object->array_options['options_'.$key] = '';
$formatedarrayoption['options_'.$key] = '';
}
} elseif ($extrafields->attributes[$object->table_element]['type'][$key] == 'checkbox') {
$valArray = explode(',', $object->array_options['options_'.$key]);
$valArray = explode(',', $formatedarrayoption['options_'.$key]);
$output = array();
foreach ($extrafields->attributes[$object->table_element]['param'][$key]['options'] as $keyopt => $valopt) {
if (in_array($keyopt, $valArray)) {
$output[] = $valopt;
}
}
$object->array_options['options_'.$key] = implode(', ', $output);
$formatedarrayoption['options_'.$key] = implode(', ', $output);
} elseif ($extrafields->attributes[$object->table_element]['type'][$key] == 'date') {
if (strlen($object->array_options['options_'.$key]) > 0) {
$date = $object->array_options['options_'.$key];
$object->array_options['options_'.$key] = dol_print_date($date, 'day'); // using company output language
$object->array_options['options_'.$key.'_locale'] = dol_print_date($date, 'day', 'tzserver', $outputlangs); // using output language format
$object->array_options['options_'.$key.'_rfc'] = dol_print_date($date, 'dayrfc'); // international format
if (strlen($formatedarrayoption['options_'.$key]) > 0) {
$date = $formatedarrayoption['options_'.$key];
$formatedarrayoption['options_'.$key] = dol_print_date($date, 'day'); // using company output language
$formatedarrayoption['options_'.$key.'_locale'] = dol_print_date($date, 'day', 'tzserver', $outputlangs); // using output language format
$formatedarrayoption['options_'.$key.'_rfc'] = dol_print_date($date, 'dayrfc'); // international format
} else {
$object->array_options['options_'.$key] = '';
$object->array_options['options_'.$key.'_locale'] = '';
$object->array_options['options_'.$key.'_rfc'] = '';
$formatedarrayoption['options_'.$key] = '';
$formatedarrayoption['options_'.$key.'_locale'] = '';
$formatedarrayoption['options_'.$key.'_rfc'] = '';
}
$array_to_fill = array_merge($array_to_fill, array($array_key.'_options_'.$key.'_locale' => $object->array_options['options_'.$key.'_locale']));
$array_to_fill = array_merge($array_to_fill, array($array_key.'_options_'.$key.'_rfc' => $object->array_options['options_'.$key.'_rfc']));
$array_to_fill = array_merge($array_to_fill, array($array_key.'_options_'.$key.'_locale' => $formatedarrayoption['options_'.$key.'_locale']));
$array_to_fill = array_merge($array_to_fill, array($array_key.'_options_'.$key.'_rfc' => $formatedarrayoption['options_'.$key.'_rfc']));
} elseif ($extrafields->attributes[$object->table_element]['type'][$key] == 'datetime') {
$datetime = $object->array_options['options_'.$key];
$object->array_options['options_'.$key] = ($datetime != "0000-00-00 00:00:00" ?dol_print_date($object->array_options['options_'.$key], 'dayhour') : ''); // using company output language
$object->array_options['options_'.$key.'_locale'] = ($datetime != "0000-00-00 00:00:00" ?dol_print_date($object->array_options['options_'.$key], 'dayhour', 'tzserver', $outputlangs) : ''); // using output language format
$object->array_options['options_'.$key.'_rfc'] = ($datetime != "0000-00-00 00:00:00" ?dol_print_date($object->array_options['options_'.$key], 'dayhourrfc') : ''); // international format
$array_to_fill = array_merge($array_to_fill, array($array_key.'_options_'.$key.'_locale' => $object->array_options['options_'.$key.'_locale']));
$array_to_fill = array_merge($array_to_fill, array($array_key.'_options_'.$key.'_rfc' => $object->array_options['options_'.$key.'_rfc']));
$datetime = $formatedarrayoption['options_'.$key];
$formatedarrayoption['options_'.$key] = ($datetime != "0000-00-00 00:00:00" ? dol_print_date($formatedarrayoption['options_'.$key], 'dayhour') : ''); // using company output language
$formatedarrayoption['options_'.$key.'_locale'] = ($datetime != "0000-00-00 00:00:00" ? dol_print_date($formatedarrayoption['options_'.$key], 'dayhour', 'tzserver', $outputlangs) : ''); // using output language format
$formatedarrayoption['options_'.$key.'_rfc'] = ($datetime != "0000-00-00 00:00:00" ? dol_print_date($formatedarrayoption['options_'.$key], 'dayhourrfc') : ''); // international format
$array_to_fill = array_merge($array_to_fill, array($array_key.'_options_'.$key.'_locale' => $formatedarrayoption['options_'.$key.'_locale']));
$array_to_fill = array_merge($array_to_fill, array($array_key.'_options_'.$key.'_rfc' => $formatedarrayoption['options_'.$key.'_rfc']));
} elseif ($extrafields->attributes[$object->table_element]['type'][$key] == 'link') {
$id = $object->array_options['options_'.$key];
$id = $formatedarrayoption['options_'.$key];
if ($id != "") {
$param = $extrafields->attributes[$object->table_element]['param'][$key];
$param_list = array_keys($param['options']); // $param_list='ObjectName:classPath'
@ -1000,14 +1005,14 @@ abstract class CommonDocGenerator
$tmpobject = new $classname($this->db);
$tmpobject->fetch($id);
// completely replace the id with the linked object name
$object->array_options['options_'.$key] = $tmpobject->name;
$formatedarrayoption['options_'.$key] = $tmpobject->name;
}
}
}
}
if (array_key_exists('options_'.$key, $object->array_options)) {
$array_to_fill = array_merge($array_to_fill, array($array_key.'_options_'.$key => $object->array_options['options_'.$key]));
if (array_key_exists('options_'.$key, $formatedarrayoption)) {
$array_to_fill = array_merge($array_to_fill, array($array_key.'_options_'.$key => $formatedarrayoption['options_'.$key]));
} else {
$array_to_fill = array_merge($array_to_fill, array($array_key.'_options_'.$key => ''));
}

View file

@ -49,7 +49,7 @@ class doc_generic_odt extends ModeleThirdPartyDoc
*/
public function __construct($db)
{
global $conf, $langs, $mysoc;
global $langs, $mysoc;
// Load translation files required by the page
$langs->loadLangs(array("main", "companies"));
@ -203,6 +203,7 @@ class doc_generic_odt extends ModeleThirdPartyDoc
{
// phpcs:enable
global $user, $langs, $conf, $mysoc, $hookmanager;
global $action;
if (empty($srctemplatepath)) {
dol_syslog("doc_generic_odt::write_file parameter srctemplatepath empty", LOG_WARNING);
@ -215,7 +216,6 @@ class doc_generic_odt extends ModeleThirdPartyDoc
$hookmanager = new HookManager($this->db);
}
$hookmanager->initHooks(array('odtgeneration'));
global $action;
if (!is_object($outputlangs)) {
$outputlangs = $langs;