49function ajax_autocompleter($selected, $htmlname, $url, $urloption =
'', $minLength = 2, $autoselect = 0, $ajaxoptions = array(), $moreparams =
'')
51 if (empty($minLength)) {
55 $dataforrenderITem =
'ui-autocomplete';
56 $dataforitem =
'ui-autocomplete-item';
58 if (defined(
'JS_QUERY_AUTOCOMPLETE_RENDERITEM')) {
59 $dataforrenderITem = constant(
'JS_QUERY_AUTOCOMPLETE_RENDERITEM');
61 if (defined(
'JS_QUERY_AUTOCOMPLETE_ITEM')) {
62 $dataforitem = constant(
'JS_QUERY_AUTOCOMPLETE_ITEM');
65 $htmlnamejquery = str_replace(
'.',
'\\\\.', $htmlname);
69 $script =
'<input type="hidden" name="'.$htmlname.
'" id="'.$htmlname.
'" value="'.$selected.
'" '.($moreparams ? $moreparams :
'').
' />';
71 $script .=
'<!-- Javascript code for autocomplete of field '.$htmlname.
' -->'.
"\n";
72 $script .=
'<script>'.
"\n";
73 $script .=
'$(document).ready(function() {
74 var autoselect = '.((int) $autoselect).
';
75 var options = '.json_encode($ajaxoptions).
'; /* Option of actions to do after keyup, or after select */
77 /* Remove selected id as soon as we type or delete a char (it means old selection is wrong). Use keyup/down instead of change to avoid losing the product id. This is needed only for select of predefined product */
78 $("input#search_'.$htmlnamejquery.
'").keydown(function(e) {
79 if (e.keyCode != 9) /* If not "Tab" key */
81 if (e.keyCode == 13) { return false; } /* disable "ENTER" key useful for barcode readers */
82 console.log("Clear id previously selected for field '.$htmlname.
'");
83 $("#'.$htmlnamejquery.
'").val("");
87 // Check options for secondary actions when keyup
88 $("input#search_'.$htmlnamejquery.
'").keyup(function() {
89 if ($(this).val().length == 0)
91 $("#search_'.$htmlnamejquery.
'").val("");
92 $("#'.$htmlnamejquery.
'").val("").trigger("change");
93 if (options.option_disabled) {
94 $("#" + options.option_disabled).removeAttr("disabled");
96 if (options.disabled) {
97 $.each(options.disabled, function(key, value) {
98 $("#" + value).removeAttr("disabled");
101 if (options.update) {
102 $.each(options.update, function(key, value) {
103 $("#" + key).val("").trigger("change");
107 $.each(options.show, function(key, value) {
108 $("#" + value).hide().trigger("hide");
111 if (options.update_textarea) {
112 $.each(options.update_textarea, function(key, value) {
113 if (typeof CKEDITOR == "object" && typeof CKEDITOR.instances != "undefined" && CKEDITOR.instances[key] != "undefined") {
114 CKEDITOR.instances[key].setData("");
116 $("#" + key).html("");
123 // Activate the autocomplete to execute the GET
124 $("input#search_'.$htmlnamejquery.
'").autocomplete({
125 source: function( request, response ) {
126 $.get("'.$url.($urloption ?
'?'.$urloption :
'').
'", { "'.str_replace(
'.',
'_', $htmlname).
'": request.term }, function(data){
129 response($.map( data, function(item) {
130 console.log("Received answer from ajax GET, we populate array to return to the jquery autocomplete");
131 if (autoselect == 1 && data.length == 1) {
132 $("#search_'.$htmlnamejquery.
'").val(item.value);
136 // When product has only one price by qty and 1 result, must set data attributes before triggering change
137 $("#'.$htmlname.
'").attr("data-pbq", item.pbq);
138 $("#'.$htmlname.
'").attr("data-pbqup", item.price_ht);
139 $("#'.$htmlname.
'").attr("data-pbqbase", item.pricebasetype);
140 $("#'.$htmlname.
'").attr("data-pbqqty", item.qty);
141 $("#'.$htmlname.
'").attr("data-pbqpercent", item.discount);
145 $("#'.$htmlnamejquery.
'").val(item.key).trigger("change");
148 if (item.labelhtml != null) {
149 label = item.labelhtml.toString();
150 } else if (item.label != null) {
151 label = item.label.toString();
154 if (options.update) {
155 $.each(options.update, function(key, value) {
156 update[key] = item[value];
160 if (options.update_textarea) {
161 $.each(options.update_textarea, function(key, value) {
162 textarea[key] = item[value];
166 return { label: label,
169 disabled: item.disabled,
175 discount: item.discount,
176 pricebasetype: item.pricebasetype,
177 price_ht: item.price_ht,
178 price_ttc: item.price_ttc,
179 price_unit_ht: item.price_unit_ht,
180 price_unit_ht_locale: item.price_unit_ht_locale,
181 multicurrency_code: item.multicurrency_code,
182 multicurrency_unitprice: item.multicurrency_unitprice,
183 description : item.description,
184 ref_customer: item.ref_customer,
186 default_vat_code: item.default_vat_code,
187 supplier_ref: item.supplier_ref
191 console.error("Error: Ajax url '.$url.($urloption ?
'?'.$urloption :
'').
' has returned an empty page. Should be an empty json array.");
196 minLength: '.((
int) $minLength).
',
197 select: function( event, ui ) { // Function ran once a new value has been selected into the javascript combo
198 console.log("We will trigger change on input '.$htmlname.
' because of the select definition of autocomplete code for input#search_'.$htmlname.
'");
199 console.log("Selected id = "+ui.item.id+" - If this value is null, it means you select a record with key that is null so selection is not effective");
201 console.log("Before, we propagate some properties, retrieved by the ajax of the get, into the data-xxx properties of the component #'.$htmlnamejquery.
'");
202 //console.log(ui.item);
204 // For supplier price and customer when price by quantity is off
205 $("#'.$htmlnamejquery.
'").attr("data-up", ui.item.price_ht);
206 $("#'.$htmlnamejquery.
'").attr("data-up-locale", ui.item.price_unit_ht_locale);
207 $("#'.$htmlnamejquery.
'").attr("data-base", ui.item.pricebasetype);
208 $("#'.$htmlnamejquery.
'").attr("data-qty", ui.item.qty);
209 $("#'.$htmlnamejquery.
'").attr("data-discount", ui.item.discount);
210 $("#'.$htmlnamejquery.
'").attr("data-description", ui.item.description);
211 $("#'.$htmlnamejquery.
'").attr("data-ref-customer", ui.item.ref_customer);
212 $("#'.$htmlnamejquery.
'").attr("data-tvatx", ui.item.tva_tx);
213 $("#'.$htmlnamejquery.
'").attr("data-default-vat-code", ui.item.default_vat_code);
214 $("#'.$htmlnamejquery.
'").attr("data-supplier-ref", ui.item.supplier_ref); // supplier_ref of price
216 // For multi-currency values
217 $("#'.$htmlnamejquery.
'").attr("data-multicurrency-code", ui.item.multicurrency_code);
218 $("#'.$htmlnamejquery.
'").attr("data-multicurrency-unitprice", ui.item.multicurrency_unitprice);
222 // For customer price when PRODUIT_CUSTOMER_PRICES_BY_QTY is on
223 console.log("PRODUIT_CUSTOMER_PRICES_BY_QTY is on, so we propagate also prices by quantity into data-pbqxxx properties");
224 $("#'.$htmlnamejquery.
'").attr("data-pbq", ui.item.pbq);
225 $("#'.$htmlnamejquery.
'").attr("data-pbqup", ui.item.price_ht);
226 $("#'.$htmlnamejquery.
'").attr("data-pbqbase", ui.item.pricebasetype);
227 $("#'.$htmlnamejquery.
'").attr("data-pbqqty", ui.item.qty);
228 $("#'.$htmlnamejquery.
'").attr("data-pbqpercent", ui.item.discount);
232 // A new value has been selected, we trigger the handlers on #htmlnamejquery
233 console.log("Now, we trigger changes on #'.$htmlnamejquery.
'");
234 $("#'.$htmlnamejquery.
'").val(ui.item.id).trigger("change"); // Select new value
236 // Complementary actions
238 // Disable an element
239 if (options.option_disabled) {
240 console.log("Make action option_disabled on #"+options.option_disabled+" with disabled="+ui.item.disabled)
241 if (ui.item.disabled) {
242 $("#" + options.option_disabled).prop("disabled", true);
244 $.jnotify(options.error, "error", true); // Output with jnotify the error message
246 if (options.warning) {
247 $.jnotify(options.warning, "warning", false); // Output with jnotify the warning message
250 $("#" + options.option_disabled).removeAttr("disabled");
254 if (options.disabled) {
255 console.log("Make action \'disabled\' on each "+options.option_disabled)
256 $.each(options.disabled, function(key, value) {
257 $("#" + value).prop("disabled", true);
261 console.log("Make action \'show\' on each "+options.show)
262 $.each(options.show, function(key, value) {
263 $("#" + value).show().trigger("show");
268 if (ui.item.update) {
269 console.log("Make action \'update\' on each ui.item.update (if there is)")
270 // loop on each "update" fields
271 $.each(ui.item.update, function(key, value) {
272 console.log("Set value "+value+" into #"+key);
273 $("#" + key).val(value).trigger("change");
276 if (ui.item.textarea) {
277 console.log("Make action \'textarea\' on each ui.item.textarea (if there is)")
278 $.each(ui.item.textarea, function(key, value) {
279 if (typeof CKEDITOR == "object" && typeof CKEDITOR.instances != "undefined" && CKEDITOR.instances[key] != "undefined") {
280 CKEDITOR.instances[key].setData(value);
281 CKEDITOR.instances[key].focus();
283 $("#" + key).html(value);
284 $("#" + key).focus();
288 console.log("ajax_autocompleter new value selected, we trigger change also on original component so on field #search_'.$htmlname.
'");
290 $("#search_'.$htmlnamejquery.
'").trigger("change"); // We have changed value of the combo select, we must be sure to trigger all js hook binded on this event. This is required to trigger other javascript change method binded on original field by other code.
294 const widgetData = $("input#search_'.$htmlnamejquery.
'").data("'.$dataforrenderITem.
'");
296 widgetData._renderItem = function( ul, item ) {
298 .data( "'.$dataforitem.
'", item ) // jQuery UI > 1.10.0
299 .append( \'<a><span class="tag">\' + item.label + "</span></a>" )
305 $script .=
'</script>';
475function ajax_combobox($htmlname, $events = array(), $minLengthToAutocomplete = 0, $forcefocus = 0, $widthTypeOfAutocomplete =
'resolve', $idforemptyvalue =
'-1', $morecss =
'')
480 if (!empty($conf->browser->layout) && $conf->browser->layout ==
'phone' &&
getDolGlobalString(
'MAIN_DISALLOW_SELECT2_WITH_SMARTPHONE')) {
487 if (empty($conf->use_javascript_ajax)) {
490 if (!
getDolGlobalString(
'MAIN_USE_JQUERY_MULTISELECT') && !defined(
'REQUIRE_JQUERY_MULTISELECT')) {
497 if (empty($minLengthToAutocomplete)) {
498 $minLengthToAutocomplete = 0;
501 $moreselect2theme = ($morecss ?
dol_escape_js(
' '.$morecss) :
'');
502 $moreselect2theme = preg_replace(
'/widthcentpercentminus[^\s]*/',
'', $moreselect2theme);
504 $tmpplugin =
'select2';
506 $msg .=
'<!-- JS CODE TO ENABLE '.$tmpplugin.
' for id = '.$htmlname.
' -->'.
"\n";
507 $msg .=
"<script>\n";
508 $msg .=
'$(document).ready(function () {
509 $(\''.(dol_escape_js(preg_match(
'/^\./', $htmlname) ? $htmlname :
'#'.$htmlname)).
'\').
'.$tmpplugin.'({
';
510 if (preg_match('/onrightofpage/
', $morecss)) { // when $morecss contains 'onrightofpage
', the select2 component must also be inside a parent with class="parentonrightofpage"
511 $msg .= ' dropdownAutoWidth:
true, dropdownParent: $(\
'#'.$htmlname.
'\').parent(),
'."\n";
515 width: \''.dol_escape_js($widthTypeOfAutocomplete).
'\',
516 minimumInputLength:
'.((int) $minLengthToAutocomplete).',
517 language: (typeof select2arrayoflanguage === \
'undefined\') ? \'en\' : select2arrayoflanguage,
518 matcher: function (params, data) {
519 if ($.trim(params.term) === "") { return data; }';
522 var term = params.term.normalize("NFD").replace(/[\u0300-\u036f]/g, "").toLowerCase()
523 var text = (data.text || "").normalize("NFD").replace(/[\u0300-\u036f]/g, "").toLowerCase() || "";';
526 var term = params.term.toLowerCase();
527 var text = (data.text || "").toLowerCase();';
530 var keywords = term.split(" ");
531 for (var i = 0; i < keywords.length; i++) {
532 if (text.indexOf(keywords[i]) === -1) {
538 theme: \'default'.dol_escape_js($moreselect2theme).
'\',
539 containerCssClass: \
':all:\', /* Line to add class of origin SELECT propagated to the new <span class="select2-selection...> tag */
540 selectionCssClass: \':all:\', /* Line to add class of origin SELECT propagated to the new <span class="select2-selection...> tag */
541 dropdownCssClass: \'ui-dialog\',
542 templateResult: function (data, container) { /* Format visible output into combo list */
543 /* Code to add class of origin OPTION propagated to the new select2 <li> tag */
544 if (data.element) { $(container).addClass($(data.element).attr("class")); }
545 /* console.log("data html is "+$(data.element).attr("data-html")); */
546 if (data.id == \''.(dol_escape_js($idforemptyvalue)).
'\' && $(data.element).attr(
"data-html") == undefined) {
549 if ($(data.element).attr("data-html") != undefined) {
550 /* If property html set, we decode html entities and use this. */
551 /* Note that HTML content must have been sanitized against js injection with dol_escape_htmltag(xxx, 0, 0, \'\', 0, 1) when building the select option. */
552 if (typeof htmlEntityDecodeJs === "function") {
553 return htmlEntityDecodeJs($(data.element).attr("data-html"));
558 templateSelection: function (selection) { /* Format visible output of selected value */
559 if (selection.id == \''.(dol_escape_js($idforemptyvalue)).
'\')
return \
'<span class="placeholder">\'+selection.text+\'</span>\';
560 return selection.text;
562 escapeMarkup: function(markup) {
567 $msg .=
'.select2(\'focus\')';
572 $msg .=
"</script>\n";
674function ajax_constantonoff($code, $input = array(), $entity =
null, $revertonoff = 0, $strict = 0, $forcereload = 0, $marginleftonlyshort = 2, $forcenoajax = 0, $setzeroinsteadofdel = 0, $suffix =
'', $mode =
'', $morecss =
'inline-block', $userconst = 0, $showwarning =
'', $disabled = 0)
676 global $conf, $langs, $user, $db;
678 $entity = ((isset($entity) && is_numeric($entity) && $entity >= 0) ? $entity : $conf->entity);
679 if (!isset($input)) {
685 if (empty($conf->use_javascript_ajax) || $forcenoajax) {
687 $out =
'<a '.($morecss ?
'class="'.$morecss.
'" ' :
'').
'href="'.$_SERVER[
'PHP_SELF'].
'?action=set_'.$code.
'&token='.
newToken().
'&entity='.$entity.($mode ?
'&mode='.$mode :
'').($forcereload ?
'&dol_resetcache=1' :
'').
'">'.
img_picto($langs->trans(
"Disabled"),
'off').
'</a>';
689 $out =
'<a '.($morecss ?
'class="'.$morecss.
'" ' :
'').
' href="'.$_SERVER[
'PHP_SELF'].
'?action=del_'.$code.
'&token='.
newToken().
'&entity='.$entity.($mode ?
'&mode='.$mode :
'').($forcereload ?
'&dol_resetcache=1' :
'').
'">'.
img_picto($langs->trans(
"Enabled"),
'on').
'</a>';
693 if (is_object($userconst)) {
694 $userconstid = $userconst->id;
695 } elseif (is_numeric($userconst) && $userconst > 0) {
696 $userconstid = $userconst;
697 $userconst =
new User($db);
698 $userconst->fetch($userconstid);
702 $morecss .=
' disabled opacitymedium';
704 $out =
"\n<!-- Ajax code to switch constant ".$code.
" -->".
'
706 $(document).ready(function() {
707 var input = '.json_encode($input).
';
708 var url = \''.DOL_URL_ROOT.
'/core/ajax/constantonoff.php\';
710 var entity = \
''.dol_escape_js((
string) $entity).
'\';
711 var strict = \
''.dol_escape_js((
string) $strict).
'\';
712 var userid = \
''.dol_escape_js((
string) $user->id).
'\';
713 var userconst =
'.((int) $userconstid).';
714 var yesButton = \
''.dol_escape_js($langs->transnoentities(
"Yes")).
'\';
715 var noButton = \
''.dol_escape_js($langs->transnoentities(
"No")).
'\';
716 var token = \
''.currentToken().
'\';
717 var warning = \
''.dol_escape_js($showwarning).
'\';
720 $(
"#set_" + code).click(
function() {
725 if (input.alert && input.alert.set) {
726 if (input.alert.set.yesButton) yesButton = input.alert.set.yesButton;
727 if (input.alert.set.noButton) noButton = input.alert.set.noButton;
728 confirmConstantAction(
"set", url, code, input, input.alert.set, entity, yesButton, noButton, strict, userid, token);
730 setConstant(url, code, input, entity, 0,
'.((int) $forcereload).', userid, token, 1, userconst);
735 $(
"#del_" + code).click(
function() {
736 if (input.alert && input.alert.del) {
737 if (input.alert.del.yesButton) yesButton = input.alert.del.yesButton;
738 if (input.alert.del.noButton) noButton = input.alert.del.noButton;
739 confirmConstantAction(
"del", url, code, input, input.alert.del, entity, yesButton, noButton, strict, userid, token);
741 if (empty($setzeroinsteadofdel)) {
742 $out .= ' delConstant(url, code, input, entity, 0,
'.((int) $forcereload).', userid, token, userconst);
';
744 $out .= ' setConstant(url, code, input, entity, 0,
'.((int) $forcereload).', userid, token, 0, userconst);
';
752 if (!empty($userconst) && $userconst instanceof User) {
753 $value = getDolUserString($code, '', $userconst);
755 $value = getDolGlobalString($code);
758 if (is_array($suffix)) {
759 $suffixon = $suffix['ifon
'];
760 $suffixoff = $suffix['ifoff
'];
761 } else { // old mode deprecated
762 $suffixon = (string) $suffix;
766 $out .= '<div
id=
"confirm_'.$code.'" title=
"" style=
"display: none;"></div>
';
767 $out .= '<span
id=
"set_'.$code.'" class=
"valignmiddle inline-block linkobject '.($value ? 'hideobject' : '').($morecss ? ' '.$morecss : '').'">
'.($revertonoff ? img_picto($langs->trans("Enabled"), 'switch_on
'.$suffixoff, '', 0, 0, 0, '', '', $marginleftonlyshort) : img_picto($langs->trans("Disabled"), 'switch_off
'.$suffixoff, '', 0, 0, 0, '', '', $marginleftonlyshort)).'</span>
';
768 $out .= '<span
id=
"del_'.$code.'" class=
"valignmiddle inline-block linkobject '.($value ? '' : 'hideobject').($morecss ? ' '.$morecss : '').'">
'.($revertonoff ? img_picto($langs->trans("Disabled"), 'switch_off
'.$suffixon, '', 0, 0, 0, '', '', $marginleftonlyshort) : img_picto($langs->trans("Enabled"), 'switch_on
'.$suffixon, '', 0, 0, 0, '', '', $marginleftonlyshort)).'</span>
';
793function ajax_object_onoff($object, $code, $field, $text_on, $text_off, $input = array(), $morecss = '
', $htmlname = '', $forcenojs = 0, $moreparam = '', $readonly = 0)
795 global $conf, $langs;
797 if (empty($htmlname)) {
803 if (!empty($conf->use_javascript_ajax) && empty($forcenojs) && empty($readonly)) {
806 var input =
'.json_encode($input).';
809 $(
"#set_'.$htmlname.'_'.$object->id.'").click(
function() {
810 console.log(
"Click managed by ajax_object_onoff");
811 $.get(
"'.DOL_URL_ROOT.'/core/ajax/objectonoff.php", {
813 field: \''.dol_escape_js($field).
'\',
816 id: \
''.((int)
$object->id).
'\',
817 token: \
''.currentToken().
'\'
821 var data = JSON.parse(response);
824 console.log(response);
827 $(
"#set_'.$htmlname.'_'.$object->id.'").hide();
828 $(
"#del_'.$htmlname.'_'.$object->id.'").show();
830 if (input.disabled && input.disabled.length > 0) {
831 $.each(input.disabled,
function(key,value) {
832 $(
"#" + value).removeAttr(
"disabled");
833 if ($(
"#" + value).hasClass(
"butActionRefused") == true) {
834 $(
"#" + value).removeClass(
"butActionRefused");
835 $(
"#" + value).addClass(
"butAction");
839 }
else if (input.showhide && input.showhide.length > 0) {
840 $.each(input.showhide,
function(key,value) {
841 $(
"#" + value).show();
847 console.warn(response.responseText);
848 Dolibarr.tools.setEventMessage(response.responseText,
"errors");
854 $(
"#del_'.$htmlname.'_'.$object->id.'").click(
function() {
855 console.log(
"Click managed by ajax_object_onoff");
856 $.get(
"'.DOL_URL_ROOT.'/core/ajax/objectonoff.php", {
858 field: \''.dol_escape_js($field).
'\',
861 id: \''.((int)
$object->id).
'\',
866 var data = JSON.parse(response);
869 console.log(response);
872 $("#del_'.$htmlname.
'_'.
$object->id.
'").hide();
873 $("#set_'.$htmlname.
'_'.
$object->id.
'").show();
874 // Disable another element
875 if (input.disabled && input.disabled.length > 0) {
876 $.each(input.disabled, function(key,value) {
877 $("#" + value).prop("disabled", true);
878 if ($("#" + value).hasClass("butAction") == true) {
879 $("#" + value).removeClass("butAction");
880 $("#" + value).addClass("butActionRefused");
883 // Hide another element
884 } else if (input.showhide && input.showhide.length > 0) {
885 $.each(input.showhide, function(key,value) {
886 $("#" + value).hide();
891 //alert(response.responseText);
892 console.warn(response.responseText);
893 Dolibarr.tools.setEventMessage(response.responseText, "errors");
901 $switchon =
'switch_on';
902 $switchoff =
'switch_off';
905 $tmparray = explode(
':', $text_on);
906 if (!empty($tmparray[1])) {
907 $text_on = $tmparray[0];
908 $switchon = $tmparray[1];
909 if (!empty($tmparray[2])) {
910 $cssswitchon = $tmparray[2];
913 $tmparray = explode(
':', $text_off);
914 if (!empty($tmparray[1])) {
915 $text_off = $tmparray[0];
916 $switchoff = $tmparray[1];
917 if (!empty($tmparray[2])) {
918 $cssswitchoff = $tmparray[2];
922 if (empty($conf->use_javascript_ajax) || $forcenojs) {
923 $url = DOL_URL_ROOT.
'/core/ajax/objectonoff.php?action=set&token='.
newToken().
'&id='.((int)
$object->id).
'&element='.urlencode(
$object->element).
'&field='.urlencode($field).
'&value=1&backtopage='.urlencode($_SERVER[
"PHP_SELF"].
'?id='.
$object->id.($moreparam ?
'&'.$moreparam :
''));
927 $out .=
'<a id="set_'.$htmlname.
'_'.
$object->id.
'" class="linkobject '.(
$object->$code == 1 ?
'hideobject' :
'').($morecss ?
' '.$morecss :
'').
'" href="'.$url.
'">'.
img_picto($langs->trans($text_off), $switchoff,
'', 0, 0, 0,
'', $cssswitchoff).
'</a>';
928 $url = DOL_URL_ROOT.
'/core/ajax/objectonoff.php?action=set&token='.
newToken().
'&id='.((int)
$object->id).
'&element='.urlencode(
$object->element).
'&field='.urlencode($field).
'&value=0&backtopage='.urlencode($_SERVER[
"PHP_SELF"].
'?id='.
$object->id.($moreparam ?
'&'.$moreparam :
''));
932 $out .=
'<a id="del_'.$htmlname.
'_'.
$object->id.
'" class="linkobject '.(
$object->$code == 1 ?
'' :
'hideobject').($morecss ?
' '.$morecss :
'').
'" href="'.$url.
'">'.
img_picto($langs->trans($text_on), $switchon,
'', 0, 0, 0,
'', $cssswitchon).
'</a>';
934 $out .=
'<span id="set_'.$htmlname.
'_'.
$object->id.
'" class="linkobject '.(
$object->$code == 1 ?
'hideobject' :
'').($morecss ?
' '.$morecss :
'').
'">'.
img_picto($langs->trans($text_off), $switchoff,
'', 0, 0, 0,
'', $cssswitchoff).
'</span>';
935 $out .=
'<span id="del_'.$htmlname.
'_'.
$object->id.
'" class="linkobject '.(
$object->$code == 1 ?
'' :
'hideobject').($morecss ?
' '.$morecss :
'').
'">'.
img_picto($langs->trans($text_on), $switchon,
'', 0, 0, 0,
'', $cssswitchon).
'</span>';
ajax_autocompleter($selected, $htmlname, $url, $urloption='', $minLength=2, $autoselect=0, $ajaxoptions=array(), $moreparams='')
Generic function that return javascript to add to transform a common input text or select field into ...
ajax_combobox($htmlname, $events=array(), $minLengthToAutocomplete=0, $forcefocus=0, $widthTypeOfAutocomplete='resolve', $idforemptyvalue='-1', $morecss='')
Convert a html select field into an ajax combobox.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2, $allowothertags=array())
Show picto whatever it's its name (generic function)