This repository has been archived on 2024-06-26. You can view files and clone it, but cannot push or open issues or pull requests.
sakura/app/Controllers/MetaController.php
2016-08-05 04:35:37 +02:00

115 lines
3.1 KiB
PHP

<?php
/**
* Holds the meta page controllers.
* @package Sakura
*/
namespace Sakura\Controllers;
use Sakura\Config;
use Sakura\DB;
use Sakura\News\Category;
use Sakura\Template;
use Sakura\User;
/**
* Meta page controllers (sections that aren't big enough to warrant a dedicated controller).
* @package Sakura
* @author Julian van de Groep <me@flash.moe>
*/
class MetaController extends Controller
{
/**
* Serves the site index.
* @return string
*/
public function index()
{
// Get the newest user
$newestUserId = DB::table('users')
->whereNotIn('rank_main', [config('rank.banned'), config('rank.inactive')])
->orderBy('user_id', 'desc')
->limit(1)
->get(['user_id']);
$newestUser = User::construct($newestUserId ? $newestUserId[0]->user_id : 0);
// Get all the currently online users
$timeRange = time() - 120;
// Create a storage variable
$onlineUsers = [];
// Get all online users
$getOnline = DB::table('users')
->where('user_last_online', '>', $timeRange)
->get(['user_id']);
$getOnline = array_column($getOnline, 'user_id');
foreach ($getOnline as $user) {
$user = User::construct($user);
// Do a second check
if (!$user->isOnline()) {
continue;
}
$onlineUsers[$user->id] = $user;
}
// Get news
$news = new Category(config('general.news'));
// Merge index specific stuff with the global render data
Template::vars([
'news' => $news->posts(3),
'stats' => [
'userCount' => DB::table('users')
->whereNotIn('rank_main', [config('rank.banned'), config('rank.inactive')])
->count(),
'newestUser' => $newestUser,
'lastRegDate' => date_diff(
date_create(date('Y-m-d', $newestUser->registered)),
date_create(date('Y-m-d'))
)->format('%a'),
'topicCount' => DB::table('topics')->where('forum_id', '!=', config('forum.trash'))->count(),
'postCount' => DB::table('posts')->where('forum_id', '!=', config('forum.trash'))->count(),
'onlineUsers' => $onlineUsers,
],
]);
// Return the compiled page
return Template::render('meta/index');
}
/**
* Displays the FAQ.
* @return string
*/
public function faq()
{
// Get faq entries
$faq = DB::table('faq')
->orderBy('faq_id')
->get();
// Set parse variables
Template::vars([
'page' => [
'title' => 'Frequently Asked Questions',
'questions' => $faq,
],
]);
// Print page contents
return Template::render('meta/faq');
}
/**
* Search page.
* @return string
*/
public function search()
{
return Template::render('meta/search');
}
}