Some non-related updates
This commit is contained in:
parent
86c4ac9c05
commit
a9bae24479
9 changed files with 198 additions and 49 deletions
|
@ -197,10 +197,12 @@ class AuthController extends Controller
|
||||||
->orWhere('last_ip', Net::pton(Net::IP()))
|
->orWhere('last_ip', Net::pton(Net::IP()))
|
||||||
->get();
|
->get();
|
||||||
|
|
||||||
Template::vars([
|
if ($getUserIP) {
|
||||||
'haltRegistration' => count($getUserIP) > 1,
|
Template::vars([
|
||||||
'haltName' => $getUserIP[array_rand($getUserIP)]->username,
|
'haltRegistration' => count($getUserIP) > 1,
|
||||||
]);
|
'haltName' => $getUserIP[array_rand($getUserIP)]->username,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
return Template::render('main/register');
|
return Template::render('main/register');
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,7 +16,6 @@ use Sakura\Perms\Forum as ForumPerms;
|
||||||
use Sakura\Router;
|
use Sakura\Router;
|
||||||
use Sakura\Template;
|
use Sakura\Template;
|
||||||
use Sakura\User;
|
use Sakura\User;
|
||||||
use Sakura\Users;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Forum page controllers.
|
* Forum page controllers.
|
||||||
|
@ -33,24 +32,85 @@ class ForumController extends Controller
|
||||||
*/
|
*/
|
||||||
public function index()
|
public function index()
|
||||||
{
|
{
|
||||||
// Merge index specific stuff with the global render data
|
global $currentUser;
|
||||||
Template::vars([
|
|
||||||
'forum' => (new Forum()),
|
// Get the most active threads
|
||||||
'stats' => [
|
$activeThreadsIds = DB::table('posts')
|
||||||
'userCount' => DB::table('users')
|
->groupBy('topic_id')
|
||||||
->where('password_algo', '!=', 'disabled')
|
->orderByRaw('COUNT(*) DESC')
|
||||||
->whereNotIn('rank_main', [1, 10])
|
->limit(10)
|
||||||
->count(),
|
->get(['topic_id']);
|
||||||
'newestUser' => User::construct(Users::getNewestUserId()),
|
$activeThreads = [];
|
||||||
'lastRegDate' => date_diff(
|
|
||||||
date_create(date('Y-m-d', User::construct(Users::getNewestUserId())->registered)),
|
while (list($_n, $_t) = each($activeThreadsIds)) {
|
||||||
date_create(date('Y-m-d'))
|
// Create the thread object
|
||||||
)->format('%a'),
|
$thread = new Thread($_t->topic_id);
|
||||||
'topicCount' => DB::table('topics')->count(),
|
|
||||||
'postCount' => DB::table('posts')->count(),
|
// Create a forum object
|
||||||
'onlineUsers' => Users::checkAllOnline(),
|
$forum = new Forum($thread->forum);
|
||||||
],
|
|
||||||
]);
|
// Check if we have permission to view it
|
||||||
|
if (!$forum->permission(ForumPerms::VIEW, $currentUser->id)) {
|
||||||
|
$fetch = DB::table('posts')
|
||||||
|
->groupBy('topic_id')
|
||||||
|
->orderByRaw('COUNT(*) DESC')
|
||||||
|
->skip(11 + $_n)
|
||||||
|
->take(1)
|
||||||
|
->get(['topic_id']);
|
||||||
|
|
||||||
|
if ($fetch) {
|
||||||
|
$activeThreadsIds[] = $fetch[0];
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$activeThreads[$thread->id] = $thread;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the latest posts
|
||||||
|
$latestPostsIds = DB::table('posts')
|
||||||
|
->orderBy('post_id', 'desc')
|
||||||
|
->limit(10)
|
||||||
|
->get(['post_id']);
|
||||||
|
$latestPosts = [];
|
||||||
|
|
||||||
|
while (list($_n, $_p) = each($latestPostsIds)) {
|
||||||
|
// Create new post object
|
||||||
|
$post = new Post($_p->post_id);
|
||||||
|
|
||||||
|
// Forum id
|
||||||
|
$forum = new Forum($post->forum);
|
||||||
|
|
||||||
|
// Check if we have permission to view it
|
||||||
|
if (!$forum->permission(ForumPerms::VIEW, $currentUser->id)) {
|
||||||
|
$fetch = DB::table('posts')
|
||||||
|
->orderBy('post_id', 'desc')
|
||||||
|
->skip(11 + $_n)
|
||||||
|
->take(1)
|
||||||
|
->get(['post_id']);
|
||||||
|
|
||||||
|
if ($fetch) {
|
||||||
|
$latestPostsIds[] = $fetch[0];
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$latestPosts[$post->id] = $post;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the most active poster
|
||||||
|
$activePosterId = DB::table('posts')
|
||||||
|
->where('post_time', '>', time() - (24 * 60 * 60))
|
||||||
|
->groupBy('poster_id')
|
||||||
|
->orderByRaw('COUNT(*) DESC')
|
||||||
|
->limit(1)
|
||||||
|
->get(['poster_id']);
|
||||||
|
$activePoster = User::construct($activePosterId[0]->poster_id);
|
||||||
|
|
||||||
|
// Create the forum object
|
||||||
|
$forum = new Forum;
|
||||||
|
|
||||||
|
Template::vars(compact('forum', 'activeThreads', 'latestPosts', 'activePoster'));
|
||||||
|
|
||||||
// Return the compiled page
|
// Return the compiled page
|
||||||
return Template::render('forum/index');
|
return Template::render('forum/index');
|
||||||
|
|
|
@ -109,8 +109,6 @@ class UserController extends Controller
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get all ranks
|
// Get all ranks
|
||||||
|
|
||||||
// Execute query
|
|
||||||
$getRanks = DB::table('ranks')
|
$getRanks = DB::table('ranks')
|
||||||
->get(['rank_id']);
|
->get(['rank_id']);
|
||||||
|
|
||||||
|
|
|
@ -233,4 +233,29 @@ class Post
|
||||||
->where('post_id', $this->id)
|
->where('post_id', $this->id)
|
||||||
->delete();
|
->delete();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if a user has read this post before.
|
||||||
|
*
|
||||||
|
* @param mixed $user The id of the user in question.
|
||||||
|
*
|
||||||
|
* @return bool A boolean indicating the read status.
|
||||||
|
*/
|
||||||
|
public function unread($user)
|
||||||
|
{
|
||||||
|
// Attempt to get track row from the database
|
||||||
|
$track = DB::table('topics_track')
|
||||||
|
->where('user_id', $user)
|
||||||
|
->where('topic_id', $this->thread)
|
||||||
|
->where('mark_time', '>', $this->time)
|
||||||
|
->count();
|
||||||
|
|
||||||
|
// If nothing was returned it's obvious that the status is unread
|
||||||
|
if (!$track) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Else just return false meaning everything is read
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -190,6 +190,7 @@ class Rank
|
||||||
// Fetch all users part of this rank
|
// Fetch all users part of this rank
|
||||||
$get = DB::table('user_ranks')
|
$get = DB::table('user_ranks')
|
||||||
->where('rank_id', $this->id)
|
->where('rank_id', $this->id)
|
||||||
|
->orderBy('user_id')
|
||||||
->get(['user_id']);
|
->get(['user_id']);
|
||||||
|
|
||||||
// Filter the user ids into one array
|
// Filter the user ids into one array
|
||||||
|
|
|
@ -251,14 +251,8 @@ a.default:active {
|
||||||
width: 334px;
|
width: 334px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.content-left .head,
|
.content .head,
|
||||||
.news .head,
|
.loginPage .head {
|
||||||
.support .head,
|
|
||||||
.viewforum .head,
|
|
||||||
.viewtopic .head,
|
|
||||||
.posting .head,
|
|
||||||
.loginPage .head,
|
|
||||||
.messages .head {
|
|
||||||
margin: -1px -2px;
|
margin: -1px -2px;
|
||||||
padding: 4px 5px 5px;
|
padding: 4px 5px 5px;
|
||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
|
@ -1321,13 +1315,12 @@ a.default:active {
|
||||||
}
|
}
|
||||||
|
|
||||||
.new-profile .new-profile-avatar {
|
.new-profile .new-profile-avatar {
|
||||||
margin: 0;
|
|
||||||
height: 190px;
|
height: 190px;
|
||||||
width: 190px;
|
width: 190px;
|
||||||
margin: 0 2px;
|
margin: 0 2px;
|
||||||
flex-grow: 0;
|
flex-grow: 0;
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
background: no-repeat center center / cover transparent;
|
background: no-repeat center center / cover #FFF;
|
||||||
}
|
}
|
||||||
|
|
||||||
.new-profile .new-profile-username {
|
.new-profile .new-profile-username {
|
||||||
|
@ -2517,3 +2510,27 @@ button.forumbtn {
|
||||||
#comments ul > li > ul .comment > textarea.comment-content {
|
#comments ul > li > ul .comment > textarea.comment-content {
|
||||||
height: 40px;
|
height: 40px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* User container
|
||||||
|
*/
|
||||||
|
.user-container {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
background: no-repeat center center / cover transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
.user-container-avatar {
|
||||||
|
height: 100px;
|
||||||
|
width: 100px;
|
||||||
|
margin: 0 2px;
|
||||||
|
flex-grow: 0;
|
||||||
|
flex-shrink: 0;
|
||||||
|
background: no-repeat center center / cover #FFF;
|
||||||
|
}
|
||||||
|
|
||||||
|
.user-container-info {
|
||||||
|
background: rgba(211, 191, 255, .8);
|
||||||
|
width: 100%;
|
||||||
|
padding: 0 5px;
|
||||||
|
}
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
namespace Sakura;
|
namespace Sakura;
|
||||||
|
|
||||||
// Define Sakura version
|
// Define Sakura version
|
||||||
define('SAKURA_VERSION', '20160320');
|
define('SAKURA_VERSION', 20160324);
|
||||||
|
|
||||||
// Define Sakura Path
|
// Define Sakura Path
|
||||||
define('ROOT', __DIR__ . '/');
|
define('ROOT', __DIR__ . '/');
|
||||||
|
@ -103,7 +103,7 @@ $currentUser = User::construct($authCheck[0]);
|
||||||
// Create the Urls object
|
// Create the Urls object
|
||||||
$urls = new Urls();
|
$urls = new Urls();
|
||||||
|
|
||||||
// Prepare the name of the template to load (outside of SAKURA_NO_TPL because it's used in imageserve.php)
|
// Prepare the name of the template to load
|
||||||
$templateName =
|
$templateName =
|
||||||
!defined('SAKURA_MANAGE')
|
!defined('SAKURA_MANAGE')
|
||||||
&& isset($currentUser->optionFields()['useMisaki'])
|
&& isset($currentUser->optionFields()['useMisaki'])
|
||||||
|
|
|
@ -1,12 +1,15 @@
|
||||||
<div id="indexPanel">
|
<div id="indexPanel">
|
||||||
{% if session.checkLogin %}
|
{% if session.checkLogin %}
|
||||||
<div class="head">Hi, {{ user.username }}!</div>
|
<div class="user-container" style="background-image: url({{ route('user.header', user.id) }});">
|
||||||
<a href="{{ urls.format('SETTING_MODE', ['appearance', 'avatar']) }}"><img src="{{ route('file.avatar', user.id) }}" alt="{{ user.username }}" class="default-avatar-setting homepage-menu-avatar" /></a>
|
<div class="default-avatar-setting user-container-avatar" style="background-image: url({{ route('file.avatar', user.id) }}); box-shadow: 0 0 5px {{ user.colour }};"><a href="{{ urls.format('SETTING_MODE', ['friends', 'requests']) }}" class="clean" style="display: block; height: 100%; width: 100%;"></a></div>
|
||||||
<ul class="panelQuickLinks">
|
<div class="user-container-info">
|
||||||
<li><a href="{{ urls.format('SETTING_MODE', ['friends', 'requests']) }}" title="Pending friend requests"><span class="fa fa-user-plus"></span><span class="count">{{ user.friends(-1, true)|length }}</span></a></li>
|
<a href="{{ route('user.profile', user.id) }}" class="clean"><h1 style="color: {{ user.colour }}; text-shadow: 0 0 7px {% if user.colour != 'inherit' %}{{ user.colour }}{% else %}#222{% endif %}; padding: 0 0 2px;">{{ user.username }}</h1></a>
|
||||||
<li><a href="{{ urls.format('MESSAGES_INDEX') }}" title="View private messages"><span class="fa fa-envelope"></span><span class="count">0</span></a></li>
|
{% set friendRequests = user.friends(-1, true)|length %}
|
||||||
</ul>
|
{% if friendRequests %}
|
||||||
<div class="clear"></div>
|
<a class="default" href="{{ urls.format('SETTING_MODE', ['friends', 'requests']) }}" title="Pending friend requests">{{ friendRequests }} new friend requests</a>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
{% else %}
|
{% else %}
|
||||||
{% if sakura.lockAuth %}
|
{% if sakura.lockAuth %}
|
||||||
<div class="head">Whoops!</div>
|
<div class="head">Whoops!</div>
|
||||||
|
|
|
@ -7,7 +7,54 @@
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="content homepage forum">
|
<div class="content homepage forum">
|
||||||
<div class="content-right content-column">
|
<div class="content-right content-column">
|
||||||
{% include 'elements/indexPanel.twig' %}
|
<div id="forumIndexPopularThreads">
|
||||||
|
<div class="head">Popular threads</div>
|
||||||
|
<table class="panelTable" style="border-spacing: 0;">
|
||||||
|
<tr>
|
||||||
|
<th>Title</th>
|
||||||
|
<th>Last reply</th>
|
||||||
|
</tr>
|
||||||
|
{% for _t in activeThreads %}
|
||||||
|
<tr {% if _t.unread(user.id) %}style="font-weight: bold;"{% endif %}>
|
||||||
|
<td style="text-align: left; border-bottom: 1px solid #9475b2;">
|
||||||
|
<a href="{{ route('forums.thread', _t.id) }}" class="default">{{ _t.title }}</a>
|
||||||
|
</td>
|
||||||
|
<td class="rightAlign" style="border-bottom: 1px solid #9475b2;"><time>{{ _t.lastPost.time|date(sakura.dateFormat) }}</time></td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<div id="forumIndexNewPosts">
|
||||||
|
<div class="head">Latest posts</div>
|
||||||
|
<table class="panelTable" style="border-spacing: 0;">
|
||||||
|
<tr>
|
||||||
|
<th>Title & user</th>
|
||||||
|
<th>Posted</th>
|
||||||
|
</tr>
|
||||||
|
{% for _p in latestPosts %}
|
||||||
|
<tr {% if _p.unread(user.id) %}style="font-weight: bold;"{% endif %}>
|
||||||
|
<td style="text-align: left; border-bottom: 1px solid #9475b2;">
|
||||||
|
<a href="{{ route('forums.post', _p.id) }}" class="default">{{ _p.subject }}</a>
|
||||||
|
by
|
||||||
|
<a href="{{ route('user.profile', _p.poster.id) }}" class="default"><span style="color: {{ _p.poster.colour }};">{{ _p.poster.username }}</span></a>
|
||||||
|
</td>
|
||||||
|
<td class="rightAlign" style="border-bottom: 1px solid #9475b2;"><time>{{ _p.time|date(sakura.dateFormat) }}</time></td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<div id="forumMostActivePoster">
|
||||||
|
<div class="head">Today's most active poster</div>
|
||||||
|
<a class="clean" href="{{ route('user.profile', activePoster.id) }}">
|
||||||
|
<div class="user-container" style="background-image: url({{ route('user.header', activePoster.id) }});">
|
||||||
|
<div class="default-avatar-setting user-container-avatar" style="background-image: url({{ route('file.avatar', activePoster.id) }}); box-shadow: 0 0 5px #{% if activePoster.isOnline %}484{% else %}844{% endif %};"></div>
|
||||||
|
<div class="user-container-info">
|
||||||
|
<h1 style="color: {{ activePoster.colour }}; text-shadow: 0 0 7px {% if activePoster.colour != 'inherit' %}{{ activePoster.colour }}{% else %}#222{% endif %}; padding: 0 0 2px;" {% if activePoster.getUsernameHistory %} title="Known as {{ activePoster.getUsernameHistory[0].username_old }} before {{ activePoster.getUsernameHistory[0].change_time|date(sakura.dateFormat) }}." {% endif %}>{{ activePoster.username }}</h1>
|
||||||
|
{% if activePoster.isPremium[0] %}<img src="{{ sakura.contentPath }}/images/tenshi.png" alt="Tenshi" style="vertical-align: middle;" /> {% endif %}<img src="{{ sakura.contentPath }}/images/flags/{{ activePoster.country|lower }}.png" alt="{{ activePoster.country }}" style="vertical-align: middle;" title="{{ activePoster.country(true) }}" /> <span style="font-size: .8em;">{{ activePoster.title }}</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="content-left content-column">
|
<div class="content-left content-column">
|
||||||
{% include 'forum/forum.twig' %}
|
{% include 'forum/forum.twig' %}
|
||||||
|
@ -15,7 +62,3 @@
|
||||||
<div class="clear"></div>
|
<div class="clear"></div>
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block js %}
|
|
||||||
<script type="text/javascript" src="{{ sakura.resources }}/js/ybabstat.js"></script>
|
|
||||||
{% endblock %}
|
|
||||||
|
|
Reference in a new issue