/** * Evaluate an <if type="condition"> in PHP * * @param CBSimpleXMLElement $element * @return boolean */ function _evalIf( &$element ) { $name = $element->attributes( 'name' ); $nametype = $element->attributes( 'nametype' ); $operator = $element->attributes( 'operator' ); $value = $element->attributes( 'value' ); $valuetype = $element->attributes( 'valuetype' ); if ( $nametype == '' ) { $nametype = 'datavalue:string'; } $paramValue = $this->phpCleanType( $name, $nametype ); $value = $this->phpCleanType( $value, $valuetype ); if ( $element->attributes( 'translate' ) == '_UE' ) { $value = getLangDefinition( $value ); } elseif ( $element->attributes( 'translate' ) == 'yes' ) { $value = CBTxt::T( $value ); } switch ( $operator ) { case '=': case '==': $result = ( $paramValue == $value ); break; case '!=': case '<>': $result = ( $paramValue != $value ); break; case '<': $result = ( $paramValue < $value ); break; case '>': $result = ( $paramValue > $value ); break; case '<=': $result = ( $paramValue <= $value ); break; case '>=': $result = ( $paramValue >= $value ); break; case 'regexp': $result = ( preg_match( '/' . $value . '/', $paramValue ) == 1 ); break; case '!regexp': $result = ( preg_match( '/' . $value . '/', $paramValue ) != 1 ); break; case 'version_compare:=': case 'version_compare:!=': case 'version_compare:<': case 'version_compare:>=': $operator = substr( $operator, strpos( $operator, ':' ) + 1 ); // The possible operators are: <, lt, <=, le, >, gt, >=, ge, ==, =, eq, !=, <>, ne respectively $result = version_compare( $paramValue, $value, $operator ); break; default: trigger_error( sprintf('XML IF: UNKNOWN OPERATOR "%" in xml: "%s"', $operator, htmlspecialchars( $element->asXML() ) ), E_USER_WARNING ); $result = false; break; } return $result; }