Work on extralanguages
This commit is contained in:
parent
b407797ca3
commit
33d2b61c19
@ -5054,8 +5054,9 @@ abstract class CommonObject
|
|||||||
* This method is NOT called by method fetch of objects but must be called separately.
|
* This method is NOT called by method fetch of objects but must be called separately.
|
||||||
*
|
*
|
||||||
* @return int <0 if error, 0 if no values of alternative languages to find nor found, 1 if a value was found and loaded
|
* @return int <0 if error, 0 if no values of alternative languages to find nor found, 1 if a value was found and loaded
|
||||||
|
* @see fetch_optionnals()
|
||||||
*/
|
*/
|
||||||
public function fetchValueForAlternateLanguages()
|
public function fetchValuesForExtraLanguages()
|
||||||
{
|
{
|
||||||
// To avoid SQL errors. Probably not the better solution though
|
// To avoid SQL errors. Probably not the better solution though
|
||||||
if (!$this->element) {
|
if (!$this->element) {
|
||||||
@ -5126,7 +5127,7 @@ abstract class CommonObject
|
|||||||
* @param string $onlykey Only the following key is filled. When we make update of only one language field ($action = 'update_languages'), calling page must set this to avoid to have other languages being reset.
|
* @param string $onlykey Only the following key is filled. When we make update of only one language field ($action = 'update_languages'), calling page must set this to avoid to have other languages being reset.
|
||||||
* @return int 1 if array_options set, 0 if no value, -1 if error (field required missing for example)
|
* @return int 1 if array_options set, 0 if no value, -1 if error (field required missing for example)
|
||||||
*/
|
*/
|
||||||
public function setValuesForAlternateLanguages($onlykey = '')
|
public function setValuesForExtraLanguages($onlykey = '')
|
||||||
{
|
{
|
||||||
global $_POST, $langs;
|
global $_POST, $langs;
|
||||||
|
|
||||||
@ -5214,6 +5215,7 @@ abstract class CommonObject
|
|||||||
* @param int $rowid Id of line. Use the id of object if not defined. Deprecated. Function must be called without parameters.
|
* @param int $rowid Id of line. Use the id of object if not defined. Deprecated. Function must be called without parameters.
|
||||||
* @param array $optionsArray Array resulting of call of extrafields->fetch_name_optionals_label(). Deprecated. Function must be called without parameters.
|
* @param array $optionsArray Array resulting of call of extrafields->fetch_name_optionals_label(). Deprecated. Function must be called without parameters.
|
||||||
* @return int <0 if error, 0 if no values of extrafield to find nor found, 1 if an attribute is found and value loaded
|
* @return int <0 if error, 0 if no values of extrafield to find nor found, 1 if an attribute is found and value loaded
|
||||||
|
* @see fetchValuesForExtraLanguages()
|
||||||
*/
|
*/
|
||||||
public function fetch_optionals($rowid = null, $optionsArray = null)
|
public function fetch_optionals($rowid = null, $optionsArray = null)
|
||||||
{
|
{
|
||||||
@ -5357,7 +5359,7 @@ abstract class CommonObject
|
|||||||
* @param string $trigger If defined, call also the trigger (for example COMPANY_MODIFY)
|
* @param string $trigger If defined, call also the trigger (for example COMPANY_MODIFY)
|
||||||
* @param User $userused Object user
|
* @param User $userused Object user
|
||||||
* @return int -1=error, O=did nothing, 1=OK
|
* @return int -1=error, O=did nothing, 1=OK
|
||||||
* @see updateExtraField(), setValueFrom()
|
* @see insertExtraLanguages(), updateExtraField(), setValueFrom()
|
||||||
*/
|
*/
|
||||||
public function insertExtraFields($trigger = '', $userused = null)
|
public function insertExtraFields($trigger = '', $userused = null)
|
||||||
{
|
{
|
||||||
@ -5635,6 +5637,130 @@ abstract class CommonObject
|
|||||||
else return 0;
|
else return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add/Update all extra fields values for the current object.
|
||||||
|
* Data to describe values to insert/update are stored into $this->array_options=array('options_codeforfield1'=>'valueforfield1', 'options_codeforfield2'=>'valueforfield2', ...)
|
||||||
|
* This function delete record with all extrafields and insert them again from the array $this->array_options.
|
||||||
|
*
|
||||||
|
* @param string $trigger If defined, call also the trigger (for example COMPANY_MODIFY)
|
||||||
|
* @param User $userused Object user
|
||||||
|
* @return int -1=error, O=did nothing, 1=OK
|
||||||
|
* @see insertExtraFields(), updateExtraField(), setValueFrom()
|
||||||
|
*/
|
||||||
|
public function insertExtraLanguages($trigger = '', $userused = null)
|
||||||
|
{
|
||||||
|
global $conf, $langs, $user;
|
||||||
|
|
||||||
|
if (empty($userused)) $userused = $user;
|
||||||
|
|
||||||
|
$error = 0;
|
||||||
|
|
||||||
|
if (!empty($conf->global->MAIN_EXTRALANGUAGES_DISABLED)) return 0; // For avoid conflicts if trigger used
|
||||||
|
|
||||||
|
if (is_array($this->array_languages))
|
||||||
|
{
|
||||||
|
$new_array_languages = $this->array_languages;
|
||||||
|
|
||||||
|
foreach ($new_array_languages as $key => $value)
|
||||||
|
{
|
||||||
|
$attributeKey = $key;
|
||||||
|
$attributeType = $this->fields[$attributeKey]['type'];
|
||||||
|
$attributeLabel = $this->fields[$attributeKey]['label'];
|
||||||
|
|
||||||
|
//dol_syslog("attributeLabel=".$attributeLabel, LOG_DEBUG);
|
||||||
|
//dol_syslog("attributeType=".$attributeType, LOG_DEBUG);
|
||||||
|
|
||||||
|
switch ($attributeType)
|
||||||
|
{
|
||||||
|
case 'int':
|
||||||
|
if (!is_numeric($value) && $value != '')
|
||||||
|
{
|
||||||
|
$this->errors[] = $langs->trans("ExtraLanguageHasWrongValue", $attributeLabel);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
elseif ($value == '')
|
||||||
|
{
|
||||||
|
$new_array_languages[$key] = null;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'double':
|
||||||
|
$value = price2num($value);
|
||||||
|
if (!is_numeric($value) && $value != '')
|
||||||
|
{
|
||||||
|
dol_syslog($langs->trans("ExtraLanguageHasWrongValue")." sur ".$attributeLabel."(".$value."is not '".$attributeType."')", LOG_DEBUG);
|
||||||
|
$this->errors[] = $langs->trans("ExtraLanguageHasWrongValue", $attributeLabel);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
elseif ($value == '')
|
||||||
|
{
|
||||||
|
$new_array_languages[$key] = null;
|
||||||
|
}
|
||||||
|
//dol_syslog("double value"." sur ".$attributeLabel."(".$value." is '".$attributeType."')", LOG_DEBUG);
|
||||||
|
$new_array_languages[$key] = $value;
|
||||||
|
break;
|
||||||
|
/*case 'select': // Not required, we chosed value='0' for undefined values
|
||||||
|
if ($value=='-1')
|
||||||
|
{
|
||||||
|
$this->array_options[$key] = null;
|
||||||
|
}
|
||||||
|
break;*/
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->db->begin();
|
||||||
|
|
||||||
|
$table_element = $this->table_element;
|
||||||
|
if ($table_element == 'categorie') $table_element = 'categories'; // For compatibility
|
||||||
|
|
||||||
|
dol_syslog(get_class($this)."::insertExtraLanguages delete then insert", LOG_DEBUG);
|
||||||
|
|
||||||
|
foreach($new_array_languages as $key => $langcodearray) { // $key = 'name', 'town', ...
|
||||||
|
foreach($langcodearray as $langcode => $value) {
|
||||||
|
|
||||||
|
$sql_del = "DELETE FROM ".MAIN_DB_PREFIX."object_lang";
|
||||||
|
$sql_del .= " WHERE fk_object = ".$this->id." AND property = '".$this->db->escape($key)."' AND type_object = '".$this->db->escape($table_element)."'";
|
||||||
|
$sql_del .= " AND lang = '".$this->db->escape($langcode)."'";
|
||||||
|
$this->db->query($sql_del);
|
||||||
|
|
||||||
|
if ($value !== '') {
|
||||||
|
$sql = "INSERT INTO ".MAIN_DB_PREFIX."object_lang (fk_object, property, type_object, lang, value";
|
||||||
|
$sql .= ") VALUES (".$this->id.", '".$this->db->escape($key)."', '".$this->db->escape($table_element)."', '".$this->db->escape($langcode)."', '".$this->db->escape($value)."'";
|
||||||
|
$sql .= ")";
|
||||||
|
|
||||||
|
$resql = $this->db->query($sql);
|
||||||
|
if (!$resql)
|
||||||
|
{
|
||||||
|
$this->error = $this->db->lasterror();
|
||||||
|
$error++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$error && $trigger)
|
||||||
|
{
|
||||||
|
// Call trigger
|
||||||
|
$this->context = array('extralanguagesaddupdate'=>1);
|
||||||
|
$result = $this->call_trigger($trigger, $userused);
|
||||||
|
if ($result < 0) $error++;
|
||||||
|
// End call trigger
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($error)
|
||||||
|
{
|
||||||
|
$this->db->rollback();
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$this->db->commit();
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Update an extra field value for the current object.
|
* Update an extra field value for the current object.
|
||||||
* Data to describe values to update are stored into $this->array_options=array('options_codeforfield1'=>'valueforfield1', 'options_codeforfield2'=>'valueforfield2', ...)
|
* Data to describe values to update are stored into $this->array_options=array('options_codeforfield1'=>'valueforfield1', 'options_codeforfield2'=>'valueforfield2', ...)
|
||||||
@ -5643,7 +5769,7 @@ abstract class CommonObject
|
|||||||
* @param string $trigger If defined, call also the trigger (for example COMPANY_MODIFY)
|
* @param string $trigger If defined, call also the trigger (for example COMPANY_MODIFY)
|
||||||
* @param User $userused Object user
|
* @param User $userused Object user
|
||||||
* @return int -1=error, O=did nothing, 1=OK
|
* @return int -1=error, O=did nothing, 1=OK
|
||||||
* @see setValueFrom(), insertExtraFields()
|
* @see updateExtraLanguages(), setValueFrom(), insertExtraFields()
|
||||||
*/
|
*/
|
||||||
public function updateExtraField($key, $trigger = null, $userused = null)
|
public function updateExtraField($key, $trigger = null, $userused = null)
|
||||||
{
|
{
|
||||||
@ -5661,7 +5787,7 @@ abstract class CommonObject
|
|||||||
$langs->load('admin');
|
$langs->load('admin');
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php';
|
||||||
$extrafields = new ExtraFields($this->db);
|
$extrafields = new ExtraFields($this->db);
|
||||||
$target_extrafields = $extrafields->fetch_name_optionals_label($this->table_element);
|
$extrafields->fetch_name_optionals_label($this->table_element);
|
||||||
|
|
||||||
$value = $this->array_options["options_".$key];
|
$value = $this->array_options["options_".$key];
|
||||||
|
|
||||||
@ -5765,6 +5891,29 @@ abstract class CommonObject
|
|||||||
else return 0;
|
else return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update an extra language value for the current object.
|
||||||
|
* Data to describe values to update are stored into $this->array_options=array('options_codeforfield1'=>'valueforfield1', 'options_codeforfield2'=>'valueforfield2', ...)
|
||||||
|
*
|
||||||
|
* @param string $key Key of the extrafield (without starting 'options_')
|
||||||
|
* @param string $trigger If defined, call also the trigger (for example COMPANY_MODIFY)
|
||||||
|
* @param User $userused Object user
|
||||||
|
* @return int -1=error, O=did nothing, 1=OK
|
||||||
|
* @see updateExtraFields(), insertExtraLanguages()
|
||||||
|
*/
|
||||||
|
public function updateExtraLanguages($key, $trigger = null, $userused = null)
|
||||||
|
{
|
||||||
|
global $conf, $langs, $user;
|
||||||
|
|
||||||
|
if (empty($userused)) $userused = $user;
|
||||||
|
|
||||||
|
$error = 0;
|
||||||
|
|
||||||
|
if (!empty($conf->global->MAIN_EXTRALANGUAGES_DISABLED)) return 0; // For avoid conflicts if trigger used
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return HTML string to put an input field into a page
|
* Return HTML string to put an input field into a page
|
||||||
|
|||||||
@ -345,12 +345,12 @@ class Form
|
|||||||
|
|
||||||
$valuetoshow = GETPOSTISSET('field-'.$object->element."-".$fieldname."-".$langcode) ? GETPOST('field-'.$object->element.'-'.$fieldname."-".$langcode, $check) : '';
|
$valuetoshow = GETPOSTISSET('field-'.$object->element."-".$fieldname."-".$langcode) ? GETPOST('field-'.$object->element.'-'.$fieldname."-".$langcode, $check) : '';
|
||||||
if (empty($valuetoshow)) {
|
if (empty($valuetoshow)) {
|
||||||
$object->fetchValueForAlternateLanguages();
|
$object->fetchValuesForExtraLanguages();
|
||||||
//var_dump($object->array_languages);
|
//var_dump($object->array_languages);
|
||||||
$valuetoshow = $object->array_languages[$fieldname][$langcode];
|
$valuetoshow = $object->array_languages[$fieldname][$langcode];
|
||||||
}
|
}
|
||||||
|
|
||||||
$s=picto_from_langcode($conf->global->PDF_USE_ALSO_LANGUAGE_CODE, 'class="pictoforlang"');
|
$s=picto_from_langcode($conf->global->PDF_USE_ALSO_LANGUAGE_CODE, 'class="pictoforlang paddingright"');
|
||||||
$result .= $s;
|
$result .= $s;
|
||||||
if ($typeofdata == 'textarea') {
|
if ($typeofdata == 'textarea') {
|
||||||
$result .= '<textarea name="field-'.$object->element."-".$fieldname."-".$langcode.'" id="'.$fieldname."-".$langcode.'" class="'.$morecss.'" rows="'.ROWS_2.'" wrap="soft">';
|
$result .= '<textarea name="field-'.$object->element."-".$fieldname."-".$langcode.'" id="'.$fieldname."-".$langcode.'" class="'.$morecss.'" rows="'.ROWS_2.'" wrap="soft">';
|
||||||
|
|||||||
@ -491,7 +491,7 @@ if (empty($reshook))
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Fill array 'array_languages' with data from add form
|
// Fill array 'array_languages' with data from add form
|
||||||
$ret = $object->setValuesForAlternateLanguages();
|
$ret = $object->setValuesForExtraLanguages();
|
||||||
if ($ret < 0)
|
if ($ret < 0)
|
||||||
{
|
{
|
||||||
$error++;
|
$error++;
|
||||||
@ -1852,7 +1852,9 @@ else
|
|||||||
|
|
||||||
// Name
|
// Name
|
||||||
print '<tr><td class="titlefieldcreate">'.$form->editfieldkey('ThirdPartyName', 'name', '', $object, 0, 'string', '', 1).'</td>';
|
print '<tr><td class="titlefieldcreate">'.$form->editfieldkey('ThirdPartyName', 'name', '', $object, 0, 'string', '', 1).'</td>';
|
||||||
print '<td colspan="3"><input type="text" class="minwidth300" maxlength="128" name="name" id="name" value="'.dol_escape_htmltag($object->name).'" autofocus="autofocus"></td></tr>';
|
print '<td colspan="3"><input type="text" class="minwidth300" maxlength="128" name="name" id="name" value="'.dol_escape_htmltag($object->name).'" autofocus="autofocus">';
|
||||||
|
print $form->widgetForTranslation("name", $object, $permissiontoadd, 'string', 'alpahnohtml', 'minwidth300');
|
||||||
|
print '</td></tr>';
|
||||||
|
|
||||||
// Alias names (commercial, trademark or alias names)
|
// Alias names (commercial, trademark or alias names)
|
||||||
print '<tr id="name_alias"><td><label for="name_alias_input">'.$langs->trans('AliasNames').'</label></td>';
|
print '<tr id="name_alias"><td><label for="name_alias_input">'.$langs->trans('AliasNames').'</label></td>';
|
||||||
@ -1961,18 +1963,21 @@ else
|
|||||||
print '<tr><td class="tdtop">'.$form->editfieldkey('Address', 'address', '', $object, 0).'</td>';
|
print '<tr><td class="tdtop">'.$form->editfieldkey('Address', 'address', '', $object, 0).'</td>';
|
||||||
print '<td colspan="3"><textarea name="address" id="address" class="quatrevingtpercent" rows="3" wrap="soft">';
|
print '<td colspan="3"><textarea name="address" id="address" class="quatrevingtpercent" rows="3" wrap="soft">';
|
||||||
print $object->address;
|
print $object->address;
|
||||||
print '</textarea></td></tr>';
|
print '</textarea>';
|
||||||
|
print $form->widgetForTranslation("address", $object, $permissiontoadd, 'textarea', 'alphanohtml', 'quatrevingtpercent');
|
||||||
|
print '</td></tr>';
|
||||||
|
|
||||||
// Zip / Town
|
// Zip / Town
|
||||||
print '<tr><td>'.$form->editfieldkey('Zip', 'zipcode', '', $object, 0).'</td><td>';
|
print '<tr><td>'.$form->editfieldkey('Zip', 'zipcode', '', $object, 0).'</td><td>';
|
||||||
print $formcompany->select_ziptown($object->zip, 'zipcode', array('town', 'selectcountry_id', 'state_id'), 0, 0, '', 'maxwidth50onsmartphone');
|
print $formcompany->select_ziptown($object->zip, 'zipcode', array('town', 'selectcountry_id', 'state_id'), 0, 0, '', 'maxwidth50onsmartphone');
|
||||||
print '</td><td>'.$form->editfieldkey('Town', 'town', '', $object, 0).'</td><td>';
|
print '</td><td>'.$form->editfieldkey('Town', 'town', '', $object, 0).'</td><td>';
|
||||||
print $formcompany->select_ziptown($object->town, 'town', array('zipcode', 'selectcountry_id', 'state_id'));
|
print $formcompany->select_ziptown($object->town, 'town', array('zipcode', 'selectcountry_id', 'state_id'));
|
||||||
|
print $form->widgetForTranslation("town", $object, $permissiontoadd, 'string', 'alphanohtml', 'maxwidth100 quatrevingtpercent');
|
||||||
print '</td></tr>';
|
print '</td></tr>';
|
||||||
|
|
||||||
// Country
|
// Country
|
||||||
print '<tr><td>'.$form->editfieldkey('Country', 'selectcounty_id', '', $object, 0).'</td><td colspan="3">';
|
print '<tr><td>'.$form->editfieldkey('Country', 'selectcounty_id', '', $object, 0).'</td><td colspan="3">';
|
||||||
print $form->select_country((GETPOST('country_id') != '' ?GETPOST('country_id') : $object->country_id), 'country_id');
|
print $form->select_country((GETPOSTISSET('country_id') ? GETPOST('country_id') : $object->country_id), 'country_id');
|
||||||
if ($user->admin) print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionarySetup"), 1);
|
if ($user->admin) print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionarySetup"), 1);
|
||||||
print '</td></tr>';
|
print '</td></tr>';
|
||||||
|
|
||||||
|
|||||||
@ -1403,6 +1403,15 @@ class Societe extends CommonObject
|
|||||||
$error++;
|
$error++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// Actions on extra languages
|
||||||
|
if (!$error && empty($conf->global->MAIN_EXTRALANGUAGES_DISABLED)) // For avoid conflicts if trigger used
|
||||||
|
{
|
||||||
|
$result = $this->insertExtraLanguages();
|
||||||
|
if ($result < 0)
|
||||||
|
{
|
||||||
|
$error++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!$error && $call_trigger)
|
if (!$error && $call_trigger)
|
||||||
{
|
{
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user