Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

350 lines (305 sloc) 12.655 kB
<?php
/**
* @version $Id$
* Kunena Component
* @package Kunena
*
* @Copyright (C) 2008 - 2011 Kunena Team. All rights reserved.
* @license http://www.gnu.org/copyleft/gpl.html GNU/GPL
* @link http://www.kunena.org
*
**/
defined ( '_JEXEC' ) or die ();
class CKunenaListcat {
public $allow = 0;
private $_loaded = false;
function __construct($catid) {
kimport('html.parser');
$this->catid = $catid;
$this->db = JFactory::getDBO ();
$this->my = JFactory::getUser ();
$this->session = KunenaFactory::getSession ();
$this->config = KunenaFactory::getConfig ();
if ($this->catid && ! $this->session->canRead ( $this->catid ))
return;
$this->allow = 1;
$this->prevCheck = $this->session->lasttime;
$kunena_app = JFactory::getApplication ();
// Start getting the categories
if ($this->catid) {
$catlist = $this->catid;
$where = "";
} else {
$catlist = $this->session->allowed;
$where = "parent='0' AND";
}
$this->categories = array ();
$this->db->setQuery ( "SELECT * FROM #__kunena_categories WHERE {$where} published='1' AND id IN ({$catlist}) ORDER BY ordering, name" );
$this->categories [0] = $this->db->loadObjectList ();
if (KunenaError::checkDatabaseError()) return;
//meta description and keywords
$metaDesc = (JText::_('COM_KUNENA_CATEGORIES') . ' - ' . $this->config->board_title );
$metaKeys = (JText::_('COM_KUNENA_CATEGORIES') . ', ' . $this->config->board_title . ', ' . $kunena_app->getCfg ( 'sitename' ));
$document = JFactory::getDocument ();
$cur = $document->get ( 'description' );
$metaDesc = $cur . '. ' . $metaDesc;
$document = JFactory::getDocument ();
$document->setMetadata ( 'keywords', $metaKeys );
$document->setDescription ( $metaDesc );
$template = KunenaFactory::getTemplate();
$this->params = $template->params;
}
/**
* Escapes a value for output in a view script.
*
* If escaping mechanism is one of htmlspecialchars or htmlentities, uses
* {@link $_encoding} setting.
*
* @param mixed $var The output to escape.
* @return mixed The escaped value.
*/
function escape($var)
{
return htmlspecialchars($var, ENT_COMPAT, 'UTF-8');
}
function loadCategories() {
if ($this->_loaded) return;
$this->_loaded = true;
$catids = array ();
foreach ( $this->categories [0] as $cat )
$catids [] = $cat->id;
if (empty ( $catids ))
return;
$catlist = implode ( ',', $catids );
$readlist = $this->session->readtopics;
if ($this->config->shownew && $this->my->id) $subquery = " (SELECT COUNT(DISTINCT thread) FROM #__kunena_messages AS mmm WHERE c.id=mmm.catid AND mmm.hold='0' AND mmm.time>{$this->db->Quote($this->prevCheck)} AND mmm.thread NOT IN ({$readlist})) AS new";
else $subquery = " 0 AS new";
// TODO: optimize this query (just combined many queries into one)
$query = "SELECT c.*, m.id AS mesid, m.thread, m.catid, t.subject AS topicsubject, m.subject, m.name AS mname, u.id AS userid, u.username, u.name AS uname,
(SELECT COUNT(*) FROM #__kunena_messages AS mm WHERE m.thread=mm.thread) AS msgcount, {$subquery}
FROM #__kunena_categories AS c
LEFT JOIN #__kunena_messages AS m ON c.id_last_msg=m.id
LEFT JOIN #__kunena_messages AS t ON m.thread=t.id
LEFT JOIN #__users AS u ON u.id=m.userid
WHERE c.parent IN ({$catlist}) AND c.published='1' AND c.id IN({$this->session->allowed}) ORDER BY ordering, name";
$this->db->setQuery ( $query );
$allsubcats = $this->db->loadObjectList ();
if (KunenaError::checkDatabaseError()) return;
$this->tabclass = array ("row1", "row2" );
$subcats = array ();
$routerlist = array ();
$userlist = array();
$myprofile = KunenaFactory::getUser ();
if ($myprofile->ordering != '0') {
$topic_ordering = $myprofile->ordering == '1' ? true : false;
} else {
$topic_ordering = $this->config->default_sort == 'asc' ? false : true;
}
foreach ( $allsubcats as $i => $subcat ) {
if ($subcat->mesid)
$routerlist [$subcat->thread] = $subcat->topicsubject;
if($topic_ordering) $subcat->page = 1;
else $subcat->page = ceil ( $subcat->msgcount / $this->config->messages_per_page );
if ($this->config->shownew && $this->my->id != 0) {
if ($subcat->new) {
// Check Unread Cat Images
if (is_file ( KUNENA_ABSCATIMAGESPATH . $subcat->id . "_on.gif" )) {
$allsubcats [$i]->htmlCategoryIcon = "<img src=\"" . KUNENA_URLCATIMAGES . $subcat->id . "_on.gif\" border=\"0\" class='kforum-cat-image' alt=\" \" />";
} else {
$allsubcats [$i]->htmlCategoryIcon = CKunenaTools::showIcon ( 'kunreadforum', JText::_('COM_KUNENA_GEN_FORUM_NEWPOST') );
}
} else {
// Check Read Cat Images
if (is_file ( KUNENA_ABSCATIMAGESPATH . $subcat->id . "_off.gif" )) {
$allsubcats [$i]->htmlCategoryIcon = "<img src=\"" . KUNENA_URLCATIMAGES . $subcat->id . "_off.gif\" border=\"0\" class='kforum-cat-image' alt=\" \" />";
} else {
$allsubcats [$i]->htmlCategoryIcon = CKunenaTools::showIcon ( 'kreadforum', JText::_('COM_KUNENA_GEN_FORUM_NOTNEW') );
}
}
} else {
if (is_file ( KUNENA_ABSCATIMAGESPATH . $subcat->id . "_notlogin.gif" )) {
$allsubcats [$i]->htmlCategoryIcon = "<img src=\"" . KUNENA_URLCATIMAGES . $subcat->id . "_notlogin.gif\" border=\"0\" class='kforum-cat-image' alt=\" \" />";
} else {
$allsubcats [$i]->htmlCategoryIcon = CKunenaTools::showIcon ( 'knotloginforum', JText::_('COM_KUNENA_GEN_FORUM_NOTNEW') );
}
}
// collect user ids for avatar prefetch when integrated
$userlist[intval($subcat->userid)] = intval($subcat->userid);
}
require_once (KUNENA_PATH . '/router.php');
KunenaRouter::loadMessages ( $routerlist );
$modcats = array ();
foreach ( $allsubcats as $subcat ) {
$this->categories [$subcat->parent] [] = $subcat;
$subcats [] = $subcat->id;
if ($subcat->moderated)
$modcats [] = $subcat->id;
}
// Get the childforums
$this->childforums = array ();
if (count ( $subcats )) {
$subcatlist = implode ( ',', $subcats );
if ($this->config->shownew && $this->my->id) $subquery = " (SELECT COUNT(DISTINCT thread) FROM #__kunena_messages AS m WHERE c.id=m.catid AND m.hold='0' AND m.time>{$this->db->Quote($this->prevCheck)} AND m.thread NOT IN ({$readlist})) AS new";
else $subquery = "0 AS new";
$query = "SELECT c.id, c.name, c.description, c.parent, c.numTopics, c.numPosts, {$subquery}
FROM #__kunena_categories AS c
WHERE c.parent IN ({$subcatlist}) AND c.published='1' AND c.id IN({$this->session->allowed}) ORDER BY c.ordering, c.name";
$this->db->setQuery ($query);
$childforums = $this->db->loadObjectList ();
KunenaError::checkDatabaseError();
foreach ( $childforums as $i => $childforum ) {
//Begin: parent read unread iconset
if ($this->config->showchildcaticon) {
if ($this->config->shownew && $this->my->id != 0) {
if ($childforum->new) {
// Check Unread Cat Images
if (is_file ( KUNENA_ABSCATIMAGESPATH . $childforum->id . "_on_childsmall.gif" )) {
$childforum->htmlCategoryIcon = "<img src=\"" . KUNENA_URLCATIMAGES . $childforum->id . "_on_childsmall.gif\" border=\"0\" class='kforum-cat-image' alt=\" \" />";
} else {
$childforum->htmlCategoryIcon = CKunenaTools::showIcon ( 'kunreadforum-sm', JText::_ ( 'COM_KUNENA_GEN_FORUM_NEWPOST' ) );
}
} else {
// Check Read Cat Images
if (is_file ( KUNENA_ABSCATIMAGESPATH . $childforum->id . "_off_childsmall.gif" )) {
$childforum->htmlCategoryIcon = "<img src=\"" . KUNENA_URLCATIMAGES . $childforum->id . "_off_childsmall.gif\" border=\"0\" class='kforum-cat-image' alt=\" \" />";
} else {
$childforum->htmlCategoryIcon = CKunenaTools::showIcon ( 'kreadforum-sm', JText::_ ( 'COM_KUNENA_GEN_FORUM_NOTNEW' ) );
}
}
} else {
// Not Login Cat Images
if (is_file ( KUNENA_ABSCATIMAGESPATH . $childforum->id . "_notlogin_childsmall.gif" )) {
$childforum->htmlCategoryIcon = "<img src=\"" . KUNENA_URLCATIMAGES . $childforum->id . "_notlogin_childsmall.gif\" border=\"0\" class='kforum-cat-image' alt=\" \" />";
} else {
$childforum->htmlCategoryIcon = CKunenaTools::showIcon ( 'knotloginforum-sm', JText::_ ( 'COM_KUNENA_GEN_FORUM_NOTNEW' ) );
}
}
} else {
$childforum->htmlCategoryIcon = '';
}
$this->childforums [$childforum->parent] [] = $childforum;
}
}
$this->modlist = array ();
$this->pending = array ();
if (count ( $modcats )) {
if ($this->config->listcat_show_moderators) {
$modcatlist = implode ( ',', $modcats );
$this->db->setQuery ( "SELECT * FROM #__kunena_moderation AS m
INNER JOIN #__users AS u ON u.id=m.userid
WHERE m.catid IN ({$modcatlist}) AND u.block=0" );
$modlist = $this->db->loadObjectList ();
KunenaError::checkDatabaseError();
foreach ( $modlist as $mod ) {
$this->modlist [$mod->catid] [] = $mod;
$userlist[intval($mod->userid)] = intval($mod->userid);
}
}
if (CKunenaTools::isModerator ( $this->my->id )) {
foreach ( $modcats as $i => $catid ) {
if (! CKunenaTools::isModerator ( $this->my->id, $catid ))
unset ( $modcats [$i] );
}
if (count ( $modcats )) {
$modcatlist = implode ( ',', $modcats );
$this->db->setQuery ( "SELECT catid, COUNT(*) AS count
FROM #__kunena_messages
WHERE catid IN ($modcatlist) AND hold='1'
GROUP BY catid" );
$pending = $this->db->loadAssocList ();
KunenaError::checkDatabaseError();
foreach ( $pending as $i ) {
if ($i ['count'])
$this->pending [$i ['catid']] = $i ['count'];
}
}
}
}
// Prefetch all users/avatars to avoid user by user queries during template iterations
kimport('user');
KunenaUser::loadUsers($userlist);
}
function displayPathway() {
CKunenaTools::loadTemplate('/pathway.php');
}
function displayAnnouncement() {
if ($this->config->showannouncement > 0) {
require_once(KUNENA_PATH_LIB . '/kunena.announcement.class.php');
$ann = new CKunenaAnnouncement();
$ann->getAnnouncement();
$ann->displayBox();
}
}
function displayForumJump() {
if ($this->config->enableforumjump) {
CKunenaTools::loadTemplate('/forumjump.php');
}
}
function displayCategories() {
$this->loadCategories();
CKunenaTools::loadTemplate('/categories/categories.php');
}
function displayStats() {
if ($this->config->showstats > 0) {
require_once(KUNENA_PATH_LIB . '/kunena.stats.class.php');
$kunena_stats = CKunenaStats::getInstance ( );
$kunena_stats->showFrontStats ();
}
}
function displayWhoIsOnline() {
if ($this->config->showwhoisonline > 0) {
require_once (KUNENA_PATH_LIB . '/kunena.who.class.php');
$online =& CKunenaWhoIsOnline::getInstance();
$online->displayWhoIsOnline();
}
}
function getPagination($catid, $page, $totalpages, $maxpages) {
$startpage = ($page - floor ( $maxpages / 2 ) < 1) ? 1 : $page - floor ( $maxpages / 2 );
$endpage = $startpage + $maxpages;
if ($endpage > $totalpages) {
$startpage = ($totalpages - $maxpages) < 1 ? 1 : $totalpages - $maxpages;
$endpage = $totalpages;
}
$output = '<ul class="kpagination">';
$output .= '<li class="page">' . JText::_('COM_KUNENA_PAGE') . '</li>';
if (($startpage) > 1) {
if ($endpage < $totalpages)
$endpage --;
$output .= '<li>' . CKunenaLink::GetCategoryPageLink ( 'showcat', $catid, 1, 1, $rel = 'follow' ) . '</li>';
if (($startpage) > 2) {
$output .= '<li class="more">...</li>';
}
}
for($i = $startpage; $i <= $endpage && $i <= $totalpages; $i ++) {
if ($page == $i) {
$output .= '<li class="active">' . $i . '</li>';
} else {
$output .= '<li>' . CKunenaLink::GetCategoryPageLink ( 'showcat', $catid, $i, $i, $rel = 'follow' ) . '</li>';
}
}
if ($endpage < $totalpages) {
if ($endpage < $totalpages - 1) {
$output .= '<li class="more">...</li>';
}
$output .= '<li>' . CKunenaLink::GetCategoryPageLink ( 'showcat', $catid, $totalpages, $totalpages, $rel = 'follow' ) . '</li>';
}
$output .= '</ul>';
return $output;
}
function displayInfoMessage($header, $contents) {
$header = JText::_('COM_KUNENA_FORUM_INFORMATION');
$contents = JText::_('COM_KUNENA_LISTCAT_NO_CATS');
CKunenaTools::loadTemplate('/categories/infomessage.php');
}
function display() {
if (! $this->allow) {
echo JText::_('COM_KUNENA_NO_ACCESS');
return;
}
if (empty ( $this->categories [0] )) {
echo '' . JText::_('COM_KUNENA_GEN_NOFORUMS') . '';
return;
}
CKunenaTools::loadTemplate('/categories/listcat.php');
}
}
Jump to Line
Something went wrong with that request. Please try again.