/**
* Create a new IRI object by resolving a relative IRI
*
* @static
* @access public
* @param SimplePie_IRI $base Base IRI
* @param string $relative Relative IRI
* @return SimplePie_IRI
*/
public static function absolutize($base, $relative)
{
$relative = (string) $relative;
if ($relative !== '') {
$relative = new SimplePie_IRI($relative);
if ($relative->get_scheme() !== null) {
$target = $relative;
} elseif ($base->get_iri() !== null) {
if ($relative->get_authority() !== null) {
$target = $relative;
$target->set_scheme($base->get_scheme());
} else {
$target = new SimplePie_IRI('');
$target->set_scheme($base->get_scheme());
$target->set_userinfo($base->get_userinfo());
$target->set_host($base->get_host());
$target->set_port($base->get_port());
if ($relative->get_path() !== null) {
if (strpos($relative->get_path(), '/') === 0) {
$target->set_path($relative->get_path());
} elseif (($base->get_userinfo() !== null || $base->get_host() !== null || $base->get_port() !== null) && $base->get_path() === null) {
$target->set_path('/' . $relative->get_path());
} elseif (($last_segment = strrpos($base->get_path(), '/')) !== false) {
$target->set_path(substr($base->get_path(), 0, $last_segment + 1) . $relative->get_path());
} else {
$target->set_path($relative->get_path());
}
$target->set_query($relative->get_query());
} else {
$target->set_path($base->get_path());
if ($relative->get_query() !== null) {
$target->set_query($relative->get_query());
} elseif ($base->get_query() !== null) {
$target->set_query($base->get_query());
}
}
}
$target->set_fragment($relative->get_fragment());
} else {
// No base URL, just return the relative URL
$target = $relative;
}
} else {
$target = $base;
}
return $target;
}