dolibarr  18.0.6
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  if (is_numeric($showempty)) {
100  $out .= '<option value="0"';
101  } else {
102  $out .= '<option value="-1"';
103  }
104  if ($selected === '') {
105  $out .= ' selected';
106  }
107  $out .= '>';
108  if ($showempty != '1') {
109  $out .= $showempty;
110  } else {
111  $out .= '&nbsp;';
112  }
113  $out .= '</option>';
114  }
115  if ($showauto) {
116  $out .= '<option value="auto"';
117  if ($selected === 'auto') {
118  $out .= ' selected';
119  }
120  $out .= '>'.$langs->trans("AutoDetectLang").'</option>';
121  }
122 
123  asort($langs_available); // array('XX' => 'Language (Country)', ...)
124 
125  foreach ($langs_available as $key => $value) {
126  $valuetoshow = $value;
127  if ($showcode == 1) {
128  if ($mainlangonly) {
129  $valuetoshow = '<span class="opacitymedium">'.preg_replace('/[_-].*$/', '', $key).'</span> - '.$value;
130  } else {
131  $valuetoshow = '<span class="opacitymedium">'.$key.'</span> - '.$value;
132  }
133  }
134  if ($showcode == 2) {
135  if ($mainlangonly) {
136  $valuetoshow = $value.' <span class="opacitymedium">('.preg_replace('/[_-].*$/', '', $key).')</span>';
137  } else {
138  $valuetoshow = $value.' <span class="opacitymedium">('.$key.')</span>';
139  }
140  }
141 
142  $keytouse = $key;
143  if ($mainlangonly) {
144  $keytouse = preg_replace('/[_-].*$/', '', $key);
145  }
146 
147  if ($filter && is_array($filter) && array_key_exists($keytouse, $filter)) {
148  continue;
149  }
150  if ($onlykeys && is_array($onlykeys) && !array_key_exists($keytouse, $onlykeys)) {
151  continue;
152  }
153 
154  $valuetoshow = picto_from_langcode($key, 'class="saturatemedium"').' '.$valuetoshow;
155  if ((is_string($selected) && (string) $selected == (string) $keytouse) || (is_array($selected) && in_array($keytouse, $selected))) {
156  $out .= '<option value="'.$keytouse.'" selected data-html="'.dol_escape_htmltag($valuetoshow).'">'.$valuetoshow.'</option>';
157  } else {
158  $out .= '<option value="'.$keytouse.'" data-html="'.dol_escape_htmltag($valuetoshow).'">'.$valuetoshow.'</option>';
159  }
160  }
161  $out .= '</select>';
162 
163  // Make select dynamic
164  if (!$forcecombo) {
165  include_once DOL_DOCUMENT_ROOT.'/core/lib/ajax.lib.php';
166  $out .= ajax_combobox($htmlname);
167  }
168 
169  return $out;
170  }
171 
172  // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
182  public function select_menu($selected, $htmlname, $dirmenuarray, $moreattrib = '')
183  {
184  // phpcs:enable
185  global $langs, $conf;
186 
187  // Clean parameters
188 
189 
190  // Check parameters
191  if (!is_array($dirmenuarray)) {
192  return -1;
193  }
194 
195  $menuarray = array();
196  foreach ($conf->file->dol_document_root as $dirroot) {
197  foreach ($dirmenuarray as $dirtoscan) {
198  $dir = $dirroot.$dirtoscan;
199  //print $dir.'<br>';
200  if (is_dir($dir)) {
201  $handle = opendir($dir);
202  if (is_resource($handle)) {
203  while (($file = readdir($handle)) !== false) {
204  if (is_file($dir."/".$file) && substr($file, 0, 1) <> '.' && substr($file, 0, 3) <> 'CVS' && substr($file, 0, 5) != 'index') {
205  if (preg_match('/lib\.php$/i', $file)) {
206  continue; // We exclude library files
207  }
208  if (preg_match('/eldy_(backoffice|frontoffice)\.php$/i', $file)) {
209  continue; // We exclude all menu manager files
210  }
211  if (preg_match('/auguria_(backoffice|frontoffice)\.php$/i', $file)) {
212  continue; // We exclude all menu manager files
213  }
214  if (preg_match('/smartphone_(backoffice|frontoffice)\.php$/i', $file)) {
215  continue; // We exclude all menu manager files
216  }
217 
218  $filelib = preg_replace('/\.php$/i', '', $file);
219  $prefix = '';
220  // 0=Recommanded, 1=Experimental, 2=Developpement, 3=Other
221  if (preg_match('/^eldy/i', $file)) {
222  $prefix = '0';
223  } elseif (preg_match('/^smartphone/i', $file)) {
224  $prefix = '2';
225  } else {
226  $prefix = '3';
227  }
228 
229  if ($file == $selected) {
230  $menuarray[$prefix.'_'.$file] = '<option value="'.$file.'" selected>'.$filelib.'</option>';
231  } else {
232  $menuarray[$prefix.'_'.$file] = '<option value="'.$file.'">'.$filelib.'</option>';
233  }
234  }
235  }
236  closedir($handle);
237  }
238  }
239  }
240  }
241  ksort($menuarray);
242 
243  // Output combo list of menus
244  print '<select class="flat" id="'.$htmlname.'" name="'.$htmlname.'"'.($moreattrib ? ' '.$moreattrib : '').'>';
245  $oldprefix = '';
246  foreach ($menuarray as $key => $val) {
247  $tab = explode('_', $key);
248  $newprefix = $tab[0];
249  if ($newprefix == '1' && (getDolGlobalInt('MAIN_FEATURES_LEVEL') < 1)) {
250  continue;
251  }
252  if ($newprefix == '2' && (getDolGlobalInt('MAIN_FEATURES_LEVEL') < 2)) {
253  continue;
254  }
255  if ($newprefix != $oldprefix) { // Add separators
256  // Affiche titre
257  print '<option value="-1" disabled>';
258  if ($newprefix == '0') {
259  print '-- '.$langs->trans("VersionRecommanded").' --';
260  }
261  if ($newprefix == '1') {
262  print '-- '.$langs->trans("VersionExperimental").' --';
263  }
264  if ($newprefix == '2') {
265  print '-- '.$langs->trans("VersionDevelopment").' --';
266  }
267  if ($newprefix == '3') {
268  print '-- '.$langs->trans("Other").' --';
269  }
270  print '</option>';
271  $oldprefix = $newprefix;
272  }
273  print $val."\n"; // Show menu entry
274  }
275  print '</select>';
276  }
277 
278  // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
287  public function select_menu_families($selected, $htmlname, $dirmenuarray)
288  {
289  // phpcs:enable
290  global $langs, $conf;
291 
292  //$expdevmenu=array('smartphone_backoffice.php','smartphone_frontoffice.php'); // Menu to disable if $conf->global->MAIN_FEATURES_LEVEL is not set
293  $expdevmenu = array();
294 
295  $menuarray = array();
296 
297  foreach ($dirmenuarray as $dirmenu) {
298  foreach ($conf->file->dol_document_root as $dirroot) {
299  $dir = $dirroot.$dirmenu;
300  if (is_dir($dir)) {
301  $handle = opendir($dir);
302  if (is_resource($handle)) {
303  while (($file = readdir($handle)) !== false) {
304  if (is_file($dir."/".$file) && substr($file, 0, 1) <> '.' && substr($file, 0, 3) <> 'CVS') {
305  $filelib = preg_replace('/(_backoffice|_frontoffice)?\.php$/i', '', $file);
306  if (preg_match('/^index/i', $filelib)) {
307  continue;
308  }
309  if (preg_match('/^default/i', $filelib)) {
310  continue;
311  }
312  if (preg_match('/^empty/i', $filelib)) {
313  continue;
314  }
315  if (preg_match('/\.lib/i', $filelib)) {
316  continue;
317  }
318  if (getDolGlobalInt('MAIN_FEATURES_LEVEL') == 0 && in_array($file, $expdevmenu)) {
319  continue;
320  }
321 
322  $menuarray[$filelib] = 1;
323  }
324  $menuarray['all'] = 1;
325  }
326  closedir($handle);
327  }
328  }
329  }
330  }
331 
332  ksort($menuarray);
333 
334  // Affichage liste deroulante des menus
335  print '<select class="flat" id="'.$htmlname.'" name="'.$htmlname.'">';
336  $oldprefix = '';
337  foreach ($menuarray as $key => $val) {
338  $tab = explode('_', $key);
339  $newprefix = $tab[0];
340  print '<option value="'.$key.'"';
341  if ($key == $selected) {
342  print ' selected';
343  }
344  print '>';
345  if ($key == 'all') {
346  print $langs->trans("AllMenus");
347  } else {
348  print $key;
349  }
350  print '</option>'."\n";
351  }
352  print '</select>';
353 
354  print ajax_combobox($htmlname);
355  }
356 
357 
358  // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
366  public function select_timezone($selected, $htmlname)
367  {
368  // phpcs:enable
369  global $langs, $conf;
370 
371  print '<select class="flat" id="'.$htmlname.'" name="'.$htmlname.'">';
372  print '<option value="-1">&nbsp;</option>';
373 
374  $arraytz = array(
375  "Pacific/Midway"=>"GMT-11:00",
376  "Pacific/Fakaofo"=>"GMT-10:00",
377  "America/Anchorage"=>"GMT-09:00",
378  "America/Los_Angeles"=>"GMT-08:00",
379  "America/Dawson_Creek"=>"GMT-07:00",
380  "America/Chicago"=>"GMT-06:00",
381  "America/Bogota"=>"GMT-05:00",
382  "America/Anguilla"=>"GMT-04:00",
383  "America/Araguaina"=>"GMT-03:00",
384  "America/Noronha"=>"GMT-02:00",
385  "Atlantic/Azores"=>"GMT-01:00",
386  "Africa/Abidjan"=>"GMT+00:00",
387  "Europe/Paris"=>"GMT+01:00",
388  "Europe/Helsinki"=>"GMT+02:00",
389  "Europe/Moscow"=>"GMT+03:00",
390  "Asia/Dubai"=>"GMT+04:00",
391  "Asia/Karachi"=>"GMT+05:00",
392  "Indian/Chagos"=>"GMT+06:00",
393  "Asia/Jakarta"=>"GMT+07:00",
394  "Asia/Hong_Kong"=>"GMT+08:00",
395  "Asia/Tokyo"=>"GMT+09:00",
396  "Australia/Sydney"=>"GMT+10:00",
397  "Pacific/Noumea"=>"GMT+11:00",
398  "Pacific/Auckland"=>"GMT+12:00",
399  "Pacific/Enderbury"=>"GMT+13:00"
400  );
401  foreach ($arraytz as $lib => $gmt) {
402  print '<option value="'.$lib.'"';
403  if ($selected == $lib || $selected == $gmt) {
404  print ' selected';
405  }
406  print '>'.$gmt.'</option>'."\n";
407  }
408  print '</select>';
409  }
410 
411 
412 
413  // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
424  public function select_paper_format($selected = '', $htmlname = 'paperformat_id', $filter = 0, $showempty = 0, $forcecombo = 0)
425  {
426  // phpcs:enable
427  global $langs;
428 
429  $langs->load("dict");
430 
431  $sql = "SELECT code, label, width, height, unit";
432  $sql .= " FROM ".$this->db->prefix()."c_paper_format";
433  $sql .= " WHERE active=1";
434  if ($filter) {
435  $sql .= " AND code LIKE '%".$this->db->escape($filter)."%'";
436  }
437 
438  $resql = $this->db->query($sql);
439  if ($resql) {
440  $num = $this->db->num_rows($resql);
441  $i = 0;
442  while ($i < $num) {
443  $obj = $this->db->fetch_object($resql);
444  $unitKey = $langs->trans('SizeUnit'.$obj->unit);
445 
446  $paperformat[$obj->code] = $langs->trans('PaperFormat'.strtoupper($obj->code)).' - '.round($obj->width).'x'.round($obj->height).' '.($unitKey == 'SizeUnit'.$obj->unit ? $obj->unit : $unitKey);
447 
448  $i++;
449  }
450  } else {
451  dol_print_error($this->db);
452  return '';
453  }
454  $out = '';
455 
456  $out .= '<select class="flat" id="'.$htmlname.'" name="'.$htmlname.'">';
457  if ($showempty) {
458  $out .= '<option value=""';
459  if ($selected == '') {
460  $out .= ' selected';
461  }
462  $out .= '>&nbsp;</option>';
463  }
464  foreach ($paperformat as $key => $value) {
465  if ($selected == $key) {
466  $out .= '<option value="'.$key.'" selected>'.$value.'</option>';
467  } else {
468  $out .= '<option value="'.$key.'">'.$value.'</option>';
469  }
470  }
471  $out .= '</select>';
472 
473  if (!$forcecombo) {
474  include_once DOL_DOCUMENT_ROOT.'/core/lib/ajax.lib.php';
475  $out .= ajax_combobox($htmlname);
476  }
477 
478  return $out;
479  }
480 }
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') && $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
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_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.
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...