lib/components/web/browser/HandlerTypes.php
public static function descendantHas($topType, $goodTypes, $depth = 3)
    {
        $possibleTypes = [];
        foreach ($topType->collectorItem->children as $relationship) {
            $testType = $relationship->child;
            if (in_array($testType->systemId, $goodTypes)) {
                return true;
            } elseif ($depth > 0 && self::descendantHas($testType, $goodTypes, $depth-1)) {
                return true;
            }
        }

        return false;
    }
public static function descendantHas($topType, $goodTypes, $depth = 3)
    {
        $possibleTypes = [];
        foreach ($topType->collectorItem->children as $relationship) {
            $testType = $relationship->child;
            if (in_array($testType->systemId, $goodTypes)) {
                return true;
            } elseif ($depth > 0 && self::descendantHas($testType, $goodTypes, $depth-1)) {
                return true;
            }
        }

        return false;
    }
[[@doctodo method_description:descendantHas]].

@param [[@doctodo param_type:topType]]   $topType   [[@doctodo param_description:topType]]
@param [[@doctodo param_type:goodTypes]] $goodTypes [[@doctodo param_description:goodTypes]]
@param integer                           $depth     [[@doctodo param_description:depth]] [optional]

@return [[@doctodo return_type:descendantHas]] [[@doctodo return_description:descendantHas]]