diff --git a/dao.py b/dao.py index 2c8546c..042710f 100644 --- a/dao.py +++ b/dao.py @@ -5,6 +5,7 @@ import os import pymongo import re +from itertools import groupby from config.config import Config @@ -189,6 +190,40 @@ def update_player_name(self, player, name): player.name = name return self.update_player(player) + def get_all_player_tournaments_by_id(self, id): + result = self.players_col.find({"_id": id}) + if result.count() == 0: + return None + tournaments = \ + [ M.Tournament.load(t, context='db') for t in self.tournaments_col.find({'players': {'$in': [id] }}) ] + return tournaments + + def sort_player_tournaments_by_region(self, id): + result = self.players_col.find({"_id": id}) + if result.count() == 0: + return None + tournaments = self.get_all_player_tournaments_by_id(id) + + region_count = {} + for tournament in tournaments: + if not tournament.regions[0]: pass + + region = tournament.regions[0] + if region_count.get(region, None) is None: + region_count[region] = 0 + region_count[region] = region_count[region] + 1 + + counts = [] + for region, count in region_count.iteritems(): + r = { + 'name': region, + 'count': count + } + counts.append(r) + counts = sorted(counts, key=lambda x: x['count'], reverse=True) + return counts + + def insert_pending_tournament(self, pending_tournament): return self.pending_tournaments_col.insert(pending_tournament.dump(context='db')) @@ -566,7 +601,7 @@ def get_region_ranking_criteria(self, region_id): result = self.regions_col.find_one({'_id': region_id}) if result: region = M.Region.load(result, context='db') - return region.dump(context='web') + return region.dump(context='web') # throws an exception, which is okay because this is called from just create_user def insert_user(self, user): diff --git a/server.py b/server.py index fce5178..3f0bf29 100644 --- a/server.py +++ b/server.py @@ -245,6 +245,36 @@ def put(self, region, id): return player.dump(context='web') +class PlayerTournamentResource(restful.Resource): + def get(self, region, id): + dao = get_dao(None) + + try: + tournament_objects = dao.get_all_player_tournaments_by_id(ObjectId(id)) + tournaments = [] + for t in tournament_objects: + t = t.dump(context='web') + tournaments.append(t) + + return tournaments + except Exception as e: + print e + return 400 + +class PlayerSortedTournamentResource(restful.Resource): + def get(self, region, id): + dao = get_dao(None) + + try: + region_sorted_tournament_counts = dao.sort_player_tournaments_by_region(ObjectId(id)) + return region_sorted_tournament_counts + except Exception as e: + import traceback + traceback.print_exc(file=sys.stdout) + print 'errrrrrrrror' + print e + return 400 + class TournamentSeedResource(restful.Resource): @@ -1243,6 +1273,8 @@ def add_cors(resp): api.add_resource(PlayerListResource, '//players') api.add_resource(PlayerResource, '//players/') +api.add_resource(PlayerTournamentResource, '//players//tournaments') +api.add_resource(PlayerSortedTournamentResource, '//players//sortedtournaments') api.add_resource(TournamentSeedResource, '//tournamentseed') diff --git a/webapp/app/players/controllers/playerDetail.controller.js b/webapp/app/players/controllers/playerDetail.controller.js index 669583a..47e9ba3 100644 --- a/webapp/app/players/controllers/playerDetail.controller.js +++ b/webapp/app/players/controllers/playerDetail.controller.js @@ -51,16 +51,31 @@ angular.module('app.players').controller("PlayerDetailController", function($sco $scope.postParams = {name: $scope.player.name} $scope.playerRegionCheckbox = {} + $scope.isSuperAdmin = $scope.sessionService.isSuperAdmin(); $scope.sessionService.getAdminRegions().forEach( function(regionId){ - if($scope.isPlayerInRegion(regionId)){ + if ($scope.isPlayerInRegion(regionId)) { $scope.playerRegionCheckbox[regionId] = "IN_REGION"; - }else{ + } else if (!$scope.isPlayerInRegion(regionId)) { $scope.playerRegionCheckbox[regionId] = "NOT_IN_REGION"; + } + } + ); + + $scope.getRemainingRegions = function() { + retRegions = [] + adminRegions = $scope.sessionService.getAdminRegions(); + $scope.regionService.regions.forEach( + function(region) { + if (!adminRegions.includes(region.id)) { + retRegions.push(region); + } } - }); - + ) + return retRegions; + } + $scope.disableButtons = false; $scope.errorMessage = false; }; diff --git a/webapp/app/players/views/player_detail.html b/webapp/app/players/views/player_detail.html index a423599..bdd1592 100644 --- a/webapp/app/players/views/player_detail.html +++ b/webapp/app/players/views/player_detail.html @@ -12,6 +12,11 @@

+ +
+ +

{{regionService.region.display_name}}

+
diff --git a/webapp/app/players/views/player_details_modal.html b/webapp/app/players/views/player_details_modal.html index 2bddbad..4debcfa 100644 --- a/webapp/app/players/views/player_details_modal.html +++ b/webapp/app/players/views/player_details_modal.html @@ -16,11 +16,19 @@

class="mobile" ng-model="playerRegionCheckbox[regionId]" ng-true-value="'IN_REGION'" - ng-false-value="'NOT_IN_REGION'"> + > {{regionService.getRegionDisplayNameFromRegionId(regionId)}}

+
+

+ +

+

There was an error. Please make sure everything is spelled correctly and try again.

diff --git a/webapp/styles/style.css b/webapp/styles/style.css index 3ad67c4..adf7d0a 100644 --- a/webapp/styles/style.css +++ b/webapp/styles/style.css @@ -146,6 +146,20 @@ table{ background-color: rgba(0, 0, 0, 0.3); } +.player-region { + margin-left: 15px; + font-size: 16pt; + color: #777777; + transform: translateY(-30%); +} + +.readonly { + opacity: .50; + font-style: italic; + filter: alpha(opacity=50); + cursor: auto; +} + /*END application-wide styling */