dolibarr  16.0.1
admin_extrafields_edit.tpl.php
1 <?php
2 /* Copyright (C) 2010-2012 Laurent Destailleur <eldy@users.sourceforge.net>
3  * Copyright (C) 2012 Regis Houssin <regis.houssin@inodbox.com>
4  * Copyright (C) 2018 Frédéric France <frederic.france@netlogic.fr>
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 
29 // Protection to avoid direct call of template
30 if (empty($conf) || !is_object($conf)) {
31  print "Error, template page can't be called as URL";
32  exit;
33 }
34 
35 
36 $langs->load("modulebuilder");
37 
38 $listofexamplesforlink = 'Societe:societe/class/societe.class.php<br>Contact:contact/class/contact.class.php<br>Product:product/class/product.class.php<br>Project:projet/class/project.class.php<br>...';
39 
40 ?>
41 
42 <!-- BEGIN PHP TEMPLATE admin_extrafields_edit.tpl.php -->
43 <script>
44  jQuery(document).ready(function() {
45  function init_typeoffields(type)
46  {
47  console.log("select a new type (edit) = "+type);
48  var size = jQuery("#size");
49  var computed_value = jQuery("#computed_value");
50  var langfile = jQuery("#langfile");
51  var default_value = jQuery("#default_value");
52  var unique = jQuery("#unique");
53  var required = jQuery("#required");
54  var alwayseditable = jQuery("#alwayseditable");
55  var list = jQuery("#list");
56  var totalizable = jQuery("#totalizable");
57  <?php
58  if ((GETPOST('type', 'alpha') != "select") && (GETPOST('type', 'alpha') != "sellist")) {
59  print 'jQuery("#value_choice").hide();';
60  }
61 
62  if (GETPOST('type', 'alpha') == "separate") {
63  print "jQuery('#size, #default_value, #langfile').val('').prop('disabled', true);";
64  print 'jQuery("#value_choice").hide();';
65  }
66  ?>
67 
68  // Case of computed field
69  if (type == 'varchar' || type == 'int' || type == 'double' || type == 'price') {
70  jQuery("tr.extra_computed_value").show();
71  } else {
72  computed_value.val(''); jQuery("tr.extra_computed_value").hide();
73  }
74  if (computed_value.val())
75  {
76  console.log("We enter a computed formula");
77  jQuery("#default_value").val('');
78  /* jQuery("#unique, #required, #alwayseditable, #list").removeAttr('checked'); */
79  jQuery("#default_value, #unique, #required, #alwayseditable, #list").attr('disabled', true);
80  jQuery("tr.extra_default_value, tr.extra_unique, tr.extra_required, tr.extra_alwayseditable, tr.extra_list").hide();
81  }
82  else
83  {
84  console.log("No computed formula");
85  jQuery("#default_value, #unique, #required, #alwayseditable, #list").attr('disabled', false);
86  jQuery("tr.extra_default_value, tr.extra_unique, tr.extra_required, tr.extra_alwayseditable, tr.extra_list").show();
87  }
88 
89  if (type == 'date') { size.val('').prop('disabled', true); unique.removeAttr('disabled'); jQuery("#value_choice").hide();jQuery("#helpchkbxlst").hide(); }
90  else if (type == 'datetime') { size.val('').prop('disabled', true); unique.removeAttr('disabled'); jQuery("#value_choice").hide(); jQuery("#helpchkbxlst").hide();}
91  else if (type == 'double') { size.removeAttr('disabled'); unique.removeAttr('disabled'); jQuery("#value_choice").hide(); jQuery("#helpchkbxlst").hide();}
92  else if (type == 'int') { size.removeAttr('disabled'); unique.removeAttr('disabled'); jQuery("#value_choice").hide(); jQuery("#helpchkbxlst").hide();}
93  else if (type == 'text') { size.removeAttr('disabled'); unique.prop('disabled', true).removeAttr('checked'); jQuery("#value_choice").hide();jQuery("#helpchkbxlst").hide(); }
94  else if (type == 'html') { size.removeAttr('disabled'); unique.prop('disabled', true).removeAttr('checked'); jQuery("#value_choice").hide();jQuery("#helpchkbxlst").hide(); }
95  else if (type == 'varchar') { size.removeAttr('disabled'); unique.removeAttr('disabled'); jQuery("#value_choice").hide();jQuery("#helpchkbxlst").hide(); }
96  else if (type == 'password') { size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); required.val('').prop('disabled', true); default_value.val('').prop('disabled', true); jQuery("#value_choice").show(); jQuery(".spanforparamtooltip").hide(); jQuery("#helppassword").show();}
97  else if (type == 'boolean') { size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); jQuery("#value_choice").hide(); jQuery("#helpchkbxlst").hide();}
98  else if (type == 'price') { size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); jQuery("#value_choice").hide(); jQuery("#helpchkbxlst").hide();}
99  else if (type == 'select') { size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); jQuery("#value_choice").show(); jQuery(".spanforparamtooltip").hide(); jQuery("#helpselect").show();}
100  else if (type == 'sellist') { size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); jQuery("#value_choice").show(); jQuery(".spanforparamtooltip").hide(); jQuery("#helpsellist").show();}
101  else if (type == 'radio') { size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); jQuery("#value_choice").show(); jQuery(".spanforparamtooltip").hide(); jQuery("#helpselect").show();}
102  else if (type == 'checkbox') { size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); jQuery("#value_choice").show(); jQuery(".spanforparamtooltip").hide(); jQuery("#helpselect").show();}
103  else if (type == 'chkbxlst') { size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); jQuery("#value_choice").show(); jQuery(".spanforparamtooltip").hide(); jQuery("#helpchkbxlst").show();}
104  else if (type == 'link') { size.val('').prop('disabled', true); unique.removeAttr('disabled'); jQuery("#value_choice").show(); jQuery(".spanforparamtooltip").hide(); jQuery("#helplink").show();}
105  else if (type == 'separate') {
106  size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); required.val('').prop('disabled', true); default_value.val('').prop('disabled', true);
107  jQuery("#value_choice").show();
108  jQuery(".spanforparamtooltip").hide(); jQuery("#helpseparate").show();
109  }
110  else { // type = string
111  size.val('').prop('disabled', true);
112  unique.removeAttr('disabled');
113  }
114 
115  if (type == 'separate')
116  {
117  required.removeAttr('checked').prop('disabled', true); alwayseditable.removeAttr('checked').prop('disabled', true); list.removeAttr('checked').prop('disabled', true);
118  jQuery('#size, #default_value, #langfile').val('').prop('disabled', true);
119  jQuery('#list').val(3); // visible on create/update/view form only
120  }
121  else
122  {
123  default_value.removeAttr('disabled');
124  required.removeAttr('disabled'); alwayseditable.removeAttr('disabled'); list.removeAttr('disabled');
125  }
126  }
127  init_typeoffields(jQuery("#type").val());
128  jQuery("#type").change(function() {
129  init_typeoffields($(this).val());
130  });
131 
132  // If we enter a formula, we disable other fields
133  jQuery("#computed_value").keyup(function() {
134  init_typeoffields(jQuery('#type').val());
135  });
136  });
137 </script>
138 
139 <!-- Form to edit an extra field -->
140 <form action="<?php echo $_SERVER["PHP_SELF"]; ?>?attrname=<?php echo $attrname; ?>" id="formeditextrafield" method="post">
141 <input type="hidden" name="token" value="<?php echo newToken(); ?>">
142 <input type="hidden" name="attrname" value="<?php echo $attrname; ?>">
143 <input type="hidden" name="action" value="update">
144 <input type="hidden" name="rowid" value="<?php echo (empty($rowid) ? '' : $rowid) ?>">
145 <input type="hidden" name="enabled" value="<?php echo $extrafields->attributes[$elementtype]['enabled'][$attrname]; ?>">
146 
147 <?php print dol_get_fiche_head(); ?>
148 
149 <table summary="listofattributes" class="border centpercent">
150 
151 <?php
152 $label = $extrafields->attributes[$elementtype]['label'][$attrname];
153 $type = $extrafields->attributes[$elementtype]['type'][$attrname];
154 $size = $extrafields->attributes[$elementtype]['size'][$attrname];
155 $computed = $extrafields->attributes[$elementtype]['computed'][$attrname];
156 $default = $extrafields->attributes[$elementtype]['default'][$attrname];
157 $unique = $extrafields->attributes[$elementtype]['unique'][$attrname];
158 $required = $extrafields->attributes[$elementtype]['required'][$attrname];
159 $pos = $extrafields->attributes[$elementtype]['pos'][$attrname];
160 $alwayseditable = $extrafields->attributes[$elementtype]['alwayseditable'][$attrname];
161 $param = $extrafields->attributes[$elementtype]['param'][$attrname];
162 $perms = $extrafields->attributes[$elementtype]['perms'][$attrname];
163 $langfile = $extrafields->attributes[$elementtype]['langfile'][$attrname];
164 $list = $extrafields->attributes[$elementtype]['list'][$attrname];
165 $totalizable = $extrafields->attributes[$elementtype]['totalizable'][$attrname];
166 $help = $extrafields->attributes[$elementtype]['help'][$attrname];
167 $entitycurrentorall = $extrafields->attributes[$elementtype]['entityid'][$attrname];
168 $printable = $extrafields->attributes[$elementtype]['printable'][$attrname];
169 $enabled = $extrafields->attributes[$elementtype]['enabled'][$attrname];
170 
171 if ((($type == 'select') || ($type == 'checkbox') || ($type == 'radio')) && is_array($param)) {
172  $param_chain = '';
173  foreach ($param['options'] as $key => $value) {
174  if (strlen($key)) {
175  $param_chain .= $key.','.$value."\n";
176  }
177  }
178 } elseif (($type == 'sellist') || ($type == 'chkbxlst') || ($type == 'link') || ($type == 'password') || ($type == 'separate')) {
179  $paramlist = array_keys($param['options']);
180  $param_chain = $paramlist[0];
181 }
182 ?>
183 <!-- Label -->
184 <tr><td class="titlefieldcreate fieldrequired"><?php echo $langs->trans("LabelOrTranslationKey"); ?></td><td class="valeur"><input type="text" name="label" size="40" value="<?php echo $label; ?>"></td></tr>
185 
186 <!-- Code -->
187 <tr><td class="fieldrequired"><?php echo $langs->trans("AttributeCode"); ?></td><td class="valeur"><?php echo $attrname; ?></td></tr>
188 
189 <!-- Type -->
190 <tr><td class="fieldrequired"><?php echo $langs->trans("Type"); ?></td><td class="valeur">
191 <?php
192 // Define list of possible type transition
193 $typewecanchangeinto = array(
194  'varchar'=>array('varchar', 'phone', 'mail', 'url', 'select', 'password', 'text', 'html'),
195  'double'=>array('double', 'price'),
196  'price'=>array('double', 'price'),
197  'text'=>array('text', 'html'),
198  'html'=>array('text', 'html'),
199  'password'=>array('password', 'varchar'),
200  'mail'=>array('varchar', 'phone', 'mail', 'url', 'select'),
201  'url'=>array('varchar', 'phone', 'mail', 'url', 'select'),
202  'phone'=>array('varchar', 'phone', 'mail', 'url', 'select'),
203  'select'=>array('varchar', 'phone', 'mail', 'url', 'select'),
204  'date'=>array('date', 'datetime')
205 );
206 /* Disabled because text is text on several lines, when varchar is text on 1 line, we should not be able to convert
207 if ($size <= 255 && in_array($type, array('text', 'html'))) {
208  $typewecanchangeinto['text'][] = 'varchar';
209 }*/
210 
211 if (in_array($type, array_keys($typewecanchangeinto))) {
212  $newarray = array();
213  print '<select id="type" class="flat type" name="type">';
214  foreach ($type2label as $key => $val) {
215  $selected = '';
216  if ($key == (GETPOST('type', 'alpha') ?GETPOST('type', 'alpha') : $type)) {
217  $selected = ' selected="selected"';
218  }
219  if (in_array($key, $typewecanchangeinto[$type])) {
220  print '<option value="'.$key.'"'.$selected.'>'.$val.'</option>';
221  } else {
222  print '<option value="'.$key.'" disabled="disabled"'.$selected.'>'.$val.'</option>';
223  }
224  }
225  print '</select>';
226  print ajax_combobox('type');
227 } else {
228  print $type2label[$type];
229  print '<input type="hidden" name="type" id="type" value="'.$type.'">';
230 }
231 ?>
232 </td></tr>
233 
234 <!-- Size -->
235 <tr class="extra_size"><td class="fieldrequired"><?php echo $langs->trans("Size"); ?></td><td><input id="size" type="text" name="size" size="5" value="<?php echo $size; ?>"></td></tr>
236 
237 <!-- Value (for some fields like password, select list, radio, ...) -->
238 <tr id="value_choice">
239 <td>
240  <?php echo $langs->trans("Value"); ?>
241 </td>
242 <td>
243  <table class="nobordernopadding">
244  <tr><td>
245  <textarea name="param" id="param" cols="80" rows="<?php echo ROWS_4 ?>"><?php echo dol_htmlcleanlastbr($param_chain); ?></textarea>
246  </td><td>
247  <span id="helpselect" class="spanforparamtooltip"><?php print $form->textwithpicto('', $langs->trans("ExtrafieldParamHelpselect"), 1, 0, '', 0, 2, 'helpvalue1')?></span>
248  <span id="helpsellist" class="spanforparamtooltip"><?php print $form->textwithpicto('', $langs->trans("ExtrafieldParamHelpsellist"), 1, 0, '', 0, 2, 'helpvalue2')?></span>
249  <span id="helpchkbxlst" class="spanforparamtooltip"><?php print $form->textwithpicto('', $langs->trans("ExtrafieldParamHelpchkbxlst"), 1, 0, '', 0, 2, 'helpvalue3')?></span>
250  <span id="helplink" class="spanforparamtooltip"><?php print $form->textwithpicto('', $langs->trans("ExtrafieldParamHelplink").'<br><br>'.$langs->trans("Examples").':<br>'.$listofexamplesforlink, 1, 0, '', 0, 2, 'helpvalue4')?></span>
251  <span id="helppassword" class="spanforparamtooltip"><?php print $form->textwithpicto('', $langs->trans("ExtrafieldParamHelpPassword"), 1, 0, '', 0, 2, 'helpvalue5')?></span>
252  <span id="helpseparate" class="spanforparamtooltip"><?php print $form->textwithpicto('', $langs->trans("ExtrafieldParamHelpSeparator"), 1, 0, '', 0, 2, 'helpvalue6')?></span>
253  </td></tr>
254  </table>
255 </td>
256 </tr>
257 
258 <!-- Position -->
259 <tr><td class="titlefield"><?php echo $langs->trans("Position"); ?></td><td class="valeur"><input type="text" name="pos" size="5" value="<?php echo dol_escape_htmltag($pos); ?>"></td></tr>
260 
261 <!-- Language file -->
262 <tr><td class="titlefield"><?php echo $langs->trans("LanguageFile"); ?></td><td class="valeur"><input type="text" name="langfile" class="minwidth200" value="<?php echo dol_escape_htmltag($langfile); ?>"></td></tr>
263 
264 <!-- Computed value -->
265 <tr class="extra_computed_value">
266 <?php if (empty($conf->global->MAIN_STORE_COMPUTED_EXTRAFIELDS)) { ?>
267  <td><?php echo $form->textwithpicto($langs->trans("ComputedFormula"), $langs->trans("ComputedFormulaDesc"), 1, 'help', '', 0, 2, 'tooltipcompute'); ?></td>
268 <?php } else { ?>
269  <td><?php echo $form->textwithpicto($langs->trans("ComputedFormula"), $langs->trans("ComputedFormulaDesc")).$form->textwithpicto($langs->trans("Computedpersistent"), $langs->trans("ComputedpersistentDesc"), 1, 'warning'); ?></td>
270 <?php } ?>
271 <td class="valeur"><textarea name="computed_value" id="computed_value" class="quatrevingtpercent" rows="<?php echo ROWS_4 ?>"><?php echo dol_htmlcleanlastbr($computed); ?></textarea></td>
272 </tr>
273 
274 <!-- Default Value (at sql setup level) -->
275 <tr class="extra_default_value"><td><?php echo $langs->trans("DefaultValue").' ('.$langs->trans("Database").')'; ?></td><td class="valeur"><input id="default_value" type="text" name="default_value" size="5" value="<?php echo dol_escape_htmltag($default); ?>"></td></tr>
276 
277 <!-- Unique -->
278 <tr class="extra_unique"><td><?php echo $langs->trans("Unique"); ?></td><td class="valeur"><input id="unique" type="checkbox" name="unique"<?php echo ($unique ? ' checked' : ''); ?>></td></tr>
279 
280 <!-- Required -->
281 <tr class="extra_required"><td><?php echo $langs->trans("Required"); ?></td><td class="valeur"><input id="required" type="checkbox" name="required"<?php echo ($required ? ' checked' : ''); ?>></td></tr>
282 
283 <!-- Always editable -->
284 <tr class="extra_alwayseditable"><td><?php echo $langs->trans("AlwaysEditable"); ?></td><td class="valeur"><input id="alwayseditable" type="checkbox" name="alwayseditable"<?php echo ($alwayseditable ? ' checked' : ''); ?>></td></tr>
285 
286 <!-- Visibility -->
287 <tr><td class="extra_list"><?php echo $form->textwithpicto($langs->trans("Visibility"), $langs->trans("VisibleDesc")); ?>
288 </td><td class="valeur"><input id="list" class="minwidth100" type="text" name="list" value="<?php echo ($list != '' ? $list : '1'); ?>"></td></tr>
289 
290 <!-- Visibility for PDF-->
291 <tr><td class="extra_pdf"><?php echo $form->textwithpicto($langs->trans("DisplayOnPdf"), $langs->trans("DisplayOnPdfDesc")); ?>
292 </td><td class="valeur"><input id="printable" class="minwidth100" type="text" name="printable" value="<?php echo dol_escape_htmltag($printable); ?>"></td></tr>
293 <tr class="extra_totalizable"><td><?php echo $form->textwithpicto($langs->trans("Totalizable"), $langs->trans("TotalizableDesc")); ?></td><td class="valeur"><input id="totalizable" type="checkbox" name="totalizable"<?php echo ($totalizable ? ' checked' : ''); ?>></td></tr>
294 
295 <!-- Help tooltip -->
296 <tr class="help"><td><?php echo $form->textwithpicto($langs->trans("HelpOnTooltip"), $langs->trans("HelpOnTooltipDesc")); ?></td><td class="valeur"><input id="help" class="quatrevingtpercent" type="text" name="help" value="<?php echo dol_escape_htmltag($help); ?>"></td></tr>
297 
298 <?php if (!empty($conf->multicompany->enabled)) { ?>
299  <!-- Multicompany entity -->
300  <tr><td><?php echo $langs->trans("AllEntities"); ?></td><td class="valeur"><input id="entitycurrentorall" type="checkbox" name="entitycurrentorall"<?php echo (empty($entitycurrentorall) ? ' checked' : ''); ?>></td></tr>
301 <?php } ?>
302 
303 <!-- Show Enabled property when value is not a common value -->
304 <?php if ($enabled != '1') { ?>
305  <tr class="help"><td><?php echo $langs->trans("EnabledCondition"); ?></td><td class="valeur">
306  <?php echo dol_escape_htmltag($enabled); ?>
307 <?php } ?>
308 </td></tr>
309 
310 </table>
311 
312 <?php print dol_get_fiche_end(); ?>
313 
314 <div class="center"><input type="submit" name="button" class="button button-save" value="<?php echo $langs->trans("Save"); ?>">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
315 <input type="submit" name="button" class="button button-cancel" value="<?php echo $langs->trans("Cancel"); ?>"></div>
316 
317 </form>
318 
319 <!-- END PHP TEMPLATE admin_extrafields_edit.tpl.php -->
GETPOST($paramname, $check= 'alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
if($cancel &&!$id) if($action== 'add'&&!$cancel) if($action== 'delete') if($id) $form
Actions.
Definition: card.php:142
$conf db name
Only used if Module[ID]Name translation string is not found.
Definition: repair.php:122
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...
Class to manage generation of HTML components Only common components must be here.
Class for Position.
ajax_combobox($htmlname, $events=array(), $minLengthToAutocomplete=0, $forcefocus=0, $widthTypeOfAutocomplete= 'resolve', $idforemptyvalue= '-1')
Convert a html select field into an ajax combobox.
Definition: ajax.lib.php:429
dol_get_fiche_head($links=array(), $active= '', $title= '', $notab=0, $picto= '', $pictoisfullpath=0, $morehtmlright= '', $morecss= '', $limittoshow=0, $moretabssuffix= '')
Show tabs of a record.
dol_htmlcleanlastbr($stringtodecode)
This function remove all ending and br at end.
dol_get_fiche_end($notab=0)
Return tab footer of a card.
if(preg_match('/crypted:/i', $dolibarr_main_db_pass)||!empty($dolibarr_main_db_encrypted_pass)) $conf db type
Definition: repair.php:119