110 lines
3 KiB
PHP
110 lines
3 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(): string
|
|
{
|
|
// Get the newest user
|
|
$newestUserId = DB::table('users')
|
|
->where('rank_main', '!=', config('rank.banned'))
|
|
->where('user_activated', 1)
|
|
->where('user_restricted', 0)
|
|
->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')
|
|
->where('rank_main', '!=', config('rank.banned'))
|
|
->where('user_activated', 1)
|
|
->where('user_restricted', 0)
|
|
->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(): string
|
|
{
|
|
// Get faq entries
|
|
$questions = DB::table('faq')
|
|
->orderBy('faq_id')
|
|
->get();
|
|
|
|
return view('meta/faq', compact('questions'));
|
|
}
|
|
|
|
/**
|
|
* Search page.
|
|
* @return string
|
|
*/
|
|
public function search(): string
|
|
{
|
|
return view('meta/search');
|
|
}
|
|
}
|