Some non-related updates

This commit is contained in:
flash 2016-03-24 19:28:32 +01:00
parent 86c4ac9c05
commit a9bae24479
9 changed files with 198 additions and 49 deletions

View file

@ -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');
} }

View file

@ -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');

View file

@ -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']);

View file

@ -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;
}
} }

View file

@ -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

View file

@ -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;
}

View file

@ -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'])

View file

@ -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>

View file

@ -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 &amp; 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 %}