function EasyDiscussParseRoute($segments) { $vars = array(); $app = JFactory::getApplication(); $menu = $app->getMenu(); $item = $menu->getActive(); $config = DiscussHelper::getConfig(); $views = array('attachments', 'categories', 'index', 'post', 'profile', 'search', 'tag', 'tags', 'users', 'notifications', 'badges', 'ask', 'subscriptions', 'featured', 'favourites', 'assigned'); // @rule: For view=post&id=xxx we do not include if (isset($segments[0]) && !in_array($segments[0], $views)) { $vars['view'] = 'post'; $count = count($segments); if ($count >= 1) { // Submission $index = 0; if ($segments[$index] == 'submit') { $vars['layout'] = $segments[$index]; $index += 1; } if (isset($segments[$index])) { $table = DiscussHelper::getTable('Post'); $table->load($segments[$index], true); $vars['id'] = $table->id; $index += 1; } if (isset($segments[$index])) { if ($segments[$index] == 'edit') { $vars['layout'] = $segments[$index]; } else { $vars['sort'] = $segments[$index]; } } } } if (isset($segments[0]) && $segments[0] == 'index') { $count = count($segments); if ($count > 1) { $vars['view'] = $segments[0]; $segments = DiscussRouter::encodeSegments($segments); //if( in_array( $segments[ $count - 1 ] , array( 'unanswered', 'featured', 'new' ) ) ) if (in_array($segments[1], array('allposts', 'unanswered', 'unresolved', 'unread', 'resolved'))) { $vars['filter'] = $segments[1]; if (isset($segments[2])) { $vars['sort'] = $segments[2]; } } } } if (isset($segments[0]) && $segments[0] == 'points') { // Get the current view $vars['view'] = $segments[0]; // Get the current layout $vars['layout'] = $segments[1]; // Get the user's id. $alias = $segments[2]; $id = DiscussHelper::getUserId($alias); if (!$id) { // Username might contains "-" character $alias = JString::str_ireplace(':', '-', $alias); $id = DiscussHelper::getUserId($alias); } if (!$id) { // Username might contains "-" character $alias = JString::str_ireplace('-', ' ', $alias); $id = DiscussHelper::getUserId($alias); } $vars['id'] = $id; } if (isset($segments[0]) && $segments[0] == 'categories') { $count = count($segments); if ($count > 1) { $vars['view'] = $segments[0]; $segments = DiscussRouter::encodeSegments($segments); if (isset($segments[1]) && $segments[1] == 'listings') { // Get the last item since the category might be recursive. $cid = $segments[2]; $category = DiscussHelper::getTable('Category'); $category->load($cid, true); $vars['layout'] = $segments[1]; $vars['category_id'] = $category->id; } else { // Get the last item since the category might be recursive. $cid = $segments[1]; $category = DiscussHelper::getTable('Category'); $category->load($cid, true); $vars['category_id'] = $category->id; } if (isset($segments[3])) { $vars['filter'] = $segments[3]; if (isset($segments[4])) { $vars['sort'] = $segments[4]; } } } } if (isset($segments[0]) && $segments[0] == 'tags') { $count = count($segments); if ($count > 1) { $segments = DiscussRouter::encodeSegments($segments); $table = DiscussHelper::getTable('Tags'); $table->load($segments[1], true); $vars['id'] = $table->id; if ($count > 2) { if ($segments[2] == 'allposts' || $segments[2] == 'featured' || $segments[2] == 'unanswered') { $vars['filter'] = $segments[2]; } if (!empty($segments[3])) { $vars['sort'] = $segments[3]; } } } $vars['view'] = $segments[0]; } if (isset($segments[0]) && $segments[0] == 'profile') { $count = count($segments); if ($count > 1) { $segments = DiscussRouter::encodeSegments($segments); if ($segments[1] == 'edit') { $vars['layout'] = 'edit'; } else { $user = 0; $id = DiscussHelper::getUserId($segments[1]); if ($config->get('main_sef_user') == 'realname' || $config->get('main_sef_user') == 'username') { $id = explode('-', $segments[1]); $id = $id[0]; } // Username might contains "-" character if ($id) { $user = JFactory::getUser($id); } $segments[1] = JString::str_ireplace('-', ' ', $segments[1]); if (!$user) { $id = DiscussHelper::getUserId($segments[1]); $user = JFactory::getUser($id); } if (!$user) { // For usernames with spaces, we might need to replace with dashes since SEF will rewrite it. $id = DiscussHelper::getUserId(JString::str_ireplace('-', ' ', $segments[1])); $user = JFactory::getUser($id); } $vars['id'] = $user->id; } if (isset($segments[2])) { $vars['viewtype'] = $segments[2]; } } $vars['view'] = $segments[0]; } if (isset($segments[0]) && $segments[0] == 'users') { $count = count($segments); if ($count > 1) { $vars['sort'] = $segments[1]; } $vars['view'] = $segments[0]; } if (isset($segments[0]) && $segments[0] == 'badges') { $count = count($segments); if ($count > 1) { if ($segments[1] == 'mybadges') { $vars['layout'] = 'mybadges'; } else { $segments = DiscussRouter::encodeSegments($segments); $table = DiscussHelper::getTable('Badges'); $table->load($segments[1], true); $vars['id'] = $table->id; $vars['layout'] = 'listings'; } } $vars['view'] = $segments[0]; } if (isset($segments[0]) && $segments[0] == 'ask') { $count = count($segments); if ($count > 1) { // Get the last item since the category might be recursive. $cid = $segments[$count - 1]; $category = DiscussHelper::getTable('Category'); $category->load($cid, true); $vars['category'] = $category->id; } $vars['view'] = $segments[0]; } if (isset($segments[0]) && $segments[0] == 'conversation') { $vars['view'] = $segments[0]; if (isset($segments[1])) { $vars['layout'] = $segments[1]; } } $count = count($segments); if ($count == 1 && in_array($segments[0], $views)) { $vars['view'] = $segments[0]; } unset($segments); return $vars; }