dolibarr  17.0.4
html.formadmin.class.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (C) 2004-2014 Laurent Destailleur <eldy@users.sourceforge.net>
3  * Copyright (C) 2005-2011 Regis Houssin <regis.houssin@inodbox.com>
4  * Copyright (C) 2007 Patrick Raguin <patrick.raguin@gmail.com>
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 3 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program. If not, see <https://www.gnu.org/licenses/>.
18  */
19 
30 class FormAdmin
31 {
32  public $db;
33  public $error;
34 
35 
41  public function __construct($db)
42  {
43  $this->db = $db;
44  }
45 
46  // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
65  public function select_language($selected = '', $htmlname = 'lang_id', $showauto = 0, $filter = array(), $showempty = '', $showwarning = 0, $disabled = 0, $morecss = '', $showcode = 0, $forcecombo = 0, $multiselect = 0, $onlykeys = array(), $mainlangonly = 0)
66  {
67  // phpcs:enable
68  global $conf, $langs;
69 
70  if (!empty($conf->global->MAIN_DEFAULT_LANGUAGE_FILTER)) {
71  if (!is_array($filter)) {
72  $filter = array();
73  }
74  $filter[$conf->global->MAIN_DEFAULT_LANGUAGE_FILTER] = 1;
75  }
76 
77  $langs_available = $langs->get_available_languages(DOL_DOCUMENT_ROOT, 12, 0, $mainlangonly);
78 
79  // If empty value is not allowed and the language to select is not inside the list of available language and we must find
80  // an alternative of the language code to pre-select (to avoid to have first element in list pre-selected).
81  if ($selected && empty($showempty)) {
82  if (!is_array($selected) && !array_key_exists($selected, $langs_available)) {
83  $tmparray = explode('_', $selected);
84  if (!empty($tmparray[1])) {
85  $selected = getLanguageCodeFromCountryCode($tmparray[1]);
86  }
87  if (empty($selected)) {
88  $selected = $langs->defaultlang;
89  }
90  } else {
91  // If the preselected value is an array, we do not try to find alternative to preselect
92  }
93  }
94 
95  $out = '';
96 
97  $out .= '<select '.($multiselect ? 'multiple="multiple" ' : '').'class="flat'.($morecss ? ' '.$morecss : '').'" id="'.$htmlname.'" name="'.$htmlname.($multiselect ? '[]' : '').'"'.($disabled ? ' disabled' : '').'>';
98  if ($showempty && !$multiselect) {
99  $out .= '<option value="0"';
100  if ($selected === '') {
101  $out .= ' selected';
102  }
103  $out .= '>';
104  if ($showempty != '1') {
105  $out .= $showempty;
106  } else {
107  $out .= '&nbsp;';
108  }
109  $out .= '</option>';
110  }
111  if ($showauto) {
112  $out .= '<option value="auto"';
113  if ($selected === 'auto') {
114  $out .= ' selected';
115  }
116  $out .= '>'.$langs->trans("AutoDetectLang").'</option>';
117  }
118 
119  asort($langs_available); // array('XX' => 'Language (Country)', ...)
120 
121  foreach ($langs_available as $key => $value) {
122  $valuetoshow = $value;
123  if ($showcode == 1) {
124  if ($mainlangonly) {
125  $valuetoshow = '<span class="opacitymedium">'.preg_replace('/[_-].*$/', '', $key).'</span> - '.$value;
126  } else {
127  $valuetoshow = '<span class="opacitymedium">'.$key.'</span> - '.$value;
128  }
129  }
130  if ($showcode == 2) {
131  if ($mainlangonly) {
132  $valuetoshow = $value.' <span class="opacitymedium">('.preg_replace('/[_-].*$/', '', $key).')</span>';
133  } else {
134  $valuetoshow = $value.' <span class="opacitymedium">('.$key.')</span>';
135  }
136  }
137 
138  $keytouse = $key;
139  if ($mainlangonly) {
140  $keytouse = preg_replace('/[_-].*$/', '', $key);
141  }
142 
143  if ($filter && is_array($filter) && array_key_exists($keytouse, $filter)) {
144  continue;
145  }
146  if ($onlykeys && is_array($onlykeys) && !array_key_exists($keytouse, $onlykeys)) {
147  continue;
148  }
149 
150  $valuetoshow = picto_from_langcode($key, 'class="saturatemedium"').' '.$valuetoshow;
151  if ((is_string($selected) && (string) $selected == (string) $keytouse) || (is_array($selected) && in_array($keytouse, $selected))) {
152  $out .= '<option value="'.$keytouse.'" selected data-html="'.dol_escape_htmltag($valuetoshow).'">'.$valuetoshow.'</option>';
153  } else {
154  $out .= '<option value="'.$keytouse.'" data-html="'.dol_escape_htmltag($valuetoshow).'">'.$valuetoshow.'</option>';
155  }
156  }
157  $out .= '</select>';
158 
159  // Make select dynamic
160  if (!$forcecombo) {
161  include_once DOL_DOCUMENT_ROOT.'/core/lib/ajax.lib.php';
162  $out .= ajax_combobox($htmlname);
163  }
164 
165  return $out;
166  }
167 
168  // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
178  public function select_menu($selected, $htmlname, $dirmenuarray, $moreattrib = '')
179  {
180  // phpcs:enable
181  global $langs, $conf;
182 
183  // Clean parameters
184 
185 
186  // Check parameters
187  if (!is_array($dirmenuarray)) {
188  return -1;
189  }
190 
191  $menuarray = array();
192  foreach ($conf->file->dol_document_root as $dirroot) {
193  foreach ($dirmenuarray as $dirtoscan) {
194  $dir = $dirroot.$dirtoscan;
195  //print $dir.'<br>';
196  if (is_dir($dir)) {
197  $handle = opendir($dir);
198  if (is_resource($handle)) {
199  while (($file = readdir($handle)) !== false) {
200  if (is_file($dir."/".$file) && substr($file, 0, 1) <> '.' && substr($file, 0, 3) <> 'CVS' && substr($file, 0, 5) != 'index') {
201  if (preg_match('/lib\.php$/i', $file)) {
202  continue; // We exclude library files
203  }
204  if (preg_match('/eldy_(backoffice|frontoffice)\.php$/i', $file)) {
205  continue; // We exclude all menu manager files
206  }
207  if (preg_match('/auguria_(backoffice|frontoffice)\.php$/i', $file)) {
208  continue; // We exclude all menu manager files
209  }
210  if (preg_match('/smartphone_(backoffice|frontoffice)\.php$/i', $file)) {
211  continue; // We exclude all menu manager files
212  }
213 
214  $filelib = preg_replace('/\.php$/i', '', $file);
215  $prefix = '';
216  // 0=Recommanded, 1=Experimental, 2=Developpement, 3=Other
217  if (preg_match('/^eldy/i', $file)) {
218  $prefix = '0';
219  } elseif (preg_match('/^smartphone/i', $file)) {
220  $prefix = '2';
221  } else {
222  $prefix = '3';
223  }
224 
225  if ($file == $selected) {
226  $menuarray[$prefix.'_'.$file] = '<option value="'.$file.'" selected>'.$filelib.'</option>';
227  } else {
228  $menuarray[$prefix.'_'.$file] = '<option value="'.$file.'">'.$filelib.'</option>';
229  }
230  }
231  }
232  closedir($handle);
233  }
234  }
235  }
236  }
237  ksort($menuarray);
238 
239  // Output combo list of menus
240  print '<select class="flat" id="'.$htmlname.'" name="'.$htmlname.'"'.($moreattrib ? ' '.$moreattrib : '').'>';
241  $oldprefix = '';
242  foreach ($menuarray as $key => $val) {
243  $tab = explode('_', $key);
244  $newprefix = $tab[0];
245  if ($newprefix == '1' && ($conf->global->MAIN_FEATURES_LEVEL < 1)) {
246  continue;
247  }
248  if ($newprefix == '2' && ($conf->global->MAIN_FEATURES_LEVEL < 2)) {
249  continue;
250  }
251  if ($newprefix != $oldprefix) { // Add separators
252  // Affiche titre
253  print '<option value="-1" disabled>';
254  if ($newprefix == '0') {
255  print '-- '.$langs->trans("VersionRecommanded").' --';
256  }
257  if ($newprefix == '1') {
258  print '-- '.$langs->trans("VersionExperimental").' --';
259  }
260  if ($newprefix == '2') {
261  print '-- '.$langs->trans("VersionDevelopment").' --';
262  }
263  if ($newprefix == '3') {
264  print '-- '.$langs->trans("Other").' --';
265  }
266  print '</option>';
267  $oldprefix = $newprefix;
268  }
269  print $val."\n"; // Show menu entry
270  }
271  print '</select>';
272  }
273 
274  // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
283  public function select_menu_families($selected, $htmlname, $dirmenuarray)
284  {
285  // phpcs:enable
286  global $langs, $conf;
287 
288  //$expdevmenu=array('smartphone_backoffice.php','smartphone_frontoffice.php'); // Menu to disable if $conf->global->MAIN_FEATURES_LEVEL is not set
289  $expdevmenu = array();
290 
291  $menuarray = array();
292 
293  foreach ($dirmenuarray as $dirmenu) {
294  foreach ($conf->file->dol_document_root as $dirroot) {
295  $dir = $dirroot.$dirmenu;
296  if (is_dir($dir)) {
297  $handle = opendir($dir);
298  if (is_resource($handle)) {
299  while (($file = readdir($handle)) !== false) {
300  if (is_file($dir."/".$file) && substr($file, 0, 1) <> '.' && substr($file, 0, 3) <> 'CVS') {
301  $filelib = preg_replace('/(_backoffice|_frontoffice)?\.php$/i', '', $file);
302  if (preg_match('/^index/i', $filelib)) {
303  continue;
304  }
305  if (preg_match('/^default/i', $filelib)) {
306  continue;
307  }
308  if (preg_match('/^empty/i', $filelib)) {
309  continue;
310  }
311  if (preg_match('/\.lib/i', $filelib)) {
312  continue;
313  }
314  if (getDolGlobalInt('MAIN_FEATURES_LEVEL') == 0 && in_array($file, $expdevmenu)) {
315  continue;
316  }
317 
318  $menuarray[$filelib] = 1;
319  }
320  $menuarray['all'] = 1;
321  }
322  closedir($handle);
323  }
324  }
325  }
326  }
327 
328  ksort($menuarray);
329 
330  // Affichage liste deroulante des menus
331  print '<select class="flat" id="'.$htmlname.'" name="'.$htmlname.'">';
332  $oldprefix = '';
333  foreach ($menuarray as $key => $val) {
334  $tab = explode('_', $key);
335  $newprefix = $tab[0];
336  print '<option value="'.$key.'"';
337  if ($key == $selected) {
338  print ' selected';
339  }
340  print '>';
341  if ($key == 'all') {
342  print $langs->trans("AllMenus");
343  } else {
344  print $key;
345  }
346  print '</option>'."\n";
347  }
348  print '</select>';
349 
350  print ajax_combobox($htmlname);
351  }
352 
353 
354  // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
362  public function select_timezone($selected, $htmlname)
363  {
364  // phpcs:enable
365  global $langs, $conf;
366 
367  print '<select class="flat" id="'.$htmlname.'" name="'.$htmlname.'">';
368  print '<option value="-1">&nbsp;</option>';
369 
370  $arraytz = array(
371  "Pacific/Midway"=>"GMT-11:00",
372  "Pacific/Fakaofo"=>"GMT-10:00",
373  "America/Anchorage"=>"GMT-09:00",
374  "America/Los_Angeles"=>"GMT-08:00",
375  "America/Dawson_Creek"=>"GMT-07:00",
376  "America/Chicago"=>"GMT-06:00",
377  "America/Bogota"=>"GMT-05:00",
378  "America/Anguilla"=>"GMT-04:00",
379  "America/Araguaina"=>"GMT-03:00",
380  "America/Noronha"=>"GMT-02:00",
381  "Atlantic/Azores"=>"GMT-01:00",
382  "Africa/Abidjan"=>"GMT+00:00",
383  "Europe/Paris"=>"GMT+01:00",
384  "Europe/Helsinki"=>"GMT+02:00",
385  "Europe/Moscow"=>"GMT+03:00",
386  "Asia/Dubai"=>"GMT+04:00",
387  "Asia/Karachi"=>"GMT+05:00",
388  "Indian/Chagos"=>"GMT+06:00",
389  "Asia/Jakarta"=>"GMT+07:00",
390  "Asia/Hong_Kong"=>"GMT+08:00",
391  "Asia/Tokyo"=>"GMT+09:00",
392  "Australia/Sydney"=>"GMT+10:00",
393  "Pacific/Noumea"=>"GMT+11:00",
394  "Pacific/Auckland"=>"GMT+12:00",
395  "Pacific/Enderbury"=>"GMT+13:00"
396  );
397  foreach ($arraytz as $lib => $gmt) {
398  print '<option value="'.$lib.'"';
399  if ($selected == $lib || $selected == $gmt) {
400  print ' selected';
401  }
402  print '>'.$gmt.'</option>'."\n";
403  }
404  print '</select>';
405  }
406 
407 
408 
409  // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
420  public function select_paper_format($selected = '', $htmlname = 'paperformat_id', $filter = 0, $showempty = 0, $forcecombo = 0)
421  {
422  // phpcs:enable
423  global $langs;
424 
425  $langs->load("dict");
426 
427  $sql = "SELECT code, label, width, height, unit";
428  $sql .= " FROM ".$this->db->prefix()."c_paper_format";
429  $sql .= " WHERE active=1";
430  if ($filter) {
431  $sql .= " AND code LIKE '%".$this->db->escape($filter)."%'";
432  }
433 
434  $resql = $this->db->query($sql);
435  if ($resql) {
436  $num = $this->db->num_rows($resql);
437  $i = 0;
438  while ($i < $num) {
439  $obj = $this->db->fetch_object($resql);
440  $unitKey = $langs->trans('SizeUnit'.$obj->unit);
441 
442  $paperformat[$obj->code] = $langs->trans('PaperFormat'.strtoupper($obj->code)).' - '.round($obj->width).'x'.round($obj->height).' '.($unitKey == 'SizeUnit'.$obj->unit ? $obj->unit : $unitKey);
443 
444  $i++;
445  }
446  } else {
447  dol_print_error($this->db);
448  return '';
449  }
450  $out = '';
451 
452  $out .= '<select class="flat" id="'.$htmlname.'" name="'.$htmlname.'">';
453  if ($showempty) {
454  $out .= '<option value=""';
455  if ($selected == '') {
456  $out .= ' selected';
457  }
458  $out .= '>&nbsp;</option>';
459  }
460  foreach ($paperformat as $key => $value) {
461  if ($selected == $key) {
462  $out .= '<option value="'.$key.'" selected>'.$value.'</option>';
463  } else {
464  $out .= '<option value="'.$key.'">'.$value.'</option>';
465  }
466  }
467  $out .= '</select>';
468 
469  if (!$forcecombo) {
470  include_once DOL_DOCUMENT_ROOT.'/core/lib/ajax.lib.php';
471  $out .= ajax_combobox($htmlname);
472  }
473 
474  return $out;
475  }
476 }
ajax_combobox($htmlname, $events=array(), $minLengthToAutocomplete=0, $forcefocus=0, $widthTypeOfAutocomplete='resolve', $idforemptyvalue='-1', $morecss='')
Convert a html select field into an ajax combobox.
Definition: ajax.lib.php:449
Class to generate html code for admin pages.
select_language($selected='', $htmlname='lang_id', $showauto=0, $filter=array(), $showempty='', $showwarning=0, $disabled=0, $morecss='', $showcode=0, $forcecombo=0, $multiselect=0, $onlykeys=array(), $mainlangonly=0)
Return html select list with available languages (key='en_US', value='United States' for example)
select_timezone($selected, $htmlname)
Return a HTML select list of timezones.
select_menu($selected, $htmlname, $dirmenuarray, $moreattrib='')
Return list of available menus (eldy_backoffice, ...)
select_menu_families($selected, $htmlname, $dirmenuarray)
Return combo list of available menu families.
select_paper_format($selected='', $htmlname='paperformat_id', $filter=0, $showempty=0, $forcecombo=0)
Return html select list with available languages (key='en_US', value='United States' for example)
__construct($db)
Constructor.
if(isModEnabled('facture') &&!empty($user->rights->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') &&!empty($user->rights->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)) $resql
Social contributions to pay.
Definition: index.php:745
getLanguageCodeFromCountryCode($countrycode)
Return default language from country code.
picto_from_langcode($codelang, $moreatt='', $notitlealt=0)
Return img flag of country for a language code or country code.
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $noescapetags='', $escapeonlyhtmltags=0)
Returns text escaped for inclusion in HTML alt or title tags, or into values of HTML input fields.
dol_print_error($db='', $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
getDolGlobalInt($key, $default=0)
Return dolibarr global constant int value.
$conf db
API class for accounts.
Definition: inc.php:41