summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoremkael <emkael@tlen.pl>2018-08-24 12:53:41 +0200
committeremkael <emkael@tlen.pl>2018-08-24 12:54:15 +0200
commit6f9756cf49e2e2802916ef251732a9377ddd756b (patch)
tree66bf607583b9ed856341454b505b0c50d9487d24
parent83c732f6c67c05b641cd0d37d9e8718cbf061c65 (diff)
Alowingg players to not be displayed by name in the rankings
-rwxr-xr-xbin/rankings-csv-import.sh3
-rw-r--r--docs/db-structure.sql25
-rw-r--r--http/_res/ranking.js67
-rw-r--r--scripts/datafiles-generate.py45
-rw-r--r--scripts/players-compile.py25
-rw-r--r--scripts/pyranking/fetch.py3
-rw-r--r--scripts/rankings-tables-compile.py6
7 files changed, 113 insertions, 61 deletions
diff --git a/bin/rankings-csv-import.sh b/bin/rankings-csv-import.sh
index 90ce6bc..54ce6bc 100755
--- a/bin/rankings-csv-import.sh
+++ b/bin/rankings-csv-import.sh
@@ -7,10 +7,11 @@ REPLACE
INTO TABLE temp_rankings
FIELDS TERMINATED BY ',';
INSERT INTO rankings (
- SELECT pid, \`date\`, place, score, region, flags, rank, club
+ SELECT pid, \`date\`, place, score, region, flags, rank, club, 0
FROM temp_rankings
JOIN players
ON players.id = temp_rankings.pid
);
+UPDATE rankings SET hidden = 1 WHERE pid IN (SELECT pid FROM hidden_players);
SET foreign_key_checks = 1
" ${DBCONFIG[4]}
diff --git a/docs/db-structure.sql b/docs/db-structure.sql
index 35fdc52..d794532 100644
--- a/docs/db-structure.sql
+++ b/docs/db-structure.sql
@@ -39,7 +39,8 @@ CREATE TABLE `rankings` (
`region` varchar(2) COLLATE utf8_unicode_520_ci NOT NULL,
`flags` varchar(2) COLLATE utf8_unicode_520_ci NOT NULL,
`rank` decimal(3,1) NOT NULL,
- `club` varchar(100) COLLATE utf8_unicode_520_ci NOT NULL
+ `club` varchar(100) COLLATE utf8_unicode_520_ci NOT NULL,
+ `hidden` tinyint(1) NOT NULL DEFAULT 0
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_520_ci;
-- --------------------------------------------------------
@@ -58,6 +59,16 @@ CREATE TABLE `temp_rankings` (
`score` decimal(8,4) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_520_ci;
+-- --------------------------------------------------------
+
+--
+-- Struktura tabeli dla tabeli `hidden_players`
+--
+
+CREATE TABLE `hidden_players` (
+ `pid` int(11) NOT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_520_ci;
+
--
-- Indeksy dla zrzutów tabel
--
@@ -81,6 +92,12 @@ ALTER TABLE `temp_rankings`
ADD PRIMARY KEY (`pid`,`date`);
--
+-- Indexes for table `hidden_players`
+--
+ALTER TABLE `hidden_players`
+ ADD PRIMARY KEY (`pid`);
+
+--
-- Ograniczenia dla zrzutów tabel
--
@@ -95,3 +112,9 @@ ALTER TABLE `rankings`
--
ALTER TABLE `temp_rankings`
ADD CONSTRAINT `temp_rankings_ibfk_1` FOREIGN KEY (`pid`) REFERENCES `players` (`id`) ON UPDATE CASCADE;
+
+--
+-- Ograniczenia dla tabeli `hidden_players`
+--
+ALTER TABLE `hidden_players`
+ ADD CONSTRAINT `hidden_players_ibfk_1` FOREIGN KEY (`pid`) REFERENCES `players` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
diff --git a/http/_res/ranking.js b/http/_res/ranking.js
index 3b116d6..3115190 100644
--- a/http/_res/ranking.js
+++ b/http/_res/ranking.js
@@ -142,31 +142,48 @@ var ranking = {
buildTableRow: function(row) {
var tableRow = ranking.tableRowTemplate.clone(true);
- tableRow.find('td.pid').text(row['pid']);
- tableRow.find('td.pidlink a').attr(
- 'href',
- 'https://msc.com.pl/cezar/?p=21&pid=' + row['pid']
- );
- tableRow.find('td.name').text(row['player']);
- tableRow.find('td.club').text(row['club']);
- ['gender', 'age', 'region'].forEach(function(category) {
- tableRow.find('td.' + category).text(row[category]);
- var categoryPlace = tableRow.find('td.' + category + '-place');
- categoryPlace.find('.rank').text(row[category + '-place']);
- var badge = categoryPlace.find('.change');
- badge.text(row[category + '-change']);
- badge.addClass('label-' + row[category + '-change-class']);
- if (row[category + '-place'] == 1) {
- tableRow.addClass('info');
- }
- });
- var scoreCell = tableRow.find('td.ranking span');
- scoreCell.attr('title', row['score']);
- scoreCell.text(row['score'].toFixed(2));
- tableRow.find('td.place .rank').text(row['place']);
- var badge = tableRow.find('td.place .change');
- badge.text(row['place-change']);
- badge.addClass('label-' + row['place-change-class']);
+ var filterCategories = ['gender', 'age', 'region'];
+ if (row['pid']) {
+ tableRow.find('td.pid').text(row['pid']);
+ tableRow.find('td.pidlink a').attr(
+ 'href',
+ 'https://msc.com.pl/cezar/?p=21&pid=' + row['pid']
+ );
+ tableRow.find('td.name').text(row['player']);
+ tableRow.find('td.club').text(row['club']);
+ filterCategories.forEach(function(category) {
+ tableRow.find('td.' + category).text(row[category]);
+ var categoryPlace = tableRow.find('td.' + category + '-place');
+ categoryPlace.find('.rank').text(row[category + '-place']);
+ var badge = categoryPlace.find('.change');
+ badge.text(row[category + '-change']);
+ badge.addClass('label-' + row[category + '-change-class']);
+ if (row[category + '-place'] == 1) {
+ tableRow.addClass('info');
+ }
+ });
+ var scoreCell = tableRow.find('td.ranking span');
+ scoreCell.attr('title', row['score']);
+ scoreCell.text(row['score'].toFixed(2));
+ tableRow.find('td.place .rank').text(row['place']);
+ var badge = tableRow.find('td.place .change');
+ badge.text(row['place-change']);
+ badge.addClass('label-' + row['place-change-class']);
+ } else {
+ var columnCnt = 0;
+ tableRow.find('td').each(function(idx) {
+ if (idx > 0) {
+ $(this).remove();
+ columnCnt++;
+ }
+ });
+ var fillerRow = $('<td>').attr('colspan', columnCnt);
+ filterCategories.forEach(function(category) {
+ fillerRow.attr('data-' + category, row.category);
+ });
+ tableRow.append(fillerRow);
+ tableRow.find('.rank').text(row['place']);
+ }
return tableRow;
},
diff --git a/scripts/datafiles-generate.py b/scripts/datafiles-generate.py
index 5cee451..2115c20 100644
--- a/scripts/datafiles-generate.py
+++ b/scripts/datafiles-generate.py
@@ -7,24 +7,33 @@ ranking_date = sys.argv[1]
ranking = fetch_ranking(ranking_date)
old_ranking = fetch_ranking(sys.argv[2], True) if len(sys.argv) > 2 else {}
+categories = ['gender', 'age', 'region']
+
for row in ranking:
- if row['pid'] in old_ranking:
- row['place-change'] = old_ranking[row['pid']]['place'] - row['place']
- row['place-change-class'] = 'success' if row['place-change'] > 0 else 'danger'
- row['place-change'] = '%+d' % (row['place-change'])
- if row['place-change'] == '+0':
- row['place-change'] = '='
- row['place-change-class'] = 'default'
- for category in ['gender', 'age', 'region']:
- if row[category] == old_ranking[row['pid']][category]:
- row[category + '-change'] = old_ranking[row['pid']][category + '-place'] - row[category + '-place']
- row[category + '-change-class'] = 'success' if row[category + '-change'] > 0 else 'danger'
- row[category + '-change'] = '%+d' % (row[category + '-change'])
- if row[category + '-change'] == '+0':
- row[category + '-change'] = '='
- row[category + '-change-class'] = 'default'
- for field in row:
- if isinstance(row[field], Decimal):
- row[field] = float(row[field])
+ if row['hidden']:
+ for field in row:
+ if field not in ['place'] + categories:
+ row[field] = None
+ row['player'] = ''
+ row['club'] = ''
+ else:
+ if row['pid'] in old_ranking:
+ row['place-change'] = old_ranking[row['pid']]['place'] - row['place']
+ row['place-change-class'] = 'success' if row['place-change'] > 0 else 'danger'
+ row['place-change'] = '%+d' % (row['place-change'])
+ if row['place-change'] == '+0':
+ row['place-change'] = '='
+ row['place-change-class'] = 'default'
+ for category in categories:
+ if row[category] == old_ranking[row['pid']][category]:
+ row[category + '-change'] = old_ranking[row['pid']][category + '-place'] - row[category + '-place']
+ row[category + '-change-class'] = 'success' if row[category + '-change'] > 0 else 'danger'
+ row[category + '-change'] = '%+d' % (row[category + '-change'])
+ if row[category + '-change'] == '+0':
+ row[category + '-change'] = '='
+ row[category + '-change-class'] = 'default'
+ for field in row:
+ if isinstance(row[field], Decimal):
+ row[field] = float(row[field])
print json.dumps(ranking)
diff --git a/scripts/players-compile.py b/scripts/players-compile.py
index 613c01f..ed82c12 100644
--- a/scripts/players-compile.py
+++ b/scripts/players-compile.py
@@ -17,18 +17,19 @@ players = {}
for date in sorted(dates.keys()):
for player, ranking in fetch_ranking(date, True).iteritems():
- if player not in players:
- players[player] = {'rankings':{}}
- players[player]['name'] = ranking['player']
- players[player]['club'] = ranking['club']
- players[player]['rankings'][date] = {'change': 'N','change-class':'primary'}
- for field in ['place', 'score']:
- players[player]['rankings'][date][field] = ranking[field]
- for field in ['gender', 'age', 'region']:
- players[player]['rankings'][date][field] = ranking[field]
- players[player]['rankings'][date][field + '-place'] = ranking[field + '-place']
- players[player]['rankings'][date][field + '-change'] = 'N'
- players[player]['rankings'][date][field + '-change-class'] = 'primary'
+ if not ranking['hidden']:
+ if player not in players:
+ players[player] = {'rankings':{}}
+ players[player]['name'] = ranking['player']
+ players[player]['club'] = ranking['club']
+ players[player]['rankings'][date] = {'change': 'N','change-class':'primary'}
+ for field in ['place', 'score']:
+ players[player]['rankings'][date][field] = ranking[field]
+ for field in ['gender', 'age', 'region']:
+ players[player]['rankings'][date][field] = ranking[field]
+ players[player]['rankings'][date][field + '-place'] = ranking[field + '-place']
+ players[player]['rankings'][date][field + '-change'] = 'N'
+ players[player]['rankings'][date][field + '-change-class'] = 'primary'
for pid, player in players.iteritems():
template = bs4(file('templates/player.html'), 'lxml')
diff --git a/scripts/pyranking/fetch.py b/scripts/pyranking/fetch.py
index 304f509..67ab5a6 100644
--- a/scripts/pyranking/fetch.py
+++ b/scripts/pyranking/fetch.py
@@ -9,7 +9,8 @@ def fetch_ranking(date, assoc=False):
rankings.region, rankings.club,
REPLACE(rankings.flags, "K", "") age,
IF(rankings.flags LIKE 'K%', "K", "") gender,
- rankings.score
+ rankings.score,
+ rankings.hidden
FROM rankings
JOIN players
ON players.id = rankings.pid
diff --git a/scripts/rankings-tables-compile.py b/scripts/rankings-tables-compile.py
index 52b036f..f1a0cc8 100644
--- a/scripts/rankings-tables-compile.py
+++ b/scripts/rankings-tables-compile.py
@@ -1,4 +1,4 @@
-import os, sys
+import os, sys, time
from bs4 import BeautifulSoup as bs4
ranking_date = sys.argv[4]
@@ -9,8 +9,8 @@ subtitle = 'notowanie %s (%s), stan na %s' % (
table = bs4(file('templates/ranking.html'), 'lxml')
table.select('.page-header h2 small')[0].string = subtitle
-table.select('table.data-table')[0]['data-ranking'] = '_data/%s.json' % (
- ranking_date)
+table.select('table.data-table')[0]['data-ranking'] = '_data/%s.json?%d' % (
+ ranking_date, int(time.time()))
script_src = table.select('script[src="_res/ranking.js"]')[0]
script_src['src'] = '%s?%d' % ('_res/ranking.js', os.path.getmtime('http/_res/ranking.js'))