diff --git a/htdocs/admin/company.php b/htdocs/admin/company.php
index bd84c1d633946..3b52fb5b875b5 100644
--- a/htdocs/admin/company.php
+++ b/htdocs/admin/company.php
@@ -67,7 +67,19 @@
dolibarr_set_const($db, "MAIN_INFO_SOCIETE_ADDRESS", GETPOST("address",'nohtml'),'chaine',0,'',$conf->entity);
dolibarr_set_const($db, "MAIN_INFO_SOCIETE_TOWN", GETPOST("town",'nohtml'),'chaine',0,'',$conf->entity);
dolibarr_set_const($db, "MAIN_INFO_SOCIETE_ZIP", GETPOST("zipcode",'alpha'),'chaine',0,'',$conf->entity);
- dolibarr_set_const($db, "MAIN_INFO_SOCIETE_STATE", GETPOST("state_id",'alpha'),'chaine',0,'',$conf->entity);
+
+ //dolibarr_set_const($db, "MAIN_INFO_SOCIETE_STATE", GETPOST("state_id",'alpha'),'chaine',0,'',$conf->entity);
+ $tmparray=getState(GETPOST('state_id','int'),'all','',$db,$langs,0);
+ if (! empty($tmparray['id']))
+ {
+ $mysoc->state_id =$tmparray['id'];
+ $mysoc->state_code =$tmparray['code'];
+ $mysoc->state_label=$tmparray['label'];
+
+ $s=$mysoc->state_id.':'.$mysoc->state_code.':'.$mysoc->state_label;
+ dolibarr_set_const($db, "MAIN_INFO_SOCIETE_STATE", $s,'chaine',0,'',$conf->entity);
+ }
+
dolibarr_set_const($db, "MAIN_MONNAIE", GETPOST("currency",'alpha'),'chaine',0,'',$conf->entity);
dolibarr_set_const($db, "MAIN_INFO_SOCIETE_TEL", GETPOST("tel",'alpha'),'chaine',0,'',$conf->entity);
dolibarr_set_const($db, "MAIN_INFO_SOCIETE_FAX", GETPOST("fax",'alpha'),'chaine',0,'',$conf->entity);
@@ -336,7 +348,7 @@
print '
| ';
- $formcompany->select_departement($conf->global->MAIN_INFO_SOCIETE_STATE,$mysoc->country_code,'state_id');
+ $formcompany->select_departement($mysoc->state_id,$mysoc->country_code,'state_id');
print ' |
'."\n";
@@ -721,7 +733,9 @@
print ''.$langs->trans("State").' | ';
- if (! empty($conf->global->MAIN_INFO_SOCIETE_STATE)) print getState($conf->global->MAIN_INFO_SOCIETE_STATE);
+ if ($mysoc->state_id) {
+ print getState($mysoc->state_id,$conf->global->MAIN_SHOW_STATE_CODE,0,$conf->global->MAIN_SHOW_REGION_IN_STATE);
+ }
else print ' ';
print ' |
';
diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php
index 54a907a3c0f6b..6a5d841684e27 100644
--- a/htdocs/core/class/commonobject.class.php
+++ b/htdocs/core/class/commonobject.class.php
@@ -186,7 +186,7 @@ abstract class CommonObject
* @var string
* @see getFullAddress()
*/
- public $country;
+ public $country;
/**
* @var int
* @see getFullAddress(), country
@@ -196,7 +196,32 @@ abstract class CommonObject
* @var string
* @see getFullAddress(), isInEEC(), country
*/
- public $country_code;
+ public $country_code;
+ /**
+ * @var string
+ * @see getFullAddress()
+ */
+ public $state;
+ /**
+ * @var int
+ * @see getFullAddress(), state
+ */
+ public $state_id;
+ /**
+ * @var string
+ * @see getFullAddress(), state
+ */
+ public $state_code;
+ /**
+ * @var string
+ * @see getFullAddress(), region
+ */
+ public $region;
+ /**
+ * @var string
+ * @see getFullAddress(), region
+ */
+ public $region_code;
/**
* @var int
@@ -418,15 +443,25 @@ function getFullName($langs,$option=0,$nameorder=-1,$maxlen=0)
* @param string $sep Separator to use to build string
* @return string Full address string
*/
- function getFullAddress($withcountry=0,$sep="\n")
+ function getFullAddress($withcountry=0,$sep="\n",$withregion=0)
{
if ($withcountry && $this->country_id && (empty($this->country_code) || empty($this->country)))
{
require_once DOL_DOCUMENT_ROOT .'/core/lib/company.lib.php';
$tmparray=getCountry($this->country_id,'all');
$this->country_code=$tmparray['code'];
- $this->country =$tmparray['label'];
- }
+ $this->country =$tmparray['label'];
+ }
+
+ if ($withregion && $this->state_id && (empty($this->state_code) || empty($this->state) || empty($this->region) || empty($this->region_cpde)))
+ {
+ require_once DOL_DOCUMENT_ROOT .'/core/lib/company.lib.php';
+ $tmparray=getState($this->state_id,'all',0,1);
+ $this->state_code =$tmparray['code'];
+ $this->state =$tmparray['label'];
+ $this->region_code =$tmparray['region_code'];
+ $this->region =$tmparray['region'];
+ }
return dol_format_address($this, $withcountry, $sep);
}
@@ -465,7 +500,7 @@ function getBannerAddress($htmlkey, $object)
$out='';
$outdone=0;
- $coords = $this->getFullAddress(1,', ');
+ $coords = $this->getFullAddress(1,', ',$conf->global->MAIN_SHOW_REGION_IN_STATE);
if ($coords)
{
if (! empty($conf->use_javascript_ajax))
@@ -483,7 +518,12 @@ function getBannerAddress($htmlkey, $object)
if (! in_array($this->country_code,$countriesusingstate) && empty($conf->global->MAIN_FORCE_STATE_INTO_ADDRESS) // If MAIN_FORCE_STATE_INTO_ADDRESS is on, state is already returned previously with getFullAddress
&& empty($conf->global->SOCIETE_DISABLE_STATE) && $this->state)
{
- $out.=($outdone?' - ':'').$this->state;
+ if (!empty($conf->global->MAIN_SHOW_REGION_IN_STATE) && $conf->global->MAIN_SHOW_REGION_IN_STATE == 1 && $this->region) {
+ $out.=($outdone?' - ':'').$this->region.' - '.$this->state;
+ }
+ else {
+ $out.=($outdone?' - ':'').$this->state;
+ }
$outdone++;
}
diff --git a/htdocs/core/lib/company.lib.php b/htdocs/core/lib/company.lib.php
index 2f830a245497c..5a6a1bf694432 100644
--- a/htdocs/core/lib/company.lib.php
+++ b/htdocs/core/lib/company.lib.php
@@ -391,13 +391,13 @@ function getCountry($searchkey,$withcode='',$dbtouse=0,$outputlangs='',$entconv=
* @param DoliDB $dbtouse Database handler (using in global way may fail because of conflicts with some autoload features)
* @return string String with state code or state name (Return value is always utf8 encoded and without entities)
*/
-function getState($id,$dbtouse=0)
+function getState($id,$withcode='',$dbtouse=0,$withregion='',$outputlangs='',$entconv=1,$searchlabel='')
{
- global $db,$langs,$conf;
+ global $db,$langs;
if (! is_object($dbtouse)) $dbtouse=$db;
- $sql = "SELECT d.rowid, d.code_departement as code, d.nom as name, d.active, c.label as country, c.code as country_code, r.nom as region_name FROM";
+ $sql = "SELECT d.rowid as id, d.code_departement as code, d.nom as name, d.active, c.label as country, c.code as country_code, r.code_region as region_code, r.nom as region_name FROM";
$sql .= " ".MAIN_DB_PREFIX ."c_departements as d, ".MAIN_DB_PREFIX."c_regions as r,".MAIN_DB_PREFIX."c_country as c";
$sql .= " WHERE d.fk_region=r.code_region and r.fk_pays=c.rowid and d.rowid=".$id;
$sql .= " AND d.active = 1 AND r.active = 1 AND c.active = 1";
@@ -410,22 +410,41 @@ function getState($id,$dbtouse=0)
$obj = $dbtouse->fetch_object($resql);
if ($obj)
{
- if(!empty($conf->global->MAIN_SHOW_STATE_CODE) && $conf->global->MAIN_SHOW_STATE_CODE == 1) {
- if(!empty($conf->global->MAIN_SHOW_REGION_IN_STATE) && $conf->global->MAIN_SHOW_REGION_IN_STATE == 1) {
+ $label=((! empty($obj->name) && $obj->name!='-')?$obj->name:'');
+ if (is_object($outputlangs))
+ {
+ $outputlangs->load("dict");
+ if ($entconv) $label=($obj->code && ($outputlangs->trans("State".$obj->code)!="State".$obj->code))?$outputlangs->trans("State".$obj->code):$label;
+ else $label=($obj->code && ($outputlangs->transnoentitiesnoconv("State".$obj->code)!="State".$obj->code))?$outputlangs->transnoentitiesnoconv("State".$obj->code):$label;
+ }
+
+ if ($withcode == 1) {
+ if ($withregion == 1) {
return $label = $obj->region_name . ' - ' . $obj->code . ' - ' . ($langs->trans($obj->code)!=$obj->code?$langs->trans($obj->code):($obj->name!='-'?$obj->name:''));
}
else {
return $label = $obj->code . ' - ' . ($langs->trans($obj->code)!=$obj->code?$langs->trans($obj->code):($obj->name!='-'?$obj->name:''));
}
}
- else {
- if(!empty($conf->global->MAIN_SHOW_REGION_IN_STATE) && $conf->global->MAIN_SHOW_REGION_IN_STATE == 1) {
+ else if ($withcode == 2) {
+ if ($withregion == 1) {
return $label = $obj->region_name . ' - ' . ($langs->trans($obj->code)!=$obj->code?$langs->trans($obj->code):($obj->name!='-'?$obj->name:''));
}
else {
return $label = ($langs->trans($obj->code)!=$obj->code?$langs->trans($obj->code):($obj->name!='-'?$obj->name:''));
}
}
+ else if ($withcode === 'all') {
+ if ($withregion == 1) {
+ return array('id'=>$obj->id,'code'=>$obj->code,'label'=>$label,'region_code'=>$obj->region_code,'region'=>$obj->region_name);
+ }
+ else {
+ return array('id'=>$obj->id,'code'=>$obj->code,'label'=>$label);
+ }
+ }
+ else {
+ return $label;
+ }
}
else
{
diff --git a/htdocs/societe/class/societe.class.php b/htdocs/societe/class/societe.class.php
index 55a328e25382a..91b5ef3205cf9 100644
--- a/htdocs/societe/class/societe.class.php
+++ b/htdocs/societe/class/societe.class.php
@@ -3050,16 +3050,29 @@ function setMysoc(Conf $conf)
$this->address=empty($conf->global->MAIN_INFO_SOCIETE_ADDRESS)?'':$conf->global->MAIN_INFO_SOCIETE_ADDRESS;
$this->zip=empty($conf->global->MAIN_INFO_SOCIETE_ZIP)?'':$conf->global->MAIN_INFO_SOCIETE_ZIP;
$this->town=empty($conf->global->MAIN_INFO_SOCIETE_TOWN)?'':$conf->global->MAIN_INFO_SOCIETE_TOWN;
- $this->state_id=empty($conf->global->MAIN_INFO_SOCIETE_STATE)?'':$conf->global->MAIN_INFO_SOCIETE_STATE;
- /* Disabled: we don't want any SQL request into method setMySoc. This method set object from env only.
- If we need label, label must be loaded by output that need it from id (label depends on output language)
- require_once DOL_DOCUMENT_ROOT .'/core/lib/company.lib.php';
- if (!empty($conf->global->MAIN_INFO_SOCIETE_STATE)) {
- $this->state_id= $conf->global->MAIN_INFO_SOCIETE_STATE;
- $this->state = getState($this->state_id);
- }
- */
+ // We define state_id, state_code and state
+ $state_id=$state_code=$state_label='';
+ if (! empty($conf->global->MAIN_INFO_SOCIETE_STATE))
+ {
+ $tmp=explode(':',$conf->global->MAIN_INFO_SOCIETE_STATE);
+ $state_id=$tmp[0];
+ if (! empty($tmp[1])) // If $conf->global->MAIN_INFO_SOCIETE_STATE is "id:code:label" or "id:code:label:region_code:region"
+ {
+ $state_code=$tmp[1];
+ $state_label=$tmp[2];
+ }
+ else // For backward compatibility
+ {
+ include_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
+ $state_code=getState($state_id,2,$this->db); // This need a SQL request, but it's the old feature that should not be used anymore
+ $state_label=getState($state_id,0,$this->db); // This need a SQL request, but it's the old feature that should not be used anymore
+ }
+ }
+ $this->state_id=$state_id;
+ $this->state_code=$state_code;
+ $this->state=$state_label;
+ if (is_object($langs)) $this->state=($langs->trans('State'.$state_code)!='State'.$state_code)?$langs->trans('State'.$state_code):$state_label;
$this->note_private=empty($conf->global->MAIN_INFO_SOCIETE_NOTE)?'':$conf->global->MAIN_INFO_SOCIETE_NOTE;