Skip to content

Commit 97c1e7f

Browse files
committed
Achievements Leaderboard
1 parent 946c604 commit 97c1e7f

File tree

23 files changed

+81
-17
lines changed

23 files changed

+81
-17
lines changed

.idea/dataSources.xml

+2-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/php.xml

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

css/05-interactions.css

+3
Original file line numberDiff line numberDiff line change
@@ -909,3 +909,6 @@ select-custom {
909909
height: 3.5rem;
910910
margin-right: 0.5rem;
911911
}
912+
.no-select {
913+
user-select: none;
914+
}

css/06-common.css

+25
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,31 @@ footer address a .linkIcon {
140140
justify-content: space-evenly;
141141
align-items: center;
142142
}
143+
ul.searchResults,
144+
ol.searchResults {
145+
margin-block-start: 0;
146+
margin-block-end: 0;
147+
margin-inline-start: 0;
148+
margin-inline-end: 0;
149+
padding-inline-start: 0;
150+
}
151+
.searchResults li {
152+
display: inline-flex;
153+
flex-direction: row;
154+
flex-wrap: wrap;
155+
align-content: center;
156+
justify-content: space-evenly;
157+
align-items: center;
158+
width: clamp(30%, 50%, 16rem);
159+
margin: .2rem;
160+
}
161+
.searchResults li .entityCard {
162+
width: 80%;
163+
margin: 0;
164+
}
165+
.list-decimal {
166+
list-style-type: decimal;
167+
}
143168
.searchCount {
144169
text-align: center;
145170
margin-bottom: 0.5rem;

css/fftracker.css

+4
Original file line numberDiff line numberDiff line change
@@ -93,3 +93,7 @@
9393
.ff_duplicate_names td:nth-child(3) {
9494
width: 60%;
9595
}
96+
.ff_achievement_points {
97+
width: 1rem;
98+
height: 1rem;
99+
}

lib/Abstracts/Pages/Listing.php

+1
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ protected function generate(array $path): array
2929
$page = intval($_GET['page'] ?? 1);
3030
#Get search results
3131
$outputArray = [];
32+
$outputArray['numbered'] = $this->types[$this->subServiceName]['numbered'] ?? false;
3233
$outputArray['searchResult'] = (new $this->types[$this->subServiceName]['class'])->listEntities($page, $this->searchFor);
3334
#If int is returned, we have a bad page
3435
if (is_int($outputArray['searchResult'])) {

lib/Abstracts/Search.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ abstract class Search
4444
final public function __construct(array $bindings = [], ?string $where = null, ?string $order = null, ?string $group = null)
4545
{
4646
#Check that subclass has set appropriate properties, except $where, which is ok to inherit
47-
foreach (['entityType', 'table', 'fields', 'fulltext', 'orderDefault', 'orderList'] as $property) {
47+
foreach (['entityType', 'table', 'fields', 'orderDefault', 'orderList'] as $property) {
4848
if(empty($this->{$property})) {
4949
throw new \LogicException(get_class($this) . ' must have a non-empty `'.$property.'` property.');
5050
}

lib/fftracker/Pages/Listing.php

+1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ class Listing extends \Simbiat\Abstracts\Pages\Listing
2525
'pvpteams' => ['name' => 'PvP Teams', 'class' => '\Simbiat\fftracker\Search\PVP'],
2626
'linkshells' => ['name' => 'Linkshells', 'class' => '\Simbiat\fftracker\Search\Linkshells'],
2727
'achievements' => ['name' => 'Achievements', 'class' => '\Simbiat\fftracker\Search\Achievements'],
28+
'points' => ['name' => 'Achievements Leaderboard', 'class' => '\Simbiat\fftracker\Search\Points', 'numbered' => true],
2829
];
2930
#Full title to be used for description metatags when having a search value
3031
protected string $fullTitle = 'Search for `%s` on Final Fantasy XIV Tracker';

lib/fftracker/Router.php

+2-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
class Router extends \Simbiat\Abstracts\Router
88
{
99
#List supported "paths". Basic ones only, some extra validation may be required further
10-
protected array $subRoutes = ['search', 'characters', 'freecompanies', 'pvpteams', 'linkshells', 'crossworld_linkshells', 'crossworldlinkshells', 'achievements', 'statistics', 'crests', 'track',
10+
protected array $subRoutes = ['search', 'characters', 'freecompanies', 'pvpteams', 'linkshells', 'crossworld_linkshells', 'crossworldlinkshells', 'achievements', 'statistics', 'crests', 'track', 'points',
1111
#legacy singular nodes
1212
'character', 'freecompany', 'pvpteam', 'linkshell', 'crossworld_linkshell', 'crossworldlinkshell', 'achievement'];
1313
#Current breadcrumb for navigation
@@ -34,6 +34,7 @@ protected function pageGen(array $path): array
3434
'linkshells' => (!empty($path[1]) ? (new Pages\Linkshell())->get(array_slice($path, 1)) : (new Pages\Listing())->get($path)),
3535
'crossworld_linkshells', 'crossworldlinkshells' => (!empty($path[1]) ? (new Pages\CrossworldLinkshell())->get(array_slice($path, 1)) : (new Pages\Listing())->get($path)),
3636
'achievements' => (!empty($path[1]) ? (new Pages\Achievement())->get(array_slice($path, 1)) : (new Pages\Listing())->get($path)),
37+
'points' => (new Pages\Listing())->get($path),
3738
#Redirects
3839
'character' => (new Redirects\Character())->get(array_slice($path, 1)),
3940
'freecompany' => (new Redirects\FreeCompany())->get(array_slice($path, 1)),

lib/fftracker/Search/Points.php

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?php
2+
declare(strict_types=1);
3+
namespace Simbiat\fftracker\Search;
4+
use Simbiat\Abstracts\Search;
5+
6+
class Points extends Search
7+
{
8+
#Type of entity to return as static value in results (required for frontend routing)
9+
protected string $entityType = 'character';
10+
#Name of the table to search use
11+
protected string $table = 'ffxiv__character';
12+
#List of fields
13+
protected string $fields = '`characterid` as `id`, `name`, `avatar` AS `icon`, `updated`, `userid`, `achievement_points`';
14+
#Optional WHERE clause for every SELECT
15+
protected string $where = '`achievement_points`>0';
16+
#Default order (for main page, for example)
17+
protected string $orderDefault = '`achievement_points` DESC, `name` ASC';
18+
#Order for list pages
19+
protected string $orderList = '`achievement_points` DESC, `name` ASC';
20+
}
1012 Bytes
Binary file not shown.

public/assets/styles/app.css

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

public/assets/styles/app.css.map

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

public/assets/styles/tinymce.css

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

public/assets/styles/tinymce.css.map

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

twig/common/elements/entitycard.twig

+3
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,9 @@
7070
<b>{% if detailedType == 'Changelog' and is_numeric(name) %}{{ timeTag(name, "Y.m.d") }}{% else %}{{ name }}{% endif %}</b>
7171
{% else %}
7272
{{ name }}
73+
{% if (type == 'character') and achievement_points %}
74+
<br><img class="ff_achievement_points" loading="lazy" decoding="async" alt="{{ achievement_points }} points" data-tooltip="{{ achievement_points }} points" src="/assets/images/fftracker/Cup.webp">{{ achievement_points }}
75+
{% endif %}
7376
{% endif %}
7477
{% if userid %}
7578
<sup>🔗</sup>

twig/common/layout/navigation.twig

+1
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@
5353
<li{% if subServiceName == 'pvpteam' or (subServiceName == 'pvpteams' and searchValue is not defined) %} class="current"{% endif %}><a class="navItem" href="/fftracker/pvpteams" target="_self" itemprop="url"><span itemprop="name">PvP Teams</span></a></li>
5454
<li{% if subServiceName == 'linkshell' or (subServiceName == 'linkshells' and searchValue is not defined) %} class="current"{% endif %}><a class="navItem" href="/fftracker/linkshells" target="_self" itemprop="url"><span itemprop="name">Linkshells</span></a></li>
5555
<li{% if subServiceName == 'achievement' or (subServiceName == 'achievements' and searchValue is not defined) %} class="current"{% endif %}><a class="navItem" href="/fftracker/achievements" target="_self" itemprop="url"><span itemprop="name">Achievements</span></a></li>
56+
<li{% if subServiceName == 'points' %} class="current"{% endif %}><a class="navItem" href="/fftracker/points" target="_self" itemprop="url"><span itemprop="name">Leaderboard</span></a></li>
5657
<li{% if subServiceName == 'track' %} class="current"{% endif %}><a class="navItem" href="/fftracker/track" target="_self" itemprop="url"><span itemprop="name">Track entity</span></a></li>
5758
<li{% if subServiceName == 'crests' %} class="current"{% endif %}><a class="navItem" href="/fftracker/crests" target="_self" itemprop="url"><span itemprop="name">Crests</span></a></li>
5859
</ul>

twig/common/pages/list.twig

+3-3
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
{% else %}
44
<p>Showing {{ searchResult.entities|length }} from total of {{ searchResult.count }}.</p>
55
{% endif %}
6-
<div class="searchResults">
6+
<{% if numbered %}ol{% else %}div{% endif %} class="searchResults">
77
{% for entity in searchResult.entities %}
8-
{{ include('common/elements/entitycard.twig', entity) }}
8+
{% if numbered %}<li><span class="no-select">{{ loop.index+((pagination.current-1)*100) }}.</span>{% endif %}{{ include('common/elements/entitycard.twig', entity) }}{% if numbered %}</li>{% endif %}
99
{% endfor %}
10-
</div>
10+
</{% if numbered %}ol{% else %}div{% endif %}>

twig/fftracker/fftracker.twig

+2
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@
4040
{{ include('common/pages/list.twig') }}
4141
{% elseif subServiceName == 'achievements' %}
4242
{{ include('common/pages/list.twig') }}
43+
{% elseif subServiceName == 'points' %}
44+
{{ include('common/pages/list.twig') }}
4345
{% elseif subServiceName == 'character' %}
4446
{{ include('fftracker/character.twig') }}
4547
{% elseif subServiceName == 'linkshell' %}

twig/fftracker/statistics/achievements.twig

+1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
<p>All data below is for {{ timeTag(ffstats.data.time, "d/m/Y") }}.</p>
2+
<p>Achievement leaderboard can be found <a href="/fftracker/points">here</a>.</p>
23
{% for categoryname, category in ffstats.data.achievements %}
34
<table>
45
<caption><h2>Top 20 rarest "{{ categoryname }}" achievements</h2></caption>

vendor/composer/autoload_classmap.php

+1
Original file line numberDiff line numberDiff line change
@@ -503,6 +503,7 @@
503503
'Simbiat\\fftracker\\Search\\Companies' => $baseDir . '/lib/fftracker/Search/Companies.php',
504504
'Simbiat\\fftracker\\Search\\Linkshells' => $baseDir . '/lib/fftracker/Search/Linkshells.php',
505505
'Simbiat\\fftracker\\Search\\PVP' => $baseDir . '/lib/fftracker/Search/PVP.php',
506+
'Simbiat\\fftracker\\Search\\Points' => $baseDir . '/lib/fftracker/Search/Points.php',
506507
'Simbiat\\fftracker\\Statistics' => $baseDir . '/lib/fftracker/Statistics.php',
507508
'Simbiat\\http20\\Atom' => $vendorDir . '/simbiat/http20/src/Atom.php',
508509
'Simbiat\\http20\\Common' => $vendorDir . '/simbiat/http20/src/Common.php',

vendor/composer/autoload_psr4.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
'Simbiat\\http20\\' => array($vendorDir . '/simbiat/http20/src'),
1616
'Simbiat\\Database\\' => array($vendorDir . '/simbiat/database/src'),
1717
'Simbiat\\Cron\\' => array($vendorDir . '/simbiat/cron/src'),
18-
'Simbiat\\' => array($baseDir . '/lib', $vendorDir . '/simbiat/accountkeying/src', $vendorDir . '/simbiat/arrayhelpers/src', $vendorDir . '/simbiat/filename-sanitizer/src', $vendorDir . '/simbiat/htmlcut/src', $vendorDir . '/simbiat/nl2tag/src', $vendorDir . '/simbiat/optimize-tables/src', $vendorDir . '/simbiat/sand-clock/src', $vendorDir . '/simbiat/lodestone-parser/src'),
18+
'Simbiat\\' => array($baseDir . '/lib', $vendorDir . '/simbiat/accountkeying/src', $vendorDir . '/simbiat/arrayhelpers/src', $vendorDir . '/simbiat/filename-sanitizer/src', $vendorDir . '/simbiat/htmlcut/src', $vendorDir . '/simbiat/lodestone-parser/src', $vendorDir . '/simbiat/nl2tag/src', $vendorDir . '/simbiat/optimize-tables/src', $vendorDir . '/simbiat/sand-clock/src'),
1919
'SendGrid\\Stats\\' => array($vendorDir . '/sendgrid/sendgrid/lib/stats'),
2020
'SendGrid\\Mail\\' => array($vendorDir . '/sendgrid/sendgrid/lib/mail'),
2121
'SendGrid\\Helper\\' => array($vendorDir . '/sendgrid/sendgrid/lib/helper'),

vendor/composer/autoload_static.php

+5-4
Original file line numberDiff line numberDiff line change
@@ -121,10 +121,10 @@ class ComposerStaticInit9cb5e51127eac4482719e60ef4a40a8f
121121
2 => __DIR__ . '/..' . '/simbiat/arrayhelpers/src',
122122
3 => __DIR__ . '/..' . '/simbiat/filename-sanitizer/src',
123123
4 => __DIR__ . '/..' . '/simbiat/htmlcut/src',
124-
5 => __DIR__ . '/..' . '/simbiat/nl2tag/src',
125-
6 => __DIR__ . '/..' . '/simbiat/optimize-tables/src',
126-
7 => __DIR__ . '/..' . '/simbiat/sand-clock/src',
127-
8 => __DIR__ . '/..' . '/simbiat/lodestone-parser/src',
124+
5 => __DIR__ . '/..' . '/simbiat/lodestone-parser/src',
125+
6 => __DIR__ . '/..' . '/simbiat/nl2tag/src',
126+
7 => __DIR__ . '/..' . '/simbiat/optimize-tables/src',
127+
8 => __DIR__ . '/..' . '/simbiat/sand-clock/src',
128128
),
129129
'SendGrid\\Stats\\' =>
130130
array (
@@ -704,6 +704,7 @@ class ComposerStaticInit9cb5e51127eac4482719e60ef4a40a8f
704704
'Simbiat\\fftracker\\Search\\Companies' => __DIR__ . '/../..' . '/lib/fftracker/Search/Companies.php',
705705
'Simbiat\\fftracker\\Search\\Linkshells' => __DIR__ . '/../..' . '/lib/fftracker/Search/Linkshells.php',
706706
'Simbiat\\fftracker\\Search\\PVP' => __DIR__ . '/../..' . '/lib/fftracker/Search/PVP.php',
707+
'Simbiat\\fftracker\\Search\\Points' => __DIR__ . '/../..' . '/lib/fftracker/Search/Points.php',
707708
'Simbiat\\fftracker\\Statistics' => __DIR__ . '/../..' . '/lib/fftracker/Statistics.php',
708709
'Simbiat\\http20\\Atom' => __DIR__ . '/..' . '/simbiat/http20/src/Atom.php',
709710
'Simbiat\\http20\\Common' => __DIR__ . '/..' . '/simbiat/http20/src/Common.php',

0 commit comments

Comments
 (0)