function ajaxReadmoreReplies($limitstart = null, $sorting = null, $type = 'questions', $parentId = null, $filter = null, $category = null) { $ajax = new Disjax(); $model = $this->getModel('Posts'); $limitstart = (int) $limitstart; $mainframe = JFactory::getApplication(); $config = DiscussHelper::getConfig(); $posts = $model->getReplies($parentId, $sorting, $limitstart); $pagination = $model->getPagination($parentId, $sorting); $my = JFactory::getUser(); $posts = DiscussHelper::formatPost($posts); $parent = DiscussHelper::getTable('Post'); $parent->load($parentId); //check all the 'can' or 'canot' here. $acl = DiscussHelper::getHelper('ACL'); $isMainLocked = $parent->islock ? true : false; $canDelete = false; $canTag = false; $canReply = $acl->allowed('add_reply', '0'); if ($config->get('main_allowdelete', 2) == 2) { $canDelete = $isSiteAdmin ? true : false; } else { if ($config->get('main_allowdelete', 2) == 1) { $canDelete = $acl->allowed('delete_reply', '0'); } } $category = DiscussHelper::getTable('Category'); $category->load($category); $posts = DiscussHelper::formatReplies($posts, $category); $template = new DiscussThemes(); $template->set('replies', $posts); $template->set('config', $config); $template->set('canReply', $canReply); $template->set('canDelete', $canDelete); $template->set('isMainLocked', $isMainLocked); //$template->set( 'isMine' , false ); //$template->set( 'isAdmin' , false ); $template->set('isMine', DiscussHelper::isMine($parent->user_id)); $template->set('isAdmin', DiscussHelper::isSiteAdmin()); $html = $template->fetch('reply.item.php'); $nextLimit = $limitstart + DiscussHelper::getListLimit(); if ($nextLimit >= $pagination->total) { $ajax->remove('dc_pagination a'); } $ajax->value('pagination-start', $nextLimit); $ajax->script('EasyDiscuss.$("#dc_response").children().children( ":last").addClass( "separator" );'); $ajax->append('dc_response tbody', $html); $ajax->send(); }
private function getReplies($category, $post, $sort, $answer) { $config = DiscussHelper::getConfig(); $postsModel = DiscussHelper::getModel('Posts'); $my = JFactory::getUser(); // Get a list of replies for this discussion $replies = array(); $hasMoreReplies = false; $totalReplies = 0; $readMoreURI = ''; if ($category->canViewReplies()) { $repliesLimit = $config->get('layout_replies_list_limit'); $totalReplies = $postsModel->getTotalReplies($post->id); $hasMoreReplies = false; $limitstart = null; $limit = null; if ($repliesLimit && !JRequest::getBool('viewallreplies')) { $limit = $repliesLimit; $hasMoreReplies = $totalReplies - $repliesLimit > 0; } $replies = $postsModel->getReplies($post->id, $sort, $limitstart, $limit); if (count($replies) > 0) { $repliesIds = array(); $authorIds = array(); foreach ($replies as $reply) { $repliesIds[] = $reply->id; $authorIds[] = $reply->user_id; } if ($answer) { if (is_array($answer)) { $answer = $answer[0]; } $repliesIds[] = $answer->id; $authorIds[] = $answer->user_id; } $post->loadBatch($repliesIds); $post->setAttachmentsData('replies', $repliesIds); // here we include the discussion id into the array as well. $repliesIds[] = $post->id; $authorIds[] = $post->user_id; $post->setLikeAuthorsBatch($repliesIds); DiscussHelper::getHelper('Post')->setIsLikedBatch($repliesIds); $post->setPollQuestionsBatch($repliesIds); $post->setPollsBatch($repliesIds); $post->setLikedByBatch($repliesIds, $my->id); $post->setVoterBatch($repliesIds); $post->setHasVotedBatch($repliesIds); $post->setTotalCommentsBatch($repliesIds); $commentLimit = $config->get('main_comment_pagination') ? $config->get('main_comment_pagination_count') : null; $post->setCommentsBatch($repliesIds, $commentLimit); // Reduce SQL queries by pre-loading all author object. $authorIds = array_unique($authorIds); $profile = DiscussHelper::getTable('Profile'); $profile->init($authorIds); } $readMoreURI = JURI::getInstance()->toString(); $delimiteter = JString::strpos($readMoreURI, '&') ? '&' : '?'; $readMoreURI = $hasMoreReplies ? $readMoreURI . $delimiteter . 'viewallreplies=1' : $readMoreURI; // Format the reply items. $replies = DiscussHelper::formatReplies($replies, $category); } $data = new stdClass(); $data->replies = $replies; $data->total = $totalReplies; $data->more = $hasMoreReplies; $data->readmore = $readMoreURI; return $data; }
/** * Get replies based on pagination load more * * @since 3.0 * @access public * @param null * @author Jason Rey <*****@*****.**> */ public function getReplies() { $theme = new DiscussThemes(); $ajax = DiscussHelper::getHelper('Ajax'); $model = DiscussHelper::getModel('Posts'); $config = DiscussHelper::getConfig(); $id = JRequest::getInt('id', 0); $sort = JRequest::getString('sort', DiscussHelper::getDefaultRepliesSorting()); $start = JRequest::getInt('start', 0); $total = $model->getTotalReplies($id); if ($start >= $total) { return $ajax->reject(); } $replies = $model->getReplies($id, $sort, $start, $config->get('layout_replies_list_limit')); if (empty($replies)) { return $ajax->reject(); } $count = count($replies); $nextCycle = $start + $count < $total; // Load the category $post = DiscussHelper::getTable('Posts'); $post->load($id); $category = DiscussHelper::getTable('Category'); $category->load((int) $post->category_id); $replies = DiscussHelper::formatReplies($replies, $category); $html = ''; foreach ($replies as $reply) { $theme->set('category', $category); $theme->set('question', $post); $theme->set('post', $reply); $html .= '<li>' . $theme->fetch('post.reply.item.php') . '</li>'; } return $ajax->resolve($html, $nextCycle); }