<?php
//=================================================================
// KOOBI R7 - CMS - PORTALSOFTWARE(c) DREAM4(r) 
// HTTP://WWW.DREAM4.DE
//=================================================================
// ACHTUNG!
// DIESER PROGRAMMCODE IST URHERRECHTLICH GESCHUETZT
// DIE URHEBERRECHTE LIEGEN BEI DEN JEWEILIGEN AUTOREN.
// AENDERUNGEN IN DIESER DATEI ERFOLGEN AUF EIGENE GEFAHR!
// ES IST NICHT GESTATTET, DEN COPYRIGHTHINWEIS ZU AENDERN ODER ZU
// ENTFERNEN. NUR WENN SIE EINE COPYRIGHTHINWEIS-ENTFERNUNG BESTELLT
// HABEN, DUERFEN SIE DIESEN ENTFERNEN.
//================================================================
// BEI FRAGEN WENDEN SIE SICH BITTE AN: KONTAKT@DREAM4.DE
//=================================================================
if(!defined('BASE_DIR')) exit;
if(!get_active('forums'))
{
	notActive();
}
define("MISCIDSINC", 1);

$sname = $GLOBALS['config_vars']['Forums_Name'];
$browser_title = '';
$show_only_own_topics = '';
$q_tcount_extra = '';

//================================================================
// parent_id = 0 bedeutet, dass es keine uebergeordnete foren gibt 
// dem die kategorie angehoert
//================================================================
if (!isset($_REQUEST['cid']) || $_REQUEST['cid'] == "" )
{
	$navigation = getNavigation(0, "category", null);
	$cat_query = "SELECT id, title, position, comment, parent_id, group_id FROM " . PREFIX . "_f_category WHERE parent_id = 0 ORDER BY position";
} else {
	$navigation = getNavigation($_REQUEST['cid'], "category", null);
	$cat_query = "SELECT id, title, position, comment, parent_id, group_id FROM " . PREFIX . "_f_category WHERE id = '" . $_REQUEST['cid'] . "'";	
}
$categories = $GLOBALS['db']->Query($cat_query); 

//================================================================
// enthaelt zur jeder kategorie ein array der dazugehoerigen foren
//================================================================
$forums_array = array();
$category_array = array();

