'latest-videos', 12 => 'most-comments', 13 => 'missing-screenshots'
);
private $page = '';
private $rss = false;
public function __construct($pageCall, $pageParam)
{
$this->getCategoryFromUrl($pageParam);
parent::__construct($pageCall, $pageParam);
$this->page = $pageCall;
$this->rss = isset($_GET['rss']);
$this->name = Lang::main('utilities', array_search($pageCall, $this->validPages));
if ($this->page == 'most-comments')
{
if ($this->category && in_array($this->category[0], [7, 30]))
$this->name .= Lang::main('colon') . sprintf(Lang::main('mostComments', 1), $this->category[0]);
else
$this->name .= Lang::main('colon') . Lang::main('mostComments', 0);
}
$this->lvTabs = [];
}
public function display($override = '')
{
if ($this->rss) // this should not be cached
{
header('Content-Type: application/rss+xml; charset=ISO-8859-1');
die($this->generateRSS());
}
else
return parent::display($override);
}
protected function generateContent()
{
/****************/
/* Main Content */
/****************/
if (in_array(array_search($this->page, $this->validPages), [0, 1, 2, 3, 11, 12]))
$this->h1Links = '';
switch ($this->page)
{
case 'random':
$type = array_rand(array_keys(array_filter(Util::$typeClasses)));
$typeId = (new Util::$typeClasses[$type](null))->getRandomId();
header('Location: ?'.Util::$typeStrings[$type].'='.$typeId, true, 302);
die();
case 'latest-comments':
$this->lvTabs[] = array(
'file' => 'commentpreview',
'data' => CommunityContent::getCommentPreviews(),
'params' => []
);
break;
case 'latest-screenshots':
$this->lvTabs[] = array(
'file' => 'screenshot',
'data' => CommunityContent::getScreenshots(),
'params' => []
);
break;
case 'latest-videos':
$this->lvTabs[] = array(
'file' => 'video',
'data' => [],
'params' => []
);
break;
case 'latest-articles':
$this->lvTabs = [];
break;
case 'latest-additions':
$extraText = '';
break;
case 'unrated-comments':
$this->lvTabs[] = array(
'file' => 'commentpreview',
'data' => [],
'params' => []
);
break;
case 'missing-screenshots':
// limit to 200 entries each (it generates faster, consumes less memory and should be enough options)
$cnd = [[['cuFlags', CUSTOM_HAS_SCREENSHOT, '&'], 0], 200];
if (!User::isInGroup(U_GROUP_EMPLOYEE))
$cnd[] = [['cuFlags', CUSTOM_EXCLUDE_FOR_LISTVIEW, '&'], 0];
foreach (Util::$typeClasses as $classStr)
{
if (!$classStr)
continue;
$typeObj = new $classStr($cnd);
if (!$typeObj->error)
{
$this->extendGlobalData($typeObj->getJSGlobals(GLOBALINFO_ANY));
$this->lvTabs[] = array(
'file' => $typeObj::$brickFile,
'data' => $typeObj->getListviewData(),
'params' => []
);
}
}
break;
case 'most-comments':
if ($this->category && !in_array($this->category[0], [1, 7, 30]))
header('Location: ?most-comments=1'.($this->rss ? '&rss' : null), true, 302);
$params = array(
'extraCols' => '$[Listview.funcBox.createSimpleCol(\'ncomments\', \'tab_comments\', \'10%\', \'ncomments\')]',
'sort' => '$[\'-ncomments\']'
);
foreach (Util::$typeClasses as $type => $classStr)
{
if (!$classStr)
continue;
$comments = DB::Aowow()->selectCol('
SELECT `typeId` AS ARRAY_KEY, count(1) AS nComments FROM ?_comments
WHERE `replyTo` = 0 AND (`flags` & ?d) = 0 AND `type`= ?d AND `date` > (UNIX_TIMESTAMP() - ?d)
GROUP BY `type`, `typeId`
LIMIT 100',
CC_FLAG_DELETED,
$type,
(isset($this->category[0]) ? $this->category[0] : 1) * DAY
);
if (!$comments)
continue;
$typeClass = new $classStr(array(['id', array_keys($comments)]));
if (!$typeClass->error)
{
$data = $typeClass->getListviewData();
foreach ($data as $typeId => &$d)
$d['ncomments'] = $comments[$typeId];
$this->extendGlobalData($typeClass->getJSGlobals(GLOBALINFO_ANY));
$this->lvTabs[] = array(
'file' => $typeClass::$brickFile,
'data' => $data,
'params' => $params,
'_type' => Util::$typeStrings[$type]
);
}
}
break;
}
// found nothing => set empty content
if (!$this->lvTabs)
{
$this->lvTabs[] = array(
'file' => 'commentpreview', // anything, doesn't matter what
'data' => [],
'params' => []
);
}
}
protected function generateRSS()
{
$this->generateContent();
$xml = "\n".
"\n\n".
"".CFG_NAME_SHORT.' - '.$this->name."\n".
"".HOST_URL.'?'.$this->page . ($this->category ? '='.$this->category[0] : null)."\n".
"".CFG_NAME."\n".
"".implode('-', str_split(User::$localeString, 2))."\n".
"".CFG_TTL_RSS."\n".
"".date(DATE_RSS)."\n";
if ($this->page == 'most-comments')
{
foreach ($this->lvTabs as $tab)
{
foreach ($tab['data'] as $row)
{
$xml .= "- \n".
"\n".
"".$tab['_type']."\n".
"".HOST_URL.'/?'.$tab['_type'].'='.$row['id']."\n".
"".$row['ncomments']."\n".
"
\n";
}
}
}
else
{
foreach ($this->lvTabs[0]['data'] as $row)
{
$xml .= "- \n".
"\n".
"".HOST_URL.'?go-to-comment&id='.$row['id']."\n".
"\n". // todo (low): preview should be html-formated
"".date(DATE_RSS, time() - $row['elapsed'])."\n".
"".HOST_URL.'?go-to-comment&id='.$row['id']."\n".
"\n".
"
\n";
}
}
$xml .= "\n";
return $xml;
}
protected function generateTitle()
{
if ($this->page == 'most-comments')
{
if ($this->category && in_array($this->category[0], [7, 30]))
array_unshift($this->title, sprintf(Lang::main('mostComments', 1), $this->category[0]));
else
array_unshift($this->title, Lang::main('mostComments', 0));
}
array_unshift($this->title, Lang::main('utilities', array_search($this->page, $this->validPages)));
}
protected function generatePath()
{
$this->path[] = array_search($this->page, $this->validPages);
if ($this->page == 'most-comments')
{
if ($this->category && in_array($this->category[0], [7, 30]))
$this->path[] = $this->category[0];
else
$this->path[] = 1;
}
}
}
?>