public function get_by_url($url = '', $no_recursive = false)
{
static $passed = array();
$passed[$url] = 1;
if (strval($url) == '') {
$url = $this->app->url_manager->string();
}
$u1 = $url;
$u2 = $this->app->url_manager->site();
$u1 = rtrim($u1, '\\');
$u1 = rtrim($u1, '/');
$u2 = rtrim($u2, '\\');
$u2 = rtrim($u2, '/');
$u1 = str_replace($u2, '', $u1);
$u1 = ltrim($u1, '/');
$url = $u1;
$url = addslashes($url);
$url12 = parse_url($url);
if (isset($url12['scheme']) and isset($url12['host']) and isset($url12['path'])) {
$u1 = $this->app->url_manager->site();
$u2 = str_replace($u1, '', $url);
$current_url = explode('?', $u2);
$u2 = $current_url[0];
$url = $u2;
} else {
$current_url = explode('?', $url);
$u2 = $current_url[0];
$url = $u2;
}
$url = rtrim($url, '?');
$url = rtrim($url, '#');
if (is_array(self::$skip_pages_starting_with_url)) {
$segs = explode('/', $url);
$arr = self::$skip_pages_starting_with_url;
foreach ($arr as $skip_page_url) {
if (in_array($skip_page_url, $segs)) {
return false;
}
}
}
$link_hash = 'link' . crc32($url);
if (isset(self::$precached_links[$link_hash])) {
return self::$precached_links[$link_hash];
}
$get = array();
$get['url'] = $url;
$get['single'] = true;
$content = $this->get($get);
if (!empty($content)) {
self::$precached_links[$link_hash] = $content;
return $content;
}
if ($no_recursive == false) {
if (empty($content) == true) {
$segs = explode('/', $url);
$segs_qty = count($segs);
for ($counter = 0; $counter <= $segs_qty; $counter += 1) {
$test = array_slice($segs, 0, $segs_qty - $counter);
$test = array_reverse($test);
if (isset($test[0])) {
$url = $this->get_by_url($test[0], true);
}
if (!empty($url)) {
self::$precached_links[$link_hash] = $url;
return $url;
}
}
}
} else {
if (isset($content['id']) and intval($content['id']) != 0) {
$content['id'] = (int) $content['id'];
}
self::$precached_links[$link_hash] = $content;
return $content;
}
self::$precached_links[$link_hash] = false;
return false;
}