/** * * * @param DF_Web_Path $path * @param DF_Web_Routing_ActionChain $chain * @return integer */ protected static function chained_match($path, $chain) { if (!$path instanceof DF_Web_Path) { throw new DF_Error_InvalidArgumentException("path", $path, "DF_Web_Path"); } if (!$chain instanceof DF_Web_Routing_ActionChain) { throw new DF_Error_InvalidArgumentException("chain", $chain, "DF_Web_Routing_ActionChain"); } $action = $chain->get_endpoint(); $a_path = $action->get_path_match(); $a_args = $action->get_args(); $a_parts = $a_path->get_path_parts(); $a_numparts = count($a_parts); $parts = $path->get_path_parts(); $numparts = count($parts); if ($numparts < $a_numparts) { # return -1; } $rest = $parts; # FIXME For chains, dont do this for normal path actions foreach ($tmp = $chain->get_chain_list() as $_a) { $rest = self::eat_path_parts($_a, $rest); } $count = count($rest); if ($a_args instanceof DF_Web_Routing_ActionArgs_Any) { $count += 1000; } return $count; }