Changeset 2074214
- Timestamp:
- 04/24/2019 06:49:46 PM (7 years ago)
- Location:
- gf-minmax-calculation/trunk
- Files:
-
- 4 edited
-
gravityforms-minmax.js (modified) (3 diffs)
-
gravityforms-minmax.min.js (modified) (1 diff)
-
gravityforms-minmax.php (modified) (4 diffs)
-
readme.txt (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
gf-minmax-calculation/trunk/gravityforms-minmax.js
r2010226 r2074214 1 1 /** 2 2 * Gravity Forms MIN/MAX Calculations 3 * Version 0. 3.13 * Version 0.4.0 4 4 * 5 5 * Add MIN/MAX functions to Gravity Forms calculation … … 46 46 * Description of `replace` method 47 47 */ 48 49 const pattern = /\(?(MIN|MAX)\(([\d\s\W]+)\s*\)/gi; 48 50 49 const pattern = /(MIN|MAX)\(([\d\s\W]+)\s*\)/gi, 50 matches = fieldFormula.match(pattern); 51 // Remove leading & ending parentheses if present 52 while (fieldFormula[0] === '(' && fieldFormula.slice(-1) === ')') { 53 fieldFormula = fieldFormula.substr(1, fieldFormula.length - 2); 54 } 51 55 56 matches = fieldFormula.match(pattern); 52 57 let replaces = []; 53 58 54 59 for(let i in matches) { 55 let components = / (MIN|MAX)\(([\d\s\W]+)\s*\)/gi.exec(matches[i]);56 let values = components[2].split(',').map((value,index,array) => { 60 let components = /\(?(MIN|MAX)\(([\d\s\W]+)\s*\)/gi.exec(matches[i]); 61 let values = components[2].split(',').map((value,index,array) => { 57 62 return parseFloat(eval(value.trim())); 58 63 }); … … 81 86 return result; 82 87 83 } );88 }); -
gf-minmax-calculation/trunk/gravityforms-minmax.min.js
r2010226 r2074214 1 gform.addFilter("gform_calculation_result",function(result,formulaField,formId,calcObj){if(formulaField.formula.indexOf("MIN")>-1||formulaField.formula.indexOf("MAX")>-1){let fieldFormula=calcObj.replaceFieldTags(formId,formulaField.formula,formulaField);const pattern=/ (MIN|MAX)\(([\d\s\W]+)\s*\)/gi,matches=fieldFormula.match(pattern);let replaces=[];for(let i in matches){let components=/(MIN|MAX)\(([\d\s\W]+)\s*\)/gi.exec(matches[i]),values=components[2].split(",").map((value,index,array)=>parseFloat(eval(value.trim())));"MIN"==components[1]&&replaces.push([matches[i],,Math.min(...values)]),"MAX"==components[1]&&replaces.push([matches[i],,Math.max(...values)])}for(let e in replaces)fieldFormula=fieldFormula.replace(replaces[e][0],replaces[e][2]);fieldFormula=fieldFormula.replace(/[^0-9\s\n\r\+\-\*\/\^\(\)\.](MIN|MAX)/g,""),result=eval(fieldFormula)}return result});1 gform.addFilter("gform_calculation_result",function(result,formulaField,formId,calcObj){if(formulaField.formula.indexOf("MIN")>-1||formulaField.formula.indexOf("MAX")>-1){let fieldFormula=calcObj.replaceFieldTags(formId,formulaField.formula,formulaField);const pattern=/\(?(MIN|MAX)\(([\d\s\W]+)\s*\)/gi;while(fieldFormula[0]==="("&&fieldFormula.slice(-1)===")"){fieldFormula=fieldFormula.substr(1,fieldFormula.length-2)}matches=fieldFormula.match(pattern);let replaces=[];for(let i in matches){let components=/\(?(MIN|MAX)\(([\d\s\W]+)\s*\)/gi.exec(matches[i]);let values=components[2].split(",").map((value,index,array)=>{return parseFloat(eval(value.trim()))});if(components[1]=="MIN")replaces.push([matches[i],,Math.min(...values)]);if(components[1]=="MAX")replaces.push([matches[i],,Math.max(...values)])}for(let i in replaces){fieldFormula=fieldFormula.replace(replaces[i][0],replaces[i][2])}fieldFormula=fieldFormula.replace(/[^0-9\s\n\r\+\-\*\/\^\(\)\.](MIN|MAX)/g,"");result=eval(fieldFormula)}return result}); -
gf-minmax-calculation/trunk/gravityforms-minmax.php
r2010226 r2074214 4 4 * Plugin URI: https://snaptortoise.com?wp-gf-minmax 5 5 * Description: Adds MIN/MAX function support for calculations in number fields 6 * Version: 0. 3.16 * Version: 0.4.0 7 7 * Author: SnapTortoise Web Development 8 8 * Author URI: https://snaptortoise.com … … 29 29 * 30 30 */ 31 32 // Remove leading & ending parentheses if present 33 while (substr($formula,0,1) === '(' && substr($formula,-1) === ')') { 34 $formula = substr($formula, 1, -1); 35 } 36 31 37 $formula = preg_replace( '@[^0-9\s\n\r\s\W](MIN|MAX)@is', '', $formula ); 32 38 … … 75 81 */ 76 82 $min = ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min' ); 83 $min = ''; 77 84 78 85 wp_enqueue_script( 'gforms-minmax', trailingslashit( plugin_dir_url( __FILE__ ) ) . "gravityforms-minmax{$min}.js", array( 'gform_gravityforms' ), '0.1.0', true ); … … 81 88 82 89 } 90 91 add_action( 'gform_admin_pre_render', 'check_formula' ); 92 function check_formula( $form ) { 93 ?> 94 <script type="text/javascript"> 95 gform.addFilter( 'gform_is_valid_formula_form_editor', 'check_formula' ); 96 function check_formula( result, formula ) { 97 if ( formula.indexOf( 'MIN' ) > -1 || formula.indexOf( 'MAX' ) > -1 ) { 98 try { 99 const pattern = /\(?(MIN|MAX)\(([\d\s\W]+)\s*\)/gi; 100 101 // Remove leading & ending parentheses if present 102 while (formula[0] === '(' && formula.slice(-1) === ')') { 103 formula = formula.substr(1, formula.length - 2); 104 } 105 106 // replace variables with 0 for admin validation 107 formula = formula.replace(/\{(.+?)\}/gi,"0"); 108 matches = formula.match(pattern); 109 110 let replaces = []; 111 112 for(let i in matches) { 113 let components = /\(?(MIN|MAX)\(([\d\s\W]+)\s*\)/gi.exec(matches[i]); 114 let values = components[2].split(',').map((value,index,array) => { 115 return parseFloat(eval(value.trim())); 116 }); 117 118 if (components[1] == "MIN") replaces.push([matches[i], , Math.min(...values)]); 119 if (components[1] == "MAX") replaces.push([matches[i], , Math.max(...values)]); 120 } 121 122 for(let i in replaces) { 123 formula = formula.replace(replaces[i][0], replaces[i][2]); 124 } 125 126 formula = formula.replace( /[^0-9\s\n\r\+\-\*\/\^\(\)\.](MIN|MAX)/g, '' ); 127 result = eval(formula); 128 }catch(e) { 129 results = false; 130 } 131 } 132 133 return result; 134 } 135 </script> 136 <?php 137 //return the form object from the php hook 138 return $form; 139 } -
gf-minmax-calculation/trunk/readme.txt
r2010226 r2074214 4 4 Tags: gravity forms, math, calculations 5 5 Requires at least: 2.8.0 6 Tested up to: 5. 0.36 Tested up to: 5.1.1 7 7 Requires PHP: 5.3.0 8 8 Stable tag: trunk … … 32 32 == Changelog == 33 33 34 0.4.0: April 17, 2019 35 36 - Fixes bug where calculations encapsulated in parentheses with MIN/MAX might create errors. 37 - Formulas containing MIN/MAX functions now validate correctly in the form editor 38 34 39 0.3.1: January 10, 2019 35 40 36 - Fixes bug where calculations and par antheses within MIN/MAX created errors.41 - Fixes bug where calculations and parentheses within MIN/MAX created errors. 37 42 38 43
Note: See TracChangeset
for help on using the changeset viewer.