function KunenaParseRoute($segments) { $profiler = JProfiler::getInstance('Application'); KUNENA_PROFILER ? $profiler->mark('kunenaRoute') : null; $starttime = $profiler->getmicrotime(); // Get current menu item and get query variables from it $active = JFactory::getApplication()->getMenu ()->getActive (); $vars = isset ( $active->query ) ? $active->query : array ('view'=>'home'); if (empty($vars['view']) || $vars['view']=='home' || $vars['view']=='entrypage') { $vars['view'] = ''; } // Fix bug in Joomla 1.5 when using /components/kunena instead /component/kunena if (!$active && $segments[0] == 'kunena') array_shift ( $segments ); // Enable SEF category feature $sefcats = KunenaRoute::$config->sefcats && isset(KunenaRouter::$sefviews[$vars['view']]) && empty($vars ['id']); // Handle all segments while ( ($segment = array_shift ( $segments )) !== null ) { $seg = explode ( ':', $segment ); $var = array_shift ( $seg ); $value = array_shift ( $seg ); if (is_numeric ( $var )) { $value = (int) $var; if ($vars['view'] == 'user') { $var = 'userid'; } else { // Numeric variable is always catid or id if (empty($vars ['catid']) || (empty($vars ['id']) && KunenaForumCategoryHelper::get($value)->exists() && KunenaForumTopicHelper::get($value)->category_id != $vars ['catid'])) { // First numbers are always categories // FIXME: what if $topic->catid == catid $var = 'catid'; $vars ['view'] = 'category'; } elseif (empty($vars ['id'])) { // Next number is always topic $var = 'id'; $vars ['view'] = 'topic'; $sefcats = false; } elseif (empty($vars ['mesid'])) { // Next number is always message $var = 'mesid'; $vars ['view'] = 'topic'; } else { // Invalid parameter, skip it continue; } } } elseif (empty ( $var ) && empty ( $value )) { // Empty parameter, skip it continue; } elseif ($sefcats && (($value !== null && ! isset ( KunenaRouter::$parsevars[$var] )) || ($value === null && ! isset ( KunenaRouter::$views[$var] ) && ! isset ( KunenaRouter::$layouts[$var] ) && ! isset ( KunenaRouter::$functions[$var] )))) { // We have SEF category: translate category name into catid=123 // TODO: cache filtered values to gain some speed -- I would like to start using category names instead of catids if it gets fast enough $var = 'catid'; $value = -1; $catname = strtr ( $segment, ':', '-' ); $categories = empty($vars ['catid']) ? KunenaForumCategoryHelper::getCategories() : KunenaForumCategoryHelper::getChildren($vars ['catid']); foreach ( $categories as $category ) { if ($catname == KunenaRouter::filterOutput ( $category->name ) || $catname == JFilterOutput::stringURLSafe ( $category->name )) { $value = (int) $category->id; break; } } $vars ['view'] = 'category'; } elseif ($value === null) { // Variable must be either view or layout $sefcats = false; $value = $var; if (empty($vars ['view']) || ($value=='topic' && $vars ['view'] == 'category')) { $var = 'view'; } elseif (empty($vars ['layout'])) { $var = 'layout'; } else { // Unknown parameter: continue if (!empty($vars ['view'])) continue; // Oops: unknown view or non-existing category $var = 'view'; } } $vars [$var] = $value; } if (empty($vars ['layout'])) $vars ['layout'] = 'default'; KunenaRouter::$time = $profiler->getmicrotime() - $starttime; return $vars; }