View source
<?php
class crumbs_TrailFinder {
protected $parentFinder;
function __construct($parent_finder) {
$this->parentFinder = $parent_finder;
}
function buildTrail($path) {
$path = drupal_get_normal_path($path);
$trail_reverse = array();
$front_normal_path = drupal_get_normal_path(variable_get('site_frontpage', 'node'));
while (strlen($path) && $path !== '<front>' && $path !== $front_normal_path) {
if (isset($trail_reverse[$path])) {
while (isset($trail_reverse[$path])) {
array_pop($trail_reverse);
}
break;
}
$item = crumbs_get_router_item($path);
if ($item && $item['type'] & MENU_LINKS_TO_PARENT) {
$path = $item['tab_parent_href'];
$item = crumbs_get_router_item($item['tab_parent_href']);
}
if ($item && $item['access']) {
$trail_reverse[$path] = $item;
}
$parent_path = $this->parentFinder
->getParentPath($path, $item);
if ($parent_path === $path) {
break;
}
$path = $parent_path;
}
unset($trail_reverse['<front>']);
$front_menu_item = crumbs_get_router_item($front_normal_path);
if (isset($front_menu_item) || TRUE) {
$front_menu_item['href'] = '<front>';
$trail_reverse[$front_normal_path] = $front_menu_item;
}
else {
$message_raw = 'Your current setting for !site_frontpage seems to be invalid.';
$message_replacements = array(
'!site_frontpage' => '"' . l(t('Default front page'), 'admin/config/system/site-information') . '"',
);
watchdog('crumbs', $message_raw, $message_replacements);
if (user_access('administer site configuration')) {
drupal_set_message(t($message_raw, $message_replacements), 'warning');
}
}
return array_reverse($trail_reverse);
}
}