From 6f9756cf49e2e2802916ef251732a9377ddd756b Mon Sep 17 00:00:00 2001 From: emkael Date: Fri, 24 Aug 2018 12:53:41 +0200 Subject: Alowingg players to not be displayed by name in the rankings --- bin/rankings-csv-import.sh | 3 +- docs/db-structure.sql | 25 +++++++++++++- http/_res/ranking.js | 67 ++++++++++++++++++++++++-------------- scripts/datafiles-generate.py | 45 +++++++++++++++---------- scripts/players-compile.py | 25 +++++++------- scripts/pyranking/fetch.py | 3 +- scripts/rankings-tables-compile.py | 6 ++-- 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 -- @@ -80,6 +91,12 @@ ALTER TABLE `rankings` 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 = $('').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')) -- cgit v1.2.3