modules\forums\inc\forums.sections.php

<?php
 
/**
 * @package Forums
 * @copyright (c) Cotonti Team
 * @license https://github.com/Cotonti/Cotonti/blob/master/License.txt
 */
 
defined('COT_CODE') or die('Wrong URL');
 
list($usr['auth_read'], $usr['auth_write'], $usr['isadmin']) = cot_auth('forums', 'any');
/* === Hook === */
foreach (cot_getextplugins('forums.sections.rights') as $pl)
{
	include $pl;
}
/* ===== */
cot_block($usr['auth_read']);
 
$s = cot_import('s','G','TXT');
$c = cot_import('c','G','TXT');
 
$sys['sublocation'] = $L['Home'];
 
/* === Hook === */
foreach (cot_getextplugins('forums.sections.first') as $pl)
{
	include $pl;
}
/* ===== */
 
if ($n == 'markall' && $usr['id'] > 0)
{
	$db->update($db_users, array('user_lastvisit' => $sys['now']), "user_id=".$usr['id']);
	$usr['lastvisit'] = $sys['now'];
}
 
if (!$cot_sections_act)
{
	$timeback = $sys['now'] - 604800; // 7 days
	$sqltmp = $db->query("SELECT fp_cat, COUNT(*) FROM $db_forum_posts WHERE fp_creation > $timeback GROUP BY fp_cat");
	while ($tmprow = $sqltmp->fetch())
	{
		$cot_sections_act[$tmprow['fp_cat']] = $tmprow['COUNT(*)'];
	}
	$sqltmp->closeCursor();
	$cache && $cache->db->store('cot_sections_act', $cot_sections_act, 'system', 7200);
}
 
$sql_forums = $db->query("SELECT * FROM $db_forum_stats ORDER by fs_cat DESC");
foreach ($sql_forums->fetchAll() as $row)
{
	if (!$row['fs_lt_id'] && count(explode('.', $structure['forums'][$row['fs_cat']]['rpath'])) > 1 && $structure['forums'][$row['fs_cat']]['count'] > 0)
	{
		cot_forums_sectionsetlast($row['fs_cat']);
	}
	$cat_top[$row['fs_cat']] = $row;
	$cat_top[$row['fs_cat']]['topiccount'] = $cat_top[$row['fs_cat']]['fs_topiccount'];
	$cat_top[$row['fs_cat']]['postcount'] = $cat_top[$row['fs_cat']]['fs_postcount'];
    $cat_top[$row['fs_cat']]['viewcount'] = $cat_top[$row['fs_cat']]['fs_viewcount'];
}
 
$fstlvl = array();
$nxtlvl = array();
$cot_act = array();
foreach ($structure['forums'] as $i => $x)
{
	$parents = explode('.', $x['path']);
	$depth = count($parents);
	if (cot_auth('forums', $i, 'R'))
	{
		if ($depth < 2)
		{
			$fstlvl[$i] = $i;
		}
		elseif($depth < 4)
		{
			$nxtlvl[$parents[$depth-2]][$i] = $i;
		}
		$depmax = ($depth < 4) ? ($depth - 1) : 3;
		for ($ii = 0; $ii < $depmax; $ii++)
		{
			if($cat_top[$i]['fs_lt_date'] > $cat_top[$parents[$ii]]['fs_lt_date'] || !isset($cat_top[$parents[$ii]]['fs_lt_date']))
			{
				$cat_top[$parents[$ii]]['fs_lt_id'] = $cat_top[$i]['fs_lt_id'];
				$cat_top[$parents[$ii]]['fs_lt_title'] = $cat_top[$i]['fs_lt_title'];
				$cat_top[$parents[$ii]]['fs_lt_date'] = $cat_top[$i]['fs_lt_date'];
				$cat_top[$parents[$ii]]['fs_lt_posterid'] = $cat_top[$i]['fs_lt_posterid'];
				$cat_top[$parents[$ii]]['fs_lt_postername'] = $cat_top[$i]['fs_lt_postername'];
			}
			$cat_top[$parents[$ii]]['topiccount'] += $cat_top[$i]['fs_topiccount'];
			$cat_top[$parents[$ii]]['postcount'] += $cat_top[$i]['fs_postcount'];
			$cat_top[$parents[$ii]]['viewcount'] += $cat_top[$i]['fs_viewcount'];
		}
		$cot_act[$parents[0]] += $cot_sections_act[$i];
	}
}
 
$secact_max = count($cot_act) > 0 ? (max($cot_act)) : 0;
 
$out['subtitle'] = $L['Forums'];
 
/* === Hook === */
foreach (cot_getextplugins('forums.sections.main') as $pl)
{
	include $pl;
}
/* ===== */
 
require_once $cfg['system_dir'] . '/header.php';
 
$t = new XTemplate(cot_tplfile('forums.sections'));
 
