Beispiel #1
0
	/**
	 * 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;
	}