r20160126
This commit is contained in:
parent
9fb540daf8
commit
7d23f1b6c7
11 changed files with 425 additions and 15 deletions
7
cron.php
7
cron.php
|
@ -17,13 +17,12 @@ if (function_exists('posix_getuid')) {
|
||||||
// Define that this page won't require templating
|
// Define that this page won't require templating
|
||||||
define('SAKURA_NO_TPL', true);
|
define('SAKURA_NO_TPL', true);
|
||||||
|
|
||||||
|
// To prevent the CLI from showing up
|
||||||
|
define('SAKURA_CRON', true);
|
||||||
|
|
||||||
// Include components
|
// Include components
|
||||||
require_once 'sakura.php';
|
require_once 'sakura.php';
|
||||||
|
|
||||||
// Override expiration variables
|
|
||||||
ignore_user_abort(true);
|
|
||||||
set_time_limit(0);
|
|
||||||
|
|
||||||
// Clean expired sessions
|
// Clean expired sessions
|
||||||
Database::delete('sessions', [
|
Database::delete('sessions', [
|
||||||
'session_expire' => [time(), '<'],
|
'session_expire' => [time(), '<'],
|
||||||
|
|
24
libraries/DB.php
Normal file
24
libraries/DB.php
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
<?php
|
||||||
|
/*
|
||||||
|
* Database wrapper (v2)
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Sakura;
|
||||||
|
|
||||||
|
use PDO;
|
||||||
|
use PDOException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class DB
|
||||||
|
* @package Sakura
|
||||||
|
*/
|
||||||
|
class DB
|
||||||
|
{
|
||||||
|
// Database container
|
||||||
|
private static $pdo;
|
||||||
|
|
||||||
|
// Initialisation function
|
||||||
|
public static function init($wrapper)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
|
@ -485,6 +485,7 @@ a:active {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: flex-end;
|
align-items: flex-end;
|
||||||
box-shadow: 0 2px 6px rgba(0, 0, 0, .75);
|
box-shadow: 0 2px 6px rgba(0, 0, 0, .75);
|
||||||
|
background: no-repeat center center / cover transparent;
|
||||||
}
|
}
|
||||||
|
|
||||||
#profileHeader.floating {
|
#profileHeader.floating {
|
||||||
|
|
|
@ -1319,6 +1319,212 @@ a.default:active {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* New profile page styling
|
||||||
|
*/
|
||||||
|
.new-profile {
|
||||||
|
background: rgba(211, 191, 255, .8) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.new-profile .new-profile-header {
|
||||||
|
height: 200px;
|
||||||
|
background: no-repeat center center / cover transparent;
|
||||||
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
border-bottom: 1px solid #9475b2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.new-profile .new-profile-info {
|
||||||
|
height: 100%;
|
||||||
|
width: 100%;
|
||||||
|
background: linear-gradient(0deg, rgba(211, 191, 255, .8), rgba(211, 191, 255, .8) 52px, transparent 52px, transparent);
|
||||||
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.new-profile .new-profile-avatar {
|
||||||
|
margin: 0;
|
||||||
|
height: 190px;
|
||||||
|
width: 190px;
|
||||||
|
margin: 0 2px;
|
||||||
|
flex-grow: 0;
|
||||||
|
flex-shrink: 0;
|
||||||
|
background: no-repeat center center / cover transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
.new-profile .new-profile-username {
|
||||||
|
align-self: flex-end;
|
||||||
|
margin-left: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.new-profile .new-profile-dates {
|
||||||
|
font-size: .8em;
|
||||||
|
line-height: 1.4em;
|
||||||
|
text-align: right;
|
||||||
|
align-self: flex-end;
|
||||||
|
flex-grow: 5;
|
||||||
|
height: 45px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.new-profile .new-profile-interactions {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
font-size: 2.5em;
|
||||||
|
line-height: 1.4em;
|
||||||
|
border-bottom: 1px solid #9475b2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.new-profile .new-profile-interactions a {
|
||||||
|
color: #8364A1;
|
||||||
|
text-decoration: none;
|
||||||
|
text-shadow: 0 0 2px #9475B2;
|
||||||
|
transition: all .2s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.new-profile .new-profile-interactions a:hover {
|
||||||
|
text-shadow: 0 0 6px #9475B2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.new-profile .new-profile-interactions a:active {
|
||||||
|
color: #725390;
|
||||||
|
text-shadow: 0 0 8px #8364A1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.new-profile .new-profile-navigation {
|
||||||
|
margin-left: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.new-profile .new-profile-actions {
|
||||||
|
border-left: 1px solid #9475b2;
|
||||||
|
min-width: 345px;
|
||||||
|
text-align: right;
|
||||||
|
margin-right: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.new-profile .new-profile-content {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
}
|
||||||
|
|
||||||
|
.new-profile .new-profile-data {
|
||||||
|
display: block;
|
||||||
|
width: 350px;
|
||||||
|
border-left: 1px solid #9475b2;
|
||||||
|
flex-shrink: 0;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.new-profile .new-profile-mode {
|
||||||
|
width: 100%;
|
||||||
|
flex-grow: 0;
|
||||||
|
margin-right: 2px;
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.new-profile .new-profile-mode-title {
|
||||||
|
padding-bottom: 2px;
|
||||||
|
border-bottom: 1px solid #9475b2;
|
||||||
|
margin-bottom: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 1032px) {
|
||||||
|
.new-profile .new-profile-info {
|
||||||
|
background: rgba(211, 191, 255, .5);
|
||||||
|
flex-flow: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
.new-profile .new-profile-avatar {
|
||||||
|
height: 120px;
|
||||||
|
width: 120px;
|
||||||
|
margin: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.new-profile .new-profile-dates,
|
||||||
|
.new-profile .new-profile-username {
|
||||||
|
flex-grow: 6;
|
||||||
|
width: 100%;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.new-profile .new-profile-dates br {
|
||||||
|
content: "";
|
||||||
|
}
|
||||||
|
|
||||||
|
.new-profile .new-profile-dates br:before {
|
||||||
|
content: "- ";
|
||||||
|
}
|
||||||
|
|
||||||
|
.new-profile .new-profile-interactions {
|
||||||
|
flex-flow: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
.new-profile .new-profile-navigation,
|
||||||
|
.new-profile .new-profile-actions {
|
||||||
|
border: 0;
|
||||||
|
width: 100%;
|
||||||
|
text-align: center;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.new-profile .new-profile-content {
|
||||||
|
flex-flow: column-reverse;
|
||||||
|
}
|
||||||
|
|
||||||
|
.new-profile .new-profile-data {
|
||||||
|
width: 100%;
|
||||||
|
border-bottom: 1px solid #9475b2;
|
||||||
|
border-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.new-profile .new-profile-mode {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 500px) {
|
||||||
|
.new-profile .new-profile-dates {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Friends section
|
||||||
|
*/
|
||||||
|
|
||||||
|
.profile-friends {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.profile-friends > div:not(:last-child) {
|
||||||
|
display: inline-block;
|
||||||
|
border: 1px solid #9475B2;
|
||||||
|
text-align: center;
|
||||||
|
width: 200px;
|
||||||
|
margin: 4px 0;
|
||||||
|
border-radius: 3px;
|
||||||
|
box-shadow: inset 0 0 1px #9475B2;
|
||||||
|
background: #E4CFFF;
|
||||||
|
transition: background .2s, box-shadow .2s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.profile-friends > div:not(:last-child):hover {
|
||||||
|
background: #C2AFFE;
|
||||||
|
box-shadow: inset 0 0 2px #9475B2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.profile-friends > div > .friends-list-data {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.profile-friends > div > .friends-list-data > .friends-list-name {
|
||||||
|
font-size: 1.2em;
|
||||||
|
line-height: 1.5em;
|
||||||
|
padding-bottom: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Panel table
|
* Panel table
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -21,10 +21,11 @@ $profile = User::construct(isset($_GET['u']) ? $_GET['u'] : 0);
|
||||||
// Views array
|
// Views array
|
||||||
$views = [
|
$views = [
|
||||||
'index',
|
'index',
|
||||||
/*'friends',
|
'friends',
|
||||||
'threads',
|
//'threads',
|
||||||
'posts',*/
|
//'posts',
|
||||||
'comments',
|
'comments',
|
||||||
|
//'groups',
|
||||||
];
|
];
|
||||||
|
|
||||||
// Assign the object to a renderData variable
|
// Assign the object to a renderData variable
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
namespace Sakura;
|
namespace Sakura;
|
||||||
|
|
||||||
// Define Sakura version
|
// Define Sakura version
|
||||||
define('SAKURA_VERSION', '20160122');
|
define('SAKURA_VERSION', '20160126');
|
||||||
define('SAKURA_VLABEL', 'Amethyst');
|
define('SAKURA_VLABEL', 'Amethyst');
|
||||||
define('SAKURA_COLOUR', '#9966CC');
|
define('SAKURA_COLOUR', '#9966CC');
|
||||||
|
|
||||||
|
@ -18,6 +18,10 @@ define('ROOT', __DIR__ . '/');
|
||||||
// Turn error reporting on for the initial startup sequence
|
// Turn error reporting on for the initial startup sequence
|
||||||
error_reporting(-1);
|
error_reporting(-1);
|
||||||
|
|
||||||
|
// Override expiration variables
|
||||||
|
ignore_user_abort(true);
|
||||||
|
set_time_limit(0);
|
||||||
|
|
||||||
// Set internal encoding method
|
// Set internal encoding method
|
||||||
mb_internal_encoding('utf-8');
|
mb_internal_encoding('utf-8');
|
||||||
|
|
||||||
|
@ -38,6 +42,7 @@ require_once ROOT . 'libraries/BBcode.php';
|
||||||
require_once ROOT . 'libraries/Comments.php';
|
require_once ROOT . 'libraries/Comments.php';
|
||||||
require_once ROOT . 'libraries/Config.php';
|
require_once ROOT . 'libraries/Config.php';
|
||||||
require_once ROOT . 'libraries/CSRF.php';
|
require_once ROOT . 'libraries/CSRF.php';
|
||||||
|
require_once ROOT . 'libraries/DB.php';
|
||||||
require_once ROOT . 'libraries/Database.php';
|
require_once ROOT . 'libraries/Database.php';
|
||||||
require_once ROOT . 'libraries/File.php';
|
require_once ROOT . 'libraries/File.php';
|
||||||
require_once ROOT . 'libraries/Hashing.php';
|
require_once ROOT . 'libraries/Hashing.php';
|
||||||
|
@ -86,7 +91,7 @@ Config::initDB();
|
||||||
Whois::setServers(ROOT . Config::local('data', 'whoisservers'));
|
Whois::setServers(ROOT . Config::local('data', 'whoisservers'));
|
||||||
|
|
||||||
// Check if we're using console
|
// Check if we're using console
|
||||||
if (php_sapi_name() === 'cli') {
|
if (php_sapi_name() === 'cli' && !defined('SAKURA_CRON')) {
|
||||||
$console = new Console\Application;
|
$console = new Console\Application;
|
||||||
$console->run($argv);
|
$console->run($argv);
|
||||||
exit;
|
exit;
|
||||||
|
|
|
@ -22,10 +22,10 @@
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% else %}
|
{% elseif get.old %}
|
||||||
<div class="content profile">
|
<div class="content profile">
|
||||||
<div class="content-right content-column">
|
<div class="content-right content-column">
|
||||||
<div style="text-align: center;{% if profile.header %} background: url({{ urls.format('IMAGE_HEADER', [profile.id]) }}) no-repeat center top; background-size: 336px;{% endif %}">
|
<div style="text-align: center;">
|
||||||
<img src="{{ urls.format('IMAGE_AVATAR', [profile.id]) }}" alt="{{ profile.username }}'s Avatar" class="default-avatar-setting" style="box-shadow: 0 3px 7px #{% if profile.isOnline %}484{% else %}844{% endif %};" /><br />
|
<img src="{{ urls.format('IMAGE_AVATAR', [profile.id]) }}" alt="{{ profile.username }}'s Avatar" class="default-avatar-setting" style="box-shadow: 0 3px 7px #{% if profile.isOnline %}484{% else %}844{% endif %};" /><br />
|
||||||
{% if profile.mainRankId > 1 and profile.checkBan|length < 1 %}
|
{% if profile.mainRankId > 1 and profile.checkBan|length < 1 %}
|
||||||
<span style="font-size: .8em;">{{ profile.title }}</span>
|
<span style="font-size: .8em;">{{ profile.title }}</span>
|
||||||
|
@ -46,8 +46,8 @@
|
||||||
<hr class="default" />
|
<hr class="default" />
|
||||||
<a class="fa fa-file-text-o" title="View {{ profile.username }}'s user page" href="{{ urls.format('USER_PROFILE', [profile.id]) }}"></a>
|
<a class="fa fa-file-text-o" title="View {{ profile.username }}'s user page" href="{{ urls.format('USER_PROFILE', [profile.id]) }}"></a>
|
||||||
{#<a class="fa fa-list" title="View {{ profile.username }}'s threads" href="{{ urls.format('USER_THREADS', [profile.id]) }}"></a>
|
{#<a class="fa fa-list" title="View {{ profile.username }}'s threads" href="{{ urls.format('USER_THREADS', [profile.id]) }}"></a>
|
||||||
<a class="fa fa-reply" title="View {{ profile.username }}'s posts" href="{{ urls.format('USER_POSTS', [profile.id]) }}"></a>
|
<a class="fa fa-reply" title="View {{ profile.username }}'s posts" href="{{ urls.format('USER_POSTS', [profile.id]) }}"></a> shh #}
|
||||||
<a class="fa fa-star" title="View {{ profile.username }}'s friends" href="{{ urls.format('USER_FRIENDS', [profile.id]) }}"></a> shh #}
|
<a class="fa fa-star" title="View {{ profile.username }}'s friends" href="{{ urls.format('USER_FRIENDS', [profile.id]) }}"></a>
|
||||||
{#<a class="fa fa-users" title="View {{ profile.username }}'s groups" href="{{ urls.format('USER_GROUPS', [profile.id]) }}"></a>#}
|
{#<a class="fa fa-users" title="View {{ profile.username }}'s groups" href="{{ urls.format('USER_GROUPS', [profile.id]) }}"></a>#}
|
||||||
{% if not noUserpage %}
|
{% if not noUserpage %}
|
||||||
<a class="fa fa-comments-o" title="View {{ profile.username }}'s profile comments" href="{{ urls.format('USER_COMMENTS', [profile.id]) }}"></a>
|
<a class="fa fa-comments-o" title="View {{ profile.username }}'s profile comments" href="{{ urls.format('USER_COMMENTS', [profile.id]) }}"></a>
|
||||||
|
@ -149,5 +149,152 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="clear"></div>
|
<div class="clear"></div>
|
||||||
</div>
|
</div>
|
||||||
|
{% else %}
|
||||||
|
<div class="content new-profile">
|
||||||
|
<div class="new-profile-container">
|
||||||
|
<div class="new-profile-header" style="background-image: url({{ urls.format('IMAGE_HEADER', [profile.id]) }});">
|
||||||
|
<div class="new-profile-info">
|
||||||
|
<div class="default-avatar-setting new-profile-avatar" style="background-image: url({{ urls.format('IMAGE_AVATAR', [profile.id]) }}); box-shadow: 0 0 5px #{% if profile.isOnline %}484{% else %}844{% endif %};"></div>
|
||||||
|
<div class="new-profile-username">
|
||||||
|
<h1 style="color: {{ profile.colour }}; text-shadow: 0 0 7px {% if profile.colour != 'inherit' %}{{ profile.colour }}{% else %}#222{% endif %}; padding: 0 0 2px;" {% if profile.getUsernameHistory %} title="Known as {{ profile.getUsernameHistory[0]['username_old'] }} before {{ profile.getUsernameHistory[0]['change_time']|date(sakura.dateFormat) }}." {% endif %}>{{ profile.username }}</h1>
|
||||||
|
{% if profile.isPremium[0] %}<img src="{{ sakura.contentPath }}/images/tenshi.png" alt="Tenshi" style="vertical-align: middle;" /> {% endif %}<img src="{{ sakura.contentPath }}/images/flags/{{ profile.country|lower }}.png" alt="{{ profile.country }}" style="vertical-align: middle;" title="{{ profile.country(true) }}" /> <span style="font-size: .8em;">{{ profile.title }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="new-profile-dates">
|
||||||
|
<b>Joined</b> <span title="{{ profile.registered|date(sakura.dateFormat) }}">{{ profile.elapsed.joined }}</span>
|
||||||
|
<br />
|
||||||
|
{% if profile.lastOnline < 1 %}
|
||||||
|
<b>{{ profile.username }} hasn't logged in yet.</b>
|
||||||
|
{% else %}
|
||||||
|
<b>Last online</b> <span title="{{ profile.lastOnline|date(sakura.dateFormat) }}">{{ profile.elapsed.lastOnline }}</span>
|
||||||
|
{% endif %}
|
||||||
|
{% if profile.birthday != '0000-00-00' and profile.birthday|split('-')[0] > 0 %}
|
||||||
|
<br /><b>Age</b> <span title="{{ profile.birthday }}">{{ profile.birthday(true) }} years old</span>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="new-profile-interactions">
|
||||||
|
<div class="new-profile-navigation">
|
||||||
|
<a class="fa fa-file-text-o" title="View {{ profile.username }}'s user page" href="{{ urls.format('USER_PROFILE', [profile.id]) }}"></a>
|
||||||
|
{#<a class="fa fa-list" title="View {{ profile.username }}'s threads" href="{{ urls.format('USER_THREADS', [profile.id]) }}"></a>
|
||||||
|
<a class="fa fa-reply" title="View {{ profile.username }}'s posts" href="{{ urls.format('USER_POSTS', [profile.id]) }}"></a>#}
|
||||||
|
<a class="fa fa-star" title="View {{ profile.username }}'s friends" href="{{ urls.format('USER_FRIENDS', [profile.id]) }}"></a>
|
||||||
|
{#<a class="fa fa-users" title="View {{ profile.username }}'s groups" href="{{ urls.format('USER_GROUPS', [profile.id]) }}"></a>#}
|
||||||
|
{% if not noUserpage %}
|
||||||
|
<a class="fa fa-comments-o" title="View {{ profile.username }}'s profile comments" href="{{ urls.format('USER_COMMENTS', [profile.id]) }}"></a>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
{% if session.checkLogin %}
|
||||||
|
<div class="new-profile-actions">
|
||||||
|
{% if user.id == profile.id %}
|
||||||
|
<a class="fa fa-pencil-square-o" title="Edit your profile" href="{{ urls.format('SETTING_MODE', ['general', 'profile']) }}"></a>
|
||||||
|
{% else %}
|
||||||
|
{% if user.isFriends(profile.id) != 0 %}<a class="fa fa-{% if user.isFriends(profile.id) == 2 %}heart{% else %}star{% endif %}" title="You are friends"></a>{% endif %}
|
||||||
|
<a class="fa fa-user-{% if user.isFriends(profile.id) == 0 %}plus{% else %}times{% endif %}" title="{% if user.isFriends(profile.id) == 0 %}Add {{ profile.username }} as a friend{% else %}Remove friend{% endif %}" href="{% if user.isFriends(profile.id) == 0 %}{{ urls.format('FRIEND_ADD', [profile.id, php.sessionid, php.time, sakura.currentPage]) }}{% else %}{{ urls.format('FRIEND_REMOVE', [profile.id, php.sessionid, php.time, sakura.currentPage]) }}{% endif %}" id="profileFriendToggle"></a>
|
||||||
|
{#<a class="fa fa-exclamation-circle" title="Report {{ profile.username }}" href="{{ urls.format('USER_REPORT', [profile.id]) }}"></a>#}
|
||||||
|
{% endif %}
|
||||||
|
{% if user.permission(constant('Sakura\\Perms\\Manage::CAN_RESTRICT_USERS'), constant('Sakura\\Perms::MANAGE')) %}
|
||||||
|
<a class="fa fa-trash" title="Restrict {{ profile.username }}" href="?restrict={{ php.sessionid }}"></a>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
<div class="new-profile-content">
|
||||||
|
<div class="new-profile-mode">
|
||||||
|
<div>
|
||||||
|
{% include 'profile/' ~ profileView ~ '.twig' %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="new-profile-data">
|
||||||
|
<table style="width: 100%;">
|
||||||
|
<tr>
|
||||||
|
<td style="text-align: left; font-weight: bold;">Threads</td>
|
||||||
|
<td style="text-align: right;">{{ profile.forumStats.topics }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td style="text-align: left; font-weight: bold;">Posts</td>
|
||||||
|
<td style="text-align: right;">{{ profile.forumStats.posts }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td style="text-align: left; font-weight: bold;">Friends</td>
|
||||||
|
<td style="text-align: right;">{{ profile.friends(2)|length }}</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<hr class="default" />
|
||||||
|
{% if profile.profileFields or user.permission(constant('Sakura\\Perms\\Manage::USE_MANAGE'), constant('Sakura\\Perms::MANAGE')) %}
|
||||||
|
{% if session.checkLogin %}
|
||||||
|
<table style="width: 100%;">
|
||||||
|
{% for name,field in profile.profileFields %}
|
||||||
|
<tr>
|
||||||
|
<td style="text-align: left; font-weight: bold;">
|
||||||
|
{{ field.name }}
|
||||||
|
</td>
|
||||||
|
<td style="text-align: right;">
|
||||||
|
{% if name == 'youtube' %}
|
||||||
|
<a href="https://youtube.com/{% if field.youtubetype == true %}channel{% else %}user{% endif %}/{{ field.value }}" class="default">{% if field.youtubetype == true %}{{ profile.username }}'s Channel{% else %}{{ field.value }}{% endif %}</a>
|
||||||
|
{% else %}
|
||||||
|
{% if field.islink %}
|
||||||
|
<a href="{{ field.link }}" class="default">
|
||||||
|
{% endif %}
|
||||||
|
{{ field.value }}
|
||||||
|
{% if field.islink %}
|
||||||
|
</a>
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
{% if user.permission(constant('Sakura\\Perms\\Manage::USE_MANAGE'), constant('Sakura\\Perms::MANAGE')) %}
|
||||||
|
<tr>
|
||||||
|
<td style="text-align: left; font-weight: bold;">E-mail address</td>
|
||||||
|
<td style="text-align: right;"><a href="mailto:{{ profile.email }}" class="default">{{ profile.email }}</a></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td style="text-align: left; font-weight: bold;">Register IP</td>
|
||||||
|
<td style="text-align: right;">{{ profile.registerIp }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td style="text-align: left; font-weight: bold;">Last IP</td>
|
||||||
|
<td style="text-align: right;">{{ profile.lastIp }}</td>
|
||||||
|
</tr>
|
||||||
|
{% endif %}
|
||||||
|
</table>
|
||||||
|
{% else %}
|
||||||
|
<b>Log in to view the full profile!</b>
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
<hr class="default" />
|
||||||
|
<b>Account Standing</b>
|
||||||
|
{% if profile.permission(constant('Sakura\\Perms\\Site::DEACTIVATED')) %}
|
||||||
|
<h2 style="color: #888; text-shadow: 0 0 7px #888; margin-top: 0;">Deactivated</h2>
|
||||||
|
{% elseif profile.checkBan %}
|
||||||
|
<h2 style="color: #222; text-shadow: 0 0 7px #222; margin-top: 0;">Banned</h2>
|
||||||
|
{% elseif profile.permission(constant('Sakura\\Perms\\Site::RESTRICTED')) %}
|
||||||
|
<h2 style="color: #800; text-shadow: 0 0 7px #800; margin-top: 0;">Restricted</h2>
|
||||||
|
{% elseif profile.getWarnings %}
|
||||||
|
<h2 style="color: #A00; text-shadow: 0 0 7px #A00; margin-top: 0;">Bad</h2>
|
||||||
|
{% else %}
|
||||||
|
<h2 style="color: #080; text-shadow: 0 0 7px #080; margin-top: 0;">Good</h2>
|
||||||
|
{% endif %}
|
||||||
|
{% if profile.getWarnings %}
|
||||||
|
<table class="panelTable">
|
||||||
|
<tr>
|
||||||
|
<th>Action</th>
|
||||||
|
<th>Duration</th>
|
||||||
|
<th>Reason</th>
|
||||||
|
</tr>
|
||||||
|
{% for warning in profile.getWarnings %}
|
||||||
|
<tr class="{{ warning.warning_action_text|lower }}">
|
||||||
|
<td>{{ warning.warning_action_text }}</td>
|
||||||
|
<td>{{ warning.warning_length }} minute{% if warning.warning_length != 1 %}s{% endif %}</td>
|
||||||
|
<td>{{ warning.warning_reason }}</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</table>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
@ -1,3 +1,6 @@
|
||||||
{% set comments = profile.profileComments.comments %}
|
{% set comments = profile.profileComments.comments %}
|
||||||
{% set commentsCategory = 'profile-' ~ profile.id %}
|
{% set commentsCategory = 'profile-' ~ profile.id %}
|
||||||
|
<div class="new-profile-mode-title">
|
||||||
|
<h1 class="stylised">Comments</h1>
|
||||||
|
</div>
|
||||||
{% include 'elements/comments.twig' %}
|
{% include 'elements/comments.twig' %}
|
||||||
|
|
|
@ -0,0 +1,24 @@
|
||||||
|
{% set friends = profile.friends(2)|batch(12) %}
|
||||||
|
|
||||||
|
{% set paginationPages = friends %}
|
||||||
|
{% set paginationUrl %}{{ urls.format('SETTING_MODE', ['friends', 'listing']) }}{% endset %}
|
||||||
|
|
||||||
|
<div class="new-profile-mode-title">
|
||||||
|
<h1 class="stylised">Friends</h1>
|
||||||
|
</div>
|
||||||
|
<div class="profile-friends">
|
||||||
|
{% for friend in friends[get.page|default(1) - 1] %}
|
||||||
|
<div class="friend-container" id="friendslist-friend-{{ friend.id }}">
|
||||||
|
<a class="friends-list-data clean" href="{{ urls.format('USER_PROFILE', [friend.id]) }}">
|
||||||
|
<img src="{{ urls.format('IMAGE_AVATAR', [friend.id]) }}" alt="{{ friend.username }}" class="friends-list-avatar default-avatar-setting" style="width: 150px; height: 150px;" />
|
||||||
|
<div class="friends-list-name" style="color: {{ friend.colour }};">{{ friend.username }}</div>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
{% endfor %}
|
||||||
|
<div class="clear"></div>
|
||||||
|
{% if friends|length > 1 %}
|
||||||
|
<div>
|
||||||
|
{% include 'elements/pagination.twig' %}
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
|
@ -27,7 +27,7 @@ window.addEventListener("load", function() {
|
||||||
<div class="friends-list">
|
<div class="friends-list">
|
||||||
{% for friend in friends[get.page|default(1) - 1] %}
|
{% for friend in friends[get.page|default(1) - 1] %}
|
||||||
<div class="friend-container" id="friendslist-friend-{{ friend.id }}">
|
<div class="friend-container" id="friendslist-friend-{{ friend.id }}">
|
||||||
<a class="friends-list-data clean" href="/u/{{ friend.id }}">
|
<a class="friends-list-data clean" href="{{ urls.format('USER_PROFILE', [friend.id]) }}">
|
||||||
<img src="/a/{{ friend.id }}" alt="{{ friend.username }}" class="friends-list-avatar default-avatar-setting" style="width: 150px; height: 150px;" />
|
<img src="/a/{{ friend.id }}" alt="{{ friend.username }}" class="friends-list-avatar default-avatar-setting" style="width: 150px; height: 150px;" />
|
||||||
<div class="friends-list-name" style="color: {{ friend.colour }};">{{ friend.username }}</div>
|
<div class="friends-list-name" style="color: {{ friend.colour }};">{{ friend.username }}</div>
|
||||||
</a>
|
</a>
|
||||||
|
|
|
@ -27,7 +27,7 @@ window.addEventListener("load", function() {
|
||||||
<div class="friends-list">
|
<div class="friends-list">
|
||||||
{% for friend in friends[get.page|default(1) - 1] %}
|
{% for friend in friends[get.page|default(1) - 1] %}
|
||||||
<div class="friend-container" id="friend-{{ friend.id }}">
|
<div class="friend-container" id="friend-{{ friend.id }}">
|
||||||
<a class="friends-list-data clean" href="/u/{{ friend.id }}">
|
<a class="friends-list-data clean" href="{{ urls.format('USER_PROFILE', [friend.id]) }}">
|
||||||
<img src="/a/{{ friend.id }}" alt="{{ friend.username }}" class="friends-list-avatar default-avatar-setting" style="width: 150px; height: 150px;" />
|
<img src="/a/{{ friend.id }}" alt="{{ friend.username }}" class="friends-list-avatar default-avatar-setting" style="width: 150px; height: 150px;" />
|
||||||
<div class="friends-list-name" style="color: {{ friend.colour }};">{{ friend.username }}</div>
|
<div class="friends-list-name" style="color: {{ friend.colour }};">{{ friend.username }}</div>
|
||||||
</a>
|
</a>
|
||||||
|
|
Reference in a new issue