Member list commit

This commit is contained in:
flash 2015-04-27 21:07:48 +00:00
parent 54f430572c
commit 9a1f44eed6
7 changed files with 231 additions and 17 deletions

View file

@ -14,7 +14,8 @@
"20150427.3", "20150427.3",
"20150427.4", "20150427.4",
"20150427.5", "20150427.5",
"20150427.6" "20150427.6",
"20150427.7"
] ]
@ -772,6 +773,19 @@
"change": "Remove origin check on CloudFlare country header." "change": "Remove origin check on CloudFlare country header."
} }
],
"20150427.7": [
{
"type": "ADD",
"change": "Add members page."
},
{
"type": "ADD",
"change": "Add members page pagination."
}
] ]
} }

View file

@ -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 // Get all users
public static function getAllUsers($includeInactive = true) { public static function getAllUsers($includeInactive = true) {
@ -860,7 +884,7 @@ class Users {
foreach($getUsers as $user) { foreach($getUsers as $user) {
// Skip if inactive and not include deactivated users // Skip if inactive and not include deactivated users
if(!$includeInactive && $user['rank_main'] < 2) if(!$includeInactive && self::checkIfUserHasRanks([0, 1], $user, true))
continue; continue;
$users[$user['id']] = $user; $users[$user['id']] = $user;

View file

@ -8,7 +8,7 @@
namespace Sakura; namespace Sakura;
// Define Sakura version // Define Sakura version
define('SAKURA_VERSION', '20150427.6'); define('SAKURA_VERSION', '20150427.7');
define('SAKURA_VLABEL', 'Heliotrope'); define('SAKURA_VLABEL', 'Heliotrope');
define('SAKURA_VTYPE', 'Development'); define('SAKURA_VTYPE', 'Development');
define('SAKURA_COLOUR', '#DF73FF'); define('SAKURA_COLOUR', '#DF73FF');

View 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' %}

View file

@ -875,7 +875,7 @@ h1.stylised {
.membersPage a { .membersPage a {
color: inherit; color: inherit;
} }
.membersPage .groupBox, .membersPage .userBox { .membersPage .userBox {
background: linear-gradient(180deg, #C2AFFE, #B19EED) no-repeat scroll left top / cover #C2AFFE; background: linear-gradient(180deg, #C2AFFE, #B19EED) no-repeat scroll left top / cover #C2AFFE;
margin: 7px; margin: 7px;
border-radius: 5px; border-radius: 5px;
@ -885,35 +885,73 @@ h1.stylised {
vertical-align: top; vertical-align: top;
transition: box-shadow .2s; transition: box-shadow .2s;
} }
.membersPage .groupBox {
padding: 5px;
font-size: 15px;
min-width: 150px;
text-shadow: 0 0 1em #888;
}
.membersPage .userBox { .membersPage .userBox {
padding: 10px; padding: 10px;
line-height: 330%; line-height: 330%;
width: 200px;
height: 230px;
} }
.membersPage .groupBox:hover, .membersPage .userBox:hover { .membersPage .userBox:hover {
box-shadow: 0 0 1em #000; box-shadow: 0 0 1em #000;
cursor: pointer; cursor: pointer;
} }
.membersPage .groupBox:active, .membersPage .userBox:active { .membersPage .userBox:active {
box-shadow: 0 0 1.5em #609; box-shadow: 0 0 1.5em #609;
} }
.membersPage .userBox img { .membersPage .userBox img {
width: 200px;
height: 200px;
display: block;
margin: 0 auto; margin: 0 auto;
} }
.membersPage .userBox .userBoxUserName { .membersPage .userBox .userBoxUserName {
font-weight: 700; 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 */ /* Drop Down Styling */
.dropDown { .dropDown {
display: inline-block; display: inline-block;

View file

@ -30,6 +30,16 @@ RewriteRule ^news?/?$ news.php
RewriteRule ^news/([0-9]+)$ news.php?id=$1 RewriteRule ^news/([0-9]+)$ news.php?id=$1
RewriteRule ^news.xml$ news.php?xml 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 ## Profiles
RewriteRule ^u$|u/$ profile.php RewriteRule ^u$|u/$ profile.php
RewriteRule ^u/([A-Za-z0-9_-\s\.]+)?/?$ profile.php?u=$1 RewriteRule ^u/([A-Za-z0-9_-\s\.]+)?/?$ profile.php?u=$1

27
main/members.php Normal file
View 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);