diff --git a/htdocs/admin/dict.php b/htdocs/admin/dict.php
index 7cd6e608459..de11fa55802 100644
--- a/htdocs/admin/dict.php
+++ b/htdocs/admin/dict.php
@@ -22,63 +22,176 @@
*/
require("./pre.inc.php");
-$acts[0] = "add";
-$acts[1] = "delete";
-$actl[0] = "Activer";
-$actl[1] = "Désactiver";
-
-$active = 1;
-
-// Mettre ici tous les caractéristiques des dictionnaires editables
-
-// Nom des tables des dictionnaires
-$tabid[1] = "llx_c_forme_juridique";
-$tabid[2] = "llx_c_departements";
-$tabid[3] = "llx_c_regions";
-$tabid[4] = "llx_c_pays";
-$tabid[5] = "llx_c_civilite";
-
-// Libellé des dictionnaires
-$tabnom[1] = "Formes juridiques";
-$tabnom[2] = "Départements/Provinces/Cantons";
-$tabnom[3] = "Régions";
-$tabnom[4] = "Pays";
-$tabnom[5] = "Titres de civilité";
-
-// Requete pour extraction des données des dictionnaires
-$tabsql[1] = "SELECT f.code, f.libelle, p.libelle as pays, f.active FROM llx_c_forme_juridique as f, llx_c_pays as p WHERE f.fk_pays=p.rowid";
-$tabsql[2] = "SELECT d.rowid as rowid, d.code_departement as code , d.nom as libelle, p.libelle as pays, d.active FROM llx_c_departements as d, llx_c_regions as r, llx_c_pays as p WHERE d.fk_region=r.code_region and r.fk_pays=p.rowid";
-$tabsql[3] = "SELECT r.rowid as rowid, code_region as code , nom as libelle, p.libelle as pays, r.active FROM llx_c_regions as r, llx_c_pays as p WHERE r.fk_pays=p.rowid";
-$tabsql[4] = "SELECT rowid, code, libelle, active FROM llx_c_pays";
-$tabsql[5] = "SELECT c.rowid AS rowid, c.civilite AS libelle, c.active FROM llx_c_civilite AS c, llx_c_pays AS p WHERE c.fk_pays = p.rowid";
-
-// Tri par defaut
-$tabsqlsort[1]="p.rowid, code ASC";
-$tabsqlsort[2]="p.rowid, code ASC";
-$tabsqlsort[3]="p.rowid, code ASC";
-$tabsqlsort[4]="code ASC";
-$tabsqlsort[5]="libelle ASC";
-
-// Champs à afficher
-$tabfield[1] = "code,libelle,pays";
-$tabfield[2] = "code,libelle,pays";
-$tabfield[3] = "code,libelle,pays";
-$tabfield[4] = "code,libelle";
-$tabfield[5] = "libelle";
-
-
+$langs->load("admin");
if (! $user->admin)
accessforbidden();
-if ($_GET["action"] == 'delete')
+$acts[0] = "activate";
+$acts[1] = "disable";
+$actl[0] = $langs->trans("Activate");
+$actl[1] = $langs->trans("Disable");
+
+$active = 1;
+
+
+// Cette page est une page d'édition générique des dictionnaires de données
+// Mettre ici tous les caractéristiques des dictionnaires
+
+// Nom des tables des dictionnaires
+$tabname[1] = MAIN_DB_PREFIX."c_forme_juridique";
+$tabname[2] = MAIN_DB_PREFIX."c_departements";
+$tabname[3] = MAIN_DB_PREFIX."c_regions";
+$tabname[4] = MAIN_DB_PREFIX."c_pays";
+$tabname[5] = MAIN_DB_PREFIX."c_civilite";
+$tabname[6] = MAIN_DB_PREFIX."c_actioncomm";
+
+// Libellé des dictionnaires
+$tablib[1] = $langs->trans("DictionnaryCompanyType");
+$tablib[2] = $langs->trans("DictionnaryCanton");
+$tablib[3] = $langs->trans("DictionnaryRegion");
+$tablib[4] = $langs->trans("DictionnaryCountry");
+$tablib[5] = $langs->trans("DictionnaryCivility");
+$tablib[6] = $langs->trans("DictionnaryActions");
+
+// Requete pour extraction des données des dictionnaires
+$tabsql[1] = "SELECT f.rowid as rowid, f.code, f.libelle, p.libelle as pays, f.active FROM llx_c_forme_juridique as f, llx_c_pays as p WHERE f.fk_pays=p.rowid";
+$tabsql[2] = "SELECT d.rowid as rowid, d.code_departement as code , d.nom as libelle, r.nom as region, p.libelle as pays, d.active FROM llx_c_departements as d, llx_c_regions as r, llx_c_pays as p WHERE d.fk_region=r.code_region and r.fk_pays=p.rowid and r.active=1 and p.active=1";
+$tabsql[3] = "SELECT r.rowid as rowid, code_region as code , nom as libelle, p.libelle as pays, r.active FROM llx_c_regions as r, llx_c_pays as p WHERE r.fk_pays=p.rowid and p.active=1";
+$tabsql[4] = "SELECT rowid as rowid, code, libelle, active FROM llx_c_pays";
+$tabsql[5] = "SELECT c.rowid as rowid, c.civilite AS libelle, c.active FROM llx_c_civilite AS c, llx_c_pays AS p WHERE c.fk_pays = p.rowid";
+$tabsql[6] = "SELECT a.id as rowid, a.libelle AS libelle, a.type, a.lang AS lang, a.active FROM llx_c_actioncomm AS a";
+
+// Tri par defaut
+$tabsqlsort[1]="pays, code ASC";
+$tabsqlsort[2]="pays, code ASC";
+$tabsqlsort[3]="pays, code ASC";
+$tabsqlsort[4]="libelle ASC";
+$tabsqlsort[5]="c.libelle ASC";
+$tabsqlsort[6]="lang ASC, a.type ASC";
+
+// Nom des champs en resultat de select pour affichage du dictionnaire
+$tabfield[1] = "code,libelle,pays";
+$tabfield[2] = "code,libelle,region,pays"; // "code,libelle,region,pays"
+$tabfield[3] = "code,libelle,pays";
+$tabfield[4] = "code,libelle";
+$tabfield[5] = "libelle";
+$tabfield[6] = "libelle,type,lang";
+
+// Nom des champs dans la table pour insertion d'un enregistrement
+$tabfieldinsert[1] = "code,libelle,fk_pays";
+$tabfieldinsert[2] = "code_departement,nom,fk_region";
+$tabfieldinsert[3] = "code_region,nom,fk_pays";
+$tabfieldinsert[4] = "code,libelle";
+$tabfieldinsert[5] = "civilite";
+$tabfieldinsert[6] = "libelle,type,lang";
+
+// Nom du rowid si le champ n'est pas de type autoincrément
+$tabrowid[1] = "";
+$tabrowid[2] = "";
+$tabrowid[3] = "";
+$tabrowid[4] = "rowid";
+$tabrowid[5] = "rowid";
+$tabrowid[6] = "id";
+
+
+$msg='';
+
+if ($_POST["actionadd"]) {
+
+ $listfield=split(',',$tabfield[$_POST["id"]]);
+
+ // Verifie que tous les champs sont renseignés
+ $ok=1;
+ foreach ($listfield as $f => $value) {
+ if (! isset($_POST[$value]) || $_POST[$value]=='') {
+ $ok=0;
+ $msg.="Le champ '".$listfield[$f]."' n'est pas renseigné.
";
+ }
+ }
+ // Autres verif
+ if (isset($_POST["code"]) && $_POST["code"]=='0') {
+ $ok=0;
+ $msg.="Le Code ne peut avoir la valeur 0
";
+ }
+ if (isset($_POST["pays"]) && $_POST["pays"]=='0') {
+ $ok=0;
+ $msg.="Le Pays n'a pas été choisi
";
+ }
+
+ // Si verif ok, on ajoute la ligne
+ if ($ok) {
+ if ($tabrowid[$_POST["id"]]) {
+ // Recupere id libre pour insertion
+ $newid=0;
+ $sql = "SELECT max(".$tabrowid[$_POST["id"]].") newid from ".$tabname[$_POST["id"]];
+ $result = $db->query($sql);
+ if ($result)
+ {
+ $obj = $db->fetch_object(0);
+ $newid=($obj->newid + 1);
+
+ } else {
+ dolibarr_print_error($db);
+ }
+ }
+
+ // Add new entry
+ $sql = "INSERT INTO ".$tabname[$_POST["id"]]." (";
+ if ($tabrowid[$_POST["id"]]) $sql.= $tabrowid[$_POST["id"]].",";
+ $sql.= $tabfieldinsert[$_POST["id"]];
+ $sql.=",active)";
+ $sql.= " VALUES(";
+ // Ajoute valeur des champs
+ if ($tabrowid[$_POST["id"]]) $sql.= $newid.",";
+ $i=0;
+ foreach ($listfield as $f => $value) {
+ if ($i) $sql.=",";
+ $sql.="'".$_POST[$value]."'";
+ $i++;
+ }
+ $sql.=",1)";
+
+ $result = $db->query($sql);
+ if (!$result)
+ {
+ if ($db->errno() == $db->ERROR_DUPLICATE) {
+ $msg="Une entrée pour cette clé existe déjà
";
+ }
+ else {
+ dolibarr_print_error($db);
+ }
+ }
+ }
+
+ $_GET["id"]=$_POST["id"]; // Force affichage dictionnaire en cours d'edition
+}
+
+if ($_GET["action"] == 'delete') // delete
{
+ if ($tabrowid[$_GET["id"]]) $rowidcol.= $tabrowid[$_GET["id"]];
+ else $rowidcold.= "rowid";
+
+ $sql = "DELETE from ".$tabname[$_GET["id"]]." WHERE $rowidcol=".$_GET["rowid"];
+
+ $result = $db->query($sql);
+ if (!$result)
+ {
+ dolibarr_print_error($db);
+ }
+}
+
+if ($_GET["action"] == $acts[0]) // activate
+{
+ if ($tabrowid[$_GET["id"]]) $rowidcol.= $tabrowid[$_GET["id"]];
+ else $rowidcold.= "rowid";
+
if ($_GET["rowid"] >0) {
- $sql = "UPDATE ".$tabid[$_GET["id"]]." SET active = 0 WHERE rowid=".$_GET["rowid"];
+ $sql = "UPDATE ".$tabname[$_GET["id"]]." SET active = 1 WHERE $rowidcol=".$_GET["rowid"];
}
elseif ($_GET["code"] >0) {
- $sql = "UPDATE ".$tabid[$_GET["id"]]." SET active = 0 WHERE code=".$_GET["code"];
+ $sql = "UPDATE ".$tabname[$_GET["id"]]." SET active = 1 WHERE code=".$_GET["code"];
}
$result = $db->query($sql);
@@ -87,9 +200,18 @@ if ($_GET["action"] == 'delete')
print $db->error();
}
}
-if ($_GET["action"] == 'add')
+
+if ($_GET["action"] == $acts[1]) // disable
{
- $sql = "UPDATE ".$tabid[$_GET["id"]]." SET active = 1 WHERE rowid=".$_GET["rowid"];
+ if ($tabrowid[$_GET["id"]]) $rowidcol.= $tabrowid[$_GET["id"]];
+ else $rowidcold.= "rowid";
+
+ if ($_GET["rowid"] >0) {
+ $sql = "UPDATE ".$tabname[$_GET["id"]]." SET active = 0 WHERE $rowidcol=".$_GET["rowid"];
+ }
+ elseif ($_GET["code"] >0) {
+ $sql = "UPDATE ".$tabname[$_GET["id"]]." SET active = 0 WHERE code=".$_GET["code"];
+ }
$result = $db->query($sql);
if (!$result)
@@ -102,11 +224,16 @@ if ($_GET["action"] == 'add')
llxHeader();
+
if ($_GET["id"])
{
print_titre($langs->trans("DictionnarySetup"));
print '
';
+ if ($msg) {
+ print $msg.'
';
+ }
+
// Complète requete recherche valeurs avec critere de tri
$sql=$tabsql[$_GET["id"]];
if ($_GET["sortfield"]) {
@@ -125,36 +252,69 @@ if ($_GET["id"])
print '
| '; - print_liste_field_titre(ucfirst($fieldlist[$field]),"dict.php",$fieldlist[$field],"&id=".$_GET["id"]); + print_liste_field_titre($valuetoshow,"dict.php",$fieldlist[$field],"&id=".$_GET["id"]); print ' | '; } print ''; - print_liste_field_titre("Activer/Désactiver","dict.php","active","&id=".$_GET["id"]); + print_liste_field_titre($langs->trans("Activate")."/".$langs->trans("Disable"),"dict.php","active","&id=".$_GET["id"]); print ' | '; + print ''; print ' | ||
| '.$obj->$fieldlist[$field].' | '; + $valuetoshow=$obj->$fieldlist[$field]; + if ($valuetoshow=='all') { + $valuetoshow=$langs->trans('All'); + } + print ''.$valuetoshow.' | '; + } print ''; - if ($obj->code) { + + // Est-ce une entrée du dictionnaire qui peut etre désactivée ? + $iserasable=1; // Oui par defaut + if (isset($obj->code) && ($obj->code == '0' || $obj->code == '')) $iserasable=0; + if ($obj->type && $obj->type == 'system') $iserasable=0; + + if ($iserasable) { print 'rowid.'&code='.$obj->code.'&id='.$_GET["id"].'&action='.$acts[$obj->active].'">'.$actl[$obj->active].''; } else { - print 'rowid.'&code='.$obj->code.'&id='.$_GET["id"].'&action='.$acts[$obj->active].'">'.$actl[$obj->active].''; + print $langs->trans("AlwaysActive"); } print " | "; - + if ($iserasable) { + print ''; + } else { + print ' | '; + } print " |