← All changes
|
includes/Admin/Form/ExtraFieldJS/CheckDisableOnMax.php
+38
-28
2.0
→
2.16.2
View file →
| @@ -1,36 +1,46 @@ | ||
| 1 | 1 | <?php |
| 2 | 2 | |
| 3 | 3 | namespace BitCode\BitForm\Admin\Form\ExtraFieldJS; |
| 4 | 4 | |
| 5 | -class CheckDisableOnMax { | |
| 6 | - public static function init($fk, $field, $contentId) { | |
| 7 | - $script = ''; | |
| 8 | - $max = isset($field->mx) ? $field->mx : 0; | |
| 9 | - if (isset($field->valid->disableOnMax) && $field->valid->disableOnMax) { | |
| 10 | - $script .= <<<FUNCTIONDEF | |
| 11 | - bfSelect("#{$contentId}").querySelectorAll(".{$fk}-inp-wrp input[type='checkbox']").forEach(function(el){ | |
| 12 | - el.addEventListener("change",function(e){ | |
| 13 | - var max = {$max}; | |
| 14 | - var checked = bfSelect("#{$contentId}").querySelectorAll(".{$fk}-inp-wrp input[type='checkbox']:checked").length; | |
| 15 | - if(checked >= max){ | |
| 16 | - bfSelect("#{$contentId}").querySelectorAll(".{$fk}-inp-wrp input[type='checkbox']").forEach(function(el){ | |
| 17 | - if(!el.checked){ | |
| 18 | - el.setAttribute("disabled",true); | |
| 19 | - } | |
| 20 | - }); | |
| 21 | - }else{ | |
| 22 | - const options = bf_globals["{$contentId}"].fields["{$fk}"].opt; | |
| 23 | - bfSelect("#{$contentId}").querySelectorAll(".{$fk}-inp-wrp input[type='checkbox']").forEach(function(el, index){ | |
| 24 | - if(!options[index].disabled){ | |
| 25 | - el.removeAttribute("disabled"); | |
| 26 | - } | |
| 27 | - }); | |
| 28 | - } | |
| 5 | +class CheckDisableOnMax | |
| 6 | +{ | |
| 7 | + public static function init($fk, $field, $contentId) | |
| 8 | + { | |
| 9 | + return <<<FUNCTIONDEF | |
| 10 | + function initCheckDisableOnMax(formContentId = null, parentSelector = '') { | |
| 11 | + const contentIds = formContentId ? [formContentId] : Object.keys(bf_globals); | |
| 12 | + contentIds.forEach(contentId => { | |
| 13 | + const frm = bfSelect("#form-"+contentId); | |
| 14 | + const {fields} = bf_globals[contentId]; | |
| 15 | + const checkFlds = Object.keys(fields).filter(fld => ['check', 'image-select'].includes(fields[fld].typ)); | |
| 16 | + checkFlds.forEach(fk => { | |
| 17 | + if(typeof checkRepeatedField !== 'undefined' && checkRepeatedField(fk, bf_globals[contentId]) && !parentSelector){ | |
| 18 | + return; | |
| 19 | + } | |
| 20 | + const classSelector = parentSelector + "."+fk+"-inp-wrp input[type='checkbox']"; | |
| 21 | + frm.querySelectorAll(classSelector).forEach(function(el){ | |
| 22 | + el.addEventListener("change",function(e){ | |
| 23 | + const max = Number(fields[fk].mx); | |
| 24 | + const checked = frm.querySelectorAll(classSelector + ":checked").length; | |
| 25 | + if(checked >= max){ | |
| 26 | + frm.querySelectorAll(classSelector).forEach(function(el){ | |
| 27 | + if(!el.checked){ | |
| 28 | + el.setAttribute("disabled",true); | |
| 29 | + } | |
| 30 | + }); | |
| 31 | + }else{ | |
| 32 | + const options = fields[fk].opt; | |
| 33 | + frm.querySelectorAll(classSelector).forEach(function(el, index){ | |
| 34 | + if(!options[index]?.disabled){ | |
| 35 | + el.removeAttribute("disabled"); | |
| 36 | + } | |
| 37 | + }); | |
| 38 | + } | |
| 39 | + }); | |
| 29 | 40 | }); |
| 30 | - }); | |
| 31 | - | |
| 41 | + }) | |
| 42 | + }) | |
| 43 | + } | |
| 32 | 44 | FUNCTIONDEF; |
| 33 | - } | |
| 34 | - return $script; | |
| 35 | 45 | } |
| 36 | 46 | } |