define_constants(); // Actions // Filters add_filter( 'sportspress_equation_options', array( $this, 'add_options' ) ); add_filter( 'sportspress_equation_alter', array( $this, 'alter_equation' ), 10, 2 ); } /** * Define constants. */ private function define_constants() { if ( ! defined( 'SP_CONDITIONAL_EQUATIONS_VERSION' ) ) { define( 'SP_CONDITIONAL_EQUATIONS_VERSION', '2.6' ); } if ( ! defined( 'SP_CONDITIONAL_EQUATIONS_URL' ) ) { define( 'SP_CONDITIONAL_EQUATIONS_URL', plugin_dir_url( __FILE__ ) ); } if ( ! defined( 'SP_CONDITIONAL_EQUATIONS_DIR' ) ) { define( 'SP_CONDITIONAL_EQUATIONS_DIR', plugin_dir_path( __FILE__ ) ); } } /** * Add additional options. * * @return array */ public function add_options( $options ) { $options['Operators']['>'] = '>'; $options['Operators']['<'] = '<'; $options['Operators']['=='] = '≡'; $options['Operators']['!='] = '≠'; $options['Operators']['>='] = '≥'; $options['Operators']['<='] = '≤'; return $options; } /** * Alter. * * @return array */ public function alter_equation( $equation, $vars ) { // Remove space between equation parts $equation = str_replace( ' ', '', $equation ); // Find all parentheses with conditional operators $re = '/([^[\(|\)]*[<=>][^[\(|\)]*)/'; if ( preg_match_all( $re, $equation, $matches ) ) { foreach ( $matches[1] as $match ) { // Find which Conditional Operator is used preg_match( '/[\!\>\=\<]+/', $match, $conop ); $conop = $conop[0]; // preg_match ( '/.+?(?=[\>\=\<])/' ,$match, $leftvar ); preg_match( '/.+?(?=' . $conop . ')/', $match, $leftvar ); // preg_match ( '/(?<=[\>\=\<]).*/' ,$match, $rightvar ); preg_match( '/(?<=' . $conop . ').*/', $match, $rightvar ); // Check if it is a variable or a number if ( strpos( $leftvar[0], '$' ) !== false ) { $leftvar = str_replace( '$', '', $leftvar[0] ); $leftvar = $vars[ $leftvar ]; } else { $leftvar = $leftvar[0]; } // Check if it is a variable or a number if ( strpos( $rightvar[0], '$' ) !== false ) { $rightvar = str_replace( '$', '', $rightvar[0] ); $rightvar = $vars[ $rightvar ]; } else { $rightvar = $rightvar[0]; } // Select the correct conditional operator switch ( $conop ) { case '>': $solution = (int) ( $leftvar > $rightvar ); break; case '<': $solution = (int) ( $leftvar < $rightvar ); break; case '==': $solution = (int) ( $leftvar == $rightvar ); break; case '!=': $solution = (int) ( $leftvar != $rightvar ); break; case '>=': $solution = (int) ( $leftvar >= $rightvar ); break; case '<=': $solution = (int) ( $leftvar <= $rightvar ); break; } // Replace the result of the conditional sub-equation to the equation $equation = str_replace( $match, $solution, $equation ); } } return $equation; } } endif; new SportsPress_Conditional_Equations();