Plugin Directory

Changeset 2074214


Ignore:
Timestamp:
04/24/2019 06:49:46 PM (7 years ago)
Author:
georgemandis
Message:

Updating to version 0.4.0 with admin validation + bug fixes

Location:
gf-minmax-calculation/trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • gf-minmax-calculation/trunk/gravityforms-minmax.js

    r2010226 r2074214  
    11/**
    22 * Gravity Forms MIN/MAX Calculations
    3  * Version 0.3.1
     3 * Version 0.4.0
    44 *
    55 * Add MIN/MAX functions to Gravity Forms calculation
     
    4646         *       Description of `replace` method
    4747         */     
     48         
     49        const pattern = /\(?(MIN|MAX)\(([\d\s\W]+)\s*\)/gi;
    4850
    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        }
    5155       
     56        matches = fieldFormula.match(pattern);                 
    5257        let replaces = [];     
    5358
    5459        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) => {         
    5762                return parseFloat(eval(value.trim()));
    5863            });         
     
    8186    return result;
    8287
    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});
     1gform.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  
    44 * Plugin URI: https://snaptortoise.com?wp-gf-minmax
    55 * Description: Adds MIN/MAX function support for calculations in number fields
    6  * Version: 0.3.1
     6 * Version: 0.4.0
    77 * Author: SnapTortoise Web Development
    88 * Author URI: https://snaptortoise.com
     
    2929         *       
    3030         */
     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
    3137        $formula = preg_replace( '@[^0-9\s\n\r\s\W](MIN|MAX)@is', '', $formula );
    3238
     
    7581         */
    7682        $min = ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min' );
     83        $min = '';
    7784
    7885        wp_enqueue_script( 'gforms-minmax', trailingslashit( plugin_dir_url( __FILE__ ) ) . "gravityforms-minmax{$min}.js", array( 'gform_gravityforms' ), '0.1.0', true );
     
    8188
    8289}
     90
     91add_action( 'gform_admin_pre_render', 'check_formula' );
     92function 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  
    44Tags: gravity forms, math, calculations
    55Requires at least: 2.8.0
    6 Tested up to: 5.0.3
     6Tested up to: 5.1.1
    77Requires PHP: 5.3.0
    88Stable tag: trunk
     
    3232== Changelog ==
    3333
     340.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
    34390.3.1: January 10, 2019
    3540
    36 - Fixes bug where calculations and parantheses within MIN/MAX created errors.
     41- Fixes bug where calculations and parentheses within MIN/MAX created errors.
    3742
    3843
Note: See TracChangeset for help on using the changeset viewer.