Пример #1
0
/**
 * Function to convert a SEF URL back to a system URL
 */
function MagebridgeParseRoute($segments)
{
    $vars = array();
    // Strange bug: The first segment autoreplaces the first dash with a semi-column
    if (!empty($segments)) {
        foreach ($segments as $index => $segment) {
            $segments[$index] = preg_replace('/^([a-zA-Z0-9]+)\\:/', '\\1-', $segment);
        }
    }
    // Skip to the API if this is detected
    if (isset($segments[1]) && $segments[1] == 'jsonrpc') {
        $vars['view'] = 'jsonrpc';
        $vars['task'] = $segments[2];
        return $vars;
    }
    // Get the active menu item
    $menu = JFactory::getApplication()->getMenu('site');
    $current_item = $menu->getActive();
    $items = MageBridgeUrlHelper::getMenuItems();
    // Fetch the Root-Item
    $root_item = MageBridgeUrlHelper::getRootItem();
    $root_item_id = $root_item && $root_item->id > 0 ? $root_item->id : false;
    // Fix the segments when Root Menu-Item is enforced
    if (MageBridgeUrlHelper::enforceRootMenu()) {
        $current_item = $root_item;
        $current_path = JURI::getInstance()->toString(array('path'));
        $current_segments = explode('/', preg_replace('/^\\//', '', $current_path));
        $root_path = JRoute::_($root_item->link . '&Itemid=' . $root_item->id);
        $root_segments = explode('/', preg_replace('/^\\//', '', $root_path));
        $segments = array();
        foreach ($current_segments as $current_index => $current_segment) {
            if (isset($root_segments[$current_index]) && $root_segments[$current_index] == $current_segment) {
                continue;
            }
            if (empty($current_segment)) {
                continue;
            }
            $segments[] = $current_segment;
        }
    }
    // Parse the segments
    if (!empty($segments)) {
        $request = implode('/', $segments);
        $request = preg_replace('/^component\\/magebridge\\//', '', $request);
        $vars['request'] = $request;
    } else {
        $vars['request'] = null;
    }
    // A hack to set the active Menu-Item
    if (!empty($vars['request']) && !empty($items)) {
        foreach ($items as $item) {
            $preg_route = '/^' . str_replace('/', '\\/', $item->route) . '/';
            if (!empty($item->route) && preg_match($preg_route, $vars['request'])) {
                $menu->setActive($item->id);
                break;
            }
            if (isset($item->query['request']) && $item->query['request'] == $vars['request']) {
                $menu->setActive($item->id);
                break;
            }
        }
    }
    // Set the view based on the current item
    if (empty($vars['request']) && !empty($current_item->query['view'])) {
        $vars['view'] = $current_item->query['view'];
    }
    // Set the default
    if (!isset($vars['view'])) {
        $vars['view'] = 'root';
        // Override the Itemid if the root is available
        if ($root_item_id) {
            $vars['Itemid'] = $root_item_id;
        }
        // Add the current pathing
        if ($current_item && $current_item->id != $root_item_id && in_array($root_item_id, $current_item->tree) && MageBridgeUrlHelper::enableRootMenu()) {
            $path = str_replace($root_item->route . '/', '', $current_item->route);
            if (!empty($vars['request'])) {
                $vars['request'] = $path . '/' . $vars['request'];
            }
        }
    }
    // Re-spoof the current Itemid
    if (isset($vars['Itemid']) && $vars['Itemid'] > 0) {
        JFactory::getApplication()->input->set('Itemid', $vars['Itemid']);
    }
    return $vars;
}