def start_game(request, game): """ Starts the game """ game_obj = get_game(game) if is_admin(request.user, game_obj): if request.method == 'POST': form = VerifyForm(request.POST) if form.is_valid(): if form.cleaned_data.get('are_you_sure'): game_obj.start_game() # calls save internally try: fb = api.get_persistent_graph(request, access_token=request.user.columbiauserprofile.access_token) if fb: url = 'http://assassins.columbiaesc.com' + reverse('assassins_manager.game.views.details', args=(game_obj.name,)) result = fb.set('me/cuassassins:start', game=url) except: pass return HttpResponseRedirect(reverse('assassins_manager.game.views.game_admin', args=(game,))) else: form = VerifyForm() return render_with_metadata(request, 'form.html', game, { 'form': form, 'formname': 'Start Game', }) else: return HttpResponseRedirect(reverse('assassins_manager.game.views.details', args=(game,)))
def squads(request, game, page_length=25): """ Shows all squads in the game, sorted by status and kills """ game_obj = get_game(game) if request.GET.get('sortby') == 'kills': squads = game_obj.squad_set.order_by('-kills', '-alive') l = 'Squads by kills' else: squads = game_obj.squad_set.order_by('-alive', '-kills') l = 'Squads by ranking' page = request.GET.get('page') paginator = Paginator(squads, page_length) try: s_list = paginator.page(page) except PageNotAnInteger: s_list = paginator.page(1) except EmptyPage: s_list = paginator.page(paginator.num_pages) return render_with_metadata(request, 'game/squads.html', game, { 'listtitle': l, 'squads': s_list, 'squadsize': range(1, game_obj.squadsize + 1), })
def report_kill_admin(request, game): game_obj = get_game(game) assassin_obj = game_obj.getAssassin(request.user) if assassin_obj is None or not assassin_obj.is_admin: raise Http404 if request.method == 'POST': form = AdminKillForm(request.POST, game=game_obj) if form.is_valid(): killtype = form.cleaned_data.get('type') user = form.cleaned_data.get('killer').user corpse = form.cleaned_data.get('corpse') report = form.cleaned_data.get('report') contract = form.cleaned_data.get('contract') k = process_kill(None, user, game_obj, killtype, corpse, contract, report) return HttpResponseRedirect(reverse('assassins_manager.report.views.killreport', args=(game, k.id,))) else: form = AdminKillForm(game=game_obj) return render_with_metadata(request, 'form.html', game, { 'form': form, 'formname': 'Report a Kill', })
def game_admin(request, game): """ Shows the game administration page """ game_obj = get_game(game) if is_admin(request.user, game_obj): return render_with_metadata(request, 'game/admin.html', game) else: return HttpResponseRedirect(reverse('assassins_manager.game.views.details', args=(game,)))
def police(request, game): """ Shows all police in the game """ game_obj = get_game(game) assassins = game_obj.players().filter(role=AssassinType.POLICE).order_by('-kills', '-alive') return render_assassins_list(request, game, assassins, 'Police', 1000)
def disavowed(request, game): """ Shows all disavowed assassins in the game, sorted by kills """ game_obj = get_game(game) assassins = game_obj.players().filter(role=AssassinType.DISAVOWED).order_by('-alive', '-kills') return render_assassins_list(request, game, assassins, 'Disavowed Assassins', 1000)
def details(request, game): """ Shows general game details """ game_obj = get_game(game) app_id = settings.FACEBOOK_APP_ID return render_with_metadata(request, 'game/details.html', game, { 'app_id': app_id, })
def details(request, game, username): """ View of any user's details """ game_obj = get_game(game) try: user = get_user_model().objects.get(username=username) except get_user_model().DoesNotExist: raise Http404 assassin_obj = game_obj.getAssassin(user) if assassin_obj is None: raise Http404 if not game_obj.getAssassin(request.user) is None: squad = game_obj.getAssassin(request.user).squad if request.method == 'POST': form = AssassinEditForm(request.POST, request.FILES, instance=user.columbiauserprofile) if form.is_valid(): form.save() else: form = AssassinEditForm(instance=user.columbiauserprofile) show_lifecode = user == request.user or (assassin_obj.squad == squad and assassin_obj.squad != None) # if user != request.user: # form = None return render_with_metadata(request, 'assassin/details.html', game, { 'assassin': assassin_obj, 'show_lifecode': show_lifecode, 'game_started': game_obj.status != GameStatus.REGISTRATION, 'form': form, })
def join_squad(request, game): """ View to join a squad """ game_obj = get_game(game) assassin_obj = game_obj.getAssassin(request.user) if assassin_obj is None: raise Http404 if request.method == 'POST': form = JoinForm(request.POST, assassin=assassin_obj) if form.is_valid(): squad = form.cleaned_data.get('squad') squad.add_assassin(assassin_obj, commit=True) try: fb = api.get_persistent_graph(request, access_token=request.user.columbiauserprofile.access_token) if fb: url = 'http://assassins.columbiaesc.com' + reverse('assassins_manager.squad.views.details', args=(game_obj.name, squad.id, )) result = fb.set('me/cuassassins:join', squad=url) except: pass return HttpResponseRedirect(reverse('assassins_manager.squad.views.details', args=(game, squad.id,))) else: form = JoinForm(assassin=assassin_obj) return render_with_metadata(request, 'form.html', game, { 'formname': 'Join Squad', 'form': form, })
def report_kill(request, game): """ View for reporting kills """ game_obj = get_game(game) assassin_obj = game_obj.getAssassin(request.user) if assassin_obj is None: raise Http404 if request.method == 'POST': form = KillForm(request.POST, assassin=assassin_obj) if form.is_valid(): killtype = form.cleaned_data.get('type') corpse = form.cleaned_data.get('corpse') report = form.cleaned_data.get('report') contract = form.cleaned_data.get('contract') k = process_kill(request, request.user, game_obj, killtype, corpse, contract, report) return HttpResponseRedirect(reverse('assassins_manager.report.views.killreport', args=(game, k.id,))) else: form = KillForm(assassin=assassin_obj) return render_with_metadata(request, 'form.html', game, { 'form': form, 'formname': 'Report a Corpse', })
def my_details(request, game): """ View to show current squad details """ game_obj = get_game(game) assassin_obj = game_obj.getAssassin(request.user) if assassin_obj is None: raise Http404 if assassin_obj.squad is None: return HttpResponseRedirect(reverse('assassins_manager.squad.views.join_squad', args=(game,))) else: return details(request, game, assassin_obj.squad.id)
def assassins(request, game, page_length=25): """ Shows all assassins in the game, sorted by squad """ game_obj = get_game(game) if request.GET.get('sortby') == 'kills': assassins = game_obj.players().order_by('-kills', '-alive', 'role') l = 'Assassins by kills' else: assassins = game_obj.players().order_by('-alive', 'role', '-kills') l = 'Assassins by status' return render_assassins_list(request, game, assassins, l, page_length)
def my_contracts(request, game): """ View to show current squad contracts """ game_obj = get_game(game) assassin_obj = game_obj.getAssassin(request.user) if assassin_obj is None: raise Http404 squad = assassin_obj.squad contracts = Contract.objects.filter(holder=squad).order_by('status') return render_with_metadata(request, 'squad/contracts.html', game, { 'squad': squad, 'contracts': contracts })
def killreport(request, game, report): """ Shows a given kill report """ game_obj = get_game(game) try: report = KillReport.objects.get(game=game_obj, id=report) except KillReport.DoesNotExist: raise Http404 app_id = settings.FACEBOOK_APP_ID return render_with_metadata(request, 'report/detail.html', game, { 'report': report, 'app_id': app_id, })
def join_game(request, game): """ Joins an asssassin to the game """ game_obj = get_game(game) assassin_obj = game_obj.getAssassin(request.user) if request.method == 'POST': form = JoinGameForm(request.POST, instance=assassin_obj) if form.is_valid(): form.save() return HttpResponseRedirect(reverse('assassins_manager.game.views.details', args=(game,))) else: form = JoinGameForm(instance=assassin_obj) return render_with_metadata(request, 'form.html', game, { 'form': form, 'formname': 'Join Game', })
def delete_game(request, game): """ Deletes the game """ game_obj = get_game(game) if is_admin(request.user, game_obj): if request.method == 'POST': form = VerifyForm(request.POST) if form.is_valid(): if form.cleaned_data.get('are_you_sure'): game_obj.delete() return HttpResponseRedirect(reverse('assassins_manager.game.views.gamelist')) else: form = VerifyForm() return render_with_metadata(request, 'form.html', game, { 'form': form, 'formname': 'Delete Game', }) else: return HttpResponseRedirect(reverse('assassins_manager.game.views.details', args=(game,)))
def details(request, game, contract): """ Displays details of any contract """ game_obj = get_game(game) try: contract_obj = Contract.objects.get(id=contract, game=game_obj) except Contract.DoesNotExist: raise Http404 assassin_obj = game_obj.getAssassin(request.user) if assassin_obj is None: raise Http404 access = is_admin(request.user, game_obj) or contract_obj.holder == assassin_obj.squad return render_with_metadata(request, 'contract/details.html', game, { 'contract': contract_obj, 'access': access })
def add_police(request, game): """ Adds police to the game """ game_obj = get_game(game) if is_admin(request.user, game_obj): if request.method == 'POST': form = AddPoliceForm(request.POST, game=game_obj) if form.is_valid(): p = form.cleaned_data.get('police') if not p is None: p.set_role(AssassinType.POLICE) return HttpResponseRedirect(reverse('assassins_manager.game.views.police', args=(game,))) else: form = AddPoliceForm(game=game_obj) return render_with_metadata(request, 'form.html', game, { 'form': form, 'formname': 'Add Police', }) else: return HttpResponseRedirect(reverse('assassins_manager.game.views.details', args=(game,)))
def killreports(request, game, reports=None, page_length=25): """ Shows kill reports """ game_obj = get_game(game) if reports is None: reports = KillReport.objects.filter(game=game_obj) page = request.GET.get('page') paginator = Paginator(reports.order_by('-date'), page_length) try: r_list = paginator.page(page) except PageNotAnInteger: r_list = paginator.page(1) except EmptyPage: r_list = paginator.page(paginator.num_pages) return render_with_metadata(request, 'report/list.html', game, { 'reports': r_list, })
def details(request, game, squad): """ View to show squad details """ game_obj = get_game(game) app_id = settings.FACEBOOK_APP_ID try: squad_obj = game_obj.squad_set.get(id=squad) except Squad.DoesNotExist: raise Http404 assassin_obj = None if request.user.is_authenticated(): assassin_obj = game_obj.getAssassin(user=request.user) show_code = not assassin_obj is None and assassin_obj.squad == squad_obj return render_with_metadata(request, 'squad/details.html', game, { 'squad': squad_obj, 'show_code': show_code, 'app_id': app_id, })
def leave_game(request, game): game_obj = get_game(game) if game_obj.status == GameStatus.REGISTRATION: if request.method == 'POST': form = VerifyForm(request.POST) if form.is_valid(): if form.cleaned_data.get('are_you_sure'): assassin_obj = game_obj.getAssassin(request.user) if assassin_obj: if assassin_obj.squad: assassin_obj.squad.remove_assassin(assassin_obj, commit=False) assassin_obj.squad = None assassin_obj.role = AssassinType.NOT_IN_GAME assassin_obj.save() return HttpResponseRedirect(reverse('assassins_manager.game.views.details', args=(game,))) else: form = VerifyForm() return render_with_metadata(request, 'form.html', game, { 'form': form, 'formname': 'Leave Game', }) return HttpResponseRedirect(reverse('assassins_manager.game.views.details', args=(game,)))
def leave_squad(request, game): """ View to leave the current squad """ game_obj = get_game(game) assassin_obj = game_obj.getAssassin(request.user) if assassin_obj is None: raise Http404 if request.method == 'POST': form = LeaveForm(request.POST, assassin=assassin_obj) if form.is_valid(): sq = assassin_obj.squad sq.remove_assassin(assassin_obj, commit=True) if not sq is None: if not sq.assassin_set.exists(): sq.delete() return HttpResponseRedirect(reverse('assassins_manager.game.views.details', args=(game,))) else: form = LeaveForm(assassin=assassin_obj) return render_with_metadata(request, 'form.html', game, { 'form': form, 'formname': 'Leave Squad', })
def contracts(request, game, page_length=25): """ Shows all contracts in the game -- ADMIN ONLY -- """ game_obj = get_game(game) if is_admin(request.user, game_obj): contracts = game_obj.contract_set.order_by('status') page = request.GET.get('page') paginator = Paginator(contracts, page_length) try: c_list = paginator.page(page) except PageNotAnInteger: c_list = paginator.page(1) except EmptyPage: c_list = paginator.page(paginator.num_pages) return render_with_metadata(request, 'game/contracts.html', game, { 'contracts': c_list, }) else: return HttpResponseRedirect(reverse('assassins_manager.squad.views.my_contracts', args=(game,)))
def playerdeaths(request, game, username): """ Shows kills made by a given player """ game_obj = get_game(game) assassin_obj = game_obj.getAssassinByUsername(username) return killreports(request, game, assassin_obj.deathreports())