dolibarr 21.0.0-beta
dict.php
Go to the documentation of this file.
1<?php
2/* Copyright (C) 2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
3 * Copyright (C) 2004-2018 Laurent Destailleur <eldy@users.sourceforge.net>
4 * Copyright (C) 2004 Benoit Mortier <benoit.mortier@opensides.be>
5 * Copyright (C) 2005-2017 Regis Houssin <regis.houssin@inodbox.com>
6 * Copyright (C) 2010-2022 Juanjo Menent <jmenent@2byte.es>
7 * Copyright (C) 2011-2021 Philippe Grand <philippe.grand@atoo-net.com>
8 * Copyright (C) 2011 Remy Younes <ryounes@gmail.com>
9 * Copyright (C) 2012-2015 Marcos García <marcosgdf@gmail.com>
10 * Copyright (C) 2012 Christophe Battarel <christophe.battarel@ltairis.fr>
11 * Copyright (C) 2011-2023 Alexandre Spangaro <aspangaro@open-dsi.fr>
12 * Copyright (C) 2015 Ferran Marcet <fmarcet@2byte.es>
13 * Copyright (C) 2016 Raphaël Doursenaud <rdoursenaud@gpcsolutions.fr>
14 * Copyright (C) 2019-2024 Frédéric France <frederic.france@free.fr>
15 * Copyright (C) 2020-2022 Open-Dsi <support@open-dsi.fr>
16 * Copyright (C) 2024 Charlene Benke <charlene@patas-monkey.com>
17 * Copyright (C) 2024 MDW <mdeweerd@users.noreply.github.com>
18 *
19 * This program is free software; you can redistribute it and/or modify
20 * it under the terms of the GNU General Public License as published by
21 * the Free Software Foundation; either version 3 of the License, or
22 * (at your option) any later version.
23 *
24 * This program is distributed in the hope that it will be useful,
25 * but WITHOUT ANY WARRANTY; without even the implied warranty of
26 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
27 * GNU General Public License for more details.
28 *
29 * You should have received a copy of the GNU General Public License
30 * along with this program. If not, see <https://www.gnu.org/licenses/>.
31 */
32
39// Load Dolibarr environment
40require '../main.inc.php';
41require_once DOL_DOCUMENT_ROOT.'/core/class/html.formadmin.class.php';
42require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php';
43require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
44require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
45require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
46require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php';
47require_once DOL_DOCUMENT_ROOT.'/core/class/html.formaccounting.class.php';
48require_once DOL_DOCUMENT_ROOT.'/core/lib/socialnetwork.lib.php';
49
50// constants for IDs of core dictionaries
51const DICT_FORME_JURIDIQUE = 1;
52const DICT_DEPARTEMENTS = 2;
53const DICT_REGIONS = 3;
54const DICT_COUNTRY = 4;
55const DICT_CIVILITY = 5;
56const DICT_ACTIONCOMM = 6;
57const DICT_CHARGESOCIALES = 7;
58const DICT_TYPENT = 8;
59const DICT_CURRENCIES = 9;
60const DICT_TVA = 10;
61const DICT_TYPE_CONTACT = 11;
62const DICT_PAYMENT_TERM = 12;
63const DICT_PAIEMENT = 13;
64const DICT_ECOTAXE = 14;
65const DICT_PAPER_FORMAT = 15;
66const DICT_PROSPECTLEVEL = 16;
67const DICT_TYPE_FEES = 17;
68const DICT_SHIPMENT_MODE = 18;
69const DICT_EFFECTIF = 19;
70const DICT_INPUT_METHOD = 20;
71const DICT_AVAILABILITY = 21;
72const DICT_INPUT_REASON = 22;
73const DICT_REVENUESTAMP = 23;
74const DICT_TYPE_RESOURCE = 24;
75const DICT_TYPE_CONTAINER = 25;
76//const DICT_UNITS = 26;
77const DICT_STCOMM = 27;
78const DICT_HOLIDAY_TYPES = 28;
79const DICT_LEAD_STATUS = 29;
80const DICT_FORMAT_CARDS = 30;
81const DICT_INVOICE_SUBTYPE = 31;
82const DICT_HRM_PUBLIC_HOLIDAY = 32;
83const DICT_HRM_DEPARTMENT = 33;
84const DICT_HRM_FUNCTION = 34;
85const DICT_EXP_TAX_CAT = 35;
86const DICT_EXP_TAX_RANGE = 36;
87const DICT_UNITS = 37;
88const DICT_SOCIALNETWORKS = 38;
89const DICT_PROSPECTCONTACTLEVEL = 39;
90const DICT_STCOMMCONTACT = 40;
91const DICT_TRANSPORT_MODE = 41;
92const DICT_PRODUCT_NATURE = 42;
93const DICT_PRODUCTBATCH_QCSTATUS = 43;
94const DICT_ASSET_DISPOSAL_TYPE = 44;
95
105// Load translation files required by the page
106$langs->loadLangs(array("errors", "admin", "main", "companies", "resource", "holiday", "accountancy", "hrm", "orders", "contracts", "projects", "propal", "bills", "interventions", "ticket"));
107
108$action = GETPOST('action', 'alpha') ? GETPOST('action', 'alpha') : 'view';
109$confirm = GETPOST('confirm', 'alpha');
110
111$id = GETPOSTINT('id');
112$rowid = GETPOST('rowid', 'alpha');
113$entity = GETPOST('entity', 'alpha'); // Do not use GETPOSTINT here. Should be '', 0 or >0.
114$code = GETPOST('code', 'alpha');
115$from = GETPOST('from', 'alpha');
116
117$acts = array();
118$actl = array();
119$acts[0] = "activate";
120$acts[1] = "disable";
121$actl[0] = img_picto($langs->trans("Disabled"), 'switch_off', 'class="size15x"');
122$actl[1] = img_picto($langs->trans("Activated"), 'switch_on', 'class="size15x"');
123
124// Load variable for pagination
125$listoffset = GETPOST('listoffset');
126$listlimit = GETPOST('listlimit') > 0 ? GETPOST('listlimit') : 1000; // To avoid too long dictionaries
127$sortfield = GETPOST('sortfield', 'aZ09comma');
128$sortorder = GETPOST('sortorder', 'aZ09comma');
129$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page");
130if (empty($page) || $page < 0 || GETPOST('button_search', 'alpha') || GETPOST('button_removefilter', 'alpha')) {
131 // If $page is not defined, or '' or -1 or if we click on clear filters
132 $page = 0;
133}
134$offset = $listlimit * $page;
135$pageprev = $page - 1;
136$pagenext = $page + 1;
137
138$search_country_id = GETPOST('search_country_id', 'int');
139$search_code = GETPOST('search_code', 'alpha');
140$search_active = GETPOST('search_active', 'alpha');
141
142// Special case to set a default value for country according to dictionary
143if (!GETPOSTISSET('search_country_id') && $search_country_id == '' && ($id == DICT_DEPARTEMENTS || $id == DICT_REGIONS || $id == DICT_TVA)) { // Not a so good idea to force on current country for all dictionaries. Some tables have entries that are for all countries, we must be able to see them, so this is done for dedicated dictionaries only.
144 $search_country_id = $mysoc->country_id;
145}
146
147// Initialize a technical object to manage hooks of page. Note that conf->hooks_modules contains an array of hook context
148$hookmanager->initHooks(array('admin', 'dictionaryadmin'));
149
150$allowed = $user->admin;
151if ($id == DICT_CHARGESOCIALES && $user->hasRight('accounting', 'chartofaccount')) {
152 $allowed = 1; // Tax page allowed to manager of chart account
153}
154if ($id == DICT_TVA && $user->hasRight('accounting', 'chartofaccount')) {
155 $allowed = 1; // Vat page allowed to manager of chart account
156}
157if ($id == DICT_TYPE_FEES && $user->hasRight('accounting', 'chartofaccount')) {
158 $allowed = 1; // Dictionary with type of expense report and accounting account allowed to manager of chart account
159}
160if (!$allowed) {
162}
163
164$permissiontoadd = $allowed;
165
166
167// This page is a generic page to edit dictionaries
168// Put here declaration of dictionaries properties
169
170// Sort order to show dictionary (0 is space). All other dictionaries (added by modules) will be at end of this.
171$taborder = array(DICT_CURRENCIES, DICT_PAPER_FORMAT, DICT_FORMAT_CARDS, 0, DICT_COUNTRY, DICT_REGIONS, DICT_DEPARTEMENTS, 0, DICT_FORME_JURIDIQUE, DICT_TYPENT, DICT_EFFECTIF, DICT_PROSPECTLEVEL, DICT_PROSPECTCONTACTLEVEL, DICT_STCOMM, DICT_STCOMMCONTACT, DICT_SOCIALNETWORKS, 0, DICT_CIVILITY, DICT_TYPE_CONTACT, 0, DICT_ACTIONCOMM, DICT_TYPE_RESOURCE, 0, DICT_LEAD_STATUS, 0, DICT_HRM_DEPARTMENT, DICT_HRM_FUNCTION, DICT_HRM_PUBLIC_HOLIDAY, DICT_HOLIDAY_TYPES, DICT_TYPE_FEES, DICT_EXP_TAX_CAT, DICT_EXP_TAX_RANGE, 0, DICT_TVA, DICT_INVOICE_SUBTYPE, DICT_REVENUESTAMP, DICT_PAYMENT_TERM, DICT_PAIEMENT, DICT_CHARGESOCIALES, 0, DICT_ECOTAXE, 0, DICT_INPUT_REASON, DICT_INPUT_METHOD, DICT_SHIPMENT_MODE, DICT_AVAILABILITY, DICT_TRANSPORT_MODE, 0, DICT_UNITS, DICT_PRODUCT_NATURE, 0, DICT_PRODUCTBATCH_QCSTATUS, 0, DICT_TYPE_CONTAINER, 0, DICT_ASSET_DISPOSAL_TYPE, 0);
172
173// Name of SQL tables of dictionaries
174$tabname = array();
175$tabname[DICT_FORME_JURIDIQUE] = "c_forme_juridique";
176$tabname[DICT_DEPARTEMENTS] = "c_departements";
177$tabname[DICT_REGIONS] = "c_regions";
178$tabname[DICT_COUNTRY] = "c_country";
179$tabname[DICT_CIVILITY] = "c_civility";
180$tabname[DICT_ACTIONCOMM] = "c_actioncomm";
181$tabname[DICT_CHARGESOCIALES] = "c_chargesociales";
182$tabname[DICT_TYPENT] = "c_typent";
183$tabname[DICT_CURRENCIES] = "c_currencies";
184$tabname[DICT_TVA] = "c_tva";
185$tabname[DICT_TYPE_CONTACT] = "c_type_contact";
186$tabname[DICT_PAYMENT_TERM] = "c_payment_term";
187$tabname[DICT_PAIEMENT] = "c_paiement";
188$tabname[DICT_ECOTAXE] = "c_ecotaxe";
189$tabname[DICT_PAPER_FORMAT] = "c_paper_format";
190$tabname[DICT_PROSPECTLEVEL] = "c_prospectlevel";
191$tabname[DICT_TYPE_FEES] = "c_type_fees";
192$tabname[DICT_SHIPMENT_MODE] = "c_shipment_mode";
193$tabname[DICT_EFFECTIF] = "c_effectif";
194$tabname[DICT_INPUT_METHOD] = "c_input_method";
195$tabname[DICT_AVAILABILITY] = "c_availability";
196$tabname[DICT_INPUT_REASON] = "c_input_reason";
197$tabname[DICT_REVENUESTAMP] = "c_revenuestamp";
198$tabname[DICT_TYPE_RESOURCE] = "c_type_resource";
199$tabname[DICT_TYPE_CONTAINER] = "c_type_container";
200//$tabname[DICT_UNITS]= "c_units";
201$tabname[DICT_STCOMM] = "c_stcomm";
202$tabname[DICT_HOLIDAY_TYPES] = "c_holiday_types";
203$tabname[DICT_LEAD_STATUS] = "c_lead_status";
204$tabname[DICT_FORMAT_CARDS] = "c_format_cards";
205$tabname[DICT_INVOICE_SUBTYPE] = "c_invoice_subtype";
206$tabname[DICT_HRM_PUBLIC_HOLIDAY] = "c_hrm_public_holiday";
207$tabname[DICT_HRM_DEPARTMENT] = "c_hrm_department";
208$tabname[DICT_HRM_FUNCTION] = "c_hrm_function";
209$tabname[DICT_EXP_TAX_CAT] = "c_exp_tax_cat";
210$tabname[DICT_EXP_TAX_RANGE] = "c_exp_tax_range";
211$tabname[DICT_UNITS] = "c_units";
212$tabname[DICT_SOCIALNETWORKS] = "c_socialnetworks";
213$tabname[DICT_PROSPECTCONTACTLEVEL] = "c_prospectcontactlevel";
214$tabname[DICT_STCOMMCONTACT] = "c_stcommcontact";
215$tabname[DICT_TRANSPORT_MODE] = "c_transport_mode";
216$tabname[DICT_PRODUCT_NATURE] = "c_product_nature";
217$tabname[DICT_PRODUCTBATCH_QCSTATUS] = "c_productbatch_qcstatus";
218$tabname[DICT_ASSET_DISPOSAL_TYPE] = "c_asset_disposal_type";
219
220// Dictionary labels
221$tablib = array();
222$tablib[DICT_FORME_JURIDIQUE] = "DictionaryCompanyJuridicalType";
223$tablib[DICT_DEPARTEMENTS] = "DictionaryCanton";
224$tablib[DICT_REGIONS] = "DictionaryRegion";
225$tablib[DICT_COUNTRY] = "DictionaryCountry";
226$tablib[DICT_CIVILITY] = "DictionaryCivility";
227$tablib[DICT_ACTIONCOMM] = "DictionaryActions";
228$tablib[DICT_CHARGESOCIALES] = "DictionarySocialContributions";
229$tablib[DICT_TYPENT] = "DictionaryCompanyType";
230$tablib[DICT_CURRENCIES] = "DictionaryCurrency";
231$tablib[DICT_TVA] = "DictionaryVAT";
232$tablib[DICT_TYPE_CONTACT] = "DictionaryTypeContact";
233$tablib[DICT_PAYMENT_TERM] = "DictionaryPaymentConditions";
234$tablib[DICT_PAIEMENT] = "DictionaryPaymentModes";
235$tablib[DICT_ECOTAXE] = "DictionaryEcotaxe";
236$tablib[DICT_PAPER_FORMAT] = "DictionaryPaperFormat";
237$tablib[DICT_PROSPECTLEVEL] = "DictionaryProspectLevel";
238$tablib[DICT_TYPE_FEES] = "DictionaryFees";
239$tablib[DICT_SHIPMENT_MODE] = "DictionarySendingMethods";
240$tablib[DICT_EFFECTIF] = "DictionaryStaff";
241$tablib[DICT_INPUT_METHOD] = "DictionaryOrderMethods";
242$tablib[DICT_AVAILABILITY] = "DictionaryAvailability";
243$tablib[DICT_INPUT_REASON] = "DictionarySource";
244$tablib[DICT_REVENUESTAMP] = "DictionaryRevenueStamp";
245$tablib[DICT_TYPE_RESOURCE] = "DictionaryResourceType";
246$tablib[DICT_TYPE_CONTAINER] = "DictionaryTypeOfContainer";
247//$tablib[DICT_UNITS]= "DictionaryUnits";
248$tablib[DICT_STCOMM] = "DictionaryProspectStatus";
249$tablib[DICT_HOLIDAY_TYPES] = "DictionaryHolidayTypes";
250$tablib[DICT_LEAD_STATUS] = "DictionaryOpportunityStatus";
251$tablib[DICT_FORMAT_CARDS] = "DictionaryFormatCards";
252$tablib[DICT_INVOICE_SUBTYPE] = "DictionaryInvoiceSubtype";
253$tablib[DICT_HRM_PUBLIC_HOLIDAY] = "DictionaryPublicHolidays";
254$tablib[DICT_HRM_DEPARTMENT] = "DictionaryDepartment";
255$tablib[DICT_HRM_FUNCTION] = "DictionaryFunction";
256$tablib[DICT_EXP_TAX_CAT] = "DictionaryExpenseTaxCat";
257$tablib[DICT_EXP_TAX_RANGE] = "DictionaryExpenseTaxRange";
258$tablib[DICT_UNITS] = "DictionaryMeasuringUnits";
259$tablib[DICT_SOCIALNETWORKS] = "DictionarySocialNetworks";
260$tablib[DICT_PROSPECTCONTACTLEVEL] = "DictionaryProspectContactLevel";
261$tablib[DICT_STCOMMCONTACT] = "DictionaryProspectContactStatus";
262$tablib[DICT_TRANSPORT_MODE] = "DictionaryTransportMode";
263$tablib[DICT_PRODUCT_NATURE] = "DictionaryProductNature";
264$tablib[DICT_PRODUCTBATCH_QCSTATUS] = "DictionaryBatchStatus";
265$tablib[DICT_ASSET_DISPOSAL_TYPE] = "DictionaryAssetDisposalType";
266
267// Requests to extract data
268$tabsql = array();
269$tabsql[DICT_FORME_JURIDIQUE] = "SELECT f.rowid as rowid, f.code, f.libelle, c.code as country_code, c.label as country, f.active FROM ".MAIN_DB_PREFIX."c_forme_juridique as f, ".MAIN_DB_PREFIX."c_country as c WHERE f.fk_pays=c.rowid";
270$tabsql[DICT_DEPARTEMENTS] = "SELECT d.rowid as rowid, d.code_departement as code, d.nom as libelle, d.fk_region as region_id, r.nom as region, c.code as country_code, c.label as country, d.active FROM ".MAIN_DB_PREFIX."c_departements as d, ".MAIN_DB_PREFIX."c_regions as r, ".MAIN_DB_PREFIX."c_country as c WHERE d.fk_region=r.code_region and r.fk_pays=c.rowid and r.active=1 and c.active=1";
271$tabsql[DICT_REGIONS] = "SELECT r.rowid as rowid, r.code_region as code, r.nom as libelle, r.fk_pays as country_id, c.code as country_code, c.label as country, r.active FROM ".MAIN_DB_PREFIX."c_regions as r, ".MAIN_DB_PREFIX."c_country as c WHERE r.fk_pays=c.rowid and c.active=1";
272$tabsql[DICT_COUNTRY] = "SELECT c.rowid as rowid, c.code, c.label, c.active, c.favorite, c.eec FROM ".MAIN_DB_PREFIX."c_country AS c";
273$tabsql[DICT_CIVILITY] = "SELECT c.rowid as rowid, c.code as code, c.label, c.active FROM ".MAIN_DB_PREFIX."c_civility AS c";
274$tabsql[DICT_ACTIONCOMM] = "SELECT a.id as rowid, a.code as code, a.libelle AS libelle, a.type, a.active, a.module, a.color, a.position FROM ".MAIN_DB_PREFIX."c_actioncomm AS a";
275$tabsql[DICT_CHARGESOCIALES] = "SELECT a.id as rowid, a.code as code, a.libelle AS libelle, a.accountancy_code as accountancy_code, c.code as country_code, c.label as country, a.fk_pays as country_id, a.active FROM ".MAIN_DB_PREFIX."c_chargesociales AS a, ".MAIN_DB_PREFIX."c_country as c WHERE a.fk_pays = c.rowid and c.active = 1";
276$tabsql[DICT_TYPENT] = "SELECT t.id as rowid, t.code as code, t.libelle, t.fk_country as country_id, c.code as country_code, c.label as country, t.position, t.active FROM ".MAIN_DB_PREFIX."c_typent as t LEFT JOIN ".MAIN_DB_PREFIX."c_country as c ON t.fk_country=c.rowid";
277$tabsql[DICT_CURRENCIES] = "SELECT c.code_iso as code, c.label, c.unicode, c.active FROM ".MAIN_DB_PREFIX."c_currencies AS c";
278$tabsql[DICT_TVA] = "SELECT t.rowid, t.entity, t.code, t.type_vat, t.taux, t.localtax1_type, t.localtax1, t.localtax2_type, t.localtax2, c.label as country, c.code as country_code, t.fk_pays as country_id, t.fk_department_buyer as department_buyer_id, db.nom as department_buyer, t.recuperableonly, t.note, t.active, t.accountancy_code_sell, t.accountancy_code_buy FROM ".MAIN_DB_PREFIX."c_tva as t INNER JOIN ".MAIN_DB_PREFIX."c_country as c ON t.fk_pays = c.rowid LEFT JOIN ".MAIN_DB_PREFIX."c_departements as db ON t.fk_department_buyer = db.rowid WHERE t.entity IN (".getEntity($tabname[DICT_TVA]).")";
279$tabsql[DICT_TYPE_CONTACT] = "SELECT t.rowid as rowid, t.element, t.source, t.code, t.libelle, t.position, t.active FROM ".MAIN_DB_PREFIX."c_type_contact AS t";
280$tabsql[DICT_PAYMENT_TERM] = "SELECT c.rowid as rowid, c.code, c.libelle, c.libelle_facture, c.deposit_percent, c.nbjour, c.type_cdr, c.decalage, c.active, c.sortorder, c.entity FROM ".MAIN_DB_PREFIX."c_payment_term AS c WHERE c.entity IN (".getEntity($tabname[DICT_PAYMENT_TERM]).")";
281$tabsql[DICT_PAIEMENT] = "SELECT c.id as rowid, c.code, c.libelle, c.type, c.active, c.entity FROM ".MAIN_DB_PREFIX."c_paiement AS c WHERE c.entity IN (".getEntity($tabname[DICT_PAIEMENT]).")";
282$tabsql[DICT_ECOTAXE] = "SELECT e.rowid as rowid, e.code as code, e.label, e.price, e.organization, e.fk_pays as country_id, c.code as country_code, c.label as country, e.active FROM ".MAIN_DB_PREFIX."c_ecotaxe AS e, ".MAIN_DB_PREFIX."c_country as c WHERE e.fk_pays=c.rowid and c.active=1";
283$tabsql[DICT_PAPER_FORMAT] = "SELECT t.rowid as rowid, t.code, t.label as libelle, t.width, t.height, t.unit, t.active FROM ".MAIN_DB_PREFIX."c_paper_format as t";
284$tabsql[DICT_PROSPECTLEVEL] = "SELECT t.code, t.label as libelle, t.sortorder, t.active FROM ".MAIN_DB_PREFIX."c_prospectlevel as t";
285$tabsql[DICT_TYPE_FEES] = "SELECT t.id as rowid, t.code, t.label, t.accountancy_code, t.active FROM ".MAIN_DB_PREFIX."c_type_fees as t";
286$tabsql[DICT_SHIPMENT_MODE] = "SELECT t.rowid as rowid, t.code, t.libelle, t.tracking, t.active FROM ".MAIN_DB_PREFIX."c_shipment_mode as t";
287$tabsql[DICT_EFFECTIF] = "SELECT t.id as rowid, t.code, t.libelle, t.active FROM ".MAIN_DB_PREFIX."c_effectif as t";
288$tabsql[DICT_INPUT_METHOD] = "SELECT t.rowid as rowid, t.code, t.libelle, t.active FROM ".MAIN_DB_PREFIX."c_input_method as t";
289$tabsql[DICT_AVAILABILITY] = "SELECT c.rowid as rowid, c.code, c.label, c.type_duration, c.qty, c.active, c.position FROM ".MAIN_DB_PREFIX."c_availability AS c";
290$tabsql[DICT_INPUT_REASON] = "SELECT t.rowid as rowid, t.code, t.label, t.active FROM ".MAIN_DB_PREFIX."c_input_reason as t";
291$tabsql[DICT_REVENUESTAMP] = "SELECT t.rowid as rowid, t.taux, t.revenuestamp_type, c.label as country, c.code as country_code, t.fk_pays as country_id, t.note, t.active, t.accountancy_code_sell, t.accountancy_code_buy FROM ".MAIN_DB_PREFIX."c_revenuestamp as t, ".MAIN_DB_PREFIX."c_country as c WHERE t.fk_pays=c.rowid";
292$tabsql[DICT_TYPE_RESOURCE] = "SELECT t.rowid as rowid, t.code, t.label, t.active FROM ".MAIN_DB_PREFIX."c_type_resource as t";
293$tabsql[DICT_TYPE_CONTAINER] = "SELECT t.rowid as rowid, t.code, t.label, t.active, t.module FROM ".MAIN_DB_PREFIX."c_type_container as t WHERE t.entity IN (".getEntity($tabname[DICT_TYPE_CONTAINER]).")";
294//$tabsql[DICT_UNITS]= "SELECT t.rowid as rowid, t.code, t.label, t.short_label, t.active FROM ".MAIN_DB_PREFIX."c_units as t";
295$tabsql[DICT_STCOMM] = "SELECT t.id as rowid, t.code, t.libelle, t.picto, t.active FROM ".MAIN_DB_PREFIX."c_stcomm as t";
296$tabsql[DICT_HOLIDAY_TYPES] = "SELECT h.rowid as rowid, h.code, h.label, h.affect, h.delay, h.newbymonth, h.fk_country as country_id, c.code as country_code, c.label as country, h.block_if_negative, h.sortorder, h.active FROM ".MAIN_DB_PREFIX."c_holiday_types as h LEFT JOIN ".MAIN_DB_PREFIX."c_country as c ON h.fk_country=c.rowid WHERE h.entity IN (".getEntity($tabname[DICT_HOLIDAY_TYPES]).")";
297$tabsql[DICT_LEAD_STATUS] = "SELECT t.rowid as rowid, t.code, t.label, percent, t.position, t.active FROM ".MAIN_DB_PREFIX."c_lead_status as t";
298$tabsql[DICT_FORMAT_CARDS] = "SELECT t.rowid, t.code, t.name, t.paper_size, t.orientation, t.metric, t.leftmargin, t.topmargin, t.nx, t.ny, t.spacex, t.spacey, t.width, t.height, t.font_size, t.custom_x, t.custom_y, t.active FROM ".MAIN_DB_PREFIX."c_format_cards as t";
299$tabsql[DICT_INVOICE_SUBTYPE] = "SELECT t.rowid, t.code, t.label, c.label as country, c.code as country_code, t.fk_country as country_id, t.active FROM ".MAIN_DB_PREFIX."c_invoice_subtype as t, ".MAIN_DB_PREFIX."c_country as c WHERE t.fk_country = c.rowid";
300$tabsql[DICT_HRM_PUBLIC_HOLIDAY] = "SELECT a.id as rowid, a.entity, a.code, a.fk_country as country_id, c.code as country_code, c.label as country, a.dayrule, a.day, a.month, a.year, a.active FROM ".MAIN_DB_PREFIX."c_hrm_public_holiday as a LEFT JOIN ".MAIN_DB_PREFIX."c_country as c ON a.fk_country=c.rowid AND c.active=1 WHERE a.entity IN (".getEntity($tabname[DICT_HRM_PUBLIC_HOLIDAY]).")";
301$tabsql[DICT_HRM_DEPARTMENT] = "SELECT t.rowid, t.pos, t.code, t.label, t.active FROM ".MAIN_DB_PREFIX."c_hrm_department as t";
302$tabsql[DICT_HRM_FUNCTION] = "SELECT t.rowid, t.pos, t.code, t.label, t.c_level, t.active FROM ".MAIN_DB_PREFIX."c_hrm_function as t";
303$tabsql[DICT_EXP_TAX_CAT] = "SELECT c.rowid, c.label, c.active, c.entity FROM ".MAIN_DB_PREFIX."c_exp_tax_cat as c";
304$tabsql[DICT_EXP_TAX_RANGE] = "SELECT r.rowid, r.fk_c_exp_tax_cat, r.range_ik, r.active, r.entity FROM ".MAIN_DB_PREFIX."c_exp_tax_range r";
305$tabsql[DICT_UNITS] = "SELECT r.rowid, r.code, r.sortorder, r.label, r.short_label, r.unit_type, r.scale, r.active FROM ".MAIN_DB_PREFIX."c_units r";
306$tabsql[DICT_SOCIALNETWORKS] = "SELECT s.rowid, s.entity, s.code, s.label, s.url, s.icon, s.active FROM ".MAIN_DB_PREFIX."c_socialnetworks as s WHERE s.entity IN (".getEntity($tabname[DICT_SOCIALNETWORKS]).")";
307$tabsql[DICT_PROSPECTCONTACTLEVEL] = "SELECT t.code, t.label as libelle, t.sortorder, t.active FROM ".MAIN_DB_PREFIX."c_prospectcontactlevel as t";
308$tabsql[DICT_STCOMMCONTACT] = "SELECT t.id as rowid, t.code, t.libelle, t.picto, t.active FROM ".MAIN_DB_PREFIX."c_stcommcontact as t";
309$tabsql[DICT_TRANSPORT_MODE] = "SELECT t.rowid as rowid, t.code, t.label, t.active FROM ".MAIN_DB_PREFIX."c_transport_mode as t";
310$tabsql[DICT_PRODUCT_NATURE] = "SELECT t.rowid as rowid, t.code, t.label, t.active FROM ".MAIN_DB_PREFIX."c_product_nature as t";
311$tabsql[DICT_PRODUCTBATCH_QCSTATUS] = "SELECT t.rowid, t.code, t.label, t.active FROM ".MAIN_DB_PREFIX."c_productbatch_qcstatus as t";
312$tabsql[DICT_ASSET_DISPOSAL_TYPE] = "SELECT t.rowid, t.code, t.label, t.active FROM ".MAIN_DB_PREFIX."c_asset_disposal_type as t";
313
314// Criteria to sort dictionaries
315$tabsqlsort = array();
316$tabsqlsort[DICT_FORME_JURIDIQUE] = "country ASC, code ASC";
317$tabsqlsort[DICT_DEPARTEMENTS] = "country ASC, code ASC";
318$tabsqlsort[DICT_REGIONS] = "country ASC, code ASC";
319$tabsqlsort[DICT_COUNTRY] = "code ASC";
320$tabsqlsort[DICT_CIVILITY] = "label ASC";
321$tabsqlsort[DICT_ACTIONCOMM] = "a.type ASC, a.module ASC, a.position ASC, a.code ASC";
322$tabsqlsort[DICT_CHARGESOCIALES] = "c.label ASC, a.code ASC, a.libelle ASC";
323$tabsqlsort[DICT_TYPENT] = "country DESC,".(getDolGlobalString('SOCIETE_SORT_ON_TYPEENT') ? ' t.position ASC,' : '')." libelle ASC";
324$tabsqlsort[DICT_CURRENCIES] = "label ASC";
325$tabsqlsort[DICT_TVA] = "country ASC, department_buyer ASC, code ASC, taux ASC, recuperableonly ASC, localtax1 ASC, localtax2 ASC";
326$tabsqlsort[DICT_TYPE_CONTACT] = "t.element ASC, t.source ASC, t.position ASC, t.code ASC";
327$tabsqlsort[DICT_PAYMENT_TERM] = "sortorder ASC, code ASC";
328$tabsqlsort[DICT_PAIEMENT] = "code ASC";
329$tabsqlsort[DICT_ECOTAXE] = "country ASC, e.organization ASC, code ASC";
330$tabsqlsort[DICT_PAPER_FORMAT] = "rowid ASC";
331$tabsqlsort[DICT_PROSPECTLEVEL] = "sortorder ASC";
332$tabsqlsort[DICT_TYPE_FEES] = "code ASC";
333$tabsqlsort[DICT_SHIPMENT_MODE] = "code ASC, libelle ASC";
334$tabsqlsort[DICT_EFFECTIF] = "id ASC";
335$tabsqlsort[DICT_INPUT_METHOD] = "code ASC, libelle ASC";
336$tabsqlsort[DICT_AVAILABILITY] = "position ASC, type_duration ASC, qty ASC";
337$tabsqlsort[DICT_INPUT_REASON] = "code ASC, label ASC";
338$tabsqlsort[DICT_REVENUESTAMP] = "country ASC, taux ASC";
339$tabsqlsort[DICT_TYPE_RESOURCE] = "code ASC, label ASC";
340$tabsqlsort[DICT_TYPE_CONTAINER] = "t.module ASC, t.code ASC, t.label ASC";
341//$tabsqlsort[DICT_UNITS]="code ASC";
342$tabsqlsort[DICT_STCOMM] = "code ASC";
343$tabsqlsort[DICT_HOLIDAY_TYPES] = "sortorder ASC, country ASC, code ASC";
344$tabsqlsort[DICT_LEAD_STATUS] = "position ASC";
345$tabsqlsort[DICT_FORMAT_CARDS] = "code ASC";
346$tabsqlsort[DICT_INVOICE_SUBTYPE] = "country ASC, code ASC";
347$tabsqlsort[DICT_HRM_PUBLIC_HOLIDAY] = "country, year ASC, month ASC, day ASC";
348$tabsqlsort[DICT_HRM_DEPARTMENT] = "code ASC";
349$tabsqlsort[DICT_HRM_FUNCTION] = "code ASC";
350$tabsqlsort[DICT_EXP_TAX_CAT] = "c.label ASC";
351$tabsqlsort[DICT_EXP_TAX_RANGE] = "r.fk_c_exp_tax_cat ASC, r.range_ik ASC";
352$tabsqlsort[DICT_UNITS] = "sortorder ASC";
353$tabsqlsort[DICT_SOCIALNETWORKS] = "rowid, code ASC";
354$tabsqlsort[DICT_PROSPECTCONTACTLEVEL] = "sortorder ASC";
355$tabsqlsort[DICT_STCOMMCONTACT] = "code ASC";
356$tabsqlsort[DICT_TRANSPORT_MODE] = "code ASC";
357$tabsqlsort[DICT_PRODUCT_NATURE] = "code ASC";
358$tabsqlsort[DICT_PRODUCTBATCH_QCSTATUS] = "code ASC";
359$tabsqlsort[DICT_ASSET_DISPOSAL_TYPE] = "code ASC";
360
361// Field names in select result for dictionary display
362$tabfield = array();
363$tabfield[DICT_FORME_JURIDIQUE] = "code,libelle,country";
364$tabfield[DICT_DEPARTEMENTS] = "code,libelle,region_id,region,country"; // "code,libelle,region,country_code-country"
365$tabfield[DICT_REGIONS] = "code,libelle,country_id,country";
366$tabfield[DICT_COUNTRY] = "code,label";
367$tabfield[DICT_CIVILITY] = "code,label";
368$tabfield[DICT_ACTIONCOMM] = "code,libelle,type,color,position";
369$tabfield[DICT_CHARGESOCIALES] = "code,libelle,country,accountancy_code";
370$tabfield[DICT_TYPENT] = "code,libelle,country_id,country".(getDolGlobalString('SOCIETE_SORT_ON_TYPEENT') ? ',position' : '');
371$tabfield[DICT_CURRENCIES] = "code,label,unicode";
372$tabfield[DICT_TVA] = "country_id,country,department_buyer_id,department_buyer,code,type_vat,taux,localtax1_type,localtax1,localtax2_type,localtax2,recuperableonly,accountancy_code_sell,accountancy_code_buy,note";
373$tabfield[DICT_TYPE_CONTACT] = "element,source,code,libelle,position";
374$tabfield[DICT_PAYMENT_TERM] = "code,libelle,libelle_facture,deposit_percent,nbjour,type_cdr,decalage,sortorder";
375$tabfield[DICT_PAIEMENT] = "code,libelle,type";
376$tabfield[DICT_ECOTAXE] = "code,label,price,organization,country";
377$tabfield[DICT_PAPER_FORMAT] = "code,libelle,width,height,unit";
378$tabfield[DICT_PROSPECTLEVEL] = "code,libelle,sortorder";
379$tabfield[DICT_TYPE_FEES] = "code,label,accountancy_code";
380$tabfield[DICT_SHIPMENT_MODE] = "code,libelle,tracking";
381$tabfield[DICT_EFFECTIF] = "code,libelle";
382$tabfield[DICT_INPUT_METHOD] = "code,libelle";
383$tabfield[DICT_AVAILABILITY] = "code,label,qty,type_duration,position";
384$tabfield[DICT_INPUT_REASON] = "code,label";
385$tabfield[DICT_REVENUESTAMP] = "country_id,country,taux,revenuestamp_type,accountancy_code_sell,accountancy_code_buy,note";
386$tabfield[DICT_TYPE_RESOURCE] = "code,label";
387$tabfield[DICT_TYPE_CONTAINER] = "code,label";
388//$tabfield[DICT_UNITS]= "code,label,short_label";
389$tabfield[DICT_STCOMM] = "code,libelle,picto";
390$tabfield[DICT_HOLIDAY_TYPES] = "code,label,affect,delay,newbymonth,country_id,country,block_if_negative,sortorder";
391$tabfield[DICT_LEAD_STATUS] = "code,label,percent,position";
392$tabfield[DICT_FORMAT_CARDS] = "code,name,paper_size,orientation,metric,leftmargin,topmargin,nx,ny,spacex,spacey,width,height,font_size,custom_x,custom_y";
393$tabfield[DICT_INVOICE_SUBTYPE] = "country_id,country,code,label";
394$tabfield[DICT_HRM_PUBLIC_HOLIDAY] = "code,dayrule,year,month,day,country_id,country";
395$tabfield[DICT_HRM_DEPARTMENT] = "code,label";
396$tabfield[DICT_HRM_FUNCTION] = "code,label";
397$tabfield[DICT_EXP_TAX_CAT] = "label";
398$tabfield[DICT_EXP_TAX_RANGE] = "range_ik,fk_c_exp_tax_cat";
399$tabfield[DICT_UNITS] = "code,label,short_label,unit_type,scale,sortorder";
400$tabfield[DICT_SOCIALNETWORKS] = "code,label,url,icon";
401$tabfield[DICT_PROSPECTCONTACTLEVEL] = "code,libelle,sortorder";
402$tabfield[DICT_STCOMMCONTACT] = "code,libelle,picto";
403$tabfield[DICT_TRANSPORT_MODE] = "code,label";
404$tabfield[DICT_PRODUCT_NATURE] = "code,label";
405$tabfield[DICT_PRODUCTBATCH_QCSTATUS] = "code,label";
406$tabfield[DICT_ASSET_DISPOSAL_TYPE] = "code,label";
407
408// Edit field names for editing a record
409$tabfieldvalue = array();
410$tabfieldvalue[DICT_FORME_JURIDIQUE] = "code,libelle,country";
411$tabfieldvalue[DICT_DEPARTEMENTS] = "code,libelle,region"; // "code,libelle,region"
412$tabfieldvalue[DICT_REGIONS] = "code,libelle,country";
413$tabfieldvalue[DICT_COUNTRY] = "code,label";
414$tabfieldvalue[DICT_CIVILITY] = "code,label";
415$tabfieldvalue[DICT_ACTIONCOMM] = "code,libelle,type,color,position";
416$tabfieldvalue[DICT_CHARGESOCIALES] = "code,libelle,country,accountancy_code";
417$tabfieldvalue[DICT_TYPENT] = "code,libelle,country".(getDolGlobalString('SOCIETE_SORT_ON_TYPEENT') ? ',position' : '');
418$tabfieldvalue[DICT_CURRENCIES] = "code,label,unicode";
419$tabfieldvalue[DICT_TVA] = "country,department_buyer_id,code,type_vat,taux,localtax1_type,localtax1,localtax2_type,localtax2,recuperableonly,accountancy_code_sell,accountancy_code_buy,note";
420$tabfieldvalue[DICT_TYPE_CONTACT] = "element,source,code,libelle,position";
421$tabfieldvalue[DICT_PAYMENT_TERM] = "code,libelle,libelle_facture,deposit_percent,nbjour,type_cdr,decalage,sortorder";
422$tabfieldvalue[DICT_PAIEMENT] = "code,libelle,type";
423$tabfieldvalue[DICT_ECOTAXE] = "code,label,price,organization,country";
424$tabfieldvalue[DICT_PAPER_FORMAT] = "code,libelle,width,height,unit";
425$tabfieldvalue[DICT_PROSPECTLEVEL] = "code,libelle,sortorder";
426$tabfieldvalue[DICT_TYPE_FEES] = "code,label,accountancy_code";
427$tabfieldvalue[DICT_SHIPMENT_MODE] = "code,libelle,tracking";
428$tabfieldvalue[DICT_EFFECTIF] = "code,libelle";
429$tabfieldvalue[DICT_INPUT_METHOD] = "code,libelle";
430$tabfieldvalue[DICT_AVAILABILITY] = "code,label,qty,type_duration,position";
431$tabfieldvalue[DICT_INPUT_REASON] = "code,label";
432$tabfieldvalue[DICT_REVENUESTAMP] = "country,taux,revenuestamp_type,accountancy_code_sell,accountancy_code_buy,note";
433$tabfieldvalue[DICT_TYPE_RESOURCE] = "code,label";
434$tabfieldvalue[DICT_TYPE_CONTAINER] = "code,label";
435//$tabfieldvalue[DICT_UNITS]= "code,label,short_label";
436$tabfieldvalue[DICT_STCOMM] = "code,libelle,picto";
437$tabfieldvalue[DICT_HOLIDAY_TYPES] = "code,label,affect,delay,newbymonth,country,block_if_negative,sortorder";
438$tabfieldvalue[DICT_LEAD_STATUS] = "code,label,percent,position";
439$tabfieldvalue[DICT_FORMAT_CARDS] = "code,name,paper_size,orientation,metric,leftmargin,topmargin,nx,ny,spacex,spacey,width,height,font_size,custom_x,custom_y";
440$tabfieldvalue[DICT_INVOICE_SUBTYPE] = "country,code,label";
441$tabfieldvalue[DICT_HRM_PUBLIC_HOLIDAY] = "code,dayrule,day,month,year,country";
442$tabfieldvalue[DICT_HRM_DEPARTMENT] = "code,label";
443$tabfieldvalue[DICT_HRM_FUNCTION] = "code,label";
444$tabfieldvalue[DICT_EXP_TAX_CAT] = "label";
445$tabfieldvalue[DICT_EXP_TAX_RANGE] = "range_ik,fk_c_exp_tax_cat";
446$tabfieldvalue[DICT_UNITS] = "code,label,short_label,unit_type,scale,sortorder";
447$tabfieldvalue[DICT_SOCIALNETWORKS] = "code,label,url,icon";
448$tabfieldvalue[DICT_PROSPECTCONTACTLEVEL] = "code,libelle,sortorder";
449$tabfieldvalue[DICT_STCOMMCONTACT] = "code,libelle,picto";
450$tabfieldvalue[DICT_TRANSPORT_MODE] = "code,label";
451$tabfieldvalue[DICT_PRODUCT_NATURE] = "code,label";
452$tabfieldvalue[DICT_PRODUCTBATCH_QCSTATUS] = "code,label";
453$tabfieldvalue[DICT_ASSET_DISPOSAL_TYPE] = "code,label";
454
455// Field names in the table for inserting a record (add field "entity" only here when dictionary is ready to personalized by entity)
456$tabfieldinsert = array();
457$tabfieldinsert[DICT_FORME_JURIDIQUE] = "code,libelle,fk_pays";
458$tabfieldinsert[DICT_DEPARTEMENTS] = "code_departement,nom,fk_region";
459$tabfieldinsert[DICT_REGIONS] = "code_region,nom,fk_pays";
460$tabfieldinsert[DICT_COUNTRY] = "code,label";
461$tabfieldinsert[DICT_CIVILITY] = "code,label";
462$tabfieldinsert[DICT_ACTIONCOMM] = "code,libelle,type,color,position";
463$tabfieldinsert[DICT_CHARGESOCIALES] = "code,libelle,fk_pays,accountancy_code";
464$tabfieldinsert[DICT_TYPENT] = "code,libelle,fk_country".(getDolGlobalString('SOCIETE_SORT_ON_TYPEENT') ? ',position' : '');
465$tabfieldinsert[DICT_CURRENCIES] = "code_iso,label,unicode";
466$tabfieldinsert[DICT_TVA] = "fk_pays,fk_department_buyer,code,type_vat,taux,localtax1_type,localtax1,localtax2_type,localtax2,recuperableonly,accountancy_code_sell,accountancy_code_buy,note,entity";
467$tabfieldinsert[DICT_TYPE_CONTACT] = "element,source,code,libelle,position";
468$tabfieldinsert[DICT_PAYMENT_TERM] = "code,libelle,libelle_facture,deposit_percent,nbjour,type_cdr,decalage,sortorder,entity";
469$tabfieldinsert[DICT_PAIEMENT] = "code,libelle,type,entity";
470$tabfieldinsert[DICT_ECOTAXE] = "code,label,price,organization,fk_pays";
471$tabfieldinsert[DICT_PAPER_FORMAT] = "code,label,width,height,unit";
472$tabfieldinsert[DICT_PROSPECTLEVEL] = "code,label,sortorder";
473$tabfieldinsert[DICT_TYPE_FEES] = "code,label,accountancy_code";
474$tabfieldinsert[DICT_SHIPMENT_MODE] = "code,libelle,tracking";
475$tabfieldinsert[DICT_EFFECTIF] = "code,libelle";
476$tabfieldinsert[DICT_INPUT_METHOD] = "code,libelle";
477$tabfieldinsert[DICT_AVAILABILITY] = "code,label,qty,type_duration,position";
478$tabfieldinsert[DICT_INPUT_REASON] = "code,label";
479$tabfieldinsert[DICT_REVENUESTAMP] = "fk_pays,taux,revenuestamp_type,accountancy_code_sell,accountancy_code_buy,note";
480$tabfieldinsert[DICT_TYPE_RESOURCE] = "code,label";
481$tabfieldinsert[DICT_TYPE_CONTAINER] = "code,label,entity";
482//$tabfieldinsert[DICT_UNITS]= "code,label,short_label";
483$tabfieldinsert[DICT_STCOMM] = "code,libelle,picto";
484$tabfieldinsert[DICT_HOLIDAY_TYPES] = "code,label,affect,delay,newbymonth,fk_country,block_if_negative,sortorder,entity";
485$tabfieldinsert[DICT_LEAD_STATUS] = "code,label,percent,position";
486$tabfieldinsert[DICT_FORMAT_CARDS] = "code,name,paper_size,orientation,metric,leftmargin,topmargin,nx,ny,spacex,spacey,width,height,font_size,custom_x,custom_y";
487$tabfieldinsert[DICT_INVOICE_SUBTYPE] = "fk_country,code,label";
488$tabfieldinsert[DICT_HRM_PUBLIC_HOLIDAY] = "code,dayrule,day,month,year,fk_country,entity";
489$tabfieldinsert[DICT_HRM_DEPARTMENT] = "code,label";
490$tabfieldinsert[DICT_HRM_FUNCTION] = "code,label";
491$tabfieldinsert[DICT_EXP_TAX_CAT] = "label";
492$tabfieldinsert[DICT_EXP_TAX_RANGE] = "range_ik,fk_c_exp_tax_cat";
493$tabfieldinsert[DICT_UNITS] = "code,label,short_label,unit_type,scale,sortorder";
494$tabfieldinsert[DICT_SOCIALNETWORKS] = "code,label,url,icon,entity";
495$tabfieldinsert[DICT_PROSPECTCONTACTLEVEL] = "code,label,sortorder";
496$tabfieldinsert[DICT_STCOMMCONTACT] = "code,libelle,picto";
497$tabfieldinsert[DICT_TRANSPORT_MODE] = "code,label";
498$tabfieldinsert[DICT_PRODUCT_NATURE] = "code,label";
499$tabfieldinsert[DICT_PRODUCTBATCH_QCSTATUS] = "code,label";
500$tabfieldinsert[DICT_ASSET_DISPOSAL_TYPE] = "code,label";
501
502// Rowid name of field depending if field is autoincrement on or off..
503// Use "" if id field is "rowid" and has autoincrement on
504// Use "nameoffield" if id field is not "rowid" or has not autoincrement on
505$tabrowid = array();
506$tabrowid[DICT_FORME_JURIDIQUE] = "";
507$tabrowid[DICT_DEPARTEMENTS] = "";
508$tabrowid[DICT_REGIONS] = "";
509$tabrowid[DICT_COUNTRY] = "rowid";
510$tabrowid[DICT_CIVILITY] = "rowid";
511$tabrowid[DICT_ACTIONCOMM] = "id";
512$tabrowid[DICT_CHARGESOCIALES] = "id";
513$tabrowid[DICT_TYPENT] = "id";
514$tabrowid[DICT_CURRENCIES] = "code_iso";
515$tabrowid[DICT_TVA] = "";
516$tabrowid[DICT_TYPE_CONTACT] = "rowid";
517$tabrowid[DICT_PAYMENT_TERM] = "";
518$tabrowid[DICT_PAIEMENT] = "id";
519$tabrowid[DICT_ECOTAXE] = "";
520$tabrowid[DICT_PAPER_FORMAT] = "";
521$tabrowid[DICT_PROSPECTLEVEL] = "code";
522$tabrowid[DICT_TYPE_FEES] = "id";
523$tabrowid[DICT_SHIPMENT_MODE] = "rowid";
524$tabrowid[DICT_EFFECTIF] = "id";
525$tabrowid[DICT_INPUT_METHOD] = "";
526$tabrowid[DICT_AVAILABILITY] = "rowid";
527$tabrowid[DICT_INPUT_REASON] = "rowid";
528$tabrowid[DICT_REVENUESTAMP] = "";
529$tabrowid[DICT_TYPE_RESOURCE] = "";
530$tabrowid[DICT_TYPE_CONTAINER] = "";
531//$tabrowid[DICT_UNITS]= "";
532$tabrowid[DICT_STCOMM] = "id";
533$tabrowid[DICT_HOLIDAY_TYPES] = "";
534$tabrowid[DICT_LEAD_STATUS] = "";
535$tabrowid[DICT_FORMAT_CARDS] = "";
536$tabrowid[DICT_INVOICE_SUBTYPE] = "";
537$tabrowid[DICT_HRM_PUBLIC_HOLIDAY] = "id";
538$tabrowid[DICT_HRM_DEPARTMENT] = "rowid";
539$tabrowid[DICT_HRM_FUNCTION] = "rowid";
540$tabrowid[DICT_EXP_TAX_CAT] = "";
541$tabrowid[DICT_EXP_TAX_RANGE] = "";
542$tabrowid[DICT_UNITS] = "";
543$tabrowid[DICT_SOCIALNETWORKS] = "";
544$tabrowid[DICT_PROSPECTCONTACTLEVEL] = "code";
545$tabrowid[DICT_STCOMMCONTACT] = "id";
546$tabrowid[DICT_TRANSPORT_MODE] = "";
547$tabrowid[DICT_PRODUCT_NATURE] = "rowid";
548$tabrowid[DICT_PRODUCTBATCH_QCSTATUS] = "rowid";
549$tabrowid[DICT_ASSET_DISPOSAL_TYPE] = "rowid";
550
551// Condition to show dictionary in setup page
552$tabcond = array();
553$tabcond[DICT_FORME_JURIDIQUE] = (isModEnabled("societe"));
554$tabcond[DICT_DEPARTEMENTS] = true;
555$tabcond[DICT_REGIONS] = true;
556$tabcond[DICT_COUNTRY] = true;
557$tabcond[DICT_CIVILITY] = (isModEnabled("societe") || isModEnabled('member'));
558$tabcond[DICT_ACTIONCOMM] = isModEnabled('agenda');
559$tabcond[DICT_CHARGESOCIALES] = isModEnabled('tax');
560$tabcond[DICT_TYPENT] = isModEnabled("societe");
561$tabcond[DICT_CURRENCIES] = true;
562$tabcond[DICT_TVA] = true;
563$tabcond[DICT_TYPE_CONTACT] = (isModEnabled("societe"));
564$tabcond[DICT_PAYMENT_TERM] = (isModEnabled('order') || isModEnabled("propal") || isModEnabled('invoice') || isModEnabled("supplier_invoice") || isModEnabled("supplier_order"));
565$tabcond[DICT_PAIEMENT] = (isModEnabled('order') || isModEnabled("propal") || isModEnabled('invoice') || isModEnabled("supplier_invoice") || isModEnabled("supplier_order"));
566$tabcond[DICT_ECOTAXE] = (isModEnabled("product") && (isModEnabled('ecotax') || getDolGlobalString('MAIN_SHOW_ECOTAX_DICTIONNARY')));
567$tabcond[DICT_PAPER_FORMAT] = true;
568$tabcond[DICT_PROSPECTLEVEL] = (isModEnabled("societe") && !getDolGlobalString('SOCIETE_DISABLE_PROSPECTS'));
569$tabcond[DICT_TYPE_FEES] = (isModEnabled('deplacement') || isModEnabled('expensereport'));
570$tabcond[DICT_SHIPMENT_MODE] = isModEnabled("shipping") || isModEnabled("reception");
571$tabcond[DICT_EFFECTIF] = isModEnabled("societe");
572$tabcond[DICT_INPUT_METHOD] = isModEnabled("supplier_order");
573$tabcond[DICT_AVAILABILITY] = isModEnabled("propal");
574$tabcond[DICT_INPUT_REASON] = (isModEnabled('order') || isModEnabled("propal"));
575$tabcond[DICT_REVENUESTAMP] = true;
576$tabcond[DICT_TYPE_RESOURCE] = isModEnabled('resource');
577$tabcond[DICT_TYPE_CONTAINER] = isModEnabled('website');
578//$tabcond[DICT_UNITS]= isModEnabled("product");
579$tabcond[DICT_STCOMM] = isModEnabled("societe");
580$tabcond[DICT_HOLIDAY_TYPES] = isModEnabled('holiday');
581$tabcond[DICT_LEAD_STATUS] = isModEnabled('project');
582$tabcond[DICT_FORMAT_CARDS] = (isModEnabled('label') || isModEnabled('barcode') || isModEnabled('member')); // stickers format dictionary
583$tabcond[DICT_INVOICE_SUBTYPE] = ((isModEnabled('invoice') || isModEnabled('supplier_invoice')) && $mysoc->country_code == 'GR');
584$tabcond[DICT_HRM_PUBLIC_HOLIDAY] = (isModEnabled('holiday') || isModEnabled('hrm'));
585$tabcond[DICT_HRM_DEPARTMENT] = isModEnabled('hrm');
586$tabcond[DICT_HRM_FUNCTION] = isModEnabled('hrm');
587$tabcond[DICT_EXP_TAX_CAT] = isModEnabled('expensereport') && getDolGlobalString('MAIN_USE_EXPENSE_IK');
588$tabcond[DICT_EXP_TAX_RANGE] = isModEnabled('expensereport') && getDolGlobalString('MAIN_USE_EXPENSE_IK');
589$tabcond[DICT_UNITS] = isModEnabled("product");
590$tabcond[DICT_SOCIALNETWORKS] = isModEnabled('socialnetworks');
591$tabcond[DICT_PROSPECTCONTACTLEVEL] = (isModEnabled("societe") && !getDolGlobalString('SOCIETE_DISABLE_PROSPECTS') && getDolGlobalString('THIRDPARTY_ENABLE_PROSPECTION_ON_ALTERNATIVE_ADRESSES'));
592$tabcond[DICT_STCOMMCONTACT] = (isModEnabled("societe") && getDolGlobalString('THIRDPARTY_ENABLE_PROSPECTION_ON_ALTERNATIVE_ADRESSES'));
593$tabcond[DICT_TRANSPORT_MODE] = isModEnabled('intracommreport');
594$tabcond[DICT_PRODUCT_NATURE] = isModEnabled("product");
595$tabcond[DICT_PRODUCTBATCH_QCSTATUS] = isModEnabled("product") && isModEnabled('productbatch') && getDolGlobalInt('MAIN_FEATURES_LEVEL') >= 2;
596$tabcond[DICT_ASSET_DISPOSAL_TYPE] = isModEnabled('asset');
597
598// List of help for fields (no more used, help is defined into tabcomplete)
599$tabhelp = array();
600
601// Table to store complete information (will replace all other table). Key is table name.
602$tabcomplete = array(
603 'c_forme_juridique' => array(
604 'picto' => 'company',
605 'help' => array('code' => $langs->trans("EnterAnyCode"))
606 ),
607 'c_departements' => array(
608 'picto' => 'state',
609 'help' => array('code' => $langs->trans("EnterAnyCode"))
610 ),
611 'c_regions' => array(
612 'picto' => 'region',
613 'help' => array('code' => $langs->trans("EnterAnyCode"))
614 ),
615 'c_country' => array('picto' => 'country', 'help' => array('code' => $langs->trans("EnterAnyCode"))),
616 'c_civility' => array('picto' => 'contact', 'help' => array('code' => $langs->trans("EnterAnyCode"))),
617 'c_actioncomm' => array('picto' => 'action', 'help' => array('code' => $langs->trans("EnterAnyCode"), 'color' => $langs->trans("ColorFormat"), 'position' => $langs->trans("PositionIntoComboList"))),
618 'c_chargesociales' => array('picto' => 'bill', 'help' => array('code' => $langs->trans("EnterAnyCode"))),
619 'c_typent' => array('picto' => 'company', 'help' => array('code' => $langs->trans("EnterAnyCode"), 'position' => $langs->trans("PositionIntoComboList"))),
620 'c_currencies' => array('picto' => 'multicurrency', 'help' => array('code' => $langs->trans("EnterAnyCode"), 'unicode' => $langs->trans("UnicodeCurrency"))),
621 'c_tva' => array('picto' => 'bill', 'help' => array('code' => $langs->trans("EnterAnyCode"), 'taux' => $langs->trans("SellTaxRate"), 'recuperableonly' => $langs->trans("RecuperableOnly"), 'localtax1_type' => $langs->trans("LocalTaxDesc"), 'localtax2_type' => $langs->trans("LocalTaxDesc"))),
622 'c_type_contact' => array('picto' => 'contact', 'help' => array('code' => $langs->trans("EnterAnyCode"), 'position' => $langs->trans("PositionIntoComboList"))),
623 'c_payment_term' => array('picto' => 'bill', 'help' => array('code' => $langs->trans("EnterAnyCode"), 'type_cdr' => $langs->trans("TypeCdr", $langs->transnoentitiesnoconv("NbOfDays"), $langs->transnoentitiesnoconv("Offset"), $langs->transnoentitiesnoconv("NbOfDays"), $langs->transnoentitiesnoconv("Offset")))),
624 'c_paiement' => array('picto' => 'bill', 'help' => array('code' => $langs->trans("EnterAnyCode"))),
625 'c_ecotaxe' => array('picto' => 'bill', 'help' => array('code' => $langs->trans("EnterAnyCode"))),
626 'c_paper_format' => array('picto' => 'generic', 'help' => array('code' => $langs->trans("EnterAnyCode"))),
627 'c_prospectlevel' => array('picto' => 'company', 'help' => array('code' => $langs->trans("EnterAnyCode"))),
628 'c_type_fees' => array('picto' => 'trip', 'help' => array('code' => $langs->trans("EnterAnyCode"))),
629 'c_shipment_mode' => array('picto' => 'shipment', 'help' => array('code' => $langs->trans("EnterAnyCode"), 'tracking' => $langs->trans("UrlTrackingDesc"))),
630 'c_effectif' => array('picto' => 'company', 'help' => array('code' => $langs->trans("EnterAnyCode"))),
631 'c_input_method' => array('picto' => 'order', 'help' => array('code' => $langs->trans("EnterAnyCode"))),
632 'c_input_reason' => array('picto' => 'order', 'help' => array('code' => $langs->trans("EnterAnyCode"), 'position' => $langs->trans("PositionIntoComboList"))),
633 'c_availability' => array('picto' => 'shipment', 'help' => array('code' => $langs->trans("EnterAnyCode"))),
634 'c_revenuestamp' => array('picto' => 'bill', 'help' => array('revenuestamp_type' => $langs->trans('FixedOrPercent'))),
635 'c_type_resource' => array('picto' => 'resource', 'help' => array('code' => $langs->trans("EnterAnyCode"))),
636 'c_type_container' => array('picto' => 'website', 'help' => array('code' => $langs->trans("EnterAnyCode"))),
637 'c_stcomm' => array('picto' => 'company', 'help' => array('code' => $langs->trans("EnterAnyCode"), 'picto' => $langs->trans("PictoHelp"))),
638 'c_holiday_types' => array('picto' => 'holiday', 'help' => array('affect' => $langs->trans("FollowedByACounter"), 'delay' => $langs->trans("MinimumNoticePeriod"), 'newbymonth' => $langs->trans("NbAddedAutomatically"))),
639 'c_lead_status' => array('picto' => 'project', 'help' => array('code' => $langs->trans("EnterAnyCode"), 'percent' => $langs->trans("OpportunityPercent"), 'position' => $langs->trans("PositionIntoComboList"))),
640 'c_format_cards' => array('picto' => 'generic', 'help' => array('code' => $langs->trans("EnterAnyCode"), 'name' => $langs->trans("LabelName"), 'paper_size' => $langs->trans("LabelPaperSize"))),
641 'c_hrm_public_holiday' => array('picto' => 'holiday', 'help' => array('code' => $langs->trans("EnterAnyCode"), 'dayrule' => "Keep empty for a date defined with month and day (most common case).<br>Use a keyword like 'easter', 'eastermonday', ... for a date predefined by complex rules.", 'country' => $langs->trans("CountryIfSpecificToOneCountry"), 'year' => $langs->trans("ZeroMeansEveryYear"))),
642 'c_hrm_department' => array('picto' => 'hrm', 'help' => array('code' => $langs->trans("EnterAnyCode"))),
643 'c_hrm_function' => array('picto' => 'hrm', 'help' => array('code' => $langs->trans("EnterAnyCode"))),
644 'c_exp_tax_cat' => array('picto' => 'expensereport', 'help' => array()),
645 'c_exp_tax_range' => array('picto' => 'expensereport', 'help' => array('range_ik' => $langs->trans('PrevRangeToThisRange'))),
646 'c_units' => array('picto' => 'product', 'help' => array('code' => $langs->trans("EnterAnyCode"), 'unit_type' => $langs->trans('Measuringtype_durationDesc'), 'scale' => $langs->trans('MeasuringScaleDesc'))),
647 'c_socialnetworks' => array('picto' => 'share-alt', 'help' => array('code' => $langs->trans("EnterAnyCode"), 'url' => $langs->trans('UrlSocialNetworksDesc'), 'icon' => $langs->trans('FafaIconSocialNetworksDesc'))),
648 'c_prospectcontactlevel' => array('picto' => 'company', 'help' => array('code' => $langs->trans("EnterAnyCode"))),
649 'c_stcommcontact' => array('picto' => 'company', 'help' => array('code' => $langs->trans("EnterAnyCode"), 'picto' => $langs->trans("PictoHelp"))),
650 'c_transport_mode' => array('picto' => 'incoterm', 'help' => array('code' => $langs->trans("EnterAnyCode"))),
651 'c_product_nature' => array('picto' => 'product', 'help' => array('code' => $langs->trans("EnterAnyCode"))),
652 'c_productbatch_qcstatus' => array('picto' => 'lot', 'help' => array('code' => $langs->trans("EnterAnyCode"))),
653 'c_asset_disposal_type' => array('picto' => 'asset', 'help' => array('code' => $langs->trans("EnterAnyCode"))),
654 'c_invoice_subtype' => array('picto' => 'bill', 'help' => array('code' => $langs->trans("EnterAnyCode"))),
655);
656
657
658// Complete all arrays with entries found into modules
659complete_dictionary_with_modules($taborder, $tabname, $tablib, $tabsql, $tabsqlsort, $tabfield, $tabfieldvalue, $tabfieldinsert, $tabrowid, $tabcond, $tabhelp, $tabcomplete);
660
661// Complete the table $tabcomplete
662$i = 0;
663foreach ($tabcomplete as $key => $value) {
664 $i++;
665 // When a dictionary is commented
666 if (!isset($tabcond[$i])) {
667 continue;
668 }
669 $tabcomplete[$key]['id'] = $i;
670
671 // TODO Comment this lines when data is stored into the tabcomplete array
672 $tabcomplete[$key]['cond'] = $tabcond[$i];
673 $tabcomplete[$key]['rowid'] = $tabrowid[$i];
674 $tabcomplete[$key]['fieldinsert'] = $tabfieldinsert[$i];
675 $tabcomplete[$key]['fieldvalue'] = $tabfieldvalue[$i];
676 $tabcomplete[$key]['lib'] = $tablib[$i];
677 $tabcomplete[$key]['sql'] = $tabsql[$i];
678 $tabcomplete[$key]['sqlsort'] = $tabsqlsort[$i];
679 $tabcomplete[$key]['field'] = $tabfield[$i];
680 //$tabcomplete[$key]['picto'] = $tabpicto[$i]; // array picto already loaded into tabcomplete
681 //$tabcomplete[$key]['help'] = $tabhelp[$i]; // array help already loaded into tabcomplete
682}
683
684$keytable = '';
685if ($id > 0) {
686 $arrayofkeys = array_keys($tabcomplete);
687 if (array_key_exists($id - 1, $arrayofkeys)) {
688 $keytable = $arrayofkeys[$id - 1];
689 }
690}
691
692// Default sortorder
693if (empty($sortfield)) {
694 $tmp1 = explode(',', empty($tabcomplete[$keytable]['sqlsort']) ? '' : $tabcomplete[$keytable]['sqlsort']);
695 $tmp2 = explode(' ', $tmp1[0]);
696 $sortfield = preg_replace('/^.*\./', '', $tmp2[0]);
697 $sortorder = (!empty($tmp2[1]) ? $tmp2[1] : '');
698 //var_dump($sortfield); //var_dump($sortorder);
699}
700
701// Define elementList and sourceList (used for dictionary type of contacts "llx_c_type_contact")
702$elementList = array();
703$sourceList = array();
704if ($id == DICT_TYPE_CONTACT) {
705 $elementList = array(
706 '' => '',
707 'agenda' => img_picto('', 'action', 'class="pictofixedwidth"').$langs->trans('Agenda'),
708 'dolresource' => img_picto('', 'resource', 'class="pictofixedwidth"').$langs->trans('Resource'),
709 'societe' => img_picto('', 'company', 'class="pictofixedwidth"').$langs->trans('ThirdParty'),
710 // 'proposal' => $langs->trans('Proposal'),
711 // 'order' => $langs->trans('Order'),
712 // 'invoice' => $langs->trans('Bill'),
713 // 'intervention' => $langs->trans('InterventionCard'),
714 // 'contract' => $langs->trans('Contract'),
715 'project' => img_picto('', 'project', 'class="pictofixedwidth"').$langs->trans('Project'),
716 'project_task' => img_picto('', 'projecttask', 'class="pictofixedwidth"').$langs->trans('Task'),
717 'propal' => img_picto('', 'propal', 'class="pictofixedwidth"').$langs->trans('Proposal'),
718 'commande' => img_picto('', 'order', 'class="pictofixedwidth"').$langs->trans('Order'),
719 'facture' => img_picto('', 'bill', 'class="pictofixedwidth"').$langs->trans('Bill'),
720 'fichinter' => img_picto('', 'intervention', 'class="pictofixedwidth"').$langs->trans('InterventionCard'),
721 'contrat' => img_picto('', 'contract', 'class="pictofixedwidth"').$langs->trans('Contract'),
722 'ticket' => img_picto('', 'ticket', 'class="pictofixedwidth"').$langs->trans('Ticket'),
723 'supplier_proposal' => img_picto('', 'supplier_proposal', 'class="pictofixedwidth"').$langs->trans('SupplierProposal'),
724 'order_supplier' => img_picto('', 'supplier_order', 'class="pictofixedwidth"').$langs->trans('SupplierOrder'),
725 'invoice_supplier' => img_picto('', 'supplier_invoice', 'class="pictofixedwidth"').$langs->trans('SupplierBill'),
726 );
727 if (getDolGlobalString('MAIN_FEATURES_LEVEL') && getDolGlobalInt('MAIN_FEATURES_LEVEL') >= 2) {
728 $elementList['conferenceorbooth'] = img_picto('', 'eventorganization', 'class="pictofixedwidth"').$langs->trans('ConferenceOrBooth');
729 }
730
732
733 //asort($elementList);
734 $sourceList = array(
735 'internal' => $langs->trans('Internal'),
736 'external' => $langs->trans('External')
737 );
738}
739
740// Define type_vatList (used for dictionary "llx_c_tva")
741$type_vatList = array(
742 "0" => $langs->trans("Sell").'+'.$langs->trans("Buy"),
743 "1" => $langs->trans("Sell"),
744 "2" => $langs->trans("Buy")
745);
746
747// Define localtax_typeList (used for dictionary "llx_c_tva")
748$localtax_typeList = array(
749 "0" => $langs->trans("No"),
750 "1" => $langs->trans("Yes").' ('.$langs->trans("Type")." 1)", //$langs->trans("%ageOnAllWithoutVAT"),
751 "2" => $langs->trans("Yes").' ('.$langs->trans("Type")." 2)", //$langs->trans("%ageOnAllBeforeVAT"),
752 "3" => $langs->trans("Yes").' ('.$langs->trans("Type")." 3)", //$langs->trans("%ageOnProductsWithoutVAT"),
753 "4" => $langs->trans("Yes").' ('.$langs->trans("Type")." 4)", //$langs->trans("%ageOnProductsBeforeVAT"),
754 "5" => $langs->trans("Yes").' ('.$langs->trans("Type")." 5)", //$langs->trans("%ageOnServiceWithoutVAT"),
755 "6" => $langs->trans("Yes").' ('.$langs->trans("Type")." 6)" //$langs->trans("%ageOnServiceBeforeVAT"),
756);
757
758
759
760/*
761 * Actions
762 */
763
764$object = new stdClass();
765$parameters = array(
766 'id' => $id,
767 'rowid' => $rowid,
768 'code' => $code,
769 'confirm' => $confirm,
770 'entity' => $entity,
771 'taborder' => $taborder,
772 'tabname' => $tabname,
773 'tablib' => $tablib,
774 'tabsql' => $tabsql,
775 'tabsqlsort' => $tabsqlsort,
776 'tabfield' => $tabfield,
777 'tabfieldvalue' => $tabfieldvalue,
778 'tabfieldinsert' => $tabfieldinsert,
779 'tabrowid' => $tabrowid,
780 'tabcond' => $tabcond,
781 'tabhelp' => $tabhelp,
782 'tabcomplete' => $tabcomplete
783);
784$reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
785if ($reshook < 0) {
786 setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
787}
788
789if (GETPOST('button_removefilter', 'alpha') || GETPOST('button_removefilter.x', 'alpha') || GETPOST('button_removefilter_x', 'alpha')) {
790 $search_country_id = '';
791 $search_code = '';
792 $search_active = '';
793}
794
795if (empty($reshook)) {
796 // Actions add or modify an entry into a dictionary
797 if (GETPOST('actionadd') || GETPOST('actionmodify')) {
798 $listfield = explode(',', str_replace(' ', '', $tabfield[$id]));
799 $listfieldinsert = explode(',', $tabfieldinsert[$id]);
800 $listfieldmodify = explode(',', $tabfieldinsert[$id]);
801 $listfieldvalue = explode(',', $tabfieldvalue[$id]);
802
803 // Check that all mandatory fields are filled
804 $ok = 1;
805 foreach ($listfield as $f => $value) {
806 // Discard check of mandatory fields for country for some tables
807 if ($value == 'country_id' && in_array($tablib[$id], array('DictionaryPublicHolidays', 'DictionaryVAT', 'DictionaryInvoiceSubtype', 'DictionaryRegion', 'DictionaryCompanyType', 'DictionaryHolidayTypes', 'DictionaryRevenueStamp', 'DictionaryAccountancysystem', 'DictionaryAccountancyCategory'))) {
808 continue; // For some pages, country is not mandatory
809 }
810 if ($value == 'country' && in_array($tablib[$id], array('DictionaryPublicHolidays', 'DictionaryCanton', 'DictionaryCompanyType', 'DictionaryHolidayTypes', 'DictionaryRevenueStamp'))) {
811 continue; // For some pages, country is not mandatory
812 }
813 // Discard check of mandatory fields for department buyer id for some tables (only for add action)
814 if (GETPOST('actionadd') && $value == 'department_buyer_id' && $tablib[$id] == 'DictionaryVAT') {
815 continue; // For some pages, department buyer id is not mandatory
816 }
817 // Discard check of mandatory fields for department buyer for some tables
818 if ($value == 'department_buyer' && $tablib[$id] == 'DictionaryVAT') {
819 continue; // For some pages, department buyer is not mandatory
820 }
821 // Discard check of mandatory fields for other fields
822 if ($value == 'localtax1' && !GETPOST('localtax1_type')) {
823 continue;
824 }
825 if ($value == 'localtax2' && !GETPOST('localtax2_type')) {
826 continue;
827 }
828 if ($value == 'color' && !GETPOST('color')) {
829 continue;
830 }
831 if ($value == 'formula' && !GETPOST('formula')) {
832 continue;
833 }
834 if ($value == 'dayrule' && !GETPOST('dayrule')) {
835 continue;
836 }
837 if ($value == 'sortorder') {
838 continue; // For a column name 'sortorder', we use the field name 'position'
839 }
840 if ((!GETPOSTISSET($value) || GETPOST($value) == '')
841 && (
842 !in_array($value, array('decalage', 'module', 'accountancy_code', 'accountancy_code_sell', 'accountancy_code_buy', 'tracking', 'picto', 'deposit_percent')) // Fields that are not mandatory
843 && ($id != DICT_TVA || ($value != 'code' && $value != 'note')) // Field code and note is not mandatory for dictionary table 10
844 )
845 ) {
846 $ok = 0;
847 $fieldnamekey = $value;
848 // We take translate key of field
849 if ($fieldnamekey == 'libelle' || ($fieldnamekey == 'label')) {
850 $fieldnamekey = 'Label';
851 }
852 if ($fieldnamekey == 'libelle_facture') {
853 $fieldnamekey = 'LabelOnDocuments';
854 }
855 if ($fieldnamekey == 'deposit_percent') {
856 $fieldnamekey = 'DepositPercent';
857 }
858 if ($fieldnamekey == 'nbjour') {
859 $fieldnamekey = 'NbOfDays';
860 }
861 if ($fieldnamekey == 'decalage') {
862 $fieldnamekey = 'Offset';
863 }
864 if ($fieldnamekey == 'module') {
865 $fieldnamekey = 'Module';
866 }
867 if ($fieldnamekey == 'code') {
868 $fieldnamekey = 'Code';
869 }
870 if ($fieldnamekey == 'note') {
871 $fieldnamekey = 'Note';
872 }
873 if ($fieldnamekey == 'taux') {
874 $fieldnamekey = 'Rate';
875 }
876 if ($fieldnamekey == 'type') {
877 $fieldnamekey = 'Type';
878 }
879 if ($fieldnamekey == 'position') {
880 $fieldnamekey = 'Position';
881 }
882 if ($fieldnamekey == 'unicode') {
883 $fieldnamekey = 'Unicode';
884 }
885 if ($fieldnamekey == 'deductible') {
886 $fieldnamekey = 'Deductible';
887 }
888 if ($fieldnamekey == 'sortorder') {
889 $fieldnamekey = 'SortOrder';
890 }
891 if ($fieldnamekey == 'category_type') {
892 $fieldnamekey = 'Calculated';
893 }
894 if ($fieldnamekey == 'revenuestamp_type') {
895 $fieldnamekey = 'TypeOfRevenueStamp';
896 }
897 if ($fieldnamekey == 'use_default') {
898 $fieldnamekey = 'UseByDefault';
899 }
900
901 setEventMessages($langs->transnoentities("ErrorFieldRequired", $langs->transnoentities($fieldnamekey)), null, 'errors');
902 }
903 }
904 // Other special checks
905 if (GETPOST('actionadd') && $tabname[$id] == "c_actioncomm" && GETPOSTISSET("type") && in_array(GETPOST("type"), array('system', 'systemauto'))) {
906 $ok = 0;
907 setEventMessages($langs->transnoentities('ErrorReservedTypeSystemSystemAuto'), null, 'errors');
908 }
909 if (GETPOSTISSET("code")) {
910 if (GETPOST("code") == '0') {
911 $ok = 0;
912 setEventMessages($langs->transnoentities('ErrorCodeCantContainZero'), null, 'errors');
913 }
914 }
915 if (GETPOSTISSET("country") && (GETPOST("country") == '0') && ($id != DICT_DEPARTEMENTS)) {
916 if (in_array($tablib[$id], array('DictionaryCompanyType', 'DictionaryHolidayTypes'))) { // Field country is no mandatory for such dictionaries
917 $_POST["country"] = '';
918 } else {
919 $ok = 0;
920 setEventMessages($langs->transnoentities("ErrorFieldRequired", $langs->transnoentities("Country")), null, 'errors');
921 }
922 }
923 if (($id == DICT_REGIONS || $id == DICT_PRODUCT_NATURE) && !is_numeric(GETPOST("code")) && GETPOST('actionadd')) {
924 $ok = 0;
925 setEventMessages($langs->transnoentities("ErrorFieldMustBeANumeric", $langs->transnoentities("Code")), null, 'errors');
926 }
927 if ($id == DICT_COUNTRY && strlen(GETPOST("code")) != 2) { // 2 char on code for country code
928 $ok = 0;
929 setEventMessages($langs->transnoentities("ErrorCountryCodeMustBe2Char", $langs->transnoentities("Code")), null, 'errors');
930 }
931
932 // Clean some parameters
933 if ((GETPOST("localtax1_type") || (GETPOST('localtax1_type') == '0')) && !GETPOST("localtax1")) {
934 $_POST["localtax1"] = '0'; // If empty, we force to 0
935 }
936 if ((GETPOST("localtax2_type") || (GETPOST('localtax2_type') == '0')) && !GETPOST("localtax2")) {
937 $_POST["localtax2"] = '0'; // If empty, we force to 0
938 }
939 if (GETPOST('department_buyer_id') <= 0) {
940 $_POST['department_buyer_id'] = ''; // If empty, we force to null
941 }
942 if (GETPOST("accountancy_code") <= 0) {
943 $_POST["accountancy_code"] = ''; // If empty, we force to null
944 }
945 if (GETPOST("accountancy_code_sell") <= 0) {
946 $_POST["accountancy_code_sell"] = ''; // If empty, we force to null
947 }
948 if (GETPOST("accountancy_code_buy") <= 0) {
949 $_POST["accountancy_code_buy"] = ''; // If empty, we force to null
950 }
951 if ($id == DICT_TVA && GETPOSTISSET("code")) { // Spaces are not allowed into code for tax dictionary
952 $_POST["code"] = preg_replace('/[^a-zA-Z0-9_\-\+]/', '', GETPOST("code"));
953 }
954
955 $tablename = $tabname[$id];
956 $tablename = preg_replace('/^'.preg_quote(MAIN_DB_PREFIX, '/').'/', '', $tablename);
957
958 // If check ok and action add, add the line
959 if ($ok && GETPOST('actionadd')) {
960 $newid = 0;
961 if ($tabrowid[$id] && !in_array($tabrowid[$id], $listfieldinsert)) {
962 // Get free id for insert
963 $sql = "SELECT MAX(".$tabrowid[$id].") as newid FROM ".MAIN_DB_PREFIX.$tablename;
964 $result = $db->query($sql);
965 if ($result) {
966 $obj = $db->fetch_object($result);
967 $newid = ((int) $obj->newid) + 1;
968 } else {
969 dol_print_error($db);
970 }
971 }
972
973 // Add new entry
974 $sql = "INSERT INTO ".MAIN_DB_PREFIX.$tablename." (";
975 // List of fields
976 if ($tabrowid[$id] && !in_array($tabrowid[$id], $listfieldinsert)) {
977 $sql .= $tabrowid[$id].",";
978 }
979 $sql .= $tabfieldinsert[$id];
980 $sql .= ",active)";
981 $sql .= " VALUES(";
982
983 // List of values
984 if ($tabrowid[$id] && !in_array($tabrowid[$id], $listfieldinsert)) {
985 $sql .= $newid.",";
986 }
987 $i = 0;
988 foreach ($listfieldinsert as $f => $value) {
989 $keycode = (isset($listfieldvalue[$i]) ? $listfieldvalue[$i] : '');
990 if (empty($keycode)) {
991 $keycode = $value;
992 }
993
994 if ($value == 'price' || preg_match('/^amount/i', $value)) {
995 $_POST[$keycode] = price2num(GETPOST($keycode), 'MU');
996 } elseif ($value == 'taux' || $value == 'localtax1') {
997 $_POST[$keycode] = price2num(GETPOST($keycode), 8); // Note that localtax2 can be a list of rates separated by coma like X:Y:Z
998 } elseif ($value == 'entity') {
999 $_POST[$keycode] = getEntity($tablename);
1000 }
1001
1002 if ($i) {
1003 $sql .= ",";
1004 }
1005
1006 if ($keycode == 'sortorder') { // For column name 'sortorder', we use the field name 'position'
1007 $sql .= GETPOSTINT('position');
1008 } elseif (GETPOST($keycode) == '' && !($keycode == 'code' && $id == DICT_TVA)) {
1009 $sql .= "null"; // For vat, we want/accept code = ''
1010 } elseif ($keycode == 'content') {
1011 $sql .= "'".$db->escape(GETPOST($keycode, 'restricthtml'))."'";
1012 } elseif (in_array($keycode, array('joinfile', 'private', 'pos', 'position', 'scale', 'use_default'))) {
1013 $sql .= GETPOSTINT($keycode);
1014 } else {
1015 $sql .= "'".$db->escape(GETPOST($keycode, 'alphanohtml'))."'";
1016 }
1017
1018 $i++;
1019 }
1020 $sql .= ",1)";
1021
1022 dol_syslog("actionadd", LOG_DEBUG);
1023 $resql = $db->query($sql);
1024 if ($resql) { // Add is ok
1025 setEventMessages($langs->transnoentities("RecordCreatedSuccessfully"), null, 'mesgs');
1026
1027 // Clean $_POST array, we keep only id of dictionary
1028 if ($id == DICT_TVA && GETPOSTINT('country') > 0) {
1029 $search_country_id = GETPOSTINT('country');
1030 }
1031 $_POST = array('id' => $id);
1032 } else {
1033 if ($db->errno() == 'DB_ERROR_RECORD_ALREADY_EXISTS') {
1034 setEventMessages($langs->transnoentities("ErrorRecordAlreadyExists"), null, 'errors');
1035 } else {
1036 dol_print_error($db);
1037 }
1038 }
1039 }
1040
1041 // If verif ok and action modify, modify the line
1042 if ($ok && GETPOST('actionmodify')) {
1043 if ($tabrowid[$id]) {
1044 $rowidcol = $tabrowid[$id];
1045 } else {
1046 $rowidcol = "rowid";
1047 }
1048
1049 // Modify entry
1050 $sql = "UPDATE ".MAIN_DB_PREFIX.$tablename." SET ";
1051 // Modifie valeur des champs
1052 if ($tabrowid[$id] && !in_array($tabrowid[$id], $listfieldmodify)) {
1053 $sql .= $tabrowid[$id]."=";
1054 $sql .= "'".$db->escape($rowid)."', ";
1055 }
1056 $i = 0;
1057 foreach ($listfieldmodify as $field) {
1058 $keycode = empty($listfieldvalue[$i]) ? '' : $listfieldvalue[$i];
1059 if (empty($keycode)) {
1060 $keycode = $field;
1061 }
1062
1063 if ($field == 'price' || preg_match('/^amount/i', $field)) {
1064 $_POST[$keycode] = price2num(GETPOST($keycode), 'MU');
1065 } elseif ($field == 'taux' || $field == 'localtax1') {
1066 $_POST[$keycode] = price2num(GETPOST($keycode), 8); // Note that localtax2 can be a list of rates separated by coma like X:Y:Z
1067 } elseif ($field == 'entity') {
1068 $_POST[$keycode] = getEntity($tablename);
1069 }
1070
1071 if ($i) {
1072 $sql .= ",";
1073 }
1074 $sql .= $field."=";
1075 if ($keycode == 'sortorder') { // For column name 'sortorder', we use the field name 'position'
1076 $sql .= GETPOSTINT('position');
1077 } elseif (GETPOST($keycode) == '' && !($keycode == 'code' && $id == DICT_TVA)) {
1078 $sql .= "null"; // For vat, we want/accept code = ''
1079 } elseif ($keycode == 'content') {
1080 $sql .= "'".$db->escape(GETPOST($keycode, 'restricthtml'))."'";
1081 } elseif (in_array($keycode, array('joinfile', 'private', 'pos', 'position', 'scale', 'use_default'))) {
1082 $sql .= GETPOSTINT($keycode);
1083 } else {
1084 $sql .= "'".$db->escape(GETPOST($keycode, 'alphanohtml'))."'";
1085 }
1086
1087 $i++;
1088 }
1089 if (in_array($rowidcol, array('code', 'code_iso'))) {
1090 $sql .= " WHERE ".$db->sanitize($rowidcol)." = '".$db->escape($rowid)."'";
1091 } else {
1092 $sql .= " WHERE ".$db->sanitize($rowidcol)." = ".((int) $rowid);
1093 }
1094 if (in_array('entity', $listfieldmodify)) {
1095 $sql .= " AND entity = ".((int) getEntity($tablename, 0));
1096 }
1097
1098 dol_syslog("actionmodify", LOG_DEBUG);
1099 //print $sql;
1100 $resql = $db->query($sql);
1101 if (!$resql) {
1102 setEventMessages($db->error(), null, 'errors');
1103 }
1104 }
1105
1106 if (!$ok && GETPOST('actionadd')) {
1107 $action = 'create';
1108 }
1109 if (!$ok && GETPOST('actionmodify')) {
1110 $action = 'edit';
1111 }
1112 }
1113
1114 if ($action == 'confirm_delete' && $confirm == 'yes') { // delete
1115 if ($tabrowid[$id]) {
1116 $rowidcol = $tabrowid[$id];
1117 } else {
1118 $rowidcol = "rowid";
1119 }
1120
1121 $tablename = $tabname[$id];
1122 $tablename = preg_replace('/^'.preg_quote(MAIN_DB_PREFIX, '/').'/', '', $tablename);
1123
1124 $sql = "DELETE FROM ".MAIN_DB_PREFIX.$tablename." WHERE ".$rowidcol." = '".$db->escape($rowid)."'".($entity != '' ? " AND entity = ".(int) $entity : '');
1125
1126 dol_syslog("delete", LOG_DEBUG);
1127 $result = $db->query($sql);
1128 if (!$result) {
1129 if ($db->errno() == 'DB_ERROR_CHILD_EXISTS') {
1130 setEventMessages($langs->transnoentities("ErrorRecordIsUsedByChild"), null, 'errors');
1131 } else {
1132 dol_print_error($db);
1133 }
1134 }
1135 }
1136
1137 // activate
1138 if ($action == $acts[0]) {
1139 if ($tabrowid[$id]) {
1140 $rowidcol = $tabrowid[$id];
1141 } else {
1142 $rowidcol = "rowid";
1143 }
1144
1145 $tablename = $tabname[$id];
1146 $tablename = preg_replace('/^'.preg_quote(MAIN_DB_PREFIX, '/').'/', '', $tablename);
1147
1148 if ($rowid) {
1149 $sql = "UPDATE ".MAIN_DB_PREFIX.$tablename." SET active = 1 WHERE ".$db->escape($rowidcol)." = '".$db->escape($rowid)."'".($entity != '' ? " AND entity = ".(int) $entity : '');
1150 } elseif ($code) {
1151 $sql = "UPDATE ".MAIN_DB_PREFIX.$tablename." SET active = 1 WHERE code = '".$db->escape(dol_escape_htmltag($code))."'".($entity != '' ? " AND entity = ".(int) $entity : '');
1152 } else {
1153 $sql = null;
1154 }
1155
1156 if ($sql !== null) {
1157 $result = $db->query($sql);
1158 if (!$result) {
1159 dol_print_error($db);
1160 }
1161 } else {
1162 dol_print_error(null, "No DB entry or no code");
1163 }
1164 }
1165
1166 // disable
1167 if ($action == $acts[1]) {
1168 if ($tabrowid[$id]) {
1169 $rowidcol = $tabrowid[$id];
1170 } else {
1171 $rowidcol = "rowid";
1172 }
1173
1174 $tablename = $tabname[$id];
1175 $tablename = preg_replace('/^'.preg_quote(MAIN_DB_PREFIX, '/').'/', '', $tablename);
1176
1177 if ($rowid) {
1178 $sql = "UPDATE ".MAIN_DB_PREFIX.$tablename." SET active = 0 WHERE ".$rowidcol." = '".$db->escape($rowid)."'".($entity != '' ? " AND entity = ".(int) $entity : '');
1179 } elseif ($code) {
1180 $sql = "UPDATE ".MAIN_DB_PREFIX.$tablename." SET active = 0 WHERE code = '".$db->escape(dol_escape_htmltag($code))."'".($entity != '' ? " AND entity = ".(int) $entity : '');
1181 } else {
1182 $sql = null;
1183 }
1184
1185 if ($sql !== null) {
1186 $result = $db->query($sql);
1187 if (!$result) {
1188 dol_print_error($db);
1189 }
1190 } else {
1191 dol_print_error(null, "No DB entry or no code");
1192 }
1193 }
1194
1195 // favorite
1196 if ($action == 'activate_favorite') {
1197 if ($tabrowid[$id]) {
1198 $rowidcol = $tabrowid[$id];
1199 } else {
1200 $rowidcol = "rowid";
1201 }
1202
1203 $tablename = $tabname[$id];
1204 $tablename = preg_replace('/^'.preg_quote(MAIN_DB_PREFIX, '/').'/', '', $tablename);
1205
1206 if ($rowid) {
1207 $sql = "UPDATE ".MAIN_DB_PREFIX.$tablename." SET favorite = 1 WHERE ".$rowidcol." = '".$db->escape($rowid)."'".($entity != '' ? " AND entity = ".(int) $entity : '');
1208 } elseif ($code) {
1209 $sql = "UPDATE ".MAIN_DB_PREFIX.$tablename." SET favorite = 1 WHERE code = '".$db->escape(dol_escape_htmltag($code))."'".($entity != '' ? " AND entity = ".(int) $entity : '');
1210 } else {
1211 $sql = null;
1212 }
1213
1214 if ($sql !== null) {
1215 $result = $db->query($sql);
1216 if (!$result) {
1217 dol_print_error($db);
1218 }
1219 } else {
1220 dol_print_error(null, "No DB entry or no code");
1221 }
1222 }
1223
1224 // disable favorite
1225 if ($action == 'disable_favorite') {
1226 if ($tabrowid[$id]) {
1227 $rowidcol = $tabrowid[$id];
1228 } else {
1229 $rowidcol = "rowid";
1230 }
1231
1232 $tablename = $tabname[$id];
1233 $tablename = preg_replace('/^'.preg_quote(MAIN_DB_PREFIX, '/').'/', '', $tablename);
1234
1235 if ($rowid) {
1236 $sql = "UPDATE ".MAIN_DB_PREFIX.$tablename." SET favorite = 0 WHERE ".$rowidcol." = '".$db->escape($rowid)."'".($entity != '' ? " AND entity = ".(int) $entity : '');
1237 } elseif ($code) {
1238 $sql = "UPDATE ".MAIN_DB_PREFIX.$tablename." SET favorite = 0 WHERE code = '".$db->escape(dol_escape_htmltag($code))."'".($entity != '' ? " AND entity = ".(int) $entity : '');
1239 } else {
1240 $sql = null;
1241 }
1242
1243 if ($sql !== null) {
1244 $result = $db->query($sql);
1245 if (!$result) {
1246 dol_print_error($db);
1247 }
1248 } else {
1249 dol_print_error(null, "No DB entry or no code");
1250 }
1251 }
1252
1253 // Is in EEC - Activate
1254 if ($action == 'activate_eec') {
1255 if ($tabrowid[$id]) {
1256 $rowidcol = $tabrowid[$id];
1257 } else {
1258 $rowidcol = "rowid";
1259 }
1260
1261 $tablename = $tabname[$id];
1262 $tablename = preg_replace('/^'.preg_quote(MAIN_DB_PREFIX, '/').'/', '', $tablename);
1263
1264 if ($rowid) {
1265 $sql = "UPDATE ".MAIN_DB_PREFIX.$tablename." SET eec = 1 WHERE ".$rowidcol." = '".$db->escape($rowid)."'".($entity != '' ? " AND entity = ".(int) $entity : '');
1266 } elseif ($code) {
1267 $sql = "UPDATE ".MAIN_DB_PREFIX.$tablename." SET eec = 1 WHERE code = '".$db->escape(dol_escape_htmltag($code))."'".($entity != '' ? " AND entity = ".(int) $entity : '');
1268 } else {
1269 $sql = null;
1270 }
1271
1272 if ($sql !== null) {
1273 $result = $db->query($sql);
1274 if (!$result) {
1275 dol_print_error($db);
1276 }
1277 } else {
1278 dol_print_error(null, "No DB entry or no code");
1279 }
1280 }
1281
1282 // Is in EEC - Disable
1283 if ($action == 'disable_eec') {
1284 if ($tabrowid[$id]) {
1285 $rowidcol = $tabrowid[$id];
1286 } else {
1287 $rowidcol = "rowid";
1288 }
1289
1290 $tablename = $tabname[$id];
1291 $tablename = preg_replace('/^'.preg_quote(MAIN_DB_PREFIX, '/').'/', '', $tablename);
1292
1293 if ($rowid) {
1294 $sql = "UPDATE ".MAIN_DB_PREFIX.$tablename." SET eec = 0 WHERE ".$rowidcol." = '".$db->escape($rowid)."'".($entity != '' ? " AND entity = ".(int) $entity : '');
1295 } elseif ($code) {
1296 $sql = "UPDATE ".MAIN_DB_PREFIX.$tablename." SET eec = 0 WHERE code = '".$db->escape(dol_escape_htmltag($code))."'".($entity != '' ? " AND entity = ".(int) $entity : '');
1297 } else {
1298 $sql = null;
1299 }
1300
1301 if ($sql !== null) {
1302 $result = $db->query($sql);
1303 if (!$result) {
1304 dol_print_error($db);
1305 }
1306 } else {
1307 dol_print_error(null, "No DB entry or no code");
1308 }
1309 }
1310}
1311
1312
1313/*
1314 * View
1315 */
1316
1317$form = new Form($db);
1318
1319$title = $langs->trans("DictionarySetup");
1320
1321llxHeader('', $title, '', '', 0, 0, '', '', '', 'mod-admin page-dict');
1322
1323if (GETPOSTINT('id') == DICT_SOCIALNETWORKS && $from == 'socialnetworksetup') {
1324 $head = socialnetwork_prepare_head();
1325 print dol_get_fiche_head($head, 'dict', $langs->trans('MenuDict'), -1, 'user');
1326}
1327
1328
1329$linkback = '';
1330if ($id && empty($from)) {
1331 $title .= ' - '.$langs->trans($tablib[$id]);
1332 $linkback = '<a href="'.$_SERVER['PHP_SELF'].'">'.img_picto($langs->trans("BackToDictionaryList"), 'back', 'class="pictofixedwidth"').'<span class="hideonsmartphone">'.$langs->trans("BackToDictionaryList").'</span></a>';
1333}
1334$titlepicto = 'title_setup';
1335if ($id == DICT_TVA && GETPOST('from') == 'accountancy') {
1336 $title = $langs->trans("MenuVatAccounts");
1337 $titlepicto = 'accountancy';
1338}
1339if ($id == DICT_CHARGESOCIALES && GETPOST('from') == 'accountancy') {
1340 $title = $langs->trans("MenuTaxAccounts");
1341 $titlepicto = 'accountancy';
1342}
1343
1344$param = '&id='.urlencode((string) ($id));
1345if ($search_country_id || GETPOSTISSET('page') || GETPOST('button_removefilter', 'alpha') || GETPOST('button_removefilter.x', 'alpha') || GETPOST('button_removefilter_x', 'alpha')) {
1346 $param .= '&search_country_id='.urlencode((string) ($search_country_id ? $search_country_id : -1));
1347}
1348if ($search_code != '') {
1349 $param .= '&search_code='.urlencode($search_code);
1350}
1351if ($search_active != '') {
1352 $param .= '&search_active='.urlencode($search_active);
1353}
1354if ($entity != '') {
1355 $param .= '&entity='.(int) $entity;
1356}
1357if ($from) {
1358 $param .= '&from='.urlencode($from);
1359}
1360$paramwithsearch = $param;
1361if ($sortorder) {
1362 $paramwithsearch .= '&sortorder='.urlencode($sortorder);
1363}
1364if ($sortfield) {
1365 $paramwithsearch .= '&sortfield='.urlencode($sortfield);
1366}
1367if ($from) {
1368 $paramwithsearch .= '&from='.urlencode($from);
1369}
1370
1371
1372// Confirmation of the deletion of the line
1373if ($action == 'delete') {
1374 print $form->formconfirm($_SERVER["PHP_SELF"].'?'.($page ? 'page='.$page.'&' : '').'rowid='.urlencode($rowid).'&code='.urlencode($code).$paramwithsearch, $langs->trans('DeleteLine'), $langs->trans('ConfirmDeleteLine'), 'confirm_delete', '', 0, 1);
1375}
1376
1377// Show a dictionary
1378if ($id > 0) {
1379 // Complete search values request with sort criteria
1380 $sqlfields = $tabsql[$id];
1381
1382 $tablecode = 't.code';
1383 $tableprefix = '';
1384 $tableprefixarray = array(DICT_FORME_JURIDIQUE => 'f.code', DICT_DEPARTEMENTS => 'd.code_departement', DICT_REGIONS => 'r.code_region', DICT_COUNTRY => 'c.code', DICT_CIVILITY => 'c.code', DICT_ACTIONCOMM => 'a.code', DICT_CURRENCIES => 'code_iso', DICT_ECOTAXE => 'e.code', DICT_HOLIDAY_TYPES => 'h.code', DICT_CHARGESOCIALES => 'a.code', DICT_HRM_PUBLIC_HOLIDAY => 'a.code', DICT_UNITS => 'r.code', DICT_SOCIALNETWORKS => 's.code', 45 => 'f.code', 46 => 'f.code', 47 => 'f.code', 48 => 'f.code');
1385 if (!empty($tableprefixarray[$id])) {
1386 $tablecode = $tableprefixarray[$id];
1387 $tableprefix = preg_replace('/\..*$/', '.', $tablecode);
1388 }
1389 $reg = array();
1390 if (empty($tableprefix) && preg_match('/SELECT ([a-z]\.)rowid/i', $sqlfields, $reg)) {
1391 $tableprefix = $reg[1];
1392 }
1393
1394 $sql = $sqlfields;
1395 if (!preg_match('/ WHERE /', $sql)) {
1396 $sql .= " WHERE 1 = 1";
1397 }
1398 if ($search_country_id > 0) {
1399 $sql .= " AND c.rowid = ".((int) $search_country_id);
1400 }
1401 if ($search_code != '') {
1402 $sql .= natural_search($tablecode, $search_code);
1403 }
1404 if ($search_active == 'yes') {
1405 $sql .= " AND ".$db->sanitize($tableprefix)."active = 1";
1406 } elseif ($search_active == 'no') {
1407 $sql .= " AND ".$db->sanitize($tableprefix)."active = 0";
1408 }
1409
1410 // Count total nb of records
1411 $nbtotalofrecords = '';
1412 if (!getDolGlobalInt('MAIN_DISABLE_FULL_SCANLIST')) {
1413 /* The fast and low memory method to get and count full list converts the sql into a sql count */
1414 $sqlforcount = preg_replace('/^.*\sFROM\s/', 'SELECT COUNT(*) as nbtotalofrecords FROM ', $sql);
1415 $sqlforcount = preg_replace('/GROUP BY .*$/', '', $sqlforcount);
1416 $resql = $db->query($sqlforcount);
1417 if ($resql) {
1418 $objforcount = $db->fetch_object($resql);
1419 $nbtotalofrecords = $objforcount->nbtotalofrecords;
1420 } else {
1421 dol_print_error($db);
1422 }
1423
1424 if (($page * $listlimit) > $nbtotalofrecords) { // if total resultset is smaller than the paging size (filtering), goto and load page 0
1425 $page = 0;
1426 $offset = 0;
1427 }
1428 $db->free($resql);
1429 }
1430
1431 if ($sortfield) {
1432 // If sort order is "country", we use country_code instead
1433 if ($sortfield == 'country') {
1434 $sortfield = 'country_code';
1435 }
1436 $sql .= $db->order($sortfield, $sortorder);
1437 $sql .= ", ";
1438 // Clear the required sort criteria for the tabsqlsort to be able to force it with selected value
1439 $tabsqlsort[$id] = preg_replace('/([a-z]+\.)?'.$sortfield.' '.$sortorder.',/i', '', $tabsqlsort[$id]);
1440 $tabsqlsort[$id] = preg_replace('/([a-z]+\.)?'.$sortfield.',/i', '', $tabsqlsort[$id]);
1441 } else {
1442 $sql .= " ORDER BY ";
1443 }
1444 $sql .= $tabsqlsort[$id];
1445
1446 $sql .= $db->plimit($listlimit + 1, $offset);
1447
1448 $resql = $db->query($sql);
1449 if (!$resql) {
1450 dol_print_error($db);
1451 exit;
1452 }
1453 $num = $db->num_rows($resql);
1454
1455 //print $sql;
1456
1457 if (empty($tabfield[$id])) {
1458 dol_print_error($db, 'The table with id '.$id.' has no array tabfield defined');
1459 exit;
1460 }
1461 $fieldlist = explode(',', $tabfield[$id]);
1462
1463 print '<form action="'.$_SERVER['PHP_SELF'].'?id='.$id.'" method="POST">';
1464 print '<input type="hidden" name="token" value="'.newToken().'">';
1465 print '<input type="hidden" name="from" value="'.dol_escape_htmltag($from).'">';
1466
1467 // Special warning for VAT dictionary
1468 if ($id == DICT_TVA && !getDolGlobalString('FACTURE_TVAOPTION')) {
1469 print info_admin($langs->trans("VATIsUsedIsOff", $langs->transnoentities("Setup"), $langs->transnoentities("CompanyFoundation")));
1470 print "<br>\n";
1471 }
1472
1473 // List of available record in database
1474 dol_syslog("htdocs/admin/dict", LOG_DEBUG);
1475
1476 $resql = $db->query($sql);
1477 if ($resql) {
1478 $num = $db->num_rows($resql);
1479 $i = 0;
1480
1481 $massactionbutton = $linkback;
1482
1483 $newcardbutton = '';
1484 /*$newcardbutton .= dolGetButtonTitle($langs->trans('ViewList'), '', 'fa fa-bars imgforviewmode', $_SERVER["PHP_SELF"].'?mode=common'.preg_replace('/(&|\?)*mode=[^&]+/', '', $param), '', ((empty($mode) || $mode == 'common') ? 2 : 1), array('morecss'=>'reposition'));
1485 $newcardbutton .= dolGetButtonTitle($langs->trans('ViewKanban'), '', 'fa fa-th-list imgforviewmode', $_SERVER["PHP_SELF"].'?mode=kanban'.preg_replace('/(&|\?)*mode=[^&]+/', '', $param), '', ($mode == 'kanban' ? 2 : 1), array('morecss'=>'reposition'));
1486 $newcardbutton .= dolGetButtonTitleSeparator();
1487 */
1488 $newcardbutton .= dolGetButtonTitle($langs->trans('New'), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/admin/dict.php?action=create'.$param.'&backtopage='.urlencode($_SERVER['PHP_SELF']), '', $permissiontoadd);
1489
1490 print_barre_liste($title, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, 'tools', 0, $newcardbutton, '', $listlimit, 1, 0, 1);
1491
1492
1493 if ($action == 'create') {
1494 // Form to add a new line
1495 if ($tabname[$id]) {
1496 $withentity = null;
1497
1498 $fieldlist = explode(',', $tabfield[$id]);
1499
1500 print '<div class="div-table-responsive-no-min">';
1501 print '<table class="noborder centpercent">';
1502
1503 // Line for title
1504 print '<!-- line title to add new entry -->';
1505 $tdsoffields = '<tr class="liste_titre">';
1506 foreach ($fieldlist as $field => $value) {
1507 if ($value == 'entity') {
1508 $withentity = getEntity($tabname[$id]);
1509 continue;
1510 }
1511
1512 // Define field friendly name from its technical name
1513 $valuetoshow = ucfirst($value); // Par default
1514 $valuetoshow = $langs->trans($valuetoshow); // try to translate
1515 $class = '';
1516
1517 if ($value == 'pos') {
1518 $valuetoshow = $langs->trans("Position");
1519 $class = 'right';
1520 }
1521 if ($value == 'source') {
1522 $valuetoshow = $langs->trans("Contact");
1523 }
1524 if ($value == 'price') {
1525 $valuetoshow = $langs->trans("PriceUHT");
1526 }
1527 if ($value == 'taux') {
1528 if ($tabname[$id] != "c_revenuestamp") {
1529 $valuetoshow = $langs->trans("Rate");
1530 } else {
1531 $valuetoshow = $langs->trans("Amount");
1532 }
1533 $class = 'center';
1534 }
1535 if ($value == 'localtax1_type') {
1536 $valuetoshow = $langs->trans("UseLocalTax")." 2";
1537 $class = "center";
1538 $sortable = 0;
1539 }
1540 if ($value == 'localtax1') {
1541 $valuetoshow = $langs->trans("RateOfTaxN", '2');
1542 $class = "center minwidth75";
1543 }
1544 if ($value == 'localtax2_type') {
1545 $valuetoshow = $langs->trans("UseLocalTax")." 3";
1546 $class = "center";
1547 $sortable = 0;
1548 }
1549 if ($value == 'localtax2') {
1550 $valuetoshow = $langs->trans("RateOfTaxN", '3');
1551 $class = "center minwidth75";
1552 }
1553 if ($value == 'type_vat') {
1554 $valuetoshow = $langs->trans("VATType");
1555 }
1556 if ($value == 'organization') {
1557 $valuetoshow = $langs->trans("Organization");
1558 }
1559 if ($value == 'lang') {
1560 $valuetoshow = $langs->trans("Language");
1561 }
1562 if ($value == 'type') {
1563 if ($tabname[$id] == "c_paiement") {
1564 $valuetoshow = $form->textwithtooltip($langs->trans("Type"), $langs->trans("TypePaymentDesc"), 2, 1, img_help(1, ''));
1565 } else {
1566 $valuetoshow = $langs->trans("Type");
1567 }
1568 }
1569 if ($value == 'code') {
1570 $valuetoshow = $langs->trans("Code");
1571 $class = 'maxwidth100';
1572 }
1573 if ($value == 'libelle' || $value == 'label') {
1574 $valuetoshow = $form->textwithtooltip($langs->trans("Label"), $langs->trans("LabelUsedByDefault"), 2, 1, img_help(1, ''));
1575 }
1576 if ($value == 'libelle_facture') {
1577 $valuetoshow = $form->textwithtooltip($langs->trans("LabelOnDocuments"), $langs->trans("LabelUsedByDefault"), 2, 1, img_help(1, ''));
1578 }
1579 if ($value == 'deposit_percent') {
1580 $valuetoshow = $langs->trans('DepositPercent');
1581 $class = 'right';
1582 }
1583 if ($value == 'country') {
1584 if (in_array('region_id', $fieldlist)) {
1585 //print '<td>&nbsp;</td>';
1586 continue;
1587 } // For region page, we do not show the country input
1588 $valuetoshow = $langs->trans("Country");
1589 }
1590 if ($value == 'department_buyer') {
1591 $valuetoshow = '';
1592 }
1593 if ($value == 'recuperableonly') {
1594 $valuetoshow = $langs->trans("NPR");
1595 $class = "center";
1596 }
1597 if ($value == 'nbjour') {
1598 $valuetoshow = $langs->trans("NbOfDays");
1599 $class = 'right';
1600 }
1601 if ($value == 'type_cdr') {
1602 $valuetoshow = $langs->trans("AtEndOfMonth");
1603 $class = "center";
1604 }
1605 if ($value == 'decalage') {
1606 $valuetoshow = $langs->trans("Offset");
1607 $class = 'right';
1608 }
1609 if ($value == 'width' || $value == 'nx') {
1610 $valuetoshow = $langs->trans("Width");
1611 }
1612 if ($value == 'height' || $value == 'ny') {
1613 $valuetoshow = $langs->trans("Height");
1614 }
1615 if ($value == 'unit' || $value == 'metric') {
1616 $valuetoshow = $langs->trans("MeasuringUnit");
1617 }
1618 if ($value == 'region_id' || $value == 'country_id' || $value == 'department_buyer_id') {
1619 $valuetoshow = '';
1620 }
1621 if ($value == 'accountancy_code') {
1622 $valuetoshow = $langs->trans("AccountancyCode");
1623 }
1624 if ($value == 'accountancy_code_sell') {
1625 $valuetoshow = $langs->trans("AccountancyCodeSell");
1626 }
1627 if ($value == 'accountancy_code_buy') {
1628 $valuetoshow = $langs->trans("AccountancyCodeBuy");
1629 }
1630 if ($value == 'pcg_version' || $value == 'fk_pcg_version') {
1631 $valuetoshow = $langs->trans("Pcg_version");
1632 }
1633 if ($value == 'account_parent') {
1634 $valuetoshow = $langs->trans("Accountparent");
1635 }
1636 if ($value == 'pcg_type') {
1637 $valuetoshow = $langs->trans("Pcg_type");
1638 }
1639 if ($value == 'pcg_subtype') {
1640 $valuetoshow = $langs->trans("Pcg_subtype");
1641 }
1642 if ($value == 'sortorder') {
1643 $valuetoshow = $langs->trans("SortOrder");
1644 $class = 'center';
1645 }
1646 if ($value == 'short_label') {
1647 $valuetoshow = $langs->trans("ShortLabel");
1648 }
1649 if ($value == 'fk_parent') {
1650 $valuetoshow = $langs->trans("ParentID");
1651 $class = 'center';
1652 }
1653 if ($value == 'range_account') {
1654 $valuetoshow = $langs->trans("Range");
1655 }
1656 if ($value == 'sens') {
1657 $valuetoshow = $langs->trans("Sens");
1658 }
1659 if ($value == 'category_type') {
1660 $valuetoshow = $langs->trans("Calculated");
1661 }
1662 if ($value == 'formula') {
1663 $valuetoshow = $langs->trans("Formula");
1664 }
1665 if ($value == 'paper_size') {
1666 $valuetoshow = $langs->trans("PaperSize");
1667 }
1668 if ($value == 'orientation') {
1669 $valuetoshow = $langs->trans("Orientation");
1670 }
1671 if ($value == 'leftmargin') {
1672 $valuetoshow = $langs->trans("LeftMargin");
1673 }
1674 if ($value == 'topmargin') {
1675 $valuetoshow = $langs->trans("TopMargin");
1676 }
1677 if ($value == 'spacex') {
1678 $valuetoshow = $langs->trans("SpaceX");
1679 }
1680 if ($value == 'spacey') {
1681 $valuetoshow = $langs->trans("SpaceY");
1682 }
1683 if ($value == 'font_size') {
1684 $valuetoshow = $langs->trans("FontSize");
1685 }
1686 if ($value == 'custom_x') {
1687 $valuetoshow = $langs->trans("CustomX");
1688 }
1689 if ($value == 'custom_y') {
1690 $valuetoshow = $langs->trans("CustomY");
1691 }
1692 if ($value == 'percent') {
1693 $valuetoshow = $langs->trans("Percentage");
1694 }
1695 if ($value == 'affect') {
1696 $valuetoshow = $langs->trans("WithCounter");
1697 }
1698 if ($value == 'delay') {
1699 $valuetoshow = $langs->trans("NoticePeriod");
1700 }
1701 if ($value == 'newbymonth') {
1702 $valuetoshow = $langs->trans("NewByMonth");
1703 }
1704 if ($value == 'fk_tva') {
1705 $valuetoshow = $langs->trans("VAT");
1706 }
1707 if ($value == 'range_ik') {
1708 $valuetoshow = $langs->trans("RangeIk");
1709 }
1710 if ($value == 'fk_c_exp_tax_cat') {
1711 $valuetoshow = $langs->trans("CarCategory");
1712 }
1713 if ($value == 'revenuestamp_type') {
1714 $valuetoshow = $langs->trans('TypeOfRevenueStamp');
1715 }
1716 if ($value == 'use_default') {
1717 $valuetoshow = $langs->trans('Default');
1718 $class = 'center';
1719 }
1720 if ($value == 'unit_type') {
1721 $valuetoshow = $langs->trans('TypeOfUnit');
1722 }
1723 if ($value == 'public' && $tablib[$id] == 'TicketDictCategory') {
1724 $valuetoshow = $langs->trans('TicketGroupIsPublic');
1725 $class = 'center';
1726 }
1727 if ($value == 'block_if_negative') {
1728 $valuetoshow = $langs->trans('BlockHolidayIfNegative');
1729 }
1730 if ($value == 'type_duration') {
1731 $valuetoshow = $langs->trans('Unit');
1732 }
1733
1734 if ($id == DICT_DEPARTEMENTS) { // Special case for state page
1735 if ($value == 'region_id') {
1736 $valuetoshow = '&nbsp;';
1737 $showfield = 1;
1738 }
1739 if ($value == 'region') {
1740 $valuetoshow = $langs->trans("Country").'/'.$langs->trans("Region");
1741 $showfield = 1;
1742 }
1743 }
1744
1745 if ($valuetoshow != '') {
1746 $tooltiphelp = (isset($tabcomplete[$tabname[$id]]['help'][$value]) ? $tabcomplete[$tabname[$id]]['help'][$value] : '');
1747
1748 $tdsoffields .= '<th'.($class ? ' class="'.$class.'"' : '').'>';
1749 if ($tooltiphelp && preg_match('/^http(s*):/i', $tooltiphelp)) {
1750 $tdsoffields .= '<a href="'.$tooltiphelp.'" target="_blank">'.$valuetoshow.' '.img_help(1, $valuetoshow).'</a>';
1751 } elseif ($tooltiphelp) {
1752 $tdsoffields .= $form->textwithpicto($valuetoshow, $tooltiphelp);
1753 } else {
1754 $tdsoffields .= $valuetoshow;
1755 }
1756 $tdsoffields .= '</th>';
1757 }
1758 }
1759
1760 if ($id == DICT_COUNTRY) {
1761 $tdsoffields .= '<th></th>';
1762 $tdsoffields .= '<th></th>';
1763 }
1764 $tdsoffields .= '<th>';
1765 $tdsoffields .= '<input type="hidden" name="id" value="'.$id.'">';
1766 if (!is_null($withentity)) {
1767 $tdsoffields .= '<input type="hidden" name="entity" value="'.$withentity.'">';
1768 }
1769 $tdsoffields .= '</th>';
1770 $tdsoffields .= '<th style="min-width: 26px;"></th>';
1771 $tdsoffields .= '<th style="min-width: 26px;"></th>';
1772 $tdsoffields .= '</tr>';
1773
1774 print $tdsoffields;
1775
1776
1777 // Line to enter new values
1778 print '<!-- line input to add new entry -->';
1779 print '<tr class="oddeven nodrag nodrop nohover">';
1780
1781 $obj = new stdClass();
1782 // If data was already input, we define them in obj to populate input fields.
1783 if (GETPOST('actionadd')) {
1784 foreach ($fieldlist as $key => $val) {
1785 if (GETPOST($val) != '') {
1786 $obj->$val = GETPOST($val);
1787 }
1788 }
1789 }
1790
1791 $tmpaction = 'create';
1792 $parameters = array('fieldlist' => $fieldlist, 'tabname' => $tabname[$id]);
1793 $reshook = $hookmanager->executeHooks('createDictionaryFieldlist', $parameters, $obj, $tmpaction); // Note that $action and $object may have been modified by some hooks
1794 $error = $hookmanager->error;
1795 $errors = $hookmanager->errors;
1796
1797 if ($id == DICT_REGIONS) {
1798 unset($fieldlist[2]); // Remove field ??? if dictionary Regions
1799 }
1800
1801 if (empty($reshook)) {
1802 dictFieldList($fieldlist, $obj, $tabname[$id], 'add');
1803 }
1804
1805 if ($id == DICT_COUNTRY) {
1806 print '<td></td>';
1807 print '<td></td>';
1808 }
1809 print '<td colspan="3" class="center">';
1810 if ($action != 'edit') {
1811 print '<input type="submit" class="button button-add small" name="actionadd" value="'.$langs->trans("Add").'">';
1812 } else {
1813 print '<input type="submit" class="button button-add small disabled" name="actionadd" value="'.$langs->trans("Add").'">';
1814 }
1815 print '</td>';
1816
1817 print "</tr>";
1818
1819 print '</table>';
1820 print '</div>';
1821 }
1822
1823 print '</form>';
1824
1825 print '<form action="'.$_SERVER['PHP_SELF'].'?id='.$id.'" method="POST">';
1826 print '<input type="hidden" name="token" value="'.newToken().'">';
1827 print '<input type="hidden" name="from" value="'.dol_escape_htmltag(GETPOST('from', 'alpha')).'">';
1828 }
1829
1830
1831 $filterfound = 0;
1832 foreach ($fieldlist as $field => $value) {
1833 if ($value == 'entity') {
1834 continue;
1835 }
1836
1837 $showfield = 1; // By default
1838 if ($value == 'region_id' || $value == 'country_id' || $value == 'department_buyer_id') {
1839 $showfield = 0;
1840 }
1841
1842 if ($showfield) {
1843 if ($value == 'country') {
1844 $filterfound++;
1845 } elseif ($value == 'code') {
1846 $filterfound++;
1847 }
1848 }
1849 }
1850
1851 print '<div class="div-table-responsive">';
1852 print '<table class="noborder centpercent noborder">';
1853
1854 $colspan = 0;
1855
1856 // Title line with search input fields
1857 print '<!-- line title to search record -->'."\n";
1858 print '<tr class="liste_titre liste_titre_filter">';
1859
1860 // Action button
1861 if (getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
1862 print '<td class="liste_titre center">';
1863 if ($filterfound) {
1864 $searchpicto = $form->showFilterAndCheckAddButtons(0);
1865 print $searchpicto;
1866 }
1867 print '</td>';
1868 $colspan++;
1869 }
1870
1871 foreach ($fieldlist as $field => $value) {
1872 if ($value == 'entity') {
1873 continue;
1874 }
1875
1876 $showfield = 1; // By default
1877 if ($value == 'region_id' || $value == 'country_id' || $value == 'department_buyer_id') {
1878 $showfield = 0;
1879 }
1880
1881 if ($showfield) {
1882 if ($value == 'country') {
1883 print '<td class="liste_titre">';
1884 print $form->select_country($search_country_id, 'search_country_id', '', 28, 'minwidth100 maxwidth150 maxwidthonsmartphone', '', '&nbsp;');
1885 print '</td>';
1886 $colspan++;
1887 } elseif ($value == 'code') {
1888 print '<td class="liste_titre">';
1889 print '<input type="text" class="maxwidth100" name="search_code" value="'.dol_escape_htmltag($search_code).'">';
1890 print '</td>';
1891 $colspan++;
1892 } elseif ($value == 'type_vat') {
1893 print '<td class="liste_titre">';
1894 print $form->selectarray('search_'.$value, $type_vatList, (empty($obj->{$value}) ? '' : $obj->{$value}), 1);
1895 print '</td>';
1896 $colspan++;
1897 } else {
1898 print '<td class="liste_titre">';
1899 print '</td>';
1900 $colspan++;
1901 }
1902 }
1903 }
1904 if ($id == DICT_COUNTRY) {
1905 print '<td></td>';
1906 $colspan++;
1907 print '<td></td>';
1908 $colspan++;
1909 }
1910
1911 // Active
1912 print '<td class="liste_titre center parentonrightofpage">';
1913 print $form->selectyesno('search_active', $search_active, 0, false, 1, 1, 'maxwidth100 onrightofpage', 'Activated', 'Disabled');
1914 print '</td>';
1915 $colspan++;
1916
1917 // Action button
1918 if (!getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
1919 print '<td class="liste_titre center">';
1920 if ($filterfound) {
1921 $searchpicto = $form->showFilterAndCheckAddButtons(0);
1922 print $searchpicto;
1923 }
1924 print '</td>';
1925 $colspan++;
1926 }
1927
1928 print '</tr>';
1929
1930
1931 // Title of lines
1932 print '<!-- line title of record -->'."\n";
1933 print '<tr class="liste_titre">';
1934
1935 // Action button
1936 if (getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
1937 print getTitleFieldOfList('');
1938 }
1939
1940 foreach ($fieldlist as $field => $value) {
1941 if ($value == 'entity') {
1942 continue;
1943 }
1944
1945 if (in_array($value, array('label', 'libelle', 'libelle_facture')) && empty($tabcomplete[$tabname[$id]]['help'][$value])) {
1946 if (!isset($tabcomplete[$tabname[$id]]['help']) || !is_array($tabcomplete[$tabname[$id]]['help'])) { // protection when $tabcomplete[$tabname[$id]]['help'] is a an empty string, we must force it into an array
1947 $tabcomplete[$tabname[$id]]['help'] = array();
1948 }
1949 $tabcomplete[$tabname[$id]]['help'][$value] = $langs->trans('LabelUsedByDefault');
1950 }
1951
1952 // Determines the name of the field in relation to the possible names
1953 // in data dictionaries
1954 $showfield = 1; // By default
1955 $cssprefix = '';
1956 $sortable = 1;
1957 $valuetoshow = ucfirst($value); // By default
1958 $valuetoshow = $langs->trans($valuetoshow); // try to translate
1959
1960 // Special cases
1961 if ($value == 'source') {
1962 $valuetoshow = $langs->trans("Contact");
1963 }
1964 if ($value == 'price') {
1965 $valuetoshow = $langs->trans("PriceUHT");
1966 }
1967 if ($value == 'taux') {
1968 if ($tabname[$id] != "c_revenuestamp") {
1969 $valuetoshow = $langs->trans("Rate");
1970 } else {
1971 $valuetoshow = $langs->trans("Amount");
1972 }
1973 $cssprefix = 'center ';
1974 }
1975
1976 if ($value == 'type_vat') {
1977 $valuetoshow = $langs->trans("VATType");
1978 $cssprefix = "center minwidth75 ";
1979 $sortable = 0;
1980 }
1981 if ($value == 'localtax1_type') {
1982 $valuetoshow = $langs->trans("UseLocalTax")." 2";
1983 $cssprefix = "center minwidth75 ";
1984 $sortable = 0;
1985 }
1986 if ($value == 'localtax1') {
1987 $valuetoshow = $langs->trans("RateOfTaxN", '2');
1988 $cssprefix = "center minwidth75 ";
1989 $sortable = 0;
1990 }
1991 if ($value == 'localtax2_type') {
1992 $valuetoshow = $langs->trans("UseLocalTax")." 3";
1993 $cssprefix = "center minwidth75 ";
1994 $sortable = 0;
1995 }
1996 if ($value == 'localtax2') {
1997 $valuetoshow = $langs->trans("RateOfTaxN", '3');
1998 $cssprefix = "center minwidth75 ";
1999 $sortable = 0;
2000 }
2001 if ($value == 'organization') {
2002 $valuetoshow = $langs->trans("Organization");
2003 }
2004 if ($value == 'lang') {
2005 $valuetoshow = $langs->trans("Language");
2006 }
2007 if ($value == 'type') {
2008 $valuetoshow = $langs->trans("Type");
2009 }
2010 if ($value == 'code') {
2011 $valuetoshow = $langs->trans("Code");
2012 }
2013 if (in_array($value, array('pos', 'position'))) {
2014 $valuetoshow = $langs->trans("Position");
2015 $cssprefix = 'right ';
2016 }
2017 if ($value == 'libelle' || $value == 'label') {
2018 $valuetoshow = $langs->trans("Label");
2019 }
2020 if ($value == 'libelle_facture') {
2021 $valuetoshow = $langs->trans("LabelOnDocuments");
2022 }
2023 if ($value == 'deposit_percent') {
2024 $valuetoshow = $langs->trans('DepositPercent');
2025 $cssprefix = 'right ';
2026 }
2027 if ($value == 'country') {
2028 $valuetoshow = $langs->trans("Country");
2029 }
2030 if ($value == 'department_buyer') {
2031 $valuetoshow = $langs->trans('DepartmentBuyer');
2032 }
2033 if ($value == 'recuperableonly') {
2034 $valuetoshow = $langs->trans("NPR");
2035 $cssprefix = "center ";
2036 }
2037 if ($value == 'nbjour') {
2038 $valuetoshow = $langs->trans("NbOfDays");
2039 $cssprefix = 'right ';
2040 }
2041 if ($value == 'type_cdr') {
2042 $valuetoshow = $langs->trans("AtEndOfMonth");
2043 $cssprefix = "center ";
2044 }
2045 if ($value == 'decalage') {
2046 $valuetoshow = $langs->trans("Offset");
2047 $cssprefix = 'right ';
2048 }
2049 if ($value == 'width' || $value == 'nx') {
2050 $valuetoshow = $langs->trans("Width");
2051 }
2052 if ($value == 'height' || $value == 'ny') {
2053 $valuetoshow = $langs->trans("Height");
2054 }
2055 if ($value == 'unit' || $value == 'metric') {
2056 $valuetoshow = $langs->trans("MeasuringUnit");
2057 }
2058 if ($value == 'accountancy_code') {
2059 $valuetoshow = $langs->trans("AccountancyCode");
2060 }
2061 if ($value == 'accountancy_code_sell') {
2062 $valuetoshow = $langs->trans("AccountancyCodeSell");
2063 $sortable = 0;
2064 }
2065 if ($value == 'accountancy_code_buy') {
2066 $valuetoshow = $langs->trans("AccountancyCodeBuy");
2067 $sortable = 0;
2068 }
2069 if ($value == 'fk_pcg_version') {
2070 $valuetoshow = $langs->trans("Pcg_version");
2071 }
2072 if ($value == 'account_parent') {
2073 $valuetoshow = $langs->trans("Accountsparent");
2074 }
2075 if ($value == 'pcg_type') {
2076 $valuetoshow = $langs->trans("Pcg_type");
2077 }
2078 if ($value == 'pcg_subtype') {
2079 $valuetoshow = $langs->trans("Pcg_subtype");
2080 }
2081 if ($value == 'sortorder') {
2082 $valuetoshow = $langs->trans("SortOrder");
2083 $cssprefix = 'center ';
2084 }
2085 if ($value == 'short_label') {
2086 $valuetoshow = $langs->trans("ShortLabel");
2087 }
2088 if ($value == 'fk_parent') {
2089 $valuetoshow = $langs->trans("ParentID");
2090 $cssprefix = 'center ';
2091 }
2092 if ($value == 'range_account') {
2093 $valuetoshow = $langs->trans("Range");
2094 }
2095 if ($value == 'sens') {
2096 $valuetoshow = $langs->trans("Sens");
2097 }
2098 if ($value == 'category_type') {
2099 $valuetoshow = $langs->trans("Calculated");
2100 }
2101 if ($value == 'formula') {
2102 $valuetoshow = $langs->trans("Formula");
2103 }
2104 if ($value == 'paper_size') {
2105 $valuetoshow = $langs->trans("PaperSize");
2106 }
2107 if ($value == 'orientation') {
2108 $valuetoshow = $langs->trans("Orientation");
2109 }
2110 if ($value == 'leftmargin') {
2111 $valuetoshow = $langs->trans("LeftMargin");
2112 }
2113 if ($value == 'topmargin') {
2114 $valuetoshow = $langs->trans("TopMargin");
2115 }
2116 if ($value == 'spacex') {
2117 $valuetoshow = $langs->trans("SpaceX");
2118 }
2119 if ($value == 'spacey') {
2120 $valuetoshow = $langs->trans("SpaceY");
2121 }
2122 if ($value == 'font_size') {
2123 $valuetoshow = $langs->trans("FontSize");
2124 }
2125 if ($value == 'custom_x') {
2126 $valuetoshow = $langs->trans("CustomX");
2127 }
2128 if ($value == 'custom_y') {
2129 $valuetoshow = $langs->trans("CustomY");
2130 }
2131 if ($value == 'percent') {
2132 $valuetoshow = $langs->trans("Percentage");
2133 }
2134 if ($value == 'affect') {
2135 $valuetoshow = $langs->trans("WithCounter");
2136 }
2137 if ($value == 'delay') {
2138 $valuetoshow = $langs->trans("NoticePeriod");
2139 }
2140 if ($value == 'newbymonth') {
2141 $valuetoshow = $langs->trans("NewByMonth");
2142 }
2143 if ($value == 'fk_tva') {
2144 $valuetoshow = $langs->trans("VAT");
2145 }
2146 if ($value == 'range_ik') {
2147 $valuetoshow = $langs->trans("RangeIk");
2148 }
2149 if ($value == 'fk_c_exp_tax_cat') {
2150 $valuetoshow = $langs->trans("CarCategory");
2151 }
2152 if ($value == 'revenuestamp_type') {
2153 $valuetoshow = $langs->trans('TypeOfRevenueStamp');
2154 }
2155 if ($value == 'use_default') {
2156 $valuetoshow = $langs->trans('Default');
2157 $cssprefix = 'center ';
2158 }
2159 if ($value == 'unit_type') {
2160 $valuetoshow = $langs->trans('TypeOfUnit');
2161 }
2162 if ($value == 'public' && $tablib[$id] == 'TicketDictCategory') {
2163 $valuetoshow = $langs->trans('TicketGroupIsPublic');
2164 $cssprefix = 'center ';
2165 }
2166 if ($value == 'block_if_negative') {
2167 $valuetoshow = $langs->trans('BlockHolidayIfNegative');
2168 }
2169 if ($value == 'type_duration') {
2170 $valuetoshow = $langs->trans('Unit');
2171 }
2172
2173 if ($value == 'region_id' || $value == 'country_id' || $value == 'department_buyer_id') {
2174 $showfield = 0;
2175 }
2176
2177 // Show field title
2178 if ($showfield) {
2179 $tooltiphelp = (isset($tabcomplete[$tabname[$id]]['help'][$value]) ? $tabcomplete[$tabname[$id]]['help'][$value] : '');
2180
2181 if ($tooltiphelp && preg_match('/^http(s*):/i', $tooltiphelp)) {
2182 $newvaluetoshow = '<a href="'.$tooltiphelp.'" target="_blank">'.$valuetoshow.' '.img_help(1, $valuetoshow).'</a>';
2183 } elseif ($tooltiphelp) {
2184 $newvaluetoshow = $form->textwithpicto($valuetoshow, $tooltiphelp);
2185 } else {
2186 $newvaluetoshow = $valuetoshow;
2187 }
2188
2189 print getTitleFieldOfList($newvaluetoshow, 0, $_SERVER["PHP_SELF"], ($sortable ? $value : ''), ($page ? 'page='.$page.'&' : ''), $param, '', $sortfield, $sortorder, $cssprefix);
2190 }
2191 }
2192 // Favorite & EEC - Only activated on country dictionary
2193 if ($id == DICT_COUNTRY) {
2194 print getTitleFieldOfList($langs->trans("InEEC"), 0, $_SERVER["PHP_SELF"], "eec", ($page ? 'page='.$page.'&' : ''), $param, '', $sortfield, $sortorder, 'center ', 0, $langs->trans("CountryIsInEEC"));
2195 print getTitleFieldOfList($langs->trans("Favorite"), 0, $_SERVER["PHP_SELF"], "favorite", ($page ? 'page='.$page.'&' : ''), $param, '', $sortfield, $sortorder, 'center ');
2196 }
2197
2198 // Status
2199 print getTitleFieldOfList($langs->trans("Status"), 0, $_SERVER["PHP_SELF"], "active", ($page ? 'page='.$page.'&' : ''), $param, '', $sortfield, $sortorder, 'center ');
2200
2201 // Action button
2202 if (!getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
2203 print getTitleFieldOfList('');
2204 }
2205 print '</tr>';
2206
2207
2208 // Lines with values
2209 if ($num) {
2210 print '<!-- lines of dict -->'."\n";
2211 while ($i < $num) {
2212 $obj = $db->fetch_object($resql);
2213
2214 $withentity = null;
2215
2216 // We discard empty lines
2217 if ($id == DICT_COUNTRY) {
2218 if ($obj->code == '') {
2219 $i++;
2220 continue;
2221 }
2222 }
2223
2224 // Can an entry be erased, disabled or modified ? (true by default)
2225 $iserasable = 1;
2226 $canbedisabled = 1;
2227 $canbemodified = 1;
2228 if (isset($obj->code) && $id != DICT_TVA && $id != DICT_PRODUCT_NATURE) {
2229 if (($obj->code == '0' || $obj->code == '' || preg_match('/unknown/i', $obj->code))) {
2230 $iserasable = 0;
2231 $canbedisabled = 0;
2232 } elseif ($obj->code == 'RECEP') {
2233 $iserasable = 0;
2234 $canbedisabled = 0;
2235 } elseif ($obj->code == 'EF0') {
2236 $iserasable = 0;
2237 $canbedisabled = 0;
2238 }
2239 }
2240 if ($id == DICT_TYPE_CONTAINER && in_array($obj->code, array('banner', 'blogpost', 'menu', 'page', 'other', 'service', 'library'))) {
2241 $iserasable = 0;
2242 $canbedisabled = 0;
2243 if (in_array($obj->code, array('banner'))) {
2244 $canbedisabled = 1;
2245 }
2246 }
2247 if (isset($obj->type) && in_array($obj->type, array('system', 'systemauto'))) {
2248 $iserasable = 0;
2249 }
2250 if (in_array(empty($obj->code) ? '' : $obj->code, array('AC_OTH', 'AC_OTH_AUTO')) || in_array(empty($obj->type) ? '' : $obj->type, array('systemauto'))) {
2251 $canbedisabled = 0;
2252 $canbedisabled = 0;
2253 }
2254 $canbemodified = $iserasable;
2255
2256 if (!empty($obj->code) && $obj->code == 'RECEP') {
2257 $canbemodified = 1;
2258 }
2259 if ($tabname[$id] == "c_actioncomm") {
2260 $canbemodified = 1;
2261 }
2262
2263 if ($tabname[$id] == "c_product_nature" && in_array($obj->code, array(0, 1))) {
2264 $canbedisabled = 0;
2265 $canbemodified = 0;
2266 $iserasable = 0;
2267 }
2268 // Build Url. The table is id=, the id of line is rowid=
2269 $rowidcol = empty($tabrowid[$id]) ? 'rowid' : $tabrowid[$id];
2270 // If rowidcol not defined
2271 if (empty($rowidcol) || in_array($id, array(DICT_ACTIONCOMM, DICT_CHARGESOCIALES, DICT_TYPENT, DICT_PAIEMENT, DICT_TYPE_FEES, DICT_EFFECTIF, DICT_STCOMM, DICT_HRM_PUBLIC_HOLIDAY))) {
2272 $rowidcol = 'rowid';
2273 }
2274 $url = $_SERVER["PHP_SELF"].'?'.($page ? 'page='.$page.'&' : '').'sortfield='.urlencode($sortfield).'&sortorder='.urlencode($sortorder);
2275 $url .= '&rowid='.(isset($obj->$rowidcol) ? ((int) $obj->$rowidcol) : (!empty($obj->code) ? urlencode($obj->code) : ''));
2276 $url .= '&code='.(!empty($obj->code) ? urlencode($obj->code) : '');
2277 if (!empty($param)) {
2278 $url .= '&'.$param;
2279 }
2280 // If dictionary is different for each entity
2281 if (!is_null($withentity)) {
2282 $url .= '&entity='.((int) $withentity);
2283 }
2284 $url .= '&';
2285
2286
2287 //print_r($obj);
2288 print '<tr class="oddeven" id="rowid-'.(empty($obj->rowid) ? '' : $obj->rowid).'">';
2289
2290 // Action button
2291 if (getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
2292 print '<td class="center maxwidthsearch nowraponall">';
2293 // Modify link
2294 if ($canbemodified) {
2295 print '<a class="reposition editfielda marginleftonly paddingleft marginrightonly paddingright" href="'.$url.'action=edit&token='.newToken().'">'.img_edit().'</a>';
2296 }
2297 // Delete link
2298 if ($iserasable) {
2299 if ($user->admin) {
2300 print '<a class="reposition marginleftonly paddingleft marginrightonly paddingright" href="'.$url.'action=delete&token='.newToken().'">'.img_delete().'</a>';
2301 }
2302 }
2303 print '</td>';
2304 }
2305
2306 if ($action == 'edit' && ($rowid == (!empty($obj->rowid) ? $obj->rowid : $obj->code))) {
2307 $tmpaction = 'edit';
2308 $parameters = array('fieldlist' => $fieldlist, 'tabname' => $tabname[$id]);
2309 $reshook = $hookmanager->executeHooks('editDictionaryFieldlist', $parameters, $obj, $tmpaction); // Note that $action and $object may have been modified by some hooks
2310 $error = $hookmanager->error;
2311 $errors = $hookmanager->errors;
2312
2313 // Show fields
2314 if (empty($reshook)) {
2315 $withentity = dictFieldList($fieldlist, $obj, $tabname[$id], 'edit');
2316 }
2317
2318 print '<td colspan="3" class="center">';
2319 print '<div name="'.(!empty($obj->rowid) ? $obj->rowid : $obj->code).'"></div>';
2320 print '<input type="hidden" name="page" value="'.dol_escape_htmltag((string) $page).'">';
2321 print '<input type="hidden" name="rowid" value="'.dol_escape_htmltag($rowid).'">';
2322 if (!is_null($withentity)) {
2323 print '<input type="hidden" name="entity" value="'.$withentity.'">';
2324 }
2325 print '<input type="submit" class="button button-edit smallpaddingimp" name="actionmodify" value="'.$langs->trans("Modify").'">';
2326 print '<input type="submit" class="button button-cancel smallpaddingimp" name="actioncancel" value="'.$langs->trans("Cancel").'">';
2327 print '</td>';
2328 } else {
2329 $tmpaction = 'view';
2330 $parameters = array('fieldlist' => $fieldlist, 'tabname' => $tabname[$id]);
2331 $reshook = $hookmanager->executeHooks('viewDictionaryFieldlist', $parameters, $obj, $tmpaction); // Note that $action and $object may have been modified by some hooks
2332
2333 $error = $hookmanager->error;
2334 $errors = $hookmanager->errors;
2335
2336 $langs->loadLangs(array("bills", "agenda", "propal"));
2337
2338 if (empty($reshook)) {
2339 $withentity = null;
2340
2341 foreach ($fieldlist as $field => $value) {
2342 //var_dump($fieldlist);
2343 $class = '';
2344 $showfield = 1;
2345 $valuetoshow = empty($obj->$value) ? '' : $obj->$value;
2346 $titletoshow = '';
2347
2348 if ($value == 'entity') {
2349 $withentity = $valuetoshow;
2350 continue;
2351 }
2352
2353 if ($value == 'element') {
2354 $valuetoshow = isset($elementList[$valuetoshow]) ? $elementList[$valuetoshow] : $valuetoshow;
2355 } elseif ($value == 'source') {
2356 $valuetoshow = isset($sourceList[$valuetoshow]) ? $sourceList[$valuetoshow] : $valuetoshow;
2357 } elseif ($valuetoshow == 'all') {
2358 $valuetoshow = $langs->trans('All');
2359 } elseif ($value == 'country') {
2360 if (empty($obj->country_code)) {
2361 $valuetoshow = '-';
2362 } else {
2363 $key = $langs->trans("Country".strtoupper($obj->country_code));
2364 $valuetoshow = ($key != "Country".strtoupper($obj->country_code) ? $obj->country_code." - ".$key : $obj->country);
2365 }
2366 } elseif ($value == 'recuperableonly' || $value == 'deductible' || $value == 'category_type') {
2367 $valuetoshow = yn($valuetoshow ? 1 : 0);
2368 $class = "center";
2369 } elseif ($value == 'type_cdr') {
2370 if (empty($valuetoshow)) {
2371 $valuetoshow = $langs->trans('None');
2372 } elseif ($valuetoshow == 1) {
2373 $valuetoshow = $langs->trans('AtEndOfMonth');
2374 } elseif ($valuetoshow == 2) {
2375 $valuetoshow = $langs->trans('CurrentNext');
2376 }
2377 $class = "center";
2378 } elseif ($value == 'price' || preg_match('/^amount/i', $value)) {
2379 $valuetoshow = price($valuetoshow);
2380 }
2381 if (in_array($value, array('private', 'joinfile', 'use_default'))) {
2382 if ($valuetoshow) {
2383 $valuetoshow = yn($valuetoshow);
2384 }
2385 } elseif ($value == 'libelle_facture') {
2386 $key = $langs->trans("PaymentCondition".strtoupper($obj->code));
2387 $valuetoshow = ($obj->code && $key != "PaymentCondition".strtoupper($obj->code) ? $key : $obj->$value);
2388 $valuetoshow = nl2br($valuetoshow);
2389 } elseif ($value == 'label' && $tabname[$id] == 'c_country') {
2390 $key = $langs->trans("Country".strtoupper($obj->code));
2391 $valuetoshow = ($obj->code && $key != "Country".strtoupper($obj->code) ? $key : $obj->$value);
2392 } elseif ($value == 'label' && $tabname[$id] == 'c_availability') {
2393 $key = $langs->trans("AvailabilityType".strtoupper($obj->code));
2394 $valuetoshow = ($obj->code && $key != "AvailabilityType".strtoupper($obj->code) ? $key : $obj->$value);
2395 } elseif ($value == 'libelle' && $tabname[$id] == 'c_actioncomm') {
2396 $key = $langs->trans("Action".strtoupper($obj->code));
2397 $valuetoshow = ($obj->code && $key != "Action".strtoupper($obj->code) ? $key : $obj->$value);
2398 } elseif (!empty($obj->code_iso) && $value == 'label' && $tabname[$id] == 'c_currencies') {
2399 $key = $langs->trans("Currency".strtoupper($obj->code_iso));
2400 $valuetoshow = ($obj->code_iso && $key != "Currency".strtoupper($obj->code_iso) ? $key : $obj->$value);
2401 } elseif ($value == 'libelle' && $tabname[$id] == 'c_typent') {
2402 $key = $langs->trans(strtoupper($obj->code));
2403 $valuetoshow = ($key != strtoupper($obj->code) ? $key : $obj->$value);
2404 } elseif ($value == 'libelle' && $tabname[$id] == 'c_prospectlevel') {
2405 $key = $langs->trans(strtoupper($obj->code));
2406 $valuetoshow = ($key != strtoupper($obj->code) ? $key : $obj->$value);
2407 } elseif ($value == 'label' && $tabname[$id] == 'c_civility') {
2408 $key = $langs->trans("Civility".strtoupper($obj->code));
2409 $valuetoshow = ($obj->code && $key != "Civility".strtoupper($obj->code) ? $key : $obj->$value);
2410 } elseif ($value == 'libelle' && $tabname[$id] == 'c_type_contact') {
2411 $key = $langs->trans("TypeContact_".$obj->element."_".$obj->source."_".strtoupper($obj->code));
2412 $valuetoshow = ($obj->code && $key != "TypeContact_".$obj->element."_".$obj->source."_".strtoupper($obj->code) ? $key : $obj->$value);
2413 } elseif ($value == 'libelle' && $tabname[$id] == 'c_payment_term') {
2414 $key = $langs->trans("PaymentConditionShort".strtoupper($obj->code));
2415 $valuetoshow = ($obj->code && $key != "PaymentConditionShort".strtoupper($obj->code) ? $key : $obj->$value);
2416 } elseif ($value == 'libelle' && $tabname[$id] == 'c_paiement') {
2417 $transavailableforcode = $langs->tab_translate["PaymentType".strtoupper($obj->code)];
2418 $key = $langs->trans("PaymentType".strtoupper($obj->code));
2419 $valuetoshow = $obj->$value;
2420 if ($obj->code && $transavailableforcode) {
2421 $htmltext = $form->textwithpicto($langs->trans("TranslationFound").': '.$key, $langs->trans("TheTranslationIsSearchedFromKey", "PaymentType".strtoupper($obj->code)));
2422 } else {
2423 $htmltext = $form->textwithpicto($langs->trans("TranslationFound").': '.$langs->trans("No"), $langs->trans("TheTranslationIsSearchedFromKey", "PaymentType".strtoupper($obj->code)));
2424 }
2425 //$valuetoshow = $form->textwithpicto($valuetoshow, $htmltext);
2426 $valuetoshow .= '<br><span class="opacitymedium">'.$htmltext.'</span>';
2427 } elseif ($value == 'type' && $tabname[$id] == 'c_paiement') {
2428 $payment_type_list = array(0 => $langs->trans('PaymentTypeCustomer'), 1 => $langs->trans('PaymentTypeSupplier'), 2 => $langs->trans('PaymentTypeBoth'));
2429 $valuetoshow = $payment_type_list[$valuetoshow];
2430 } elseif ($value == 'label' && $tabname[$id] == 'c_input_reason') {
2431 $key = $langs->trans("DemandReasonType".strtoupper($obj->code));
2432 $valuetoshow = ($obj->code && $key != "DemandReasonType".strtoupper($obj->code) ? $key : $obj->$value);
2433 } elseif ($value == 'libelle' && $tabname[$id] == 'c_input_method') {
2434 $langs->load("orders");
2435 $key = $langs->trans($obj->code);
2436 $valuetoshow = ($obj->code && $key != $obj->code) ? $key : $obj->$value;
2437 } elseif ($value == 'libelle' && $tabname[$id] == 'c_shipment_mode') {
2438 $langs->load("sendings");
2439 $key = $langs->trans("SendingMethod".strtoupper($obj->code));
2440 $valuetoshow = ($obj->code && $key != "SendingMethod".strtoupper($obj->code) ? $key : $obj->$value);
2441 } elseif ($value == 'libelle' && $tabname[$id] == 'c_paper_format') {
2442 $key = $langs->trans('PaperFormat'.strtoupper($obj->code));
2443 $valuetoshow = ($obj->code && $key != 'PaperFormat'.strtoupper($obj->code) ? $key : $obj->$value);
2444 } elseif ($value == 'label' && $tabname[$id] == 'c_type_fees') {
2445 $langs->load('trips');
2446 $key = $langs->trans(strtoupper($obj->code));
2447 $valuetoshow = ($obj->code && $key != strtoupper($obj->code) ? $key : $obj->$value);
2448 } elseif ($value == 'region_id' || $value == 'country_id' || $value == 'department_buyer_id') {
2449 $showfield = 0;
2450 } elseif ($value == 'unicode') {
2451 $valuetoshow = $langs->getCurrencySymbol($obj->code, 1);
2452 } elseif ($value == 'label' && $tabname[GETPOSTINT("id")] == 'c_units') {
2453 $langs->load("products");
2454 $valuetoshow = $langs->trans($obj->$value);
2455 } elseif ($value == 'short_label' && $tabname[GETPOSTINT("id")] == 'c_units') {
2456 $langs->load("products");
2457 $valuetoshow = $langs->trans($obj->$value);
2458 } elseif (($value == 'unit') && ($tabname[$id] == 'c_paper_format')) {
2459 $key = $langs->trans('SizeUnit'.strtolower($obj->unit));
2460 $valuetoshow = ($obj->code && $key != 'SizeUnit'.strtolower($obj->unit) ? $key : $obj->$value);
2461 } elseif ($value == 'localtax1' || $value == 'localtax2') {
2462 $class = "center";
2463 } elseif ($value == 'type_vat') {
2464 $valuetoshow = $type_vatList[(int) $valuetoshow];
2465 $class = "center";
2466 } elseif ($value == 'localtax1_type') {
2467 if ($obj->localtax1 != 0) {
2468 $valuetoshow = $localtax_typeList[$valuetoshow];
2469 } else {
2470 $valuetoshow = '';
2471 }
2472 $class = "center";
2473 } elseif ($value == 'localtax2_type') {
2474 if ($obj->localtax2 != 0) {
2475 $valuetoshow = $localtax_typeList[$valuetoshow];
2476 } else {
2477 $valuetoshow = '';
2478 }
2479 $class = "center";
2480 } elseif ($value == 'taux') {
2481 $valuetoshow = price($valuetoshow, 0, $langs, 0, 0);
2482 $class = "center";
2483 } elseif (in_array($value, array('recuperableonly'))) {
2484 $class = "center";
2485 } elseif ($value == 'accountancy_code' || $value == 'accountancy_code_sell' || $value == 'accountancy_code_buy') {
2486 if (isModEnabled('accounting')) {
2487 require_once DOL_DOCUMENT_ROOT.'/accountancy/class/accountingaccount.class.php';
2488 $tmpaccountingaccount = new AccountingAccount($db);
2489 $tmpaccountingaccount->fetch(0, $valuetoshow, 1);
2490 $titletoshow = $langs->transnoentitiesnoconv("Pcgtype").': '.$tmpaccountingaccount->pcg_type;
2491 }
2492 $valuetoshow = length_accountg($valuetoshow);
2493 } elseif ($value == 'fk_tva') {
2494 if (empty($form->cache_vatrates)) {
2495 $form->load_tva('cache_fk_tva', '', $mysoc, new Societe($db), 0, 0, '', false, -1);
2496 }
2497 foreach ($form->cache_vatrates as $key => $Tab) {
2498 if ($form->cache_vatrates[$key]['rowid'] == $valuetoshow) {
2499 $valuetoshow = $form->cache_vatrates[$key]['label'];
2500 break;
2501 }
2502 }
2503 } elseif ($value == 'fk_c_exp_tax_cat') {
2504 $tmpid = $valuetoshow;
2505 $valuetoshow = getDictionaryValue('c_exp_tax_cat', 'label', $tmpid);
2506 $valuetoshow = $langs->trans($valuetoshow ? $valuetoshow : $tmpid);
2507 } elseif ($tabname[$id] == 'c_exp_tax_cat') {
2508 $valuetoshow = $langs->trans($valuetoshow);
2509 } elseif ($value == 'label' && $tabname[$id] == 'c_units') {
2510 $langs->load('other');
2511 $key = $langs->trans($obj->label);
2512 $valuetoshow = ($obj->label && $key != strtoupper($obj->label) ? $key : $obj->{$value});
2513 } elseif ($value == 'label' && $tabname[$id] == 'c_product_nature') {
2514 $langs->load("products");
2515 $valuetoshow = $langs->trans($obj->{$value});
2516 } elseif ($fieldlist[$field] == 'label' && $tabname[$id] == 'c_productbatch_qcstatus') {
2517 $langs->load("productbatch");
2518 $valuetoshow = $langs->trans($obj->{$value});
2519 } elseif ($value == 'block_if_negative') {
2520 $valuetoshow = yn($obj->{$value});
2521 } elseif ($value == 'icon') {
2522 $valuetoshow = $obj->{$value}." ".img_picto("", $obj->{$value});
2523 } elseif ($value == 'type_duration') {
2524 $TDurationTypes = array('y' => $langs->trans('Years'), 'm' => $langs->trans('Month'), 'w' => $langs->trans('Weeks'), 'd' => $langs->trans('Days'), 'h' => $langs->trans('Hours'), 'i' => $langs->trans('Minutes'));
2525 if (!empty($obj->{$value}) && array_key_exists($obj->{$value}, $TDurationTypes)) {
2526 $valuetoshow = $TDurationTypes[$obj->{$value}];
2527 }
2528 }
2529 $class .= ($class ? ' ' : '').'tddict';
2530 if ($value == 'name') {
2531 $class .= ' tdoverflowmax200';
2532 }
2533 if ($value == 'note' && $id == DICT_TVA) {
2534 $class .= ' tdoverflowmax200';
2535 }
2536 if ($value == 'tracking') {
2537 $class .= ' tdoverflowauto';
2538 }
2539 if (in_array($value, array('nbjour', 'decalage', 'pos', 'position', 'deposit_percent'))) {
2540 $class .= ' right';
2541 }
2542 if (in_array($value, array('type_vat', 'localtax1_type', 'localtax2_type'))) {
2543 $class .= ' nowraponall';
2544 }
2545 if (in_array($value, array('use_default', 'fk_parent', 'sortorder'))) {
2546 $class .= ' center';
2547 }
2548 if ($value == 'public') {
2549 $class .= ' center';
2550 }
2551 // Show value for field
2552 if ($showfield) {
2553 print '<!-- '. $value .' --><td class="'.$class.'"'.($titletoshow ? ' title="'.dolPrintHTMLForAttribute($titletoshow).'"' : '').'>'.$valuetoshow.'</td>';
2554 }
2555 }
2556
2557 // Favorite & EEC
2558 // Only for country dictionary
2559 if ($id == DICT_COUNTRY) {
2560 print '<td class="nowrap center">';
2561 // Is in EEC
2562 if ($iserasable) {
2563 print '<a class="reposition" href="'.$url.'action='.$acts[$obj->eec].'_eec&token='.newToken().'">'.$actl[$obj->eec].'</a>';
2564 } else {
2565 print '<span class="opacitymedium">'.$langs->trans("AlwaysActive").'</span>';
2566 }
2567 print '</td>';
2568 print '<td class="nowrap center">';
2569 // Favorite
2570 if ($iserasable) {
2571 print '<a class="reposition" href="'.$url.'action='.$acts[$obj->favorite].'_favorite&token='.newToken().'">'.$actl[$obj->favorite].'</a>';
2572 } else {
2573 print '<span class="opacitymedium">'.$langs->trans("AlwaysActive").'</span>';
2574 }
2575 print '</td>';
2576 }
2577 }
2578
2579 // Active
2580 print '<td class="nowrap center">';
2581 if ($canbedisabled) {
2582 print '<a class="reposition" href="'.$url.'action='.$acts[$obj->active].'&token='.newToken().'">'.$actl[$obj->active].'</a>';
2583 } else {
2584 if (in_array($obj->code, array('AC_OTH', 'AC_OTH_AUTO'))) {
2585 print $langs->trans("AlwaysActive");
2586 } elseif (isset($obj->type) && in_array($obj->type, array('systemauto')) && empty($obj->active)) {
2587 print $langs->trans("Deprecated");
2588 } elseif (isset($obj->type) && in_array($obj->type, array('system')) && !empty($obj->active) && $obj->code != 'AC_OTH') {
2589 print $langs->trans("UsedOnlyWithTypeOption");
2590 } else {
2591 print '<span class="opacitymedium">'.$langs->trans("AlwaysActive").'</span>';
2592 }
2593 }
2594 print "</td>";
2595
2596 // Action button
2597 if (!getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
2598 print '<td class="center maxwidthsearch nowraponall">';
2599 // Modify link
2600 if ($canbemodified) {
2601 print '<a class="reposition marginleftonly paddingleft marginrightonly paddingright editfielda" href="'.$url.'action=edit&token='.newToken().'">'.img_edit().'</a>';
2602 }
2603 // Delete link
2604 if ($iserasable) {
2605 if ($user->admin) {
2606 print '<a class="reposition marginleftonly paddingleft marginrightonly paddingright" href="'.$url.'action=delete&token='.newToken().'">'.img_delete().'</a>';
2607 }
2608 }
2609 print '</td>';
2610 }
2611
2612 print "</tr>\n";
2613 }
2614 $i++;
2615 }
2616 } else {
2617 print '<tr><td colspan="'.$colspan.'"><span class="opacitymedium">'.$langs->trans("NoRecordFound").'</span></td></tr>';
2618 }
2619
2620 print '</table>';
2621 print '</div>';
2622 } else {
2623 dol_print_error($db);
2624 }
2625
2626 print '</form>';
2627} else {
2628 /*
2629 * Show list of dictionary to show
2630 */
2631 print load_fiche_titre($title, $linkback, $titlepicto);
2632
2633 print '<span class="opacitymedium">'.$langs->trans("DictionaryDesc");
2634 print " ".$langs->trans("OnlyActiveElementsAreShown")."<br>\n";
2635 print '</span><br>';
2636 print "<br>\n";
2637
2638 $lastlineisempty = false;
2639
2640 print '<div class="div-table-responsive-no-min">';
2641 print '<table class="noborder centpercent">';
2642 print '<tr class="liste_titre">';
2643 print '<td>'.$langs->trans("Dictionary").'</td>';
2644 print '<td></td>';
2645 print '<td class="hideonsmartphone"></td>';
2646 print '</tr>';
2647
2648 $showemptyline = '';
2649 foreach ($taborder as $i) {
2650 if (isset($tabname[$i]) && empty($tabcond[$i])) {
2651 continue;
2652 }
2653
2654 if ($i) {
2655 if ($showemptyline) {
2656 print '<tr class="oddeven"><td></td><td></td><td class="hideonsmartphone"></td></tr>';
2657 $showemptyline = 0;
2658 }
2659
2660
2661 $value = $tabname[$i];
2662 print '<tr class="oddeven"><td class="minwidth200">';
2663 if (!empty($tabcond[$i])) {
2664 $tabnamenoprefix = preg_replace('/'.MAIN_DB_PREFIX.'/', '', $tabname[$i]);
2665 print '<a href="'.$_SERVER["PHP_SELF"].'?id='.$i.'">';
2666 if (!empty($tabcomplete[$tabnamenoprefix]['picto'])) {
2667 print img_picto('', $tabcomplete[$tabnamenoprefix]['picto'], 'class="pictofixedwidth paddingrightonly"');
2668 }
2669 print $langs->trans($tablib[$i]);
2670 print '</a>';
2671 } else {
2672 print $langs->trans($tablib[$i]);
2673 }
2674 print '</td>';
2675 print '<td>';
2676 print '<a class="editfielda" href="'.$_SERVER["PHP_SELF"].'?id='.$i.'">';
2677 print img_picto('Edit', 'edit', '');
2678 print '</a>';
2679 print '</td>';
2680 print '<td class="right hideonsmartphone">';
2681 print $form->textwithpicto('', $langs->trans("Table").': '.MAIN_DB_PREFIX.$tabname[$i]);
2682 print '</td>';
2683 print '</tr>';
2684 $lastlineisempty = false;
2685 } else {
2686 if (!$lastlineisempty) {
2687 $showemptyline = 1;
2688 $lastlineisempty = true;
2689 }
2690 }
2691 }
2692 print '</table>';
2693 print '</div>';
2694}
2695
2696print '<br>';
2697if (GETPOST('id') && GETPOST('id') == DICT_SOCIALNETWORKS) {
2698 print dol_get_fiche_end();
2699}
2700// End of page
2701llxFooter();
2702$db->close();
2703
2704
2714function dictFieldList($fieldlist, $obj = null, $tabname = '', $context = '')
2715{
2716 global $langs, $db, $mysoc;
2717 global $form;
2718 global $region_id;
2719 global $elementList, $sourceList, $localtax_typeList, $type_vatList;
2720
2721 $formadmin = new FormAdmin($db);
2722 $formcompany = new FormCompany($db);
2723 $formaccounting = new FormAccounting($db);
2724
2725 $withentity = '';
2726
2727 foreach ($fieldlist as $field => $value) {
2728 if ($value == 'entity' && isset($obj->$value)) {
2729 $withentity = $obj->$value;
2730 continue;
2731 }
2732
2733 if (in_array($value, array('code', 'libelle', 'type')) && $tabname == "c_actioncomm" && isset($obj->$value) && in_array($obj->type, array('system', 'systemauto'))) {
2734 // Special case for c_actioncomm (field that should not be modified)
2735 $hidden = (!empty($obj->{$value}) ? $obj->{$value} : '');
2736 print '<td>';
2737 print '<input type="hidden" name="'. $value .'" value="'.$hidden.'">';
2738 print $langs->trans($hidden);
2739 print '</td>';
2740 } elseif ($value == 'country') {
2741 if (in_array('region_id', $fieldlist)) {
2742 print '<td>';
2743 print '</td>';
2744 continue;
2745 } // For state page, we do not show the country input (we link to region, not country)
2746 print '<td>';
2747
2748 $selected = (!empty($obj->country_code) ? $obj->country_code : (!empty($obj->country) ? $obj->country : ''));
2749 if (!GETPOSTISSET('code')) {
2750 $selected = GETPOST('countryidforinsert');
2751 }
2752 print $form->select_country($selected, $value, '', 28, 'minwidth100 maxwidth150 maxwidthonsmartphone');
2753 print '</td>';
2754 } elseif ($value == 'country_id') {
2755 if (!in_array('country', $fieldlist)) { // If there is already a field country, we don't show country_id (avoid duplicate)
2756 $country_id = (!empty($obj->{$value}) ? $obj->{$value} : 0);
2757 print '<td class="tdoverflowmax100">';
2758 print '<input type="hidden" name="'. $value .'" value="'.$country_id.'">';
2759 print '</td>';
2760 }
2761 } elseif ($value == 'region') {
2762 print '<td>';
2763 $formcompany->select_region($region_id, 'region');
2764 print '</td>';
2765 } elseif ($value == 'region_id') {
2766 $region_id = (!empty($obj->{$value}) ? $obj->{$value} : 0);
2767 print '<td>';
2768 print '<input type="hidden" name="'. $value .'" value="'.$region_id.'">';
2769 print '</td>';
2770 } elseif ($value == 'department_buyer') {
2771 if ($context == 'edit') {
2772 print '<td>';
2773 // show department buyer list
2774 $country_code = (!empty($obj->country_code) ? $obj->country_code : '');
2775 $department_buyer_id = (!empty($obj->department_buyer_id) ? (int) $obj->department_buyer_id : 0);
2776 if ($country_code != '') {
2777 print img_picto('', 'state', 'class="pictofixedwidth"');
2778 print $formcompany->select_state($department_buyer_id, $country_code, 'department_buyer_id', 'minwidth100 maxwidth150 maxwidthonsmartphone');
2779 }
2780 print '</td>';
2781 }
2782 } elseif ($value == 'department_buyer_id') {
2783 if (!in_array('department_buyer', $fieldlist)) { // If there is already a field department buyer, we don't show department buyer id (avoid duplicate)
2784 $department_buyer_id = (!empty($obj->{$value}) ? $obj->{$value} : 0);
2785 print '<td class="tdoverflowmax100">';
2786 print '<input type="hidden" name="'.$value.'" value="'.$department_buyer_id.'">';
2787 print '</td>';
2788 }
2789 } elseif ($value == 'lang') {
2790 print '<td>';
2791 print $formadmin->select_language(getDolGlobalString('MAIN_LANG_DEFAULT'), 'lang');
2792 print '</td>';
2793 } elseif (in_array($value, array('element', 'source'))) { // Example: the type and source of the element (for contact types)
2794 $tmparray = array();
2795 if ($value == 'element') {
2796 $tmparray = $elementList;
2797 } else {
2798 $tmparray = $sourceList;
2799 }
2800 print '<td>';
2801 print $form->selectarray($value, $tmparray, (!empty($obj->{$value}) ? $obj->{$value} : ''), 0, 0, 0, '', 0, 0, 0, '', 'maxwidth250');
2802 print '</td>';
2803 } elseif (in_array($value, array('public', 'use_default'))) {
2804 // Fields 0/1 with a combo select Yes/No
2805 print '<td class="center">';
2806 // @phan-suppress-next-line PhanPluginSuspiciousParamPosition
2807 print $form->selectyesno($value, (!empty($obj->{$value}) ? $obj->{$value} : ''), 1);
2808 print '</td>';
2809 } elseif ($value == 'private') {
2810 // Fields 'no'/'yes' with a combo select Yes/No
2811 print '<td>';
2812 print $form->selectyesno("private", (!empty($obj->{$value}) ? $obj->{$value} : ''));
2813 print '</td>';
2814 } elseif ($value == 'type' && $tabname == "c_actioncomm") {
2815 $type = (!empty($obj->type) ? $obj->type : 'user'); // Check if type is different of 'user' (external module)
2816 print '<td>';
2817 print $type.'<input type="hidden" name="type" value="'.$type.'">';
2818 print '</td>';
2819 } elseif ($value == 'type' && $tabname == 'c_paiement') {
2820 print '<td>';
2821 $select_list = array(0 => $langs->trans('PaymentTypeCustomer'), 1 => $langs->trans('PaymentTypeSupplier'), 2 => $langs->trans('PaymentTypeBoth'));
2822 print $form->selectarray($value, $select_list, (!empty($obj->{$value}) ? $obj->{$value} : '2'));
2823 print '</td>';
2824 } elseif ($value == 'recuperableonly' || $value == 'type_cdr' || $value == 'deductible' || $value == 'category_type') {
2825 if ($value == 'type_cdr') {
2826 print '<td class="center">';
2827 } else {
2828 print '<td>';
2829 }
2830 if ($value == 'type_cdr') {
2831 print $form->selectarray($value, array(0 => $langs->trans('None'), 1 => $langs->trans('AtEndOfMonth'), 2 => $langs->trans('CurrentNext')), (!empty($obj->{$value}) ? $obj->{$value} : ''));
2832 } else {
2833 // @phan-suppress-next-line PhanPluginSuspiciousParamPosition
2834 print $form->selectyesno($value, (!empty($obj->{$value}) ? $obj->{$value} : ''), 1);
2835 }
2836 print '</td>';
2837 } elseif (in_array($value, array('nbjour', 'decalage', 'taux', 'localtax1', 'localtax2'))) {
2838 $class = "right";
2839 if (in_array($value, array('taux', 'localtax1', 'localtax2'))) {
2840 $class = "center"; // Fields aligned on right
2841 }
2842 print '<td class="'.$class.'">';
2843 print '<input type="text" class="flat" value="'.(isset($obj->{$value}) ? $obj->{$value} : '').'" size="3" name="'. $value .'">';
2844 print '</td>';
2845 } elseif (in_array($value, array('libelle_facture'))) {
2846 print '<td>';
2847 $transfound = 0;
2848 $transkey = '';
2849 // Special case for labels
2850 if ($tabname == 'c_payment_term') {
2851 $langs->load("bills");
2852 if (isset($obj->code) && !empty($obj->code)) {
2853 $transkey = "PaymentCondition" . strtoupper($obj->code);
2854 if ($langs->trans($transkey) != $transkey) {
2855 $transfound = 1;
2856 print $form->textwithpicto($langs->trans($transkey), $langs->trans("GoIntoTranslationMenuToChangeThis"));
2857 }
2858 }
2859 }
2860 if (!$transfound) {
2861 print '<textarea cols="30" rows="'.ROWS_2.'" class="flat" name="'. $value .'">'.(empty($obj->{$value}) ? '' : $obj->{$value}).'</textarea>';
2862 } else {
2863 print '<input type="hidden" name="'. $value .'" value="'.$transkey.'">';
2864 }
2865 print '</td>';
2866 } elseif ($value == 'price' || preg_match('/^amount/i', (string) $value)) {
2867 print '<td><input type="text" class="flat minwidth75" value="'.price((!empty($obj->{$value}) ? $obj->{$value} : '')).'" name="'. $value .'"></td>';
2868 } elseif ($value == 'code' && isset($obj->{$value})) {
2869 print '<td>';
2870 if ($tabname == 'c_paiement' && in_array($obj->{$value}, array('LIQ', 'CB', 'CHQ', 'VIR'))) {
2871 // Case of code that should not be modified
2872 print '<input type="hidden" class="flat minwidth75 maxwidth100" value="'.(empty($obj->{$value}) ? '' : $obj->{$value}).'" name="'. $value .'">';
2873 print $obj->{$value};
2874 } else {
2875 print '<input type="text" class="flat minwidth75 maxwidth100" value="'.(empty($obj->{$value}) ? '' : $obj->{$value}).'" name="'. $value .'">';
2876 }
2877 print '</td>';
2878 } elseif ($value == 'unit') {
2879 print '<td>';
2880 $units = array(
2881 'mm' => $langs->trans('SizeUnitmm'),
2882 'cm' => $langs->trans('SizeUnitcm'),
2883 'point' => $langs->trans('SizeUnitpoint'),
2884 'inch' => $langs->trans('SizeUnitinch')
2885 );
2886 print $form->selectarray('unit', $units, (empty($obj->{$value}) ? '' : $obj->{$value}), 0, 0, 0);
2887 print '</td>';
2888 } elseif ($value == 'type_vat') {
2889 // VAT type 0: all, 1: sell, 2: purchase
2890 print '<td class="center">';
2891 print $form->selectarray($value, $type_vatList, (empty($obj->{$value}) ? '' : $obj->{$value}), 1);
2892 print '</td>';
2893 } elseif ($value == 'localtax1_type' || $value == 'localtax2_type') {
2894 // Le type de taxe locale
2895 print '<td class="center">';
2896 print $form->selectarray($value, $localtax_typeList, (empty($obj->{$value}) ? '' : $obj->{$value}));
2897 print '</td>';
2898 } elseif ($value == 'accountancy_code' || $value == 'accountancy_code_sell' || $value == 'accountancy_code_buy') {
2899 print '<td>';
2900 if (isModEnabled('accounting')) {
2901 $fieldname = $value;
2902 $accountancy_account = (empty($obj->$fieldname) ? 0 : $obj->$fieldname);
2903 print $formaccounting->select_account($accountancy_account, '.'. $value, 1, array(), 1, 1, 'maxwidth125 maxwidthonsmartphone');
2904 } else {
2905 $fieldname = $value;
2906 print '<input type="text" class="flat minwidth100" value="'.(isset($obj->$fieldname) ? $obj->$fieldname : '').'" name="'. $value .'">';
2907 }
2908 print '</td>';
2909 } elseif ($value == 'fk_tva') {
2910 print '<td>';
2911 print $form->load_tva('fk_tva', $obj->taux, $mysoc, new Societe($db), 0, 0, '', false, -1);
2912 print '</td>';
2913 } elseif ($value == 'fk_c_exp_tax_cat') {
2914 print '<td>';
2915 print $form->selectExpenseCategories($obj->fk_c_exp_tax_cat);
2916 print '</td>';
2917 } elseif ($value == 'fk_range') {
2918 print '<td>';
2919 print $form->selectExpenseRanges($obj->fk_range);
2920 print '</td>';
2921 } elseif ($value == 'block_if_negative') {
2922 print '<td>';
2923 print $form->selectyesno("block_if_negative", (empty($obj->block_if_negative) ? '' : $obj->block_if_negative), 1);
2924 print '</td>';
2925 } elseif ($value == 'type_duration') {
2926 print '<td>';
2927 print $form->selectTypeDuration('', (empty($obj->type_duration) ? '' : $obj->type_duration), array('i','h'));
2928 print '</td>';
2929 } else {
2930 $fieldValue = isset($obj->{$value}) ? $obj->{$value} : '';
2931 $classtd = '';
2932 $class = '';
2933
2934 if ($value == 'sortorder') {
2935 $fieldlist[$field] = 'position';
2936 }
2937
2938 if ($fieldlist[$field] == 'code') {
2939 $class = 'maxwidth100';
2940 }
2941 if (in_array($fieldlist[$field], array('deposit_percent'))) {
2942 $classtd = 'right';
2943 $class = 'maxwidth50 right';
2944 }
2945 if (in_array($fieldlist[$field], array('pos', 'position'))) {
2946 $classtd = 'right';
2947 $class = 'maxwidth50 right';
2948 }
2949 if (in_array($fieldlist[$field], array('dayrule', 'day', 'month', 'year', 'use_default', 'affect', 'delay', 'public', 'sortorder', 'sens', 'category_type', 'fk_parent'))) {
2950 $class = 'maxwidth50 center';
2951 }
2952 if (in_array($fieldlist[$field], array('use_default', 'public', 'fk_parent'))) {
2953 $classtd = 'center';
2954 }
2955 if (in_array($fieldlist[$field], array('libelle', 'label', 'tracking'))) {
2956 $class = 'quatrevingtpercent';
2957 }
2958 // Fields that must be suggested as '0' instead of ''
2959 if ($fieldlist[$field] == 'fk_parent') {
2960 if (empty($fieldValue)) {
2961 $fieldValue = '0';
2962 }
2963 }
2964
2965 // Labels Length
2966 $maxlength = '';
2967 if (in_array($fieldlist[$field], array('libelle', 'label'))) {
2968 switch ($tabname) {
2969 case 'c_ecotaxe':
2970 case 'c_email_senderprofile':
2971 case 'c_forme_juridique':
2972 case 'c_holiday_types':
2973 case 'c_payment_term':
2974 case 'c_transport_mode':
2975 $maxlength = ' maxlength="255"';
2976 break;
2977 case 'c_email_templates':
2978 $maxlength = ' maxlength="180"';
2979 break;
2980 case 'c_socialnetworks':
2981 $maxlength = ' maxlength="150"';
2982 break;
2983 default:
2984 $maxlength = ' maxlength="128"';
2985 }
2986 }
2987
2988 print '<td class="'.$classtd.'">';
2989 $transfound = 0;
2990 $transkey = '';
2991 if (in_array($fieldlist[$field], array('label', 'libelle'))) { // For label
2992 // Special case for labels
2993 if ($tabname == 'c_civility' && !empty($obj->code)) {
2994 $transkey = "Civility".strtoupper($obj->code);
2995 }
2996 if ($tabname == 'c_payment_term' && !empty($obj->code)) {
2997 $langs->load("bills");
2998 $transkey = "PaymentConditionShort".strtoupper($obj->code);
2999 }
3000 if ($transkey && $langs->trans($transkey) != $transkey) {
3001 $transfound = 1;
3002 print $form->textwithpicto($langs->trans($transkey), $langs->trans("GoIntoTranslationMenuToChangeThis"));
3003 }
3004 }
3005 if (!$transfound) {
3006 print '<input type="text" class="flat'.($class ? ' '.$class : '').'"'.($maxlength ? ' '.$maxlength : '').' value="'.dol_escape_htmltag($fieldValue).'" name="'.$fieldlist[$field].'">';
3007 } else {
3008 print '<input type="hidden" name="'.$fieldlist[$field].'" value="'.$transkey.'">';
3009 }
3010 print '</td>';
3011 }
3012 }
3013
3014 return $withentity;
3015}
$id
Definition account.php:48
if( $user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
Definition card.php:66
length_accountg($account)
Return General accounting account with defined length (used for product and miscellaneous)
complete_dictionary_with_modules(&$taborder, &$tabname, &$tablib, &$tabsql, &$tabsqlsort, &$tabfield, &$tabfieldvalue, &$tabfieldinsert, &$tabrowid, &$tabcond, &$tabhelp, &$tabcomplete)
Add external modules to list of dictionaries.
complete_elementList_with_modules(&$elementList)
Search external modules to complete the list of contact element.
if(!defined('NOREQUIRESOC')) if(!defined( 'NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined( 'NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined( 'NOREQUIREAJAX')) llxHeader($head='', $title='', $help_url='', $target='', $disablejs=0, $disablehead=0, $arrayofjs='', $arrayofcss='', $morequerystring='', $morecssonbody='', $replacemainareaby='', $disablenofollow=0, $disablenoindex=0)
Empty header.
Definition wrapper.php:71
Class to manage accounting accounts.
Class to manage generation of HTML components for accounting management.
Class to generate html code for admin pages.
Class to build HTML component for third parties management Only common components are here.
Class to manage generation of HTML components Only common components must be here.
Class to manage third parties objects (customers, suppliers, prospects...)
dictFieldList($fieldlist, $obj=null, $tabname='', $context='')
Show fields in insert/edit mode.
Definition dict.php:2714
llxFooter()
Footer empty.
Definition document.php:107
load_fiche_titre($title, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='')
Load a title with picto.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0, $attop=0)
Set event messages in dol_events session object.
print_barre_liste($title, $page, $file, $options='', $sortfield='', $sortorder='', $morehtmlcenter='', $num=-1, $totalnboflines='', $picto='generic', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limit=-1, $selectlimitsuffix=0, $hidenavigation=0, $pagenavastextinput=0, $morehtmlrightbeforearrow='')
Print a title with navigation controls for pagination.
img_help($usehelpcursor=1, $usealttitle=1)
Show help logo with cursor "?".
img_delete($titlealt='default', $other='class="pictodelete"', $morecss='')
Show delete logo.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
GETPOSTINT($paramname, $method=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='', $dragdropfile=0)
Show tabs of a record.
price2num($amount, $rounding='', $option=0)
Function that return a number with universal decimal format (decimal separator is '.
dolGetButtonTitle($label, $helpText='', $iconClass='fa fa-file', $url='', $id='', $status=1, $params=array())
Function dolGetButtonTitle : this kind of buttons are used in title in list.
dol_get_fiche_end($notab=0)
Return tab footer of a card.
natural_search($fields, $value, $mode=0, $nofirstand=0)
Generate natural SQL search string for a criteria (this criteria can be tested on one or several fiel...
price($amount, $form=0, $outlangs='', $trunc=1, $rounding=-1, $forcerounding=-1, $currency_code='')
Function to format a value into an amount for visual output Function used into PDF and HTML pages.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
newToken()
Return the value of token currently saved into session with name 'newtoken'.
yn($yesno, $format=1, $color=0)
Return yes or no in current language.
getTitleFieldOfList($name, $thead=0, $file="", $field="", $begin="", $moreparam="", $moreattrib="", $sortfield="", $sortorder="", $prefix="", $disablesortlink=0, $tooltip='', $forcenowrapcolumntitle=0)
Get title line of an array.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
info_admin($text, $infoonimgalt=0, $nodiv=0, $admin='1', $morecss='hideonsmartphone', $textfordropdown='', $picto='')
Show information in HTML for admin users or standard users.
img_edit($titlealt='default', $float=0, $other='')
Show logo edit/modify fiche.
getDictionaryValue($tablename, $field, $id, $checkentity=false, $rowidfield='rowid')
Return the value of a filed into a dictionary for the record $id.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
getEntity($element, $shared=1, $currentobject=null)
Get list of entity id to use.
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $noescapetags='', $escapeonlyhtmltags=0, $cleanalsojavascript=0)
Returns text escaped for inclusion in HTML alt or title or value tags, or into values of HTML input f...
$context
@method int call_trigger(string $triggerName, User $user)
Definition logout.php:42
if(preg_match('/crypted:/i', $dolibarr_main_db_pass)||!empty($dolibarr_main_db_encrypted_pass)) $conf db type
Definition repair.php:149
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.