function RulesData::typesMatch

Returns whether the type match. They match if type1 is compatible to type2.

Parameters

$var_info: The name of the type to check for whether it is compatible to type2.

$param_info: The type expression to check for.

bool $ancestors: (optional) Whether sub-type relationships for checking type compatibility should be taken into account. Defaults to TRUE.

Return value

bool Whether the types match.

5 calls to RulesData::typesMatch()
RulesData::matchingDataSelector in includes/rules.state.inc
Returns data for the given info and the to-be-configured parameter.
RulesDataProcessor::processors in includes/rules.processor.inc
Returns defined data processors applicable for the given parameter.
RulesPlugin::checkParameterSettings in includes/rules.core.inc
Checks whether parameters are correctly configured.
RulesTestDataCase::testTypeMatching in tests/rules.test
Tests type matching.
rules_condition_data_is_form_alter in modules/data.rules.inc
Form alter callback for the condition data_is.

File

includes/rules.state.inc, line 407

Class

RulesData
A class holding static methods related to data.

Code

public static function typesMatch($var_info, $param_info, $ancestors = TRUE) {
    $var_type = $var_info['type'];
    $param_type = $param_info['type'];
    if ($param_type == '*' || $param_type == 'unknown') {
        return TRUE;
    }
    if ($var_type == $param_type) {
        // Make sure the bundle matches, if specified by the parameter.
        return !isset($param_info['bundles']) || isset($var_info['bundle']) && in_array($var_info['bundle'], $param_info['bundles']);
    }
    // Parameters may specify multiple types using an array.
    $valid_types = is_array($param_type) ? $param_type : array(
        $param_type,
    );
    if (in_array($var_type, $valid_types)) {
        return TRUE;
    }
    // Check for sub-type relationships.
    if ($ancestors && !isset($param_info['bundles'])) {
        $cache =& rules_get_cache();
        self::typeCalcAncestors($cache, $var_type);
        // If one of the types is an ancestor return TRUE.
        return (bool) array_intersect_key($cache['data_info'][$var_type]['ancestors'], array_flip($valid_types));
    }
    return FALSE;
}