def challenge(request, id): """ Displays a challenge, only if status = accepted This is play """ chall_user = request.user.get_profile().get_extension(ChallengeUser) chall = get_object_or_404(Challenge, pk=id) # check to see if challenge was already submitted try: participant = chall.participant_for_player(chall_user) except: raise Http404 if participant.played: return do_result(request, _('You have already submitted this challenge'\ ' and scored %.2f points') % participant.score) # this is caught by chall_user #if not chall_user.can_play(chall): # return do_result(request, _('You cannot play this challenge.')) if request.method == 'GET' and not chall.is_started_for_user(chall_user): chall.set_start(chall_user) if request.method == "POST": form = ChallengeForm(chall, request.POST) results = chall.set_played(chall_user, form.get_response()) form.check_self_boxes() if results.get('results', False): results['results'] = form.get_results_in_order(results['results']) questions_and_answers = zip(form.visible_fields(), results['results']) else: questions_and_answers = None return render_to_response( 'challenge/result.html', { 'challenge': chall, 'challenge_user': chall_user, 'points': results['points'], 'form': form, 'questions_and_answers': questions_and_answers }, context_instance=RequestContext(request)) else: form = ChallengeForm(chall) seconds_left = chall.time_for_user(chall_user) return render_to_response('challenge/challenge.html', { 'challenge': chall, 'form': form, 'challenge_user': chall_user, 'seconds_left': seconds_left }, context_instance=RequestContext(request))
def new(request): if request.method == 'POST': form = ChallengeForm(request.POST) if form.is_valid(): form.save() return redirect('/challenges') else: form = ChallengeForm() return render_to_response('new_challenge.html', { "form": form }, context_instance=RequestContext(request))
def get(self, request, *args, **kwargs): if not self.chall.is_started_for_user(self.chall_user): self.chall.set_start(self.chall_user) form = ChallengeForm(self.chall) seconds_left = self.chall.time_for_user(self.chall_user) return render_to_response('challenge/challenge.html', {'challenge': self.chall, 'form': form, 'challenge_user': self.chall_user, 'seconds_left': seconds_left}, context_instance=RequestContext(request))
def _edit(request, challenge): nav_selected = "challenges" form = ChallengeForm(instance=challenge, data=(request.POST or None)) if form.is_valid(): form.save() return redirect(challenge) type_label = challenge.id and 'Edit' or 'Create' return render_to_response('challenges/edit.html', locals(), context_instance=RequestContext(request))
def post(self, request, **kwargs): form = ChallengeForm(self.chall, request.POST) results = self.chall.set_played(self.chall_user, form.get_response()) form.check_self_boxes() if results.get('results', False): results['results'] = form.get_results_in_order(results['results']) questions_and_answers = zip(form.visible_fields(), results['results']) else: questions_and_answers = None return render_to_response('challenge/result.html', {'challenge': self.chall, 'challenge_user': self.chall_user, 'points': results['points'], 'form' : form, 'questions_and_answers' : questions_and_answers}, context_instance=RequestContext(request))
def post_challenge(): form = ChallengeForm() runIds = form.data['runs'] if runIds is None or len(runIds) != 1: return redirect( '/?challengeError=Please select exactly one run to challenge') if current_user is not None and hasattr(current_user, 'id'): prev_challenged_run = db.session.query(Challenge).filter( Challenge.runner_id == current_user.id).first() #found a previosly challenged run, gotta make it unchallenged and then challenge the next one if prev_challenged_run: db.session.delete(prev_challenged_run) if prev_challenged_run.run_id != int(runIds[0]): # I'm not unchallenging a run, but challenging a new one new_challenge = db.session.query(Run).filter( Run.runner_id == current_user.id, Run.id == runIds[0]).first() if new_challenge is not None: challenge = Challenge() challenge.run_id = runIds[0] challenge.runner = current_user challenge.runner_id = current_user.id challenge.run = new_challenge latest_id = db.session.query(func.max(Run.id)).scalar() challenge.latest_run_id = latest_id db.session.add(challenge) db.session.commit() else: # just challenge the new one new_challenge = db.session.query(Run).filter( Run.runner_id == current_user.id, Run.id == runIds[0]).first() if new_challenge is not None: challenge = Challenge() challenge.run_id = runIds[0] challenge.runner = current_user challenge.runner_id = current_user.id challenge.run = new_challenge latest_id = db.session.query(func.max(Run.id)).scalar() challenge.latest_run_id = latest_id db.session.add(challenge) db.session.commit() else: return redirect("/login") return redirect("/")