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