diff --git a/Views.py b/Views.py index 034efbe..c6f0b08 100644 --- a/Views.py +++ b/Views.py @@ -1,5 +1,7 @@ import webapp2 import os +import urllib + from google.appengine.ext.webapp import template from dbClasses import Event @@ -8,6 +10,7 @@ from google.appengine.ext import db from google.appengine.api import users + class ViewUser(webapp2.RequestHandler): def get(self): userKey=self.request.path[6:] #Chops off the end of the request path to get the user key @@ -15,7 +18,6 @@ def get(self): if not user: self.redirect('/?' + urllib.urlencode({'message':'Error: No such user found.'})) - nickname=user.id.nickname() currentUser = AppUser.getUser() if users.get_current_user(): @@ -28,9 +30,9 @@ def get(self): template_values = { 'url': url, 'url_linktext': url_linktext, - 'nickname': nickname, 'user': user, - 'events': [] + 'events': [], + 'currentUser':currentUser } #Displays: @@ -45,5 +47,24 @@ def get(self): class ViewEvent(webapp2.RequestHandler): def get(self): - eventKey=self.request.path[6:] #Chops off the end of the request path to get the user key + eventKey=self.request.path[7:] #Chops off the end of the request path to get the event key event=Event.get(eventKey) + currentUser = AppUser.getUser() + #if ((not event) or (not event.verified and not currentUser.verified)): + # self.redirect('/?' + urllib.urlencode({'message':'Error: Event not found or could not be accessed.'})) + + if users.get_current_user(): + url = users.create_logout_url(self.request.uri) + url_linktext = 'Logout' + else: + url = users.create_login_url(self.request.uri) + url_linktext = 'Login' + + template_values = { + 'url': url, + 'url_linktext': url_linktext, + 'event' : event, + 'currentUser' : currentUser + } + path=os.path.join(os.path.dirname(__file__), './templates/viewEvent.html') + self.response.out.write(template.render(path, template_values)) \ No newline at end of file diff --git a/dbClasses.py b/dbClasses.py index c0b10f5..4eb9c75 100644 --- a/dbClasses.py +++ b/dbClasses.py @@ -1,146 +1,146 @@ -from datetime import datetime -from datetime import timedelta - -import urllib - -from google.appengine.ext import db -from google.appengine.api import users -from google.appengine.api import mail - -class AppUser(db.Model): - """Stores extra User data for validation of events and features""" - id = db.UserProperty(auto_current_user=True) - verified = db.BooleanProperty(indexed=False) - banned = db.BooleanProperty(indexed=False) - premium = db.BooleanProperty(indexed=False) - goodEventsCount = db.IntegerProperty(indexed=False) - badEventsCount = db.IntegerProperty(indexed=False) - - @staticmethod - def registerUser(): - """Constructor for the AppUser class""" - id=users.get_current_user() - key=id.email().split('@')[0] - user = AppUser(key_name=key) - user.id = id - user.verified=False - user.banned=False - user.premium=False - user.goodEventsCount=0 - user.badEventsCount=0 - user.put() - return user - - @staticmethod - def getUser(): - """Gets the AppUser object of the current user. If they're not registered, this registers them""" - user = users.get_current_user() - userList = db.GqlQuery("SELECT * FROM AppUser WHERE id = :1 LIMIT 1", - user).fetch(1) - if userList == []: # Wasn't found - return AppUser.registerUser() - return userList[0] - - @property - def getUserLink(self): - return """/User/"""+str(self.key().name()) - - @staticmethod - def getUserFromKey(key): - """ Retrieves an AppUser object from the """ - #get(Key(key)) - #return None if no user found - - def banUser(self): - """Initiates the banhammer""" - #ensure they're supposed to be here - if self.badEventsCount >= 3 and not self.banned: - self.banned=True - self.put() - message = mail.EmailMessage( - sender="Friends with Food Admin ", - subject="Your account has been flagged to be banned") - - message.to = self.id.email() - message.cc = "friendswfood@case.edu" - message.body = """ - Dear %s: - - Your account on Friends with Food has been flagged for - banning after being reported for several consecutive fake - events. Your account has been banned from creating new events. - If you feel that this is in error, please reply-all to this - message with an explanation. - - Thanks, - - The Friends with Food Team - """ % self.id.nickname() - message.send() - - - def promoteUser(self): - """Users are rewarded with verified user status whenever they pay up or - make 3 good Events""" - #ensure they're supposed to be here and haven't been here before - if self.goodEventsCount >= 3 and not self.verified: - self.verifiedUser=True - self.put() - message = mail.EmailMessage( - sender="Friends with Food Admin ", - subject="Your account has been verified!") - - message.to = self.id.email() - message.cc = "friendswfood@case.edu" - message.body = """ - Dear %s: - - Your account on Friends with Food has been verified! Because you've - shown us so many good events, we've upgraded your account. Now, you'll - get notified of free food on campus ASAP! You'll also be able to verify - events so that everyone knows they're legit. - - *With great power comes great responsibility* - - Thanks, - - The Friends with Food Team - """ % self.id.nickname() - message.send() - - - -class Event(db.Model): - """Models an individual Event item, describing the entirety of the event.""" - creator = db.ReferenceProperty(AppUser, required=True) - host = db.StringProperty(indexed=False) - name = db.StringProperty(indexed=False, required=True) - location = db.StringProperty(indexed=False, required=True) - description = db.StringProperty(multiline=True) - dateStart = db.DateTimeProperty(required=True) - dateEnd = db.DateTimeProperty() - lastUpdated = db.DateTimeProperty(auto_now=True) - verified = db.BooleanProperty() - attending = db.IntegerProperty(indexed=False) - - def verify(self): - if self.verified: - return - self.verified=True - #push - - def getXMLFormat(self): - return """ - """ + self.location + """ - """ + self.startTime.isoformat()[:16] + """ - """ + (self.dateEnd.isoformat()[:16] if dateEnd is not None else "") + """ - """ + self.host + """ - """ + self.creator.id.nickname() + """ - """ + (str)(self.attending) + """ - """ + self.description + """ - """ + ("1" if self.verified else "0") + """ - """ + self.key() + """ - """ - - def getEventLink(self): - return '/?' + urllib.urlencode({'message':'''Event pages coming soon'''}) #Update to actual page. \ No newline at end of file +from datetime import datetime +from datetime import timedelta + +import urllib + +from google.appengine.ext import db +from google.appengine.api import users +from google.appengine.api import mail + +class AppUser(db.Model): + """Stores extra User data for validation of events and features""" + id = db.UserProperty(auto_current_user=True) + verified = db.BooleanProperty(indexed=False) + banned = db.BooleanProperty(indexed=False) + premium = db.BooleanProperty(indexed=False) + goodEventsCount = db.IntegerProperty(indexed=False) + badEventsCount = db.IntegerProperty(indexed=False) + + @staticmethod + def registerUser(): + """Constructor for the AppUser class""" + id=users.get_current_user() + key=id.email().split('@')[0] + user = AppUser(key_name=key) + user.id = id + user.verified=False + user.banned=False + user.premium=False + user.goodEventsCount=0 + user.badEventsCount=0 + user.put() + return user + + @staticmethod + def getUser(): + """Gets the AppUser object of the current user. If they're not registered, this registers them""" + user = users.get_current_user() + userList = db.GqlQuery("SELECT * FROM AppUser WHERE id = :1 LIMIT 1", + user).fetch(1) + if userList == []: # Wasn't found + return AppUser.registerUser() + return userList[0] + + @property + def getUserLink(self): + return """/User/"""+str(self.key().name()) + + @staticmethod + def getUserFromKey(key): + """ Retrieves an AppUser object from the """ + #get(Key(key)) + #return None if no user found + + def banUser(self): + """Initiates the banhammer""" + #ensure they're supposed to be here + if self.badEventsCount >= 3 and not self.banned: + self.banned=True + self.put() + message = mail.EmailMessage( + sender="Friends with Food Admin ", + subject="Your account has been flagged to be banned") + + message.to = self.id.email() + message.cc = "friendswfood@case.edu" + message.body = """ + Dear %s: + + Your account on Friends with Food has been flagged for + banning after being reported for several consecutive fake + events. Your account has been banned from creating new events. + If you feel that this is in error, please reply-all to this + message with an explanation. + + Thanks, + + The Friends with Food Team + """ % self.id.nickname() + message.send() + + + def promoteUser(self): + """Users are rewarded with verified user status whenever they pay up or + make 3 good Events""" + #ensure they're supposed to be here and haven't been here before + if self.goodEventsCount >= 3 and not self.verified: + self.verifiedUser=True + self.put() + message = mail.EmailMessage( + sender="Friends with Food Admin ", + subject="Your account has been verified!") + + message.to = self.id.email() + message.cc = "friendswfood@case.edu" + message.body = """ + Dear %s: + + Your account on Friends with Food has been verified! Because you've + shown us so many good events, we've upgraded your account. Now, you'll + get notified of free food on campus ASAP! You'll also be able to verify + events so that everyone knows they're legit. + + *With great power comes great responsibility* + + Thanks, + + The Friends with Food Team + """ % self.id.nickname() + message.send() + + + +class Event(db.Model): + """Models an individual Event item, describing the entirety of the event.""" + creator = db.ReferenceProperty(AppUser, required=True) + host = db.StringProperty(indexed=False) + name = db.StringProperty(indexed=False, required=True) + location = db.StringProperty(indexed=False, required=True) + description = db.StringProperty(multiline=True) + dateStart = db.DateTimeProperty(required=True) + dateEnd = db.DateTimeProperty() + lastUpdated = db.DateTimeProperty(auto_now=True) + verified = db.BooleanProperty() + attending = db.IntegerProperty(indexed=False) + + def verify(self): + if self.verified: + return + self.verified=True + #push + + def getXMLFormat(self): + return """ + """ + self.location + """ + """ + self.startTime.isoformat()[:16] + """ + """ + (self.dateEnd.isoformat()[:16] if dateEnd is not None else "") + """ + """ + self.host + """ + """ + self.creator.id.nickname() + """ + """ + (str)(self.attending) + """ + """ + self.description + """ + """ + ("1" if self.verified else "0") + """ + """ + self.key() + """ + """ + + def getEventLink(self): + return """/Event/"""+str(self.key()) #Update to actual page. \ No newline at end of file diff --git a/main.py b/main.py index d304ff8..522cd7c 100644 --- a/main.py +++ b/main.py @@ -29,6 +29,7 @@ from eventInteraction import Verify from Views import ViewUser +from Views import ViewEvent from google.appengine.ext import db from google.appengine.api import users @@ -71,5 +72,6 @@ def get(self): ('/Report', Report), ('/Attend', Attend), ('/Verify', Verify), - ('/User/.*', ViewUser)], + ('/User/.*', ViewUser), + ('/Event/.*', ViewEvent)], debug=True) diff --git a/templates/viewEvent.html b/templates/viewEvent.html new file mode 100644 index 0000000..031ce34 --- /dev/null +++ b/templates/viewEvent.html @@ -0,0 +1,42 @@ + + + + + + +
+ +
+ {{ event.name }} +
Courtesy of {{event.creator.key.name}}
+
Location: {{event.location}} +
Time: {{event.dateStart.time}} - {{event.dateEnd.time}} +
Date: {{event.dateStart.date}} + {% if event.verified %} +
Verified + {% endif %} + {% if event.description %} +
Description: +
{{event.description}} + {% endif %} + {% if event.host %} +
+
Hosted by {{event.host}} + {% endif %} +
+ +
+ + \ No newline at end of file diff --git a/templates/viewUser.html b/templates/viewUser.html index 6973051..53e3b58 100644 --- a/templates/viewUser.html +++ b/templates/viewUser.html @@ -1,40 +1,40 @@ - - - - - - - -
- -
- {{ nickname }} -
Good Events: {{ user.goodEventsCount }}
- {% if user.verified %} -
Verified - {% endif %} -
Bad Events: {{ user.badEventsCount }}
-
- -
-

Events

- -
- - - -
- + + + + + + + +
+ +
+ {{ nickname }} +
Good Events: {{ user.goodEventsCount }}
+ {% if user.verified %} +
Verified + {% endif %} +
Bad Events: {{ user.badEventsCount }}
+
+ +
+

Events

+ +
+ + + +
+ \ No newline at end of file