/** * 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; }
/** * Helper-method to get the specified Menu-Item * * @param int $id * * @return object */ public static function getItem($id = 0) { $items = MageBridgeUrlHelper::getMenuItems(); if (!empty($items)) { foreach ($items as $item) { if ($item->id == $id) { if (!isset($item->route)) { $item->route = null; } if (!isset($item->query)) { $item->query = array(); } if (!isset($item->query['view'])) { $item->query['view'] = 'root'; } if (!isset($item->query['request'])) { $item->query['request'] = null; } if (!isset($item->query['layout'])) { $item->query['layout'] = null; } // If the parameters include the request, set is as query-request if (!empty($item->params)) { if (is_object($item->params)) { $item->params = YireoHelper::toRegistry($item->params); } if (is_object($item->params)) { $item->query['request'] = $item->params->get('request'); } } return $item; } } } return null; }