public function display($tmpl = null) { $config = DiscussHelper::getConfig(); $jConfig = DiscussHelper::getJConfig(); if (!$config->get('main_rss')) { return; } $filteractive = JRequest::getString('filter', 'allposts'); $sort = JRequest::getString('sort', 'latest'); if ($filteractive == 'unanswered' && ($sort == 'active' || $sort == 'popular')) { //reset the active to latest. $sort = 'latest'; } $doc = JFactory::getDocument(); $doc->link = JRoute::_('index.php?option=com_easydiscuss&view=index'); // Load up the tag $tag = JRequest::getInt('id', 0); $table = DiscussHelper::getTable('Tags'); $table->load($tag); // Set the title of the document $doc->setTitle($table->title); $doc->setDescription(JText::sprintf('COM_EASYDISCUSS_DISCUSSIONS_TAGGED_IN', $table->title)); $postModel = $this->getModel('Posts'); $posts = $postModel->getTaggedPost($tag, $sort, $filteractive); $pagination = $postModel->getPagination('0', $sort, $filteractive); $jConfig = DiscussHelper::getJConfig(); $posts = DiscussHelper::formatPost($posts); foreach ($posts as $row) { // Assign to feed item $title = $this->escape($row->title); $title = html_entity_decode($title); // load individual item creator class $item = new JFeedItem(); $item->title = $title; $item->link = JRoute::_('index.php?option=com_easydiscuss&view=post&id=' . $row->id); $item->description = $row->content; $item->date = DiscussHelper::getDate($row->created)->toMySQL(); if (!empty($row->tags)) { $tagData = array(); foreach ($row->tags as $tag) { $tagData[] = '<a href="' . JRoute::_('index.php?option=com_easydiscuss&view=tags&id=' . $tag->id) . '">' . $tag->title . '</a>'; } $row->tags = implode(', ', $tagData); } else { $row->tags = ''; } $item->category = $row->tags; $item->author = $row->user->getName(); if ($jConfig->get('feed_email') != 'none') { if ($jConfig->get('feed_email') == 'author') { $item->authorEmail = $row->user->email; } else { $item->authorEmail = $jConfig->get('mailfrom'); } } $doc->addItem($item); } }
function display($tmpl = null) { $config = DiscussHelper::getConfig(); if (!$config->get('main_rss')) { return; } $document = JFactory::getDocument(); $document->link = JRoute::_('index.php?option=com_easydiscuss&view=index'); $document->setTitle($this->escape($document->getTitle())); $sort = JRequest::getString('sort', 'latest'); $filter = JRequest::getString('filter', 'allposts'); $category = JRequest::getInt('category_id', 0); $postModel = $this->getModel('Posts'); $posts = $postModel->getData(true, $sort, null, $filter, $category); $pagination = $postModel->getPagination('0', $sort, $filter, $category); $jConfig = DiscussHelper::getJConfig(); $posts = DiscussHelper::formatPost($posts); require_once DISCUSS_HELPERS . '/parser.php'; foreach ($posts as $row) { // Assign to feed item $title = $this->escape($row->title); $title = html_entity_decode($title); $category = DiscussHelper::getTable('Category'); $category->load($row->category_id); // load individual item creator class $item = new JFeedItem(); //Problems with other language //$item->title = htmlentities( $title ); $item->title = $row->title; $item->link = JRoute::_('index.php?option=com_easydiscuss&view=post&id=' . $row->id); //$row->content = DiscussHelper::parseContent( $row->content ); if ($row->content_type == 'bbcode') { $row->content = DiscussHelper::parseContent($row->content); $row->content = html_entity_decode($row->content); } // Problems with other language //$item->description = htmlentities( $row->content ); $item->description = $row->content; $item->date = DiscussHelper::getDate($row->created)->toMySQL(); $item->author = $row->user->getName(); $item->category = $category->getTitle(); if ($jConfig->get('feed_email') != 'none') { if ($jConfig->get('feed_email') == 'author') { $item->authorEmail = $row->user->user->email; } else { $item->authorEmail = $jConfig->get('mailfrom'); } } $document->addItem($item); } }
function display($tmpl = null) { $config = DiscussHelper::getConfig(); if (!$config->get('main_rss')) { return; } $userid = JRequest::getInt('id', null); $user = JFactory::getUser($userid); $document = JFactory::getDocument(); $document->link = DiscussRouter::_('index.php?option=com_easydiscuss&view=profile&id=' . $user->id); $profile = DiscussHelper::getTable('Profile'); $profile->load($user->id); $document->setTitle($profile->getName()); $document->setDescription($profile->getDescription()); $jConfig = DiscussHelper::getJConfig(); $model = $this->getModel('Posts'); $posts = $model->getPostsBy('user', $profile->id); $posts = DiscussHelper::formatPost($posts); foreach ($posts as $row) { // Assign to feed item $title = $this->escape($row->title); $title = html_entity_decode($title); // load individual item creator class $item = new JFeedItem(); $item->title = $title; $item->link = JRoute::_('index.php?option=com_easydiscuss&view=post&id=' . $row->id); $item->description = $row->content; $item->date = DiscussHelper::getDate($row->created)->toMySQL(); if (!empty($row->tags)) { $tagData = array(); foreach ($row->tags as $tag) { $tagData[] = '<a href="' . JRoute::_('index.php?option=com_easydiscuss&view=tags&id=' . $tag->id) . '">' . $tag->title . '</a>'; } $row->tags = implode(', ', $tagData); } else { $row->tags = ''; } $item->category = $row->tags; $item->author = $row->user->getName(); if ($jConfig->get('feed_email') != 'none') { if ($jConfig->get('feed_email') == 'author') { $item->authorEmail = $row->user->email; } else { $item->authorEmail = $jConfig->get('mailfrom'); } } $document->addItem($item); } }
function display($tpl = null) { $config = DiscussHelper::getConfig(); $app = JFactory::getApplication(); if (!$config->get('main_favorite')) { DiscussHelper::setMessageQueue(JText::_('COM_EASYDISCUSS_FEATURE_IS_DISABLED'), DISCUSS_QUEUE_ERROR); $app->redirect(DiscussRouter::_('index.php?option=com_easydiscuss', false)); $app->close(); } DiscussHelper::setPageTitle(JText::_('COM_EASYDISCUSS_FAVOURITES_TITLE')); // @task: Add view $this->logView(); DiscussHelper::setMeta(); $postModel = DiscussHelper::getModel('Posts'); $posts = $postModel->getData(true, 'latest', null, 'favourites'); $posts = DiscussHelper::formatPost($posts); $theme = new DiscussThemes(); $theme->set('posts', $posts); echo $theme->fetch('favourites.php'); }
function display($tpl = null) { //initialise variables $document = JFactory::getDocument(); $user = JFactory::getUser(); $config = DiscussHelper::getConfig(); $mainframe = JFactory::getApplication(); $acl = DiscussHelper::getHelper('ACL'); $filteractive = JRequest::getString('filter', 'allposts'); $query = JRequest::getString('query', ''); $sort = JRequest::getString('sort', 'latest'); $category = JRequest::getInt('category_id', 0); $postModel = $this->getModel('Posts'); $featuredposts = ''; $featuredpostsHTML = ''; $showFeaturedPost = true; $posts = $postModel->getData(true, $sort, null, $filteractive, $category, null, $showFeaturedPost); $pagination = $postModel->getPagination('0', $sort, $filteractive, $category, $showFeaturedPost); $posts = DiscussHelper::formatPost($posts); $concatCode = DiscussHelper::getJConfig()->getValue('sef') ? '?' : '&'; $document->addHeadLink(JRoute::_('index.php?option=com_easydiscuss&view=featured') . $concatCode . 'format=feed&type=rss', 'alternate', 'rel', array('type' => 'application/rss+xml', 'title' => 'RSS 2.0')); $document->addHeadLink(JRoute::_('index.php?option=com_easydiscuss&view=featured') . $concatCode . 'format=feed&type=atom', 'alternate', 'rel', array('type' => 'application/atom+xml', 'title' => 'Atom 1.0')); $rssLink = DiscussHelper::getHelper('Feeds')->getFeedURL('index.php?option=com_easydiscuss&view=featured'); $tpl = new DiscussThemes(); $tpl->set('rssLink', $rssLink); $filterBar = ''; $tpl->set('acl', $acl); $tpl->set('posts', $posts); $tpl->set('paginationType', DISCUSS_QUESTION_TYPE); $tpl->set('parent_id', 0); $tpl->set('pagination', $pagination); $tpl->set('sort', $sort); $tpl->set('filter', $filteractive); $tpl->set('filterbar', $filterBar); $tpl->set('query', $query); $tpl->set('config', $config); echo $tpl->fetch('featured.php'); }
jimport('joomla.filesystem.file'); if (!JFile::exists($path)) { return; } require_once $path; // require_once (dirname(__FILE__) . '/helper.php'); DiscussHelper::loadStylesheet("module", "mod_easydiscuss_your_discussions"); $my = JFactory::getUser(); $config = DiscussHelper::getConfig(); $profile = DiscussHelper::getTable('Profile'); $profile->load($my->id); $postsModel = DiscussHelper::getModel('Posts'); $count = $params->get('count', 5); $posts = array(); $posts = $postsModel->getPostsBy('user', $profile->id, 'latest', '0', '', '', $count); $posts = DiscussHelper::formatPost($posts); if (!empty($posts)) { $posts = Discusshelper::getPostStatusAndTypes($posts); // foreach( $posts as $post ) // { // // Translate post status from integer to string // switch( $post->post_status ) // { // case '0': // $post->post_status = ''; // break; // case '1': // $post->post_status = JText::_( 'COM_EASYDISCUSS_POST_STATUS_ON_HOLD' ); // break; // case '2': // $post->post_status = JText::_( 'COM_EASYDISCUSS_POST_STATUS_ACCEPTED' );
public function filter($viewtype = 'user-post', $profileId = null) { $ajax = new Disjax(); $mainframe = JFactory::getApplication(); $config = DiscussHelper::getConfig(); $acl = DiscussHelper::getHelper('ACL'); $sort = 'latest'; $data = null; $pagination = null; $model = $this->getModel('Posts'); $tagsModel = $this->getModel('Tags'); switch ($viewtype) { case 'user-achievements': $profile = DiscussHelper::getTable('Profile'); $profile->load($profileId); $data = $profile->getBadges(); break; case 'user-tags': $data = $tagsModel->getTagCloud('', '', '', $profileId); break; case 'user-replies': $data = $model->getRepliesFromUser($profileId); $pagination = $model->getPagination(); DiscussHelper::formatPost($data); break; case 'user-unresolved': $data = $model->getUnresolvedFromUser($profileId); $pagination = $model->getPagination(); DiscussHelper::formatPost($data); break; case 'user-post': default: if (is_null($profileId)) { break; } $model = $this->getModel('Posts'); $data = $model->getPostsBy('user', $profileId); $data = DiscussHelper::formatPost($data); $pagination = $model->getPagination(); break; } // replace the content $content = ''; $tpl = new DiscussThemes(); $tpl->set('profileId', $profileId); if ($viewtype == 'user-post' || $viewtype == 'user-replies' || $viewtype == 'user-unresolved') { $nextLimit = DiscussHelper::getListLimit(); if ($nextLimit >= $pagination->total) { // $ajax->remove( 'dc_pagination' ); $ajax->assign($viewtype . ' #dc_pagination', ''); } $tpl->set('posts', $data); $content = $tpl->fetch('main.item.php'); $ajax->assign($viewtype . ' #dc_list', $content); //reset the next start limi $ajax->value('pagination-start', $nextLimit); if ($nextLimit < $pagination->total) { $filterArr = array(); $filterArr['viewtype'] = $viewtype; $filterArr['id'] = $profileId; $ajax->assign($viewtype . ' #dc_pagination', $pagination->getPagesLinks('profile', $filterArr, true)); } } else { if ($viewtype == 'user-tags') { $tpl->set('tagCloud', $data); $content = $tpl->fetch('tags.item.php'); $ajax->assign('discuss-tag-list', $content); } else { if ($viewtype == 'user-achievements') { $tpl->set('badges', $data); $content = $tpl->fetch('users.achievements.list.php'); $ajax->assign('user-achievements', $content); } } } $ajax->script('discuss.spinner.hide( "profile-loading" );'); //$ajax->assign( 'sort-wrapper' , $sort ); //$ajax->script( 'EasyDiscuss.$("#pagination-filter").val("'.$viewtype.'");'); $ajax->script('EasyDiscuss.$("#' . $viewtype . '").show();'); $ajax->script('EasyDiscuss.$("#' . $viewtype . ' #dc_pagination").show();'); $ajax->send(); }
/** * Displays a list of recent discussions from a particular category. * * @since 3.0 * @access public */ public function listings() { // Initialise variables $doc = JFactory::getDocument(); $my = JFactory::getUser(); $config = DiscussHelper::getConfig(); $app = JFactory::getApplication(); $registry = DiscussHelper::getRegistry(); $categoryId = JRequest::getInt('category_id', 0); // Try to detect if there's any category id being set in the menu parameter. $activeMenu = $app->getMenu()->getActive(); if ($activeMenu) { // Load menu params to the registry. $registry->loadString($activeMenu->params); // Set the active category id if exists. $categoryId = $registry->get('category_id') ? $registry->get('category_id') : $categoryId; } // Get the current logged in user's access. $acl = DiscussHelper::getHelper('ACL'); // Todo: Perhaps we should fix the confused naming of filter and sort to type and sort $activeFilter = JRequest::getString('filter', $registry->get('filter')); $sort = JRequest::getString('sort', $registry->get('sort')); // Get the pagination limit $limit = $registry->get('limit'); $limit = $limit == '-2' ? DiscussHelper::getListLimit() : $limit; $limit = $limit == '-1' ? DiscussHelper::getJConfig()->get('list_limit') : $limit; // Get the active category id if there is any $activeCategory = DiscussHelper::getTable('Category'); $activeCategory->load($categoryId); DiscussHelper::setPageTitle($activeCategory->title); // Add breadcrumbs for active category. if ($activeCategory->id != 0) { // Test if user is really allowed to access this category. if (!$activeCategory->canAccess()) { $app->redirect(DiscussRouter::_('index.php?option=com_easydiscuss&view=index', false), JText::_('COM_EASYDISCUSS_SYSTEM_INSUFFICIENT_PERMISSIONS')); $app->close(); return; } // Add pathway for category here. DiscussHelper::getHelper('Pathway')->setCategoryPathway($activeCategory); } // Add view to this page. $this->logView(); // Set the meta of the page. DiscussHelper::setMeta(); $doc = JFactory::getDocument(); $doc->setMetadata('description', strip_tags($activeCategory->getDescription())); // Add rss feed into headers DiscussHelper::getHelper('Feeds')->addHeaders('index.php?option=com_easydiscuss&view=index'); // Get list of categories on the site. $catModel = $this->getModel('Categories'); // Pagination is by default disabled. $pagination = false; if ($categoryId) { $category = DiscussHelper::getTable('Category'); $category->load($categoryId); $categories[] = $category; } else { $categories = $catModel->getCategories($categoryId); if (count($categories) > 1) { $ids = array(); foreach ($categories as $row) { $ids[] = $row->id; } // iniCounts should only called in index page. $category = DiscussHelper::getTable('Category'); $category->initCounts($ids, true); } } // Get the model. $postModel = DiscussHelper::getModel('Posts'); $authorIds = array(); $topicIds = array(); for ($i = 0; $i < count($categories); $i++) { $category =& $categories[$i]; // building category childs lickage. $category->childs = null; $nestedLinks = ''; // In category page if ($config->get('layout_show_all_subcategories', '1')) { // By default show all the subcategories of the selected category DiscussHelper::buildNestedCategories($category->id, $category, false, true); } else { // Show one level of subcategories of the selected category only $category->childs = $catModel->getChildCategories($category->id); } DiscussHelper::accessNestedCategories($category, $nestedLinks, '0', '', 'listlink', ', '); $category->nestedLink = $nestedLinks; // Get featured posts from this particular category. $featured = $postModel->getDiscussions(array('pagination' => false, 'sort' => $sort, 'filter' => $activeFilter, 'category' => $category->id, 'limit' => $config->get('layout_featuredpost_limit', $limit), 'featured' => true)); // Get normal discussion posts. $posts = $postModel->getDiscussions(array('sort' => $sort, 'filter' => $activeFilter, 'category' => $category->id, 'limit' => $limit, 'featured' => false)); $tmpPostsArr = array_merge($featured, $posts); if (count($tmpPostsArr) > 0) { foreach ($tmpPostsArr as $tmpArr) { $authorIds[] = $tmpArr->user_id; $topicIds[] = $tmpArr->id; } } if ($categoryId) { $pagination = $postModel->getPagination(0, 'latest', '', $categoryId, false); } // Set these items into the category object. $category->featured = $featured; $category->posts = $posts; // Set active filter for the category $category->activeFilter = $activeFilter; $category->activeSort = $sort; } $lastReplyUser = $postModel->setLastReplyBatch($topicIds); $authorIds = array_merge($lastReplyUser, $authorIds); // load all author object 1st. $authorIds = array_unique($authorIds); $profile = DiscussHelper::getTable('Profile'); $profile->init($authorIds); $postLoader = DiscussHelper::getTable('Posts'); $postLoader->loadBatch($topicIds); $postTagsModel = DiscussHelper::getModel('PostsTags'); $postTagsModel->setPostTagsBatch($topicIds); // perform data formating here. for ($i = 0; $i < count($categories); $i++) { $category =& $categories[$i]; // perform data formating here. if ($category->featured) { $category->featured = DiscussHelper::formatPost($category->featured, false, true); } if ($category->posts) { $category->posts = DiscussHelper::formatPost($category->posts, false, true); } } // Let's render the layout now. $theme = new DiscussThemes(); $theme->set('activeFilter', $activeFilter); $theme->set('activeSort', $sort); $theme->set('categories', $categories); $theme->set('pagination', $pagination); echo $theme->fetch('frontpage.php'); }
public function sort($sort = null, $filter = null, $categoryId = null) { $ajax = new Disjax(); $mainframe = JFactory::getApplication(); $user = JFactory::getUser(); $config = DiscussHelper::getConfig(); $acl = DiscussHelper::getHelper('ACL'); $activeCategory = DiscussHelper::getTable('Category'); $activeCategory->load($categoryId); //todo: check against the config $showAllPosts = 'all'; $postModel = $this->getModel('Posts'); $posts = $postModel->getData(true, $sort, null, $filter, $categoryId, null, $showAllPosts); $pagination = $postModel->getPagination('0', $sort, $filter, $categoryId, $showAllPosts); $posts = DiscussHelper::formatPost($posts); $nextLimit = DiscussHelper::getListLimit(); if ($nextLimit >= $pagination->total) { $ajax->remove('dc_pagination .pagination-wrap'); } $tpl = new DiscussThemes(); $tpl->set('posts', $posts); $content = $tpl->fetch('main.item.php'); //reset the next start limi $ajax->value('pagination-start', $nextLimit); if ($nextLimit < $pagination->total) { $filterArr = array(); $filterArr['filter'] = $filter; $filterArr['category_id'] = $categoryId; $filterArr['sort'] = $sort; $ajax->assign('dc_pagination', $pagination->getPagesLinks('index', $filterArr, true)); } $ajax->script('discuss.spinner.hide( "index-loading" );'); $ajax->script('EasyDiscuss.$("#pagination-sorting").val("' . $sort . '");'); $ajax->assign('dc_list', $content); $ajax->script('EasyDiscuss.$("#dc_list").show();'); $ajax->script('EasyDiscuss.$("#dc_pagination").show();'); $ajax->send(); }
/** * Displays the user's profile. * * @since 2.0 * @access public */ function display($tmpl = null) { $doc = JFactory::getDocument(); $app = JFactory::getApplication(); $id = JRequest::getInt('id', null); $my = JFactory::getUser($id); $config = DiscussHelper::getConfig(); // Custom parameters. $sort = JRequest::getString('sort', 'latest'); $filteractive = JRequest::getString('filter', 'allposts'); $viewType = JRequest::getString('viewtype', 'questions'); $profile = DiscussHelper::getTable('Profile'); $profile->load($my->id); // If profile is invalid, throw an error. if (!$profile->id) { // Show login form. $theme = new DiscussThemes(); $theme->set('redirect', DiscussRouter::_('index.php?option=com_easydiscuss&view=profile', false)); echo $theme->fetch('login.form.php'); return; } $params = DiscussHelper::getRegistry($profile->params); $fields = array('facebook', 'linkedin', 'twitter', 'website'); foreach ($fields as $site) { if ($params->get($site, '') != '') { if ($site == 'facebook' || $site == 'linkedin' || $site == 'twitter') { $name = $params->get($site); $url = 'www.' . $site . '.com/' . $name; $params->set($site, DiscussUrlHelper::clean($url)); } if ($site == 'website') { $url = $params->get($site); $params->set($site, DiscussUrlHelper::clean($url)); } } } // Set the title for the page. DiscussHelper::setPageTitle(JText::sprintf('COM_EASYDISCUSS_PROFILE_PAGE_TITLE', $profile->getName())); // Set the pathway $this->setPathway(JText::_($profile->getName())); $postsModel = DiscussHelper::getModel('Posts'); $tagsModel = DiscussHelper::getModel('Tags'); $posts = array(); $replies = array(); $tagCloud = array(); $badges = array(); $unresolved = array(); $pagination = null; $filterArr = array(); $filterArr['viewtype'] = $viewType; $filterArr['id'] = $profile->id; switch ($viewType) { case 'replies': $replies = $postsModel->getRepliesFromUser($profile->id); $pagination = $postsModel->getPagination(); $pagination = $pagination->getPagesLinks('profile', $filterArr, true); $replies = DiscussHelper::formatPost($replies); break; case 'unresolved': $unresolved = $postsModel->getUnresolvedFromUser($profile->id); $pagination = $postsModel->getPagination(); $pagination = $pagination->getPagesLinks('profile', $filterArr, true); $unresolved = DiscussHelper::formatPost($unresolved); break; case 'questions': default: $posts = $postsModel->getPostsBy('user', $profile->id); $pagination = $postsModel->getPagination(); $pagination = $pagination->getPagesLinks('profile', $filterArr, true); $posts = DiscussHelper::formatPost($posts); break; } // Get user badges $badges = $profile->getBadges(); // @rule: Clear up any notifications that are visible for the user. $notifications = DiscussHelper::getModel('Notification'); $notifications->markRead($profile->id, false, array(DISCUSS_NOTIFICATIONS_PROFILE, DISCUSS_NOTIFICATIONS_BADGE)); $tpl = new DiscussThemes(); // EasyBlog integrations $easyblogExists = $this->easyblogExists(); $blogCount = 0; if ($easyblogExists && $config->get('integrations_easyblog_profile')) { $blogModel = EasyBlogHelper::getModel('Blog'); $blogCount = $blogModel->getBlogPostsCount($profile->id, false); } $komentoExists = $this->komentoExists(); $commentCount = 0; if ($komentoExists && $config->get('integrations_komento_profile')) { $commentsModel = Komento::getModel('comments'); $commentCount = $commentsModel->getTotalComment($profile->id); } $posts = Discusshelper::getPostStatusAndTypes($posts); $favPosts = $postsModel->getData('true', 'latest', 'null', 'favourites'); $favPosts = DiscussHelper::formatPost($favPosts); $tpl->set('sort', $sort); $tpl->set('filter', $filteractive); $tpl->set('tagCloud', $tagCloud); $tpl->set('paginationType', DISCUSS_USERQUESTIONS_TYPE); $tpl->set('parent_id', $profile->id); $tpl->set('pagination', $pagination); $tpl->set('posts', $posts); $tpl->set('badges', $badges); $tpl->set('favPosts', $favPosts); $tpl->set('profile', $profile); $tpl->set('replies', $replies); $tpl->set('unresolved', $unresolved); $tpl->set('params', $params); $tpl->set('viewType', $viewType); $tpl->set('easyblogExists', $easyblogExists); $tpl->set('komentoExists', $komentoExists); $tpl->set('blogCount', $blogCount); $tpl->set('commentCount', $commentCount); $filterArr = array(); $filterArr['filter'] = $filteractive; $filterArr['id'] = $profile->id; $filterArr['sort'] = $sort; $filterArr['viewtype'] = $viewType; $tpl->set('filterArr', $filterArr); $tpl->set('page', 'profile'); echo $tpl->fetch('profile.php'); }
function tags($tmpl = null) { //initialise variables $mainframe = JFactory::getApplication(); $document = JFactory::getDocument(); $user = JFactory::getUser(); $config = DiscussHelper::getConfig(); $tags = JRequest::getVar('ids'); if (is_null($tags) || $tags == '') { $mainframe->enqueueMessage(JText::_('COM_EASYDISCUSS_INVALID_TAG'), 'error'); $mainframe->redirect(DiscussRouter::_('index.php?option=com_easydiscuss&view=index')); } $tags = explode('+', $tags); if (count($tags) < 2) { $tags = explode(' ', $tags[0]); } $dirtyTags = $tags; unset($tags); $tags = array(); foreach ($dirtyTags as $dirtyTag) { $dirtyTag = (int) $dirtyTag; if (!empty($dirtyTag)) { $tags[] = $dirtyTag; } } if (empty($tags)) { $mainframe->enqueueMessage(JText::_('COM_EASYDISCUSS_INVALID_TAG'), 'error'); $mainframe->redirect(DiscussRouter::_('index.php?option=com_easydiscuss&view=index')); } $this->setPathway(JText::_('COM_EASYDISCUSS_TAGS'), DiscussRouter::_('index.php?option=com_easydiscuss&view=tags')); DiscussHelper::setMeta(); $tagNames = array(); foreach ($tags as $tag) { $table = DiscussHelper::getTable('Tags'); $table->load($tag); $tagNames[] = JText::_($table->title); } $this->setPathway(implode(' + ', $tagNames)); $tagIDs = implode('+', $tags); $concatCode = DiscussHelper::getJConfig()->getValue('sef') ? '?' : '&'; $document->addHeadLink(JRoute::_('index.php?option=com_easydiscuss&view=tags&ids=' . $tagIDs) . $concatCode . 'format=feed&type=rss', 'alternate', 'rel', array('type' => 'application/rss+xml', 'title' => 'RSS 2.0')); $document->addHeadLink(JRoute::_('index.php?option=com_easydiscuss&view=tags&ids=' . $tagIDs) . $concatCode . 'format=feed&type=atom', 'alternate', 'rel', array('type' => 'application/atom+xml', 'title' => 'Atom 1.0')); $filteractive = JRequest::getString('filter', 'allposts'); $sort = JRequest::getString('sort', 'latest'); if ($filteractive == 'unanswered' && ($sort == 'active' || $sort == 'popular')) { //reset the active to latest. $sort = 'latest'; } $postModel = $this->getModel('Posts'); $posts = $postModel->getTaggedPost($tags, $sort, $filteractive); $pagination = $postModel->getPagination($sort, $filteractive); $posts = DiscussHelper::formatPost($posts); $tagModel = $this->getModel('Tags'); $currentTag = $tagModel->getTagNames($tags); $tpl = new DiscussThemes(); $tpl->set('rssLink', JRoute::_('index.php?option=com_easydiscuss&view=tags&id=' . $tag . '&format=feed')); $tpl->set('posts', $posts); $tpl->set('paginationType', DISCUSS_TAGS_TYPE); $tpl->set('pagination', $pagination); $tpl->set('sort', $sort); $tpl->set('filter', $filteractive); $tpl->set('showEmailSubscribe', true); $tpl->set('currentTag', $currentTag); $tpl->set('parent_id', 0); $tpl->set('config', $config); echo $tpl->fetch('tag.php'); }
public function display($tmpl = null) { $document = JFactory::getDocument(); $mainframe = JFactory::getApplication(); $user = JFactory::getUser(); $config = DiscussHelper::getConfig(); $category = JRequest::getInt('category_id', 0); // Add breadcrumbs $this->setPathway(JText::_('COM_EASYDISCUSS_SEARCH')); DiscussHelper::setPageTitle(); // Set the meta of the page. DiscussHelper::setMeta(); $query = JRequest::getString('query', ''); $limitstart = null; $posts = null; $pagination = null; if (!empty($query)) { $searchModel = DiscussHelper::getModel('Search'); $posts = $searchModel->getData(true, 'latest', null, 'allposts', $category); $pagination = $searchModel->getPagination(0, 'latest', 'allposts', $category); $posts = DiscussHelper::formatPost($posts, true); $badgesTable = DiscussHelper::getTable('Profile'); if (count($posts) > 0) { $searchworda = preg_replace('#\\xE3\\x80\\x80#s', ' ', $query); $searchwords = preg_split("/\\s+/u", $searchworda); $needle = $searchwords[0]; $searchwords = array_unique($searchwords); for ($i = 0; $i < count($posts); $i++) { $row =& $posts[$i]; if (!$row->isProtected()) { if ($config->get('layout_editor') != 'bbcode') { $introtext = strip_tags($row->content); $introtext = preg_replace('/\\s+/', ' ', $introtext); } else { $introtext = preg_replace('/\\s+/', ' ', strip_tags(DiscussHelper::parseContent($row->content))); // clean it to 1 liner } $pos = strpos($introtext, $needle); if ($pos !== false) { $text = '...'; $startpos = $pos - 10 >= 0 ? $pos - 10 : 0; //$endpos = ( $pos - 10 ) >= 0 ? 10 : JString::strlen($needle) + 1; $endpos = $pos - 10 >= 0 ? 10 : $pos - $startpos; $front = JString::substr($introtext, $startpos, $endpos); if (JString::strlen($introtext) > $endpos) { $endpos = $pos + JString::strlen($needle); $end = JString::substr($introtext, $endpos, 10); if (JString::strlen($front) > 0) { $text = $text . $front; } $text = $text . $needle; if (JString::strlen($end) > 0) { $text = $text . $end . '...'; } } else { $text = $front; } $introtext = $text; } } else { //password protected content. $introtext = $row->content; // when come to here, the content is already contain the password input form ( via formatPost function.) } //$introtext = JString::substr($introtext, 0, $config->get( 'layout_introtextlength' )); $searchRegex = '#('; $x = 0; foreach ($searchwords as $k => $hlword) { $searchRegex .= $x == 0 ? '' : '|'; $searchRegex .= preg_quote($hlword, '#'); $x++; } $searchRegex .= '(?!(?>[^<]*(?:<(?!/?a\\b)[^<]*)*)</a>))#iu'; $row->title = preg_replace($searchRegex, '<span class="highlight">\\0</span>', $row->title); $row->introtext = $row->isProtected() ? $introtext : preg_replace($searchRegex, '<span class="highlight">\\0</span>', $introtext); //display password input form. if ($row->isProtected()) { $row->content = $row->content; // when come to here, the content is already contain the password input form ( via formatPost function.) } else { $row->content = preg_replace($searchRegex, '<span class="highlight">\\0</span>', $introtext); } $badgesTable->load($row->user->id); $row->badges = $badgesTable->getBadges(); } } } $tpl = new DiscussThemes(); $tpl->set('query', $query); $tpl->set('posts', $posts); $tpl->set('paginationType', DISCUSS_SEARCH_TYPE); $tpl->set('pagination', $pagination); $tpl->set('parent_id', $query); echo $tpl->fetch('search.php'); }