Member list commit
This commit is contained in:
parent
54f430572c
commit
9a1f44eed6
7 changed files with 231 additions and 17 deletions
|
@ -14,7 +14,8 @@
|
|||
"20150427.3",
|
||||
"20150427.4",
|
||||
"20150427.5",
|
||||
"20150427.6"
|
||||
"20150427.6",
|
||||
"20150427.7"
|
||||
|
||||
]
|
||||
|
||||
|
@ -772,6 +773,19 @@
|
|||
"change": "Remove origin check on CloudFlare country header."
|
||||
}
|
||||
|
||||
],
|
||||
|
||||
"20150427.7": [
|
||||
|
||||
{
|
||||
"type": "ADD",
|
||||
"change": "Add members page."
|
||||
},
|
||||
{
|
||||
"type": "ADD",
|
||||
"change": "Add members page pagination."
|
||||
}
|
||||
|
||||
]
|
||||
|
||||
}
|
||||
|
|
|
@ -847,6 +847,30 @@ class Users {
|
|||
|
||||
}
|
||||
|
||||
// Get users in rank
|
||||
public static function getUsersInRank($rankId, $users = null) {
|
||||
|
||||
// Get all users (or use the supplied user list to keep server load down)
|
||||
if(!$users)
|
||||
$users = self::getAllUsers();
|
||||
|
||||
// Make output array
|
||||
$rank = array();
|
||||
|
||||
// Go over all users and check if they have the rank id
|
||||
foreach($users as $user) {
|
||||
|
||||
// If so store the user's row in the array
|
||||
if(self::checkIfUserHasRanks([$rankId], $user, true))
|
||||
$rank[] = $user;
|
||||
|
||||
}
|
||||
|
||||
// Then return the array with the user rows
|
||||
return $rank;
|
||||
|
||||
}
|
||||
|
||||
// Get all users
|
||||
public static function getAllUsers($includeInactive = true) {
|
||||
|
||||
|
@ -860,7 +884,7 @@ class Users {
|
|||
foreach($getUsers as $user) {
|
||||
|
||||
// Skip if inactive and not include deactivated users
|
||||
if(!$includeInactive && $user['rank_main'] < 2)
|
||||
if(!$includeInactive && self::checkIfUserHasRanks([0, 1], $user, true))
|
||||
continue;
|
||||
|
||||
$users[$user['id']] = $user;
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
namespace Sakura;
|
||||
|
||||
// Define Sakura version
|
||||
define('SAKURA_VERSION', '20150427.6');
|
||||
define('SAKURA_VERSION', '20150427.7');
|
||||
define('SAKURA_VLABEL', 'Heliotrope');
|
||||
define('SAKURA_VTYPE', 'Development');
|
||||
define('SAKURA_COLOUR', '#DF73FF');
|
||||
|
|
101
_sakura/templates/yuuno/main/memberlist.tpl
Normal file
101
_sakura/templates/yuuno/main/memberlist.tpl
Normal file
|
@ -0,0 +1,101 @@
|
|||
{% include 'global/header.tpl' %}
|
||||
{% if user.checklogin %}
|
||||
<div class="membersPage" style="min-height: 500px;">
|
||||
<h1 style="text-shadow: 0px 0px 5px #555;{% if page.active %} color: {{ page.ranks[page.active].colour }};{% endif %}">{% if not page.active %}All members{% else %}{{ page.ranks[page.active].name }}{% if page.ranks[page.active].multi %}s{% endif %}{% endif %}</h1>
|
||||
<h3 style="padding: 0px 0px 10px;">{% if not page.active %}The entire user list.{% else %}{{ page.ranks[page.active].description }}{% endif %}</h3>
|
||||
<div class="dropDown" style="margin: 0px auto; font-size: 1.5em; line-height: 1.5em; height: 30px;">
|
||||
<div class="dropDownInner" style="float: left; color: #FFF;">
|
||||
<a class="dropDownDesc">Rank:</a>
|
||||
<a href="/members/"{% if not page.active %} class="dropDownSelected"{% endif %}>All members</a>
|
||||
{% for rank in page.ranks %}
|
||||
<a href="/members/{% if page.sort != page.sorts[0] %}{{ page.sort }}/{% endif %}{{ rank.id }}/" style="color: {{ rank.colour }};"{% if page.active == rank.id %} class="dropDownSelected"{% endif %}>{{ rank.name }}{% if rank.multi %}s{% endif %}</a>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<div class="dropDownInner" style="float: left;">
|
||||
<a class="dropDownDesc">View:</a>
|
||||
{% for sort in page.sorts %}
|
||||
<a href="/members/{{ sort }}/{% if page.active %}{{ page.active }}/{% endif %}{% if page.page %}p{{ page.page + 1 }}/{% endif %}"{% if page.sort == sort %} class="dropDownSelected"{% endif %}>{{ sort|capitalize }}</a>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
{% if page.notfound %}
|
||||
<h1 class="stylised" style="margin-top: 20px;">The requested rank was not found!</h1>
|
||||
{% else %}
|
||||
<div class="membersPageList {{ page.sort }}">
|
||||
{% if page.sort == page.sorts[2] %}
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>No.</th>
|
||||
<th>Username</th>
|
||||
<th>Registered</th>
|
||||
<th>Last online</th>
|
||||
<th>User title</th>
|
||||
<th>Country</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tfoot>
|
||||
<tr>
|
||||
<th>No.</th>
|
||||
<th>Username</th>
|
||||
<th>Registered</th>
|
||||
<th>Last online</th>
|
||||
<th>User title</th>
|
||||
<th>Country</th>
|
||||
</tr>
|
||||
</tfoot>
|
||||
{% for count,user in page.users[page.page] %}
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>
|
||||
#{{ count + 1 }}
|
||||
</td>
|
||||
<td>
|
||||
<a href="/u/{{ user.id }}" class="default" style="font-weight: bold; color: {{ page.ranks[user.rank_main].colour }};">{{ user.username }}</a>
|
||||
</td>
|
||||
<td>
|
||||
{{ user.regdate|date("l Y-m-d H:i T") }}
|
||||
</td>
|
||||
<td>
|
||||
{% if user.lastdate == 0 %}<i>Never logged in.</i>{% else %}{{ user.lastdate|date("l Y-m-d H:i T") }}{% endif %}
|
||||
</td>
|
||||
<td>
|
||||
{% if not user.usertitle %}<i>{{ page.ranks[user.rank_main].title }}</i>{% else %}{{ user.usertitle }}{% endif %}
|
||||
</td>
|
||||
<td>
|
||||
<img src="//{{ sakura.urls.content }}/images/flags/{% if user.country|lower == 'eu' %}europeanunion{% else %}{{ user.country|lower }}{% endif %}.png" alt="{% if user.country|lower == 'eu' %}?{% else %}{{ user.country }}{% endif %}" />
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
{% endfor %}
|
||||
</table>
|
||||
{% else %}
|
||||
{% for user in page.users[page.page] %}
|
||||
<a href="/u/{{ user.id }}">{# These comment tags are here to prevent the link extending too far
|
||||
#}<div class="userBox" id="u{{ user.id }}">{#
|
||||
#}<img src="//{{ sakura.urls.content }}/pixel.png" alt="{{ user.username }}" style="background: url('/a/{{ user.id }}') no-repeat center / contain;" />{#
|
||||
#}<span class="userBoxUserName"{% if page.sort == page.sorts[1] %} style="color: {{ page.ranks[user.rank_main].colour }};"{% endif %}>{#
|
||||
#}{{ user.username }}{#
|
||||
#}</span>{#
|
||||
#}</div>{#
|
||||
#}</a>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if page.users|length > 1 %}
|
||||
<h2 style="cursor: default;">[
|
||||
{% for count,navpage in page.users %}
|
||||
<a href="/members/{% if page.sort != page.sorts[0] %}{{ page.sort }}/{% endif %}{% if page.active %}{{ page.active }}/{% endif %}p{{ count + 1 }}" class="default">{{ count + 1 }}</a>
|
||||
{% endfor %}
|
||||
]</h2>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="content standalone" style="padding: 20px;">
|
||||
<h1>Login to view this page!</h1>
|
||||
If you actually are logged in something went wrong and you should report this to the administrator.<br />
|
||||
If you aren't logged in please log in or create an account if you don't have one.
|
||||
</div>
|
||||
{% endif %}
|
||||
{% include 'global/footer.tpl' %}
|
|
@ -875,7 +875,7 @@ h1.stylised {
|
|||
.membersPage a {
|
||||
color: inherit;
|
||||
}
|
||||
.membersPage .groupBox, .membersPage .userBox {
|
||||
.membersPage .userBox {
|
||||
background: linear-gradient(180deg, #C2AFFE, #B19EED) no-repeat scroll left top / cover #C2AFFE;
|
||||
margin: 7px;
|
||||
border-radius: 5px;
|
||||
|
@ -885,35 +885,73 @@ h1.stylised {
|
|||
vertical-align: top;
|
||||
transition: box-shadow .2s;
|
||||
}
|
||||
.membersPage .groupBox {
|
||||
padding: 5px;
|
||||
font-size: 15px;
|
||||
min-width: 150px;
|
||||
text-shadow: 0 0 1em #888;
|
||||
}
|
||||
.membersPage .userBox {
|
||||
padding: 10px;
|
||||
line-height: 330%;
|
||||
width: 200px;
|
||||
height: 230px;
|
||||
}
|
||||
.membersPage .groupBox:hover, .membersPage .userBox:hover {
|
||||
.membersPage .userBox:hover {
|
||||
box-shadow: 0 0 1em #000;
|
||||
cursor: pointer;
|
||||
}
|
||||
.membersPage .groupBox:active, .membersPage .userBox:active {
|
||||
.membersPage .userBox:active {
|
||||
box-shadow: 0 0 1.5em #609;
|
||||
}
|
||||
.membersPage .userBox img {
|
||||
width: 200px;
|
||||
height: 200px;
|
||||
display: block;
|
||||
margin: 0 auto;
|
||||
}
|
||||
.membersPage .userBox .userBoxUserName {
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.membersPage .boxes .userBox {
|
||||
width: 200px;
|
||||
height: 230px;
|
||||
}
|
||||
.membersPage .boxes .userBox img {
|
||||
width: 200px;
|
||||
height: 200px;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.membersPage .rectangles .userBox {
|
||||
width: 200px;
|
||||
height: 100px;
|
||||
text-align: left;
|
||||
}
|
||||
.membersPage .rectangles .userBox img {
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
display: inline-block;
|
||||
}
|
||||
.membersPage .rectangles .userBox .userBoxUserName {
|
||||
display: inline-block;
|
||||
vertical-align: top;
|
||||
padding: 30px 10px;
|
||||
}
|
||||
|
||||
.membersPage .list table {
|
||||
margin: 10px auto;
|
||||
background: #C2AFFE;
|
||||
box-shadow: 0 0 3px #9475B2;
|
||||
border: 1px solid #9475B2;
|
||||
max-width: 1024px;
|
||||
width: auto;
|
||||
border-radius: 3px;
|
||||
border-spacing: 0;
|
||||
}
|
||||
.membersPage .list table td,
|
||||
.membersPage .list table th {
|
||||
padding: 4px 8px;
|
||||
}
|
||||
.membersPage .list thead th {
|
||||
border-bottom: 1px solid #9475B2;
|
||||
background: #A586C4;
|
||||
}
|
||||
.membersPage .list tfoot th {
|
||||
border-top: 1px solid #9475B2;
|
||||
background: #A586C4;
|
||||
}
|
||||
|
||||
/* Drop Down Styling */
|
||||
.dropDown {
|
||||
display: inline-block;
|
||||
|
|
|
@ -30,6 +30,16 @@ RewriteRule ^news?/?$ news.php
|
|||
RewriteRule ^news/([0-9]+)$ news.php?id=$1
|
||||
RewriteRule ^news.xml$ news.php?xml
|
||||
|
||||
## Members
|
||||
RewriteRule ^members?/?$ members.php
|
||||
RewriteRule ^members/([a-z]+)?/?$ members.php?sort=$1
|
||||
RewriteRule ^members/([0-9]+)?/?$ members.php?rank=$1
|
||||
RewriteRule ^members/p([0-9]+)?/?$ members.php?page=$1
|
||||
RewriteRule ^members/([a-z]+)/([0-9]+)?/?$ members.php?sort=$1&rank=$2
|
||||
RewriteRule ^members/([0-9]+)/p([0-9]+)?/?$ members.php?rank=$1&page=$2
|
||||
RewriteRule ^members/([a-z]+)/p([0-9]+)?/?$ members.php?sort=$1&page=$2
|
||||
RewriteRule ^members/([a-z]+)/([0-9]+)/p([0-9]+)?/?$ members.php?sort=$1&rank=$2&page=$3
|
||||
|
||||
## Profiles
|
||||
RewriteRule ^u$|u/$ profile.php
|
||||
RewriteRule ^u/([A-Za-z0-9_-\s\.]+)?/?$ profile.php?u=$1
|
||||
|
|
27
main/members.php
Normal file
27
main/members.php
Normal file
|
@ -0,0 +1,27 @@
|
|||
<?php
|
||||
/*
|
||||
* Sakura Memberlist
|
||||
*/
|
||||
|
||||
// Declare Namespace
|
||||
namespace Sakura;
|
||||
|
||||
// Include components
|
||||
require_once str_replace(basename(__DIR__), '', dirname(__FILE__)) .'_sakura/sakura.php';
|
||||
|
||||
// Add page specific things
|
||||
$renderData['page'] = [
|
||||
|
||||
'ranks' => ($_MEMBERLIST_RANKS = Users::getAllRanks()),
|
||||
'active' => ($_MEMBERLIST_ACTIVE = (isset($_GET['rank']) && $_GET['rank'] && array_key_exists($_GET['rank'], $_MEMBERLIST_RANKS) ? $_GET['rank'] : 0)),
|
||||
'notfound' => ($_MEMBERLIST_NFOUND = (isset($_GET['rank']) && !array_key_exists($_GET['rank'], $_MEMBERLIST_RANKS) && $_GET['rank'] != 0)),
|
||||
'sorts' => ($_MEMBERLIST_SORTS = ['boxes', 'rectangles', 'list']),
|
||||
'sort' => isset($_GET['sort']) && $_GET['sort'] && in_array($_GET['sort'], $_MEMBERLIST_SORTS) ? $_GET['sort'] : $_MEMBERLIST_SORTS[0],
|
||||
'title' => isset($_GET['rank']) && $_GET['rank'] && !$_MEMBERLIST_NFOUND ? 'Viewing '. $_MEMBERLIST_RANKS[$_GET['rank']]['name'] . ($_MEMBERLIST_RANKS[$_GET['rank']]['multi'] ? 's' : '') : 'Member List',
|
||||
'page' => isset($_GET['page']) && ($_GET['page'] - 1) >= 0 ? $_GET['page'] - 1 : 0,
|
||||
'users' => array_chunk($_MEMBERLIST_ACTIVE && !$_MEMBERLIST_NFOUND ? Users::getUsersInRank($_MEMBERLIST_ACTIVE) : Users::getAllUsers(), 30, true)
|
||||
|
||||
];
|
||||
|
||||
// Print page contents
|
||||
print Templates::render('main/memberlist.tpl', $renderData);
|
Reference in a new issue