Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # views.py
- # Painted Rock Hunt Game's views
- import logging, re, datetime
- from main.models import UserProfile, AnonSMSUser, Ward, Gets, PostalAddress
- from django.http import HttpResponse
- from django.core.exceptions import ObjectDoesNotExist
- from django.shortcuts import render_to_response
- from django.contrib.auth.decorators import login_required
- from django.contrib.auth.models import User
- def index(request):
- # We'll make a context to throw some variables in so the template
- # has some variables left. It's gonna look like this when it's done:
- # context = {
- # "userlist": [
- # {
- # "user": <username>,
- # "wards": [
- # (<ward num>, <ward got>)
- # ...
- # ],
- # "won": <won>
- # },
- # ...
- # ]
- # }
- # For Ward Panels' info and milestone tracking
- context = { "userlist": [] }
- if request.user and request.user.is_authenticated():
- context['user'] = request.user
- # save some stuff about the current user
- current_user ={}
- current_user['user'] = request.user
- current_user['wards'] = []
- curr_wards = Gets.objects.filter(user=request.user.get_profile().pk)
- curr_wards = map(lambda x: x.ward, curr_wards)
- for ward in curr_wards:
- current_user['wards'].append((int(ward.ward_number), True))
- # lets figure out which wards the user hasn't gotten
- got_wards = map(lambda x: x[0], current_user['wards'])
- for i in range(1, 9):
- if i not in got_wards:
- current_user['wards'].append((i, False))
- # clear dups
- current_user['wards'] = list(set(current_user['wards']))
- # sort that shit.
- current_user['wards'].sort()
- # see if the current user has won
- current_user['won'] = request.user.get_profile().won
- # print got_wards
- if len(set(got_wards)) == 8:
- current_user['got_all'] = True
- # print "current_user.won: " + str(current_user["won"])
- # create the form to guess secret word
- winform = WinningForm()
- context['winform'] = winform
- # create the address form in case guess is correct
- addrform = AddressForm()
- context['addrform'] = addrform
- # get current user's postal address, if any
- try:
- current_user['addr'] = PostalAddress.objects.get(player=request.user.id)
- # print current_user['addr'].postal_code
- except Exception e:
- wwwlogger.debug(e)
- current_user['addr'] = None
- # print "current_user['addr']: None"
- else:
- current_user['got_all'] = False
- # print current_user
- context['current_user'] = current_user
- # ---------------- Populate the PLAYER ROLL ----------------------------------
- # First thing we need to do is get a list of the users. We'll do
- # this by making a query set and grabbing the
- # last (note the minus before field name) 10 by id for the Player Roll).
- userlist = User.objects.all().order_by('-id')[:10]
- # this next query crashed Postgres because of order_by('?') which is resource intensive at best
- # userlist = User.objects.all().order_by('?')[:10]
- users = []
- for user in userlist:
- # this dictionary will be added to the userlist queryset
- user_obj = {}
- # this takes care of name
- user_obj['name'] = user.username
- # let's make an empty wards list
- user_obj['wards'] = []
- # get user's "won" state
- user_obj['won'] = user.get_profile().won
- # print "user_obj[won] = " + str(user_obj['won'])
- # let's get all of a user's wards and throw them into the list
- wards = Gets.objects.filter(user = user.get_profile().pk)
- wards = map(lambda x: x.ward, wards)
- for ward in wards:
- user_obj['wards'].append((int(ward.ward_number), True))
- # lets figure out which wards the user hasn't gotten
- got_wards = map(lambda x: x[0], user_obj['wards'])
- for i in range(1, 9):
- if i not in got_wards:
- user_obj['wards'].append((i, False))
- # clear dups
- user_obj['wards'] = list(set(user_obj['wards']))
- # sort that shit.
- user_obj['wards'].sort()
- # and figure out if the user has got all
- if len(set(got_wards)) == 8:
- user_obj['got_all'] = True # was user_obj['won']
- else:
- user_obj['got_all'] = False # was user_obj['won']
- # add this user object to the userlist
- users.append(user_obj)
- # print users
- context['userlist'] = users
- # now lets add some ward form stuff to the index
- form = WardGetForm()
- context['form'] = form
- return render_to_response('index.html', context, context_instance=RequestContext(request))
- # Brad's fetch latest version of player roll for the sidebar
- def poll_request(request):
- if request.POST and request.is_ajax():
- context = {}
- newest_user = UserProfile.objects.all().order_by('date')[0]
- # figure out how to get the username and wards and wins in that context thing
- context['user'] = newest_user.user
- context['won'] = newest_user.won
- # that last one you gotta figure out
- render_to_response("li_snippet.html", context)
- # Brad's 2nd fetch latest version of player roll for the sidebar
- def player_roll(request):
- user_list = []
- for user in UserProfile.objects.all():
- gets = Gets.objects.all().filter(user=UserProfile.pk)
- user_obj = {}
- for ward in gets:
- user_obj["ward"+ward.ward] = True
- if len(gets) == 8:
- user_obj["won"] = True
- user_obj["name"] = user.name
- user_list.append(user_obj)
- render_to_response("that template", {"userlist": user_list})
- def about(request):
- return render_to_response('about.html')
- def news(request):
- return render_to_response('news.html')
- def howto(request):
- return render_to_response('howto.html')
- from django.contrib.auth.forms import UserCreationForm
- from django.forms import EmailField
- from django.template import RequestContext
- from django.http import HttpResponseRedirect
- from django.contrib.auth import authenticate, login
- class PrhgUserCreationForm(UserCreationForm):
- email = EmailField(label="Email")
- class Meta:
- model = User
- fields = ('username', 'email')
- def save(self, commit=True):
- user = super(PrhgUserCreationForm, self).save(commit=False)
- user.email = self.cleaned_data["email"]
- if commit:
- user.save()
- return user
- def register(request):
- if request.method == 'POST': # If the form has been submitted...
- form = PrhgUserCreationForm(request.POST) # A form bound to the POST data
- if form.is_valid(): # All validation rules pass
- form.save()
- user = authenticate(username=form.cleaned_data['username'], password=form.cleaned_data['password2'])
- login(request, user)
- return HttpResponseRedirect('/') # Redirect after POST
- else:
- form = PrhgUserCreationForm() # An unbound form
- return render_to_response('register.html', {'form': form,}, context_instance=RequestContext(request))
- from django.http import HttpResponseForbidden
- from django.views.decorators.csrf import csrf_exempt
- from models import UserProfile, Gets
- import re
- def SmsResponse(body):
- return HttpResponse('<?xml version="1.0" encoding="UTF-8"?><Response><Sms>' + body + '</Sms></Response>')
- @csrf_exempt
- def smsplay(request):
- if request.method != "POST":
- return HttpResponseForbidden("Can't get this")
- # The 34 character id of the Account this message is associated with.
- account_sid = request.POST.get('AccountSid')
- # A 34 character unique identifier for the message.
- sms_sid = request.POST.get('SmsSid')
- # The phone number that sent this message.
- from_phone = str(request.POST.get('From')) # Fomatted in E.164 format. E.g., +19991118888
- default_pw = from_phone[2:] # To store an sms user's default password in a form s/he will remember (2223334444)
- from_phone = from_phone[2:5] + '-' + from_phone[5:8] + '-' + from_phone[8:]
- # The phone number of the recipient.
- to_phone = request.POST.get('To')
- # The text body of the SMS message. Up to 160 characters long.
- sms_body = request.POST.get('Body')
- try:
- user = UserProfile.objects.get(phone_number=from_phone)
- except:
- user = None
- regex = re.compile(r'(?P<command>(SMS|PLAY|CLUE|GOT|WIN))\s*(?P<argument>\w*)', re.IGNORECASE)
- m = re.match(regex, sms_body)
- if not m:
- return HttpResponseForbidden("Unknown Command")
- else:
- if m.group('command').upper() == 'PLAY':
- return play(m.group('argument'), from_phone, user, default_pw)
- elif m.group('command').upper() == 'SMS':
- return sms()
- elif m.group('command').upper() == 'CLUE':
- return clue(m.group('argument'), user)
- elif m.group('command').upper() == 'GOT':
- return get(m.group('argument'), user)
- elif m.group('command').upper() == 'WIN':
- return win(m.group('argument'), user)
- def play(arg, phone_number, user, pw):
- if user:
- try:
- gets = Gets.objects.filter(user=user.pk)
- wards = map(lambda x: x.ward.ward_number, gets)
- ward_str = "So far you GOT painted rocks from wards: "
- for w in wards:
- ward_str += w +'; '
- return SmsResponse(ward_str)
- except:
- return SmsResponse("So far you GOT painted rocks from none of the wards. Try CLUE [ward number] for clues. Visit prhg.net for more. This tel# is your password")
- elif arg != '':
- user = User.objects.create_user(arg, '', pw)
- user.save()
- user_profile = UserProfile.objects.get(user=user.pk)
- user_profile.phone_number = phone_number
- user_profile.save()
- return SmsResponse("Hi! Send CLUE [num 1-8] for a ward's address hint; SMS for commands. Visit prhg.net for rules/clues commands/wins. This tel# (numbers only) is your password.")
- else:
- return SmsResponse("I'm gonna need a nick from you. Try: PLAY [nickname]")
- def sms():
- return SmsResponse("Text PLAY to join or for your status; CLUE [a digit 1-8] for hints; WIN [the solved secret word] to guess the final word.")
- def clue(arg, user):
- if user:
- if arg == '1':
- return SmsResponse("16th and CRESCENT PL NW In garden; by sign. Send GOT [ward number] to report your get; SMS for commands; More at prhg.net")
- elif arg == '2':
- return SmsResponse("14th and P STs NW, on your way to get tickets, inside and out. Send GOT [ward number] to report your get; SMS for commands; More at prhg.net")
- elif arg == '3':
- return SmsResponse("Btwn Conn Ave, Van Ness, and Yuma. UDC Amphitheatre. Send GOT [ward number] to report your get; SMS for commands; More at prhg.net")
- elif arg == '4':
- return SmsResponse("Taylor and Georgia plus red bikes. Send GOT [ward number] to report your get; SMS for commands; More at prhg.net")
- elif arg == '5':
- return SmsResponse("North side of Florida Ave NE btwn Orren and Staples: grass terrace. Send GOT [ward number] to report your get; SMS for commands; More at prhg.net")
- elif arg == '6':
- return SmsResponse("Near Virginia Ave park, grassy knoll; Send GOT [ward number] to report your get; SMS for commands; More at prhg.net")
- elif arg == '7':
- return SmsResponse("Height/Benning Library: Lower Level Landscaping Features. Send GOT [ward number] to report your get; SMS for commands; More at prhg.net")
- elif arg == '8':
- return SmsResponse("ARCH on MLK-Vivid; Send GOT [ward number] to report your get; SMS for commands; More at prhg.net")
- else:
- return SmsResponse("Unknown ward number")
- else:
- if arg == '1':
- return SmsResponse("Along the Washington Meridian, on the Laughlin/Meyer side of the tracks. To register to play, send PLAY [a nickname] or go to prhg.net")
- elif arg == '2':
- return SmsResponse("Not Woolly, not Arena, not Source (but close). To register to play, send PLAY [a nickname] or go to prhg.net")
- elif arg == '3':
- return SmsResponse("UDC. To register to play, send PLAY [a nickname] or go to prhg.net")
- elif arg == '4':
- return SmsResponse("YES! + a Petworth cool off spot. To register to play, send PLAY [a nickname] or go to prhg.net")
- elif arg == '5':
- return SmsResponse("Circa busiest fire engine station in the USA - HOUSE OF PAIN. To register to play, send PLAY [a nickname] or go to prhg.net")
- elif arg == '6':
- return SmsResponse("Lower 8th Street Historic District, north of Potomac. To register to play, send PLAY [a nickname] or go to prhg.net")
- elif arg == '7':
- return SmsResponse("Between Mahan's fort and William Benning's Bridge. To register to play, send PLAY [a nickname] or go to prhg.net")
- elif arg == '8':
- return SmsResponse("ARCH on MLK. To register to play, send PLAY [a nickname] or go to prhg.net")
- else:
- return SmsResponse("Unknown ward number")
- def get(arg, user):
- if user:
- if str(arg) in '12345678':
- this_get = Gets(user=user, ward=Ward.objects.get(ward_number=int(arg)))
- this_get.save()
- return SmsResponse("Nicely played! You're on your way!")
- else:
- return SmsResponse("Unknown ward number. To register a rock you've claimed, send GOT [ward number].")
- else:
- return HttpResponseForbidden("No user to get with")
- def win(arg, user):
- if user:
- if arg in 'T@CTICS!':
- user.won = True
- user.save()
- return SmsResponse("You've won!")
- else:
- return SmsResponse("Sorry, try again!")
- else:
- return HttpResponseForbidden("No user to win with")
- # ward | char
- # 1 | T
- # 2 | @
- # 3 | C
- # 4 | T
- # 5 | I
- # 6 | C
- # 7 | S
- # 8 | !
- from django import forms
- from main.models import UserProfile, Ward, Gets
- from django.forms.widgets import HiddenInput
- class WardGetForm(forms.Form):
- secret_char = forms.CharField(max_length=1)
- ward_number = forms.HiddenInput
- def wardget(request):
- if request.method == 'POST':
- form = WardGetForm(request.POST)
- if form.is_valid():
- secret_char = form.cleaned_data['secret_char']
- ward = request.POST.get('ward_number')
- secret_word = 'T@CTICS!'
- user = request.user
- if secret_char.upper() == secret_word[int(ward)-1]:
- get_this_ward = Gets(user=user.get_profile(), ward=Ward.objects.get(ward_number=int(ward)))
- get_this_ward.save()
- return HttpResponseRedirect('/')
- else:
- form = WardGetForm() # An unbound form
- return HttpResponseRedirect('/')
- from main.models import UserProfile
- class WinningForm(forms.Form):
- the_secret_word_is = forms.CharField(max_length=8)
- def winning(request):
- if request.method == 'POST':
- winning_word = 'T@CTICS!'
- winform = WinningForm(request.POST)
- if winform.is_valid():
- guessed_secret_word = winform.cleaned_data['the_secret_word_is']
- user = request.user
- if guessed_secret_word.upper() == winning_word:
- winner, created = UserProfile.objects.get_or_create(user=request.user.id)
- # print "request.user.id: " + str(request.user.id)
- # print "winner.won preset: " + str(winner.won)
- if created:
- winner.won = True
- elif winner.won != True:
- winner.won = True
- winner.save()
- # print "winner.won postset: " + str(winner.won)
- return HttpResponseRedirect('/')
- else:
- winform = WinningForm()
- return HttpResponseRedirect('/')
- # ------------------------------------------------
- from django import forms
- from main.models import UserProfile, PostalAddress
- from django.contrib.auth.models import User, SiteProfileNotAvailable
- class AddressForm(forms.Form):
- first_name = forms.CharField(max_length=30)
- last_name = forms.CharField(max_length=30)
- email = EmailField(label="Email")
- class Meta:
- model = User
- fields = ('first_name', 'last_name', 'email')
- address_1 = forms.CharField(max_length=200)
- address_2 = forms.CharField(max_length=200)
- city = forms.CharField(max_length=100)
- state = forms.CharField(max_length=2)
- zip_code = forms.CharField(max_length=9)
- def save(self, user, *args, **kwargs):
- address = PostalAddress(player=user.get_profile())
- user.first_name = self.cleaned_data["first_name"]
- user.last_name = self.cleaned_data["last_name"]
- user.email = self.cleaned_data["email"]
- address.line_1 = self.cleaned_data['address_1']
- address.line_2 = self.cleaned_data['address_2']
- address.city = self.cleaned_data['city']
- address.state_province = self.cleaned_data['state']
- z = self.cleaned_data['zip_code']
- address.postal_code = filter(lambda x: x.isdigit(), z)
- address.save()
- user.save()
- return address
- def sendtoaddr(request):
- userprofile = UserProfile.objects.get(user=request.user)
- if request.method == 'POST':
- optout_of_award = request.POST.get('cancel', None)
- if optout_of_award:
- city = "award_optout"
- optout, wascreated = PostalAddress.objects.get_or_create(player_id=request.user.id, defaults= {"line_1": '', "line_2": '', "city": city, "state_province": '', "postal_code": ''})
- return HttpResponseRedirect('/')
- else:
- addrform = AddressForm(request.POST)
- if addrform.is_valid():
- addrform.save(user=request.user)
- return HttpResponseRedirect('/')
- else:
- addrform = AddressForm()
- return HttpResponseRedirect('/')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement