Beispiel #1
0
function EasyBlogParseRoute(&$segments)
{
    JFactory::getLanguage()->load('com_easyblog', JPATH_ROOT);
    $vars = array();
    $menu = JFactory::getApplication()->getMenu();
    $item = $menu->getActive();
    $config = EasyBlogHelper::getConfig();
    //feed view
    if (isset($segments[1])) {
        if ($segments[1] == 'rss' || $segments[1] == 'atom') {
            $vars['view'] = $segments[0];
            unset($segments);
            return $vars;
        }
    }
    // If user chooses to use the simple sef setup, we need to add the proper view
    if ($config->get('main_sef') == 'simple' && count($segments) == 1) {
        $files = JFolder::folders(JPATH_ROOT . DIRECTORY_SEPARATOR . 'components' . DIRECTORY_SEPARATOR . 'com_easyblog' . DIRECTORY_SEPARATOR . 'views');
        $views = array();
        foreach ($files as $file) {
            $views[] = EasyBlogSEFTranslation::_($file);
        }
        if (!in_array($segments[0], $views)) {
            array_unshift($segments, EasyBlogSEFTranslation::_('entry'));
        }
    }
    if ($config->get('main_sef') == 'simple' && count($segments) == 2 && $segments[0] == 'categories') {
        array_push($segments, EasyBlogSEFTranslation::_('listings'));
    }
    if (isset($segments[0]) && $segments[0] == EasyBlogSEFTranslation::_('entry')) {
        $count = count($segments);
        $entryId = '';
        if ($config->get('main_sef_unicode')) {
            // perform manual split on the string.
            $permalinkSegment = $segments[$count - 1];
            $permalinkArr = explode(':', $permalinkSegment);
            $entryId = $permalinkArr[0];
        } else {
            $table = EasyBlogHelper::getTable('Blog', 'Table');
            $table->load($segments[$count - 1], true);
            $entryId = $table->id;
        }
        if ($entryId) {
            $vars['id'] = $entryId;
        }
        $vars['view'] = 'entry';
    }
    if (isset($segments[0]) && $segments[0] == EasyBlogSEFTranslation::_('archive')) {
        $vars['view'] = 'archive';
        $count = count($segments);
        $totalSegments = $count - 1;
        if ($totalSegments >= 1) {
            $indexSegment = 1;
            if ($segments[1] == 'calendar') {
                $vars['layout'] = 'calendar';
                $indexSegment = 2;
            }
            // First segment is always the year
            if (isset($segments[$indexSegment])) {
                $vars['archiveyear'] = $segments[$indexSegment];
            }
            // Second segment is always the month
            if (isset($segments[$indexSegment + 1])) {
                $vars['archivemonth'] = $segments[$indexSegment + 1];
            }
            // Third segment is always the day
            if (isset($segments[$indexSegment + 2])) {
                $vars['archiveday'] = $segments[$indexSegment + 2];
            }
        }
    }
    if (isset($segments[0]) && $segments[0] == EasyBlogSEFTranslation::_('categories')) {
        $count = count($segments);
        if ($count > 1) {
            $categoryId = '';
            if ($config->get('main_sef_unicode')) {
                $segmentIndex = $count - 1;
                if ($config->get('main_sef') == 'simple') {
                    $segmentIndex = 1;
                }
                // perform manual split on the string.
                $permalinkSegment = $segments[$segmentIndex];
                $permalinkArr = explode(':', $permalinkSegment);
                $categoryId = $permalinkArr[0];
            }
            $segments = EasyBlogRouter::_encodeSegments($segments);
            if (empty($categoryId)) {
                $table = EasyBlogHelper::getTable('Category', 'Table');
                $permalink = $segments[1];
                $table->load($permalink, true);
                if (!$table->id) {
                    $table->load($segments[$count - 1], true);
                }
                $categoryId = $table->id;
            }
            $vars['id'] = $categoryId;
            $vars['layout'] = 'listings';
        }
        $vars['view'] = 'categories';
    }
    if (isset($segments[0]) && $segments[0] == EasyBlogSEFTranslation::_('tags')) {
        $count = count($segments);
        if ($count > 1) {
            $tagId = '';
            if ($config->get('main_sef_unicode')) {
                // perform manual split on the string.
                $permalinkSegment = $segments[$count - 1];
                $permalinkArr = explode(':', $permalinkSegment);
                $tagId = $permalinkArr[0];
            }
            $segments = EasyBlogRouter::_encodeSegments($segments);
            if (empty($tagId)) {
                $table = EasyBlogHelper::getTable('Tag', 'Table');
                $table->load($segments[$count - 1], true);
                $tagId = $table->id;
            }
            $vars['id'] = $tagId;
            $vars['layout'] = 'tag';
        }
        $vars['view'] = 'tags';
    }
    if (isset($segments[0]) && $segments[0] == EasyBlogSEFTranslation::_('blogger')) {
        $count = count($segments);
        if ($count > 1) {
            $user = 0;
            $rawSegments = $segments;
            $segments = EasyBlogRouter::_encodeSegments($segments);
            if ($config->get('main_sef_unicode')) {
                // perform manual split on the string.
                if (isset($segments[2]) && $segments[2] == EasyBlogSEFTranslation::_('statistic')) {
                    $permalinkSegment = $rawSegments[1];
                } else {
                    $permalinkSegment = $rawSegments[$count - 1];
                }
                $permalinkArr = explode(':', $permalinkSegment);
                $bloggerId = $permalinkArr[0];
            } else {
                if (isset($segments[2]) && $segments[2] == EasyBlogSEFTranslation::_('statistic')) {
                    $permalink = $segments[1];
                } else {
                    $permalink = $segments[$count - 1];
                }
                if ($id = EasyBlogHelper::getUserId($permalink)) {
                    $user = JFactory::getUser($id);
                }
                if (!$user) {
                    // For usernames with spaces, we might need to replace with dashes since SEF will rewrite it.
                    $id = EasyBlogHelper::getUserId(JString::str_ireplace('-', ' ', $permalink));
                    $user = JFactory::getUser($id);
                }
                if (!$id) {
                    // For usernames with spaces, we might need to replace with dashes since SEF will rewrite it.
                    $id = EasyBlogHelper::getUserId(JString::str_ireplace('-', '_', $permalink));
                    $user = JFactory::getUser($id);
                }
                $bloggerId = $user->id;
            }
            $vars['id'] = $bloggerId;
            if ($count > 2) {
                if ($segments[2] == EasyBlogSEFTranslation::_('statistic')) {
                    $vars['layout'] = 'statistic';
                    if ($count == 5) {
                        if (isset($segments[3])) {
                            $vars['stat'] = '';
                            switch (EasyBlogSEFTranslation::_($segments[3])) {
                                case EasyBlogSEFTranslation::_('category'):
                                    if ($config->get('main_sef_unicode')) {
                                        // perform manual split on the string.
                                        $permalinkSegment = $rawSegments[4];
                                        $permalinkArr = explode(':', $permalinkSegment);
                                        $categoryId = $permalinkArr[0];
                                    } else {
                                        $table = EasyBlogHelper::getTable('Category', 'Table');
                                        $table->load($segments[4], true);
                                        $categoryId = $table->id;
                                    }
                                    $vars['stat'] = 'category';
                                    $vars['catid'] = $categoryId;
                                    break;
                                case EasyBlogSEFTranslation::_('tag'):
                                    if ($config->get('main_sef_unicode')) {
                                        // perform manual split on the string.
                                        $permalinkSegment = $segments[4];
                                        $permalinkArr = explode(':', $permalinkSegment);
                                        $tagId = $permalinkArr[0];
                                    } else {
                                        $table = EasyBlogHelper::getTable('Tag', 'Table');
                                        $table->load($segments[4], true);
                                        $tagId = $table->id;
                                    }
                                    $vars['stat'] = 'tag';
                                    $vars['tagid'] = $tagId;
                                    break;
                                default:
                                    // do nothing.
                            }
                        }
                    }
                } else {
                    $vars['layout'] = 'listings';
                }
            }
        }
        $vars['view'] = 'blogger';
    }
    if (isset($segments[0]) && $segments[0] == EasyBlogSEFTranslation::_('dashboard')) {
        $count = count($segments);
        if ($count > 1) {
            switch (EasyBlogSEFTranslation::_($segments[1])) {
                case EasyBlogSEFTranslation::_('write'):
                    $vars['layout'] = 'write';
                    break;
                case EasyBlogSEFTranslation::_('profile'):
                    $vars['layout'] = 'profile';
                    break;
                case EasyBlogSEFTranslation::_('drafts'):
                    $vars['layout'] = 'drafts';
                    break;
                case EasyBlogSEFTranslation::_('entries'):
                    $vars['layout'] = 'entries';
                    break;
                case EasyBlogSEFTranslation::_('comments'):
                    $vars['layout'] = 'comments';
                    break;
                case EasyBlogSEFTranslation::_('categories'):
                    $vars['layout'] = 'categories';
                    break;
                case EasyBlogSEFTranslation::_('listCategories'):
                    $vars['layout'] = 'listCategories';
                    break;
                case EasyBlogSEFTranslation::_('category'):
                    $vars['layout'] = 'category';
                    break;
                case EasyBlogSEFTranslation::_('tags'):
                    $vars['layout'] = 'tags';
                    break;
                case EasyBlogSEFTranslation::_('review'):
                    $vars['layout'] = 'review';
                    break;
                case EasyBlogSEFTranslation::_('pending'):
                    $vars['layout'] = 'pending';
                    break;
                case EasyBlogSEFTranslation::_('teamblogs'):
                    $vars['layout'] = 'teamblogs';
                    break;
                case EasyBlogSEFTranslation::_('microblog'):
                    $vars['layout'] = 'microblog';
                    break;
            }
            if (isset($vars['layout']) && $vars['layout'] == 'entries') {
                if (count($segments) == 3) {
                    if (isset($segments[2])) {
                        $vars['postType'] = $segments[2];
                    }
                }
                if (count($segments) == 4) {
                    if (isset($segments[2])) {
                        $vars['filter'] = $segments[2];
                    }
                    if (isset($segments[3])) {
                        $vars['postType'] = $segments[3];
                    }
                }
            } else {
                if (isset($segments[2])) {
                    $vars['filter'] = $segments[2];
                }
            }
        }
        $vars['view'] = 'dashboard';
    }
    if (isset($segments[0]) && $segments[0] == EasyBlogSEFTranslation::_('teamblog')) {
        $count = count($segments);
        if ($count > 1) {
            $rawSegments = $segments;
            $segments = EasyBlogRouter::_encodeSegments($segments);
            if ($config->get('main_sef_unicode')) {
                // perform manual split on the string.
                if (isset($segments[2]) && $segments[2] == EasyBlogSEFTranslation::_('statistic')) {
                    $permalinkSegment = $rawSegments[1];
                } else {
                    $permalinkSegment = $rawSegments[$count - 1];
                }
                $permalinkArr = explode(':', $permalinkSegment);
                $teamId = $permalinkArr[0];
            } else {
                if (isset($segments[2]) && $segments[2] == EasyBlogSEFTranslation::_('statistic')) {
                    $permalink = $segments[1];
                } else {
                    $permalink = $segments[$count - 1];
                }
                $table = EasyBlogHelper::getTable('TeamBlog', 'Table');
                $loaded = $table->load($permalink, true);
                if (!$loaded) {
                    $name = $segments[$count - 1];
                    $name = JString::str_ireplace(':', ' ', $name);
                    $name = JString::str_ireplace('-', ' ', $name);
                    $table->load($name, true);
                }
                $teamId = $table->id;
            }
            $vars['id'] = $teamId;
            if (isset($segments[2]) && $segments[2] == EasyBlogSEFTranslation::_('statistic')) {
                $vars['layout'] = EasyBlogSEFTranslation::_($segments[2]);
                if ($count == 5) {
                    if (isset($segments[3])) {
                        $vars['stat'] = EasyBlogSEFTranslation::_($segments[3]);
                        switch (EasyBlogSEFTranslation::_($segments[3])) {
                            case EasyBlogSEFTranslation::_('category'):
                                if ($config->get('main_sef_unicode')) {
                                    // perform manual split on the string.
                                    $permalinkSegment = $rawSegments[4];
                                    $permalinkArr = explode(':', $permalinkSegment);
                                    $categoryId = $permalinkArr[0];
                                } else {
                                    $table = EasyBlogHelper::getTable('Category', 'Table');
                                    $table->load($segments[4], true);
                                    $categoryId = $table->id;
                                }
                                $vars['catid'] = $categoryId;
                                break;
                            case EasyBlogSEFTranslation::_('tag'):
                                if ($config->get('main_sef_unicode')) {
                                    // perform manual split on the string.
                                    $permalinkSegment = $segments[4];
                                    $permalinkArr = explode(':', $permalinkSegment);
                                    $tagId = $permalinkArr[0];
                                } else {
                                    $table = EasyBlogHelper::getTable('Tag', 'Table');
                                    $table->load($segments[4], true);
                                    $tagId = $table->id;
                                }
                                $vars['tagid'] = $tagId;
                                break;
                            default:
                                // do nothing.
                        }
                    }
                }
            } else {
                $vars['layout'] = 'listings';
            }
        }
        $vars['view'] = 'teamblog';
    }
    if (isset($segments[0]) && $segments[0] == EasyBlogSEFTranslation::_('search')) {
        $count = count($segments);
        if ($count == 2) {
            if ($segments[1] == "parsequery") {
                $vars['layout'] = EasyBlogSEFTranslation::_($segments[1]);
            } else {
                $vars['query'] = $segments[1];
            }
        }
        $vars['view'] = 'search';
    }
    $count = count($segments);
    if ($count == 1) {
        switch (EasyBlogSEFTranslation::_($segments[0])) {
            case EasyBlogSEFTranslation::_('latest'):
                $vars['view'] = 'latest';
                break;
            case EasyBlogSEFTranslation::_('featured'):
                $vars['view'] = 'featured';
                break;
            case EasyBlogSEFTranslation::_('images'):
                $vars['view'] = 'images';
                break;
            case EasyBlogSEFTranslation::_('login'):
                $vars['view'] = 'login';
                break;
            case EasyBlogSEFTranslation::_('myblog'):
                $vars['view'] = 'myblog';
                break;
            case EasyBlogSEFTranslation::_('ratings'):
                $vars['view'] = 'ratings';
                break;
            case EasyBlogSEFTranslation::_('subscription'):
                $vars['view'] = 'subscription';
                break;
            case EasyBlogSEFTranslation::_('trackback'):
                $vars['view'] = 'trackback';
                break;
        }
    }
    return $vars;
}