$url_markall = cot_url('forums', "n=markall");
$title[] = array(cot_url('forums'), $L['Forums']);
$t->assign(array(
	'FORUMS_RSS' => cot_url('rss', 'm=forums'),
	'FORUMS_SECTIONS_PAGETITLE' => cot_breadcrumbs($title, $cfg['homebreadcrumb']),
	'FORUMS_SECTIONS_MARKALL' =>  ($usr['id'] > 0) ? cot_rc_link($url_markall, $L['forums_markallasread']) : '',
	'FORUMS_SECTIONS_MARKALL_URL' => ($usr['id'] > 0) ? $url_markall : ''
));
 
 
$xx = 0;
/* === Hook - Part1 : Set === */
$extp = cot_getextplugins('forums.sections.loop');
/* ===== */
/* === Hook - Part1 : Set === */
$extps = cot_getextplugins('forums.sections.loop.sections');
/* ===== */
/* === Hook - Part1 : Set === */
$extpss = cot_getextplugins('forums.sections.loop.subsections');
/* ===== */
foreach ($fstlvl as $x)
{
	if (is_array($nxtlvl[$x]))
	{
		$yy = 0;
		foreach ($nxtlvl[$x] as $y)
		{
			if (is_array($nxtlvl[$y]) && $cfg['forums']['cat_' . $y]['defstate'])
			{
				$zz = 0;
				foreach ($nxtlvl[$y] as $z)
				{
					$zz++;
					$t->assign(cot_generate_sectiontags($z, 'FORUMS_SECTIONS_ROW_', $cat_top[$z]));
					$t->assign(array(
						'FORUMS_SECTIONS_ROW_ODDEVEN' => cot_build_oddeven($zz),
						'FORUMS_SECTIONS_ROW_NUM' => $zz,
					));
					/* === Hook - Part2 : Include === */
					foreach ($extpss as $pl)
					{
						include $pl;
					}
					/* ===== */
					$t->parse('MAIN.FORUMS_SECTIONS.CAT.SECTION.SUBSECTION');
				}
			}
			$yy++;
			$t->assign(cot_generate_sectiontags($y, 'FORUMS_SECTIONS_ROW_', $cat_top[$y]));
			$cot_sections_vw_cur = (!$cot_sections_vw[$structure['forums'][$y]['title']]) ? "0" : $cot_sections_vw[$structure['forums'][$y]['title']];
 
			$secact_num = 0;
			if ($secact_max)
			{
				$secact_num = round(6.25 * $cot_sections_act[$y] / $secact_max);
				$secact_num = ($secact_num>5) ? 5 : $secact_num;
				$secact_num =  (!$secact_num && $cot_sections_act[$y]>1) ? 1 : $secact_num;
 
			}
			$t->assign(array(
				'FORUMS_SECTIONS_ROW_SUBITEMS' => (is_array($nxtlvl[$y]) && $cfg['forums']['cat_' . $y]['defstate']) ? 1 : 0,
				'FORUMS_SECTIONS_ROW_ACTIVITY' => cot_rc('forums_icon_section_activity', array('secact_num'=>$secact_num)),
				'FORUMS_SECTIONS_ROW_ACTIVITYVALUE' => $secact_num,
				'FORUMS_SECTIONS_ROW_VIEWERS' => $cot_sections_vw_cur,
				'FORUMS_SECTIONS_ROW_ODDEVEN' => cot_build_oddeven($yy),
				'FORUMS_SECTIONS_ROW_NUM' => $yy,
			));
			/* === Hook - Part2 : Include === */
			foreach ($extps as $pl)
			{
				include $pl;
			}
			/* ===== */
			$t->parse('MAIN.FORUMS_SECTIONS.CAT.SECTION');
		}
	}
	$xx++;
 
	$fold = !$cfg['forums']['cat_' . $x]['defstate'];
	if($c)
	{
		$fold = (int)($c=='fold' ? true : ($c=='unfold' ? false : ($c==$x ? false : true)));
	}
 
	$t->assign(cot_generate_sectiontags($x, 'FORUMS_SECTIONS_ROW_', $cat_top[$x]));
	$t->assign(array(
		'FORUMS_SECTIONS_ROW_FOLD' => $fold,
		'FORUMS_SECTIONS_ROW_SUBITEMS' => (is_array($nxtlvl[$x])) ? 1 : 0,
		'FORUMS_SECTIONS_ROW_ODDEVEN' => cot_build_oddeven($xx),
		'FORUMS_SECTIONS_ROW_NUM' => $xx,
	));
	/* === Hook - Part2 : Include === */
	foreach ($extp as $pl)
	{
		include $pl;
	}
	/* ===== */
	$t->parse('MAIN.FORUMS_SECTIONS.CAT');
}
$t->parse('MAIN.FORUMS_SECTIONS');
 
/* === Hook === */
foreach (cot_getextplugins('forums.sections.tags') as $pl)
{
	include $pl;
}
/* ===== */
 
$t->parse('MAIN');
$t->out('MAIN');
 
require_once $cfg['system_dir'] . '/footer.php';
 
if ($cache && $usr['id'] === 0 && $cfg['cache_forums'])
{
	$cache->page->write();
}