function OSMembershipBuildRoute(&$query) { $segments = array(); $db = JFactory::getDbo(); $queryArr = $query; if (isset($queryArr['option'])) { unset($queryArr['option']); } if (isset($queryArr['Itemid'])) { unset($queryArr['Itemid']); } //Store the query string to use in the parseRouter method $queryString = http_build_query($queryArr); $app = JFactory::getApplication(); $menu = $app->getMenu(); //We need a menu item. Either the one specified in the query, or the current active one if none specified if (empty($query['Itemid'])) { $menuItem = $menu->getActive(); } else { $menuItem = $menu->getItem($query['Itemid']); } if (empty($menuItem->query['view'])) { $menuItem->query['view'] = ''; } //Are we dealing with the current view which is attached to a menu item? if ($menuItem instanceof stdClass && isset($query['view']) && isset($query['id']) && $menuItem->query['view'] == $query['view'] && isset($query['id']) && $menuItem->query['id'] == intval($query['id'])) { unset($query['view']); if (isset($query['catid'])) { unset($query['catid']); } unset($query['id']); } //Dealing with the catid parameter in the link to plan if ($menuItem instanceof stdClass && $menuItem->query['view'] == 'plans' && isset($query['catid']) && $menuItem->query['id'] == intval($query['catid'])) { if (isset($query['catid'])) { unset($query['catid']); } } $view = isset($query['view']) ? $query['view'] : ''; $task = isset($query['task']) ? $query['task'] : ''; $id = isset($query['id']) ? (int) $query['id'] : 0; $catId = isset($query['catid']) ? (int) $query['catid'] : 0; $unsetView = false; switch ($view) { case 'plans': $segments[] = 'Membership Plans'; $unsetView = true; break; case 'plan': if ($catId) { $segments[] = OSMembershipHelperRoute::getCategoryTitle($catId); } if ($id) { $segments[] = OSMembershipHelperRoute::getPlanTitle($id); } unset($query['id']); $unsetView = true; break; case 'register': if ($id) { $segments[] = OSMembershipHelperRoute::getPlanTitle($id); } $segments[] = 'Sign up'; unset($query['id']); $unsetView = true; break; case 'failure': $segments[] = 'Subscription Failure'; $unsetView = true; break; case 'cancel': $segments[] = 'Subscription cancel'; $unsetView = true; break; case 'complete': $segments[] = 'Subscription Complete'; $unsetView = true; break; case 'subscription': $segments[] = 'Subscription Detail'; $unsetView = true; break; } switch ($task) { case 'renew_membership': $segments[] = 'Renew Membership'; unset($query['task']); break; } if (isset($query['start']) || isset($query['limitstart'])) { $limit = (int) JFactory::getApplication()->getCfg('list_limit'); $limitStart = isset($query['limitstart']) ? (int) $query['limitstart'] : (int) $query['start']; $page = ceil(($limitStart + 1) / $limit); $segments[] = 'page' . '-' . $page; } if (isset($query['view']) && $unsetView) { unset($query['view']); } if (isset($query['catid'])) { unset($query['catid']); } if (isset($query['start'])) { unset($query['start']); } if (isset($query['limitstart'])) { unset($query['limitstart']); } if (count($segments)) { $segments = array_map('JApplication::stringURLSafe', $segments); $key = md5(implode('/', $segments)); $q = $db->getQuery(true); $q->select('COUNT(*)')->from('#__osmembership_sefurls')->where('md5_key="' . $key . '"'); $db->setQuery($q); $total = $db->loadResult(); if (!$total) { $q->clear(); $q->insert('#__osmembership_sefurls')->columns('md5_key, `query`')->values("'{$key}', '{$queryString}'"); $db->setQuery($q); $db->execute(); } } return $segments; }