//================================================================
// alle kategorien durchgehen
//================================================================
while ($category = $categories->fetchrow_assoc())
{
	$group_ids = miscIds();
	$groups = @explode(",", $category['group_id']);
	
	if (array_intersect($group_ids, $groups))
	{
		//================================================================
		// wenn eine spezielle kategorie angezeigt wird
		// soll der navigationspfad um diese erweitert werden
		//================================================================
		if (!isset($_REQUEST['cid']) || $_REQUEST['cid'] != "") $navigation .= $GLOBALS['config_vars']['Forums_Splitter'] . $category["title"];
		
		//================================================================
		// den status der anzeige aus dem cookie holen
		//================================================================
		$position = (isset($_COOKIE["categories"]) && !empty($_COOKIE["categories"])) ? strpos($_COOKIE["categories"], "id" . $category["id"]) : '';
		if ( is_numeric($position) )
		{
			$category["display"] = "none";
			$category["image"] = "plus.png";
		}
		
		$category["link"] = "index.php?p=showforums&amp;cid=" . $category["id"];
		$category["newforumlink"] = "index.php?p=newforum&amp;cid=" . $category["id"];
		$category["moveuplink"] = "index.php?p=movecat&amp;param=up&amp;cid=" . $category["id"] . "&amp;pid=0";
		$category["movedownlink"] = "index.php?p=movecat&amp;param=down&amp;cid=" . $category["id"] . "&amp;pid=0";
		$category["movelink"] = "index.php?p=move&amp;item=c&amp;id=" . $category["id"];
		$category["delcategorylink"] = "index.php?p=delcategory&amp;cid=" . $category["id"] . "&amp;pid=0";
		
		array_push($category_array, $category);
		
		//================================================================
		// alle foren der jeweiligen kategorie
		//================================================================
		$foren = $GLOBALS['db']->Query("
		SELECT 
			f.id, 
			f.title, 
			f.comment, 
			f.status,
			f.position
		FROM 
			" . PREFIX . "_f_forum AS f
		WHERE 
			f.category_id = '" . $category["id"] . "' AND
			f.active = 1
		ORDER BY
			f.position
		");
		
		//================================================================
		// alle foren zur kategorie holen
		//================================================================
		$forums_array[$category['title']] = array();
		
		while ($forum = $foren->fetchrow_assoc())
		{
			//================================================================
			// rechte fuer das forum
			//================================================================
			$permissions = getForumPermissionsByUser($forum['id'], UID);

			if (isset($permissions[FORUM_PERMISSION_CAN_SEE]) && $permissions[FORUM_PERMISSION_CAN_SEE] == 1)
			{
				//================================================================
				// Anzahl der Themen und Beitraege ermitteln
				//================================================================
				$pcount = 0;
				// kann die topics anderer sehen?
				$show_only_own_topics = '';
				if (!@$permissions[FORUM_PERMISSION_CAN_SEE_TOPIC] || @$permissions[FORUM_PERMISSION_CAN_SEE_TOPIC] == 0)
				{
					$show_only_own_topics = " AND uid = " . UID;
				}
				
				//================================================================
				// wenn user nicht mod dieses forum ist und kein admin ist, 
				// nicht freigeschaltete themen verbergen
				//================================================================
				if(!is_mod($forum['id']))
				{ 
					$q_tcount_extra .= " AND opened = 1 ";
				}
                
				$r_tcount = $GLOBALS['db']->Query("SELECT  id FROM    ".PREFIX."_f_topic WHERE   forum_id = " . $forum["id"] . " $q_tcount_extra $show_only_own_topics");
				$forum["tcount"]= $r_tcount->numrows();
				
				$ids        = '';
				$Topic_IDs  = array();
                
				while ($tid = $r_tcount->fetchrow())
				{
                    $Topic_IDs[] = $tid->id;
					if ($ids == "")
					{
						$ids .= $tid->id;
					} else {
						$ids .= " OR topic_id = " . $tid->id;
					} 
				}
				
                $SQL_IN_TopicIds = ' IN('.implode(',', $Topic_IDs).') ';
				$last_post = "";
	
				if (!empty($ids))
				{
					$r_pcount = $GLOBALS['db']->Query("SELECT  COUNT(*) AS PostCount FROM    ".PREFIX."_f_post  WHERE   topic_id $SQL_IN_TopicIds");
                    $pcount   = $r_pcount->fetchrow();
                    $pcount   = $pcount->PostCount;
					
					//================================================================
					// letzter beitrag
                    //================================================================
                    $r_last_post = $GLOBALS['db']->Query("
                    SELECT DISTINCT
                        Post.id,
                        Post.uid,
                        Post.topic_id,
                        Post.datum,
                        Topic.title,
                        Usr.Regdatum as user_regdate,
						Usr.Geloescht 
                    
                    FROM    ".PREFIX."_f_forum AS Forum 
                    
                        INNER JOIN ".PREFIX."_f_post AS Post
                            ON  Forum.last_post_id = Post.id
                            AND Forum.id = ".$forum['id']."

                        INNER JOIN ".PREFIX."_f_topic AS Topic
                            ON  Post.topic_id = Topic.id
                    
                        INNER JOIN ".PREFIX."_benutzer AS Usr
                            ON  Usr.Id = Post.uid
                    
                    LIMIT 0, 1");
					$last_post = $r_last_post->fetchrow();
					
					if(is_object($last_post))
					{
						$topic = $GLOBALS['db']->RowQuery("SELECT  COUNT(id) AS replies FROM    " . PREFIX . "_f_post WHERE   topic_id = '" . $last_post->topic_id . "'");
						$last_post->page = getPageNum($topic->replies, 15);
						$forum['last_post'] = $last_post;
					}
				}
				
				$forum['pcount'] = $pcount;
				
				//================================================================
				// Anzahl der Themen und Beitraege ermitteln
				//================================================================
				$forum["comment"] = oform($forum["comment"]);
				$forum["link"] = "index.php?p=showforum&amp;fid=" . $forum["id"];
				
				//================================================================
				// Forumicon 
				//================================================================
				
				if (ISLOGGED == 0)
				{
					$forum['statusicon'] = getIcon('forum_old_lock.png', 'forum');
				} else {
					setForumIcon($forum);
				}
				
				//================================================================
				// alle unterkategorien
				//================================================================
				$subcategories = $GLOBALS['db']->Query("SELECT id FROM " . PREFIX . "_f_category WHERE parent_id = '$forum[id]'");
				
				// array fuer die subforen
				$subforums_array = array();
				
				// alle unterkategorien durchgehen
				// alle foren zu der unterkategorie
				while ($subcategory = $subcategories->fetchrow())
				{
					// FIND_IN_SET('" . UGROUP . "', group_id) AS group_found,
					$subforums_result = $GLOBALS['db']->Query("
					SELECT 
					  group_id,
					  id, 
					  title 
					FROM 
					  " . PREFIX . "_f_forum 
					WHERE 
					  category_id = '" . $subcategory->id . "' AND 
					active = 1");
					
					// alle foren in das subforum array schieben
					while ($subforum = $subforums_result->fetchrow_assoc())
					{
						if (@$subforum['group_found'] != "no")
						{	
							$subforum['link'] = "index.php?p=showforum&amp;fid=" . $subforum["id"];
							array_push($subforums_array, $subforum);
						}
					}
				}
				$forum["subforums"] = $subforums_array;
				array_push($forums_array[$category["title"]], $forum);
				}
			} // while forums
		} // if in_array(group, groups)
	}
	
	$stitle = $GLOBALS["config_vars"]["Forums_Title"];
	$sname = str_replace($GLOBALS['config_vars']['Forums_Splitter'], " - ", strip_tags($navigation));
	
	$GLOBALS['tmpl']->register_function('get_status_icon', 'getStatusIcon');
	$GLOBALS['tmpl']->assign('uid', UID);
	$GLOBALS['tmpl']->assign('navigation', $navigation);
	$GLOBALS['tmpl']->assign('f_id', 0);
	$GLOBALS['tmpl']->assign('newcatlink', @$newcatlink);
	$GLOBALS['tmpl']->assign('allowed', @$allowed);
	$GLOBALS['tmpl']->assign('categories', $category_array);
	$GLOBALS['tmpl']->assign('forums', $forums_array);
	$GLOBALS['tmpl']->assign('SearchPop', popSearch());
	$GLOBALS['tmpl']->assign('pagetitle_html',$sname);
	$GLOBALS['tmpl']->assign('content', $GLOBALS['tmpl']->fetch($GLOBALS['config']['source'] . '/forums/showforums.tpl')); 
?>