dolibarr  20.0.0-beta
html.formresource.class.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (C) - 2013-2015 Jean-François FERRY <jfefe@aternatik.fr>
3  * Copyright (C) 2019-2024 Frédéric France <frederic.france@free.fr>
4  * Copyright (C) 2022 Ferran Marcet <fmarcet@2byte.es>
5  * Copyright (C) 2023 William Mead <william.mead@manchenumerique.fr>
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 3 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program. If not, see <https://www.gnu.org/licenses/>.
19  * or see https://www.gnu.org/
20  */
21 
27 require_once DOL_DOCUMENT_ROOT."/core/class/html.form.class.php";
28 require_once DOL_DOCUMENT_ROOT."/resource/class/dolresource.class.php";
29 
30 
38 {
42  public $db;
43 
44  public $substit = array();
45 
46  public $param = array();
47 
51  public $error = '';
52 
53 
59  public function __construct($db)
60  {
61  $this->db = $db;
62  }
63 
64 
65  // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
83  public function select_resource_list($selected = 0, $htmlname = 'fk_resource', array $filter = [], $showempty = 0, $showtype = 0, $forcecombo = 0, $event = [], $filterkey = [], $outputmode = 0, $limit = 20, $morecss = '', $multiple = false)
84  {
85  // phpcs:enable
86  global $conf, $user, $langs;
87 
88  $out = '';
89  $outarray = array();
90 
91  $resourcestat = new Dolresource($this->db);
92 
93  $resources_used = $resourcestat->fetchAll('ASC', 't.rowid', $limit, 0, $filter);
94 
95  if (!empty($selected) && !is_array($selected)) {
96  $selected = array($selected);
97  }
98 
99  if ($outputmode != 2) {
100  $out = '<form action="'.$_SERVER["PHP_SELF"].'" method="POST">';
101  $out .= '<input type="hidden" name="token" value="'.newToken().'">';
102  }
103 
104  if ($resourcestat) {
105  // Construct $out and $outarray
106  $out .= '<select id="'.$htmlname.'" class="flat minwidth100'.($morecss ? ' '.$morecss : '').'" name="'.$htmlname.($multiple ? '[]' : '').'" '.($multiple ? 'multiple' : '').'>'."\n";
107  if ($showempty) {
108  $out .= '<option value="-1">&nbsp;</option>'."\n";
109  }
110 
111  $num = 0;
112  if (is_array($resourcestat->lines)) {
113  $num = count($resourcestat->lines);
114  }
115 
116  //var_dump($resourcestat->lines);
117  $i = 0;
118  if ($num) {
119  while ($i < $num) {
120  $resourceclass = ucfirst($resourcestat->lines[$i]->element);
121 
122  $label = $resourcestat->lines[$i]->ref ? $resourcestat->lines[$i]->ref : ''.$resourcestat->lines[$i]->label;
123  if ($resourceclass != 'Dolresource') {
124  $label .= ' ('.$langs->trans($resourceclass).')';
125  }
126 
127  // Test if entry is the first element of $selected.
128  if ((isset($selected[0]) && is_object($selected[0]) && $selected[0]->id == $resourcestat->lines[$i]->id) || ((!isset($selected[0]) || !is_object($selected[0])) && !empty($selected) && in_array($resourcestat->lines[$i]->id, $selected))) {
129  $out .= '<option value="'.$resourcestat->lines[$i]->id.'" selected>'.$label.'</option>';
130  } else {
131  $out .= '<option value="'.$resourcestat->lines[$i]->id.'">'.$label.'</option>';
132  }
133 
134  array_push($outarray, array('key'=>$resourcestat->lines[$i]->id, 'value'=>$resourcestat->lines[$i]->id, 'label'=>$label));
135 
136  $i++;
137  if (($i % 10) == 0) {
138  $out .= "\n";
139  }
140  }
141  }
142  $out .= '</select>'."\n";
143 
144  if (!empty($conf->use_javascript_ajax) && getDolGlobalString('RESOURCE_USE_SEARCH_TO_SELECT') && !$forcecombo) {
145  //$minLength = (is_numeric($conf->global->RESOURCE_USE_SEARCH_TO_SELECT)?$conf->global->RESOURCE_USE_SEARCH_TO_SELECT:2);
146  $out .= ajax_combobox($htmlname, $event, $conf->global->RESOURCE_USE_SEARCH_TO_SELECT);
147  } else {
148  $out .= ajax_combobox($htmlname);
149  }
150 
151  if ($outputmode != 2) {
152  $out .= '<input type="submit" class="button" value="'.$langs->trans("Search").'"> &nbsp; &nbsp; ';
153 
154  $out .= '</form>';
155  }
156  } else {
157  dol_print_error($this->db);
158  }
159 
160  if ($outputmode && $outputmode != 2) {
161  return $outarray;
162  }
163  return $out;
164  }
165 
166  // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
179  public function select_types_resource($selected = '', $htmlname = 'type_resource', $filtertype = '', $format = 0, $empty = 0, $noadmininfo = 0, $maxlength = 0)
180  {
181  // phpcs:enable
182  global $langs, $user;
183 
184  $resourcestat = new Dolresource($this->db);
185 
186  dol_syslog(get_class($this)."::select_types_resource ".$selected.", ".$htmlname.", ".$filtertype.", ".$format, LOG_DEBUG);
187 
188  $filterarray = array();
189 
190  if ($filtertype != '' && $filtertype != '-1') {
191  $filterarray = explode(',', $filtertype);
192  }
193 
194  $resourcestat->loadCacheCodeTypeResource();
195  print '<select id="select'.$htmlname.'" class="flat maxwidthonsmartphone select_'.$htmlname.'" name="'.$htmlname.'">';
196  if ($empty) {
197  print '<option value="">&nbsp;</option>';
198  }
199  if (is_array($resourcestat->cache_code_type_resource) && count($resourcestat->cache_code_type_resource)) {
200  foreach ($resourcestat->cache_code_type_resource as $id => $arraytypes) {
201  // We discard empty line if showempty is on because an empty line has already been output.
202  if ($empty && empty($arraytypes['code'])) {
203  continue;
204  }
205 
206  if ($format == 0) {
207  print '<option value="'.$id.'"';
208  } elseif ($format == 1) {
209  print '<option value="'.$arraytypes['code'].'"';
210  } elseif ($format == 2) {
211  print '<option value="'.$arraytypes['code'].'"';
212  } elseif ($format == 3) {
213  print '<option value="'.$id.'"';
214  }
215  // Si selected est text, on compare avec code, sinon avec id
216  if (!empty($selected) && preg_match('/[a-z]/i', $selected) && $selected == $arraytypes['code']) {
217  print ' selected';
218  } elseif ($selected == $id) {
219  print ' selected';
220  }
221  print '>';
222  if ($format == 0) {
223  $value = ($maxlength ? dol_trunc($arraytypes['label'], $maxlength) : $arraytypes['label']);
224  } elseif ($format == 1) {
225  $value = $arraytypes['code'];
226  } elseif ($format == 2) {
227  $value = ($maxlength ? dol_trunc($arraytypes['label'], $maxlength) : $arraytypes['label']);
228  } elseif ($format == 3) {
229  $value = $arraytypes['code'];
230  }
231  if (empty($value)) {
232  $value = '&nbsp;';
233  }
234  print $value;
235  print '</option>';
236  }
237  }
238  print '</select>';
239  if ($user->admin && !$noadmininfo) {
240  print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionarySetup"), 1);
241  }
242  }
243 
244  // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
257  public function select_ziptown($selected = '', $htmlname = 'zipcode', $fields = array(), $fieldsize = 0, $disableautocomplete = 0, $moreattrib = '', $morecss = '')
258  {
259  // phpcs:enable
260  global $conf;
261 
262  $out = '';
263 
264  $size = '';
265  if (!empty($fieldsize)) {
266  $size = 'size="' . $fieldsize . '"';
267  }
268 
269  if ($conf->use_javascript_ajax && empty($disableautocomplete)) {
270  $out .= ajax_multiautocompleter($htmlname, $fields, DOL_URL_ROOT . '/core/ajax/ziptown.php') . "\n";
271  $moreattrib .= ' autocomplete="off"';
272  }
273  $out .= '<input id="' . $htmlname . '" class="maxwidthonsmartphone' . ($morecss ? ' ' . $morecss : '') . '" type="text"' . ($moreattrib ? ' ' . $moreattrib : '') . ' name="' . $htmlname . '" ' . $size . ' value="' . $selected . '">' . "\n";
274 
275  return $out;
276  }
277 
278  // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
292  public function select_state($selected = 0, $country_codeid = 0, $htmlname = 'state_id', $morecss = 'maxwidth200onsmartphone minwidth300')
293  {
294  // phpcs:enable
295  global $conf, $langs, $user;
296 
297  dol_syslog(get_class($this) . "::select_departement selected=" . $selected . ", country_codeid=" . $country_codeid, LOG_DEBUG);
298 
299  $langs->load("dict");
300 
301  $out = '';
302 
303  // Search active departements/cantons/province of a region and actif country
304  $sql = "SELECT d.rowid, d.code_departement as code, d.nom as name, d.active, c.label as country, c.code as country_code, r.nom as region_name FROM";
305  $sql .= " " . $this->db->prefix() . "c_departements as d, " . $this->db->prefix() . "c_regions as r," . $this->db->prefix() . "c_country as c";
306  $sql .= " WHERE d.fk_region=r.code_region and r.fk_pays=c.rowid";
307  $sql .= " AND d.active = 1 AND r.active = 1 AND c.active = 1";
308  if ($country_codeid && is_numeric($country_codeid)) {
309  $sql .= " AND c.rowid = '" . $this->db->escape($country_codeid) . "'";
310  }
311  if ($country_codeid && !is_numeric($country_codeid)) {
312  $sql .= " AND c.code = '" . $this->db->escape($country_codeid) . "'";
313  }
314  $sql .= " ORDER BY c.code, d.code_departement";
315 
316  $result = $this->db->query($sql);
317  if ($result) {
318  if (!empty($htmlname)) {
319  $out .= '<select id="' . $htmlname . '" class="flat' . ($morecss ? ' ' . $morecss : '') . '" name="' . $htmlname . '">';
320  }
321  if ($country_codeid) {
322  $out .= '<option value="0">&nbsp;</option>';
323  }
324  $num = $this->db->num_rows($result);
325  $i = 0;
326  dol_syslog(get_class($this) . "::select_departement num=" . $num, LOG_DEBUG);
327  if ($num) {
328  $country = '';
329  while ($i < $num) {
330  $obj = $this->db->fetch_object($result);
331  if ($obj->code == '0') { // Le code peut etre une chaine
332  $out .= '<option value="0">&nbsp;</option>';
333  } else {
334  if (!$country || $country != $obj->country) {
335  // Show break if we are in list with multiple countries
336  if (!$country_codeid && $obj->country_code) {
337  $out .= '<option value="-1" disabled data-html="----- ' . $obj->country . ' -----">----- ' . $obj->country . " -----</option>\n";
338  $country = $obj->country;
339  }
340  }
341 
342  if (!empty($selected) && $selected == $obj->rowid) {
343  $out .= '<option value="' . $obj->rowid . '" selected>';
344  } else {
345  $out .= '<option value="' . $obj->rowid . '">';
346  }
347 
348  // If translation exists use it, otherwise use default name
349  if (
350  getDolGlobalString('MAIN_SHOW_STATE_CODE') &&
351  (getDolGlobalInt('MAIN_SHOW_STATE_CODE') == 1 || getDolGlobalInt('MAIN_SHOW_STATE_CODE') == 2 || $conf->global->MAIN_SHOW_STATE_CODE === 'all')
352  ) {
353  if (getDolGlobalInt('MAIN_SHOW_REGION_IN_STATE_SELECT') == 1) {
354  $out .= $obj->region_name . ' - ' . $obj->code . ' - ' . ($langs->trans($obj->code) != $obj->code ? $langs->trans($obj->code) : ($obj->name != '-' ? $obj->name : ''));
355  } else {
356  $out .= $obj->code . ' - ' . ($langs->trans($obj->code) != $obj->code ? $langs->trans($obj->code) : ($obj->name != '-' ? $obj->name : ''));
357  }
358  } else {
359  if (getDolGlobalInt('MAIN_SHOW_REGION_IN_STATE_SELECT') == 1) {
360  $out .= $obj->region_name . ' - ' . ($langs->trans($obj->code) != $obj->code ? $langs->trans($obj->code) : ($obj->name != '-' ? $obj->name : ''));
361  } else {
362  $out .= ($langs->trans($obj->code) != $obj->code ? $langs->trans($obj->code) : ($obj->name != '-' ? $obj->name : ''));
363  }
364  }
365 
366  $out .= '</option>';
367  }
368  $i++;
369  }
370  }
371  if (!empty($htmlname)) {
372  $out .= '</select>';
373  }
374  if (!empty($htmlname) && $user->admin) {
375  $out .= ' ' . info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionarySetup"), 1);
376  }
377  } else {
378  dol_print_error($this->db);
379  }
380 
381  // Make select dynamic
382  if (!empty($htmlname)) {
383  include_once DOL_DOCUMENT_ROOT . '/core/lib/ajax.lib.php';
384  $out .= ajax_combobox($htmlname);
385  }
386 
387  return $out;
388  }
389 }
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:456
ajax_multiautocompleter($htmlname, $fields, $url, $option='', $minLength=2, $autoselect=0)
Generic function that return javascript to add to a page to transform a common input text field into ...
Definition: ajax.lib.php:305
DAO Resource object.
Class to manage forms for the module resource.
select_resource_list($selected=0, $htmlname='fk_resource', array $filter=[], $showempty=0, $showtype=0, $forcecombo=0, $event=[], $filterkey=[], $outputmode=0, $limit=20, $morecss='', $multiple=false)
Output html form to select a resource.
select_types_resource($selected='', $htmlname='type_resource', $filtertype='', $format=0, $empty=0, $noadmininfo=0, $maxlength=0)
Return html list of tickets type.
__construct($db)
Constructor.
select_state($selected=0, $country_codeid=0, $htmlname='state_id', $morecss='maxwidth200onsmartphone minwidth300')
Returns the drop-down list of departments/provinces/cantons for all countries or for a given country.
select_ziptown($selected='', $htmlname='zipcode', $fields=array(), $fieldsize=0, $disableautocomplete=0, $moreattrib='', $morecss='')
Return a select list with zip codes and their town.
if(isModEnabled('invoice') && $user->hasRight('facture', 'lire')) if((isModEnabled('fournisseur') &&!getDolGlobalString('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') && $user->hasRight('tax', 'charges', 'lire')) if(isModEnabled('invoice') &&isModEnabled('order') && $user->hasRight("commande", "lire") &&!getDolGlobalString('WORKFLOW_DISABLE_CREATE_INVOICE_FROM_ORDER')) $sql
Social contributions to pay.
Definition: index.php:745
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
info_admin($text, $infoonimgalt=0, $nodiv=0, $admin='1', $morecss='hideonsmartphone', $textfordropdown='')
Show information in HTML for admin users or standard users.
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
dol_trunc($string, $size=40, $trunc='right', $stringencoding='UTF-8', $nodot=0, $display=0)
Truncate a string to a particular length adding '…' if string larger than length.
getDolGlobalString($key, $default='')
Return dolibarr global constant string value.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.