def get (self): tool_user, db_user = ADayThere.tool_user () if not tool_user or not ADayThere.admin_user (db_user): self.response.status = 401 self.response.write ("Unauthorized") return query = User.query () if 'name' in self.request.GET.keys (): name = self.request.GET['name'] if name != '': query = query.filter (User.name == name) if 'email' in self.request.GET.keys (): email = self.request.GET['email'] if email != '': query = query.filter (User.email == email) if 'user_id' in self.request.GET.keys (): uid = self.request.GET['user_id'] if uid != '': query = query.filter (User.user_id == uid) limit = self.request.get ('limit', None) if limit is None: limit = ProfilesHandler.max_limit cursor = ndb.Cursor (urlsafe=self.request.get ('cursor')) users, cursor, more = query.fetch_page (int (limit), start_cursor=cursor) users_arr = [] for each in users: u = self.__build_user (each) users_arr.append (u) safe_cursor = '' if cursor: safe_cursor = cursor.urlsafe () resp_obj = { "users": users_arr, "cursor": safe_cursor, "more": more } resp = json.dumps (resp_obj) self.response.write (resp)
def get (self): tool_user, db_user = ADayThere.tool_user () if not ADayThere.admin_user (db_user): self.response.status = 401 self.response.write ("Unauthorized") return query = Day.query () if 'name' in self.request.GET.keys (): name = self.request.GET['name'] if name != '': query = query.filter (Day.name == name) if 'title' in self.request.GET.keys (): title = self.request.GET['title'] if title != '': query = query.filter (Day.title == title) if 'locale' in self.request.GET.keys (): locale = self.request.GET['locale'] if locale != '': query = query.filter (Day.full_locality == locale) limit = self.request.get ('limit', None) if limit is None: limit = DaysHandler.max_limit cursor = ndb.Cursor (urlsafe=self.request.get ('cursor')) days, cursor, more = query.fetch_page (int (limit), start_cursor=cursor) days_arr = [] for each in days: d = self.__build_day (each) days_arr.append (d) safe_cursor = '' if cursor: safe_cursor = cursor.urlsafe () resp_obj = { "days": days_arr, "cursor": safe_cursor, "more": more } resp = json.dumps (resp_obj) self.response.write (resp)
def __init__(self, db_user): admin_menu = "" tool_user, holder = ADayThere.tool_user() if ADayThere.admin_user(db_user): admin_menu = """ <li class="dropdown" ng-controller="adminCtrl"> <a href="/admin" class="dropdown-toggle"> Admin </a> <ul class="dropdown-menu adt-nav-menu-button"> <a href="/admin?type=profiles">profiles</a> <a href="/admin?type=days">days</a> </ul> </li> """ self.html = """ <li class="dropdown" ng-controller="loginCtrl"> <a href ng-click="googlelogout()" class="dropdown-toggle"> Logout </a> </li> <li class="dropdown" ng-controller="profileCtrl"> <a href class="dropdown-toggle" id="profile_ctrl_menu_toggle"> {0} </a> <ul id="tool_user_related_menu" class="dropdown-menu adt-nav-menu-button"> """.format( db_user.name ) if tool_user: self.html += LoggedInNavView.tool_user_menus() else: self.html += LoggedInNavView.non_tool_user_menus() self.html += """ </ul> </li> {0} {1} {2} <a href popover-placement="bottom" popover-trigger="mouseenter" popover="Click links to see drop down menus">?</a> """.format( get_help_menu(), get_contact_menu(), admin_menu )
def put (self): logged_in, db_user = ADayThere.logged_in_user () if not logged_in: self.response.status = 401 return operation = self.request.get ("operation") if operation == 'add_tool_access': if db_user is not None and db_user.has_tool_access: return print "TOOL ACCESS FOR:", db_user db_user.has_tool_access = True db_user.date_agreed_to_tool_access = datetime.datetime.utcnow () name = self.request.get ('name', None) if name is not None: db_user.name = name db_user.put () res = { "name": name, "menu": LoggedInNavView.tool_user_menus () } self.response.status = 200 self.response.write (json.dumps (res))
def delete(self): tool_user, db_user = ADayThere.tool_user() if not tool_user: self.response.status = 401 return title = self.request.get("title") day = Day.query_user_title(db_user.user_id, title).get() for photo in day.photos: photo_query = Photos.query_photo(db_user.user_id, photo.title) pq = photo_query.get() try: index = pq.index(day.title) day.title.pop(index) except: pass pq.key.delete() day.key.delete() KeywordsDayList.delete_keywords(day) Words.delete_words(day.key) self.response.status = 200
def __init__(self, request, response): self.initialize(request, response) locale = self.request.GET.get ('locale', 'en_US') i18n.get_i18n ().set_locale (locale) self.user = users.get_current_user () self.adaythere = ADayThere () self.adaythere.add_meta_tags ([ { "charset":"UTF-8" }, { "http-equiv":"X-UA-Compatible", "content":"IE=edge" }, { "name":"description", "content":"A social media site that celebrates the joys of place." }, { "name":"viewport", "content":"initial-scale=1"} ]) self.adaythere.add_links ([ { "rel":"stylesheet", "href":"css/bootstrap.css" }, { "rel":"stylesheet", "href":"css/adaythere.css" } ]) maps = Maps () self.adaythere.add_script_tags_for_body ([ { "src":"js/jquery-1.11.0-beta2.js" }, { "src":"js/angular/angular.min.js" }, { "src":"js/angular/angular-route.min.js" }, { "src":"js/ui-bootstrap-tpls-0.10.0.min.js" }, { "src": maps.get_script_src () }, { "src":"js/adaythere.js" }, { "src":"https://apis.google.com/js/platform.js", "async":None, "defer":None } ])
def post (self): logged_in, db_user = ADayThere.logged_in_user () if not logged_in: self.response.status = 401 return name = self.request.get ('name', None) matched = re.match ("^[a-z0-9_]+$", name, re.IGNORECASE) if name is None or matched is None: self.response,status = 400 self.response.write ("Valid name required") return response = db_user.update_username (name) if response == False: self.response.status = 409 self.response.write (' name is in use ') return self.response.status = 200 self.response.write (name)
def post(self): tool_user, db_user = ADayThere.tool_user() if not tool_user: self.response.status = 401 return data = json.loads(self.request.body) day = Day.query_user_title(db_user.user_id, data["title"]).get() KeywordsDayList.delete_keywords(day) day.full_locality = data["full_locality"] day.title = data["title"] day.description = data["description"] if isinstance(data["keywords"], basestring): if "," in data["keywords"]: day.keywords = data["keywords"].split(",") else: day.keywords = data["keywords"].split(" ") else: day.keywords = data["keywords"] for keyword in day.keywords: Keywords.add_if_missing(keyword) day.places = [] for place in data["places"]: p = Place() p.name = place["name"] p.comment = place["comment"] p.location = Location() p.location.latitude = str(place["location"]["latitude"]) p.location.longitude = str(place["location"]["longitude"]) p.location.vicinity = place["vicinity"] day.places.append(p) day.photos = [] for photo in data["photos"]: day_photo = DayPhoto() day_photo.title = photo["title"] day_photo.description = photo["description"] day.photos.append(day_photo) photo_query = Photos.query_photo(db_user.user_id, photo["title"]) pq = photo_query.get() cnt = pq.used_by.count(day.title) if cnt == 0: pq.used_by.append(day.title) day.put() KeywordsDayList.add_keywords(day) Words.update_words(day.title, day.description, day.key, day.full_locality) self.response.status = 200
def get (self): tool_user, db_user = ADayThere.tool_user () if not tool_user: self.response.status = 401 return action = self.request.get ('action'); if action is None: self.response.status = 401 return if (action == 'count'): count = 0 query = Photos.query_user_id (db_user.user_id) if query is not None: count = query.count () res = json.dumps ({ "count": count }) self.response.write (res) return elif (action == 'img'): title = self.request.get ('title', None) if title is None: self.response.status = 401 return photo_query = Photos.query_photo (db_user.user_id, title) photo = photo_query.get () if photo is None: self.response.status = 404 return self.response.headers['Content-Type'] = 'image/png' self.response.write (photo.photo) return elif (action == 'list'): list_query = Photos.query_user_id (db_user.user_id) if list_query is None: self.response.status = 404 return titles = [] photos = list_query.fetch () for photo in photos: d = {} d['title'] = photo.title; d['used_by'] = photo.used_by; titles.append (d) self.response.write (json.dumps (titles)) return
def put (self): logged_in_user, commenters_id = ADayThere.tool_user () if not logged_in_user: self.response.status = 401 return data = json.loads (self.request.body) print "DATA", data userid = data.get ('userid', None) title = data.get ('title', None) review = data.get ('rating', 1) if title is None or userid is None: self.response.status = 401 return prev_comment = UserComment.query_previous_comment (commenters_id.name, userid, title).get () if prev_comment is not None: self.response.status = 409 self.response.write (json.dumps ({'rating': prev_comment.rating, 'title': prev_comment.title})) return day = Day.query_user_title (userid, title).get () if day is None: self.response.status = 403 return new_comment = UserComment () new_comment.commenters_name = commenters_id.name new_comment.userid = userid new_comment.title = title new_comment.text = data.get ('text', None) new_comment.rating = review new_comment.put () if day.numberOfReviews == None or day.numberOfReviews == 0: day.numberOfReviews = 1; day.averageReview = review; else: rev = (day.numberOfReviews * day.averageReview) + review day.numberOfReviews = day.numberOfReviews + 1 day.averageReview = rev / day.numberOfReviews day.put () self.response.write (json.dumps ({'numberOfReviews': day.numberOfReviews, 'averageReview': day.averageReview, 'review': new_comment.to_dict ()})); self.response.status = 200
def get (self): """ Responds to a get request. """ logged_in, db_user = ADayThere.logged_in_user () if not logged_in: self.response.status = 401 return res = self.__build_response (db_user) self.response.write (json.dumps (res))
def post (self): tool_user, db_user = ADayThere.tool_user () if not ADayThere.admin_user (db_user): self.response.status = 401 self.response.write ("Unauthorized") return sent_day = json.loads (self.request.body) day_query = Day.query_user_title (sent_day['userid'], sent_day['title']) day = day_query.get () if day is None: self.response.status = 404 self.response.write ("Not Found") return day.key.delete () self.response.status = 200 self.response.write ("OK")
def post (self): tool_user, db_user = ADayThere.tool_user () if not tool_user or not ADayThere.admin_user (db_user): self.response.status = 401 self.response.write ("Unauthorized") return user = json.loads (self.request.body) record = User.query_user_id (user['user_id']) if 'type' not in self.request.GET.keys (): self.response.status = 400 else: tp = self.request.GET['type'] if tp == 'ban': record.banned = user['banned'] record.put () self.response.status = 200 else: self.response.status = 400
def get(self): tool_user, db_user = ADayThere.tool_user() if not tool_user: self.response.status = 401 return days = [] data = Day.query_user(db_user.user_id).fetch() for each in data: days.append(json.dumps(each.to_dict())) self.response.write(json.dumps(days))
def get (self): logged_in_user, commenters_id = ADayThere.tool_user () userid = self.request.get ('userid', None) title = self.request.get ('title', None) limit = self.request.get ('limit', 20) cursor = self.request.get ('cursor', None) if title is None or userid is None: self.response.status = 401 return json_comments = [] if commenters_id is not None: prev_comment = UserComment.query_previous_comment (commenters_id.name, userid, title).get () if prev_comment is not None: json_comments.append (json.dumps (prev_comment.to_dict ())) comments_query = UserComment.query_comments (userid, title) if cursor is not None: comments, cursor, more = comments_query.fetch_page (limit, start_cursor = cursor) else: comments, cursor, more = comments_query.fetch_page (limit) for each in comments: if prev_comment is None or each.commenters_name != prev_comment.commenters_name: json_comments.append (json.dumps (each.to_dict ())) return_vals= { 'comments': json_comments, 'cursor': None, 'more': more }; if cursor is not None: return_vals['cursor'] = cursor.urlsafe() self.response.write (json.dumps (return_vals)) if prev_comment is not None: self.response.status = 201 else: self.response.status = 200
def post (self): logged_in, user = ADayThere.logged_in_user () if not logged_in: self.response.status = 401 return location = json.loads (self.request.body) logging.info (location) db_location = Location () db_location.latitude = str (location["location"]["latitude"]) db_location.longitude = str (location["location"]["longitude"]) db_location.locality = location["location"]["locality"] db_location.vicinity = location["location"]["vicinity"] db_user.location = db_location db_user.put () res = self.__build_response (db_user) self.response.write (json.dumps (res))
def put (self): tool_user, db_user = ADayThere.tool_user () if not tool_user: self.response.status = 401 return data = self.request.body lst = json.loads (data) entities = [] for p in lst: photo = Photos () photo.user_id = db_user.user_id photo.title = p['title'] decoded = p['url'].decode ('base64') photo.photo = decoded entities.append (photo) ndb.put_multi (entities) self.response.status = 200
def delete (self): tool_user, db_user = ADayThere.tool_user () if not tool_user: self.response.status = 401 return titlestr = self.request.get ("titles", None) used_by = self.request.get ("used_by", None) if titlestr is None: self.response.status = 401 return titles = titlestr.split (",") if used_by is not None: photos = Photos.query (Photos.user_id == db_user.user_id, Photos.title.IN (titles), Photos.used_by == used_by).fetch (keys_only=True) else: photos = Photos.query (Photos.user_id == db_user.user_id, Photos.title.IN (titles)).fetch (keys_only=True) ndb.delete_multi (photos)
def get (self): logged_in, db_user = ADayThere.logged_in_user () if not logged_in: self.response.status = 401 return name = self.request.get ('name', None) if name is None: self.response,status = 400 self.response.write ("Name required") return user = User.query_name (name) self.response.status = 200 if user is not None: self.response.write ('not available') else: self.response.write ('available')
def __init__ (self): super (BecomeAContributorModal, self).__init__ ("becomeAContributorModalContent.html") logged_in, db_user = ADayThere.logged_in_user () body_html = "" if logged_in: suggest_change = "" if db_user.name == db_user.email: suggest_change = """*Please, change your user name to something other then your email address to avoid spam. Only alphanumeric characters and the underscore (_) are accepted.""" if not logged_in: body_html += "You must be logged in through Google before becoming a contributor" else: body_html += """ <div>Thanks for choosing to become a contributor to the community. We ask that you don't use language that would make anyone's Grandmother blush. Be repectful of others who use "A Day There". By clicking the OK button you agree to allow "A Day There" to use the material you contribute and to abide by the rules.<br/><br/> Thank You!<br/> </div> <div id="contributor_name_choice" style="color:red;">{0}</div> <label for="contribute_google_nickname">Name:</label> <input data-warning-id="contributor_name_choice" id="contribute_google_nickname" class="form-control" type='text' contributor-user-name value="{1}"></input> <input id="contribute_gotto_tools" type="checkbox">Go to create tools</input> """.format (suggest_change, db_user.name) modalHeader = Elements () modalHeader.append_to_element (""" <h3>Become A Contributor</h3> """) self.add_header_content (modalHeader) modalBody = Elements () modalBody.append_to_element (body_html) self.add_body_content (modalBody) modalFooter = Elements () modalFooter.append_to_element (""" <button class="btn btn-primary" ng-click="contribute_modal_ok ()">OK</button> <button class="btn btn-warning" ng-click="contribute_modal_cancel ()">Cancel</button>""") self.add_footer_content (modalFooter)
def get (self): tool_user, db_user = ADayThere.tool_user () if not ADayThere.admin_user (db_user): self.response.status = 401 self.response.write ("Unauthorized") return adaythere = ADayThere () adaythere.add_meta_tags ([ { "charset":"UTF-8" }, { "http-equiv":"X-UA-Compatible", "content":"IE=edge" }, { "name":"viewport", "content":"initial-scale=1"} ]) adaythere.add_links ([ { "rel":"stylesheet", "href":"css/bootstrap.css" }, { "rel":"stylesheet", "href":"css/adaythere.css" } ]) adaythere.add_script_tags_for_body ([ { "src":"js/jquery-1.11.0-beta2.js" }, { "src":"js/angular/angular.min.js" }, { "src":"js/angular/angular-route.min.js" }, { "src":"js/ui-bootstrap-tpls-0.10.0.min.js" }, { "src":"js/adaythere.js" } ]) adaythere.open_element ("header", {"id":"page_header"}) adaythere.open_element ("h1", {"id":"page_heading"}, "A Day There - Administration Page") adaythere.close_element ("h1") adaythere.open_element ("nav") adaythere.append_to_element ("") adaythere.close_element ("nav") adaythere.close_element ("header") adaythere.open_element ("section", {"ng-controller":"adminCtrl", "style":"width:600px;margin:0px auto;"}) adaythere.open_element ("div", {"id":"admin_profile_div"}) type = self.request.get ('type', default_value=None) if type is not None: if type == 'profiles': self.get_profile_form (adaythere) elif type == 'days': self.get_days_form (adaythere) adaythere.close_element ("div") adaythere.close_element ("section") adaythere.open_element ("footer", {"id":"page_footer"}) adaythere.open_element ("p", None, "© 2014 SoftSprocket") adaythere.close_element ("p") adaythere.close_element ("footer") self.response.status = 200 self.response.write (adaythere.get ())
class ToolsHandler (webapp2.RequestHandler): def __init__(self, request, response): self.initialize(request, response) locale = self.request.GET.get ('locale', 'en_US') i18n.get_i18n ().set_locale (locale) self.user = users.get_current_user () self.adaythere = ADayThere () self.adaythere.add_meta_tags ([ { "charset":"UTF-8" }, { "http-equiv":"X-UA-Compatible", "content":"IE=edge" }, { "name":"description", "content":"A social media site that celebrates the joys of place." }, { "name":"viewport", "content":"initial-scale=1"} ]) self.adaythere.add_links ([ { "rel":"stylesheet", "href":"css/bootstrap.css" }, { "rel":"stylesheet", "href":"css/adaythere.css" } ]) maps = Maps () self.adaythere.add_script_tags_for_body ([ { "src":"js/jquery-1.11.0-beta2.js" }, { "src":"js/angular/angular.min.js" }, { "src":"js/angular/angular-route.min.js" }, { "src":"js/ui-bootstrap-tpls-0.10.0.min.js" }, { "src": maps.get_script_src () }, { "src":"js/adaythere.js" }, { "src":"https://apis.google.com/js/platform.js", "async":None, "defer":None } ]) def get (self): """ Check and see if the user is logged in through google. If so set up logged in view else setup not logged in view. """ db_user = None navView = None logged_in = False if self.user is None: navView = LoggedOutNavView () else: db_user = User.query_user_id (str (self.user.user_id ())) if db_user is None: db_user = User.record_from_google_user (self.user) if db_user.banned: navView = LoggedOutNavView () else: navView = LoggedInNavView (db_user) logged_in = True adminProfileModal = AdminProfileModal () contributorModal = BecomeAContributorModal () sidebar_display = """ <li id="sidebar_display_menu_item" ng-controller="sidebarDisplayCtrl" style="list-style:none; position:absolute; right:10px; top:5px"> <a href ng-show="sidebar_link.map_is_displayed" ng-click="toggle_sidebar ()"> {{ sidebar_display.menu_text }} </a> </li> """ self.adaythere.open_element ("header", {"id":"page_header"}) self.adaythere.open_element ("h1", {"id":"page_heading"}, "A Day There") self.adaythere.close_element ("h1") self.adaythere.open_element ("nav") self.adaythere.append_to_element (navView.get ()) self.adaythere.close_element ("nav") self.adaythere.open_element ("div") self.adaythere.append_to_element (adminProfileModal.get ()) self.adaythere.close_element ("div") self.adaythere.open_element ("div") self.adaythere.append_to_element (contributorModal.get ()) self.adaythere.close_element ("div") self.adaythere.append_to_element (sidebar_display) self.adaythere.close_element ("header") self.adaythere.open_element ("div", { "ng-controller":"daysSearchCtrl"}) self.adaythere.open_element ("section", { "id":"welcome_to_left" }) self.adaythere.append_to_element (""" <img src="img/logo.png" width="60%"></img> <p><h1 style="font-style:italic;text-align:center;font-size:large;">Celebrating the joys of place.</h3></p> """) self.adaythere.close_element ("section") self.adaythere.open_element ("section", { "id":"welcome_to_right" }) self.adaythere.append_to_element ("""<div id="google_like_main" style="float:right;"> <div class="g-plusone" data-size="medium" data-annotation="inline" data-width="250"></div></div>""") self.adaythere.close_element ("section") self.adaythere.open_element ("section", { "id": "daysearch_overlay" }) day_search = DaySearch () search_form = day_search.get () self.adaythere.append_to_element (search_form) self.adaythere.close_element ("section") self.adaythere.open_element ("section", { "id":"find_a_day" }) self.adaythere.append_to_element (""" <img src="img/logo.png" width="30%"></img> <p><h1 style="font-style:italic;text-align:center;font-size:large;">Celebrating the joys of place.</h3></p> """) self.adaythere.append_to_element (day_search.get_days_display ()) self.adaythere.close_element ("section") self.adaythere.close_element ("div") self.adaythere.append_to_element (MapTools.map_elements (logged_in).get ()) self.adaythere.open_element ("div", { "id":"hello_login_popup" }) self.adaythere.append_to_element (""" <h3>Click the link above to login</h3> <p>The white bar is a menu bar and the links drop down menus. Login for more functionality"</p> """) self.adaythere.close_element ("div") self.adaythere.open_element ("div", { "id":"hello_search_popup" }) self.adaythere.append_to_element (""" <h3>The search tools</h3> <p>The search tools let you find days that have been created. Login to create your own days.</p> """) self.adaythere.close_element ("div") self.adaythere.open_element ("div", { "id":"hello_help_popup" }) self.adaythere.append_to_element (""" <h3>Help</h3> <p>Use the help link in the menu. You'll also find these: <a href popover="Welcome to A Day There" popover-trigger="mouseenter"><strong>?</strong></a> in places and if you place your mouse cursor over them some information will popup."</p> """) self.adaythere.close_element ("div") self.adaythere.open_element ("footer", {"id":"page_footer"}) self.adaythere.open_element ("p", None, "© 2014 SoftSprocket") self.adaythere.close_element ("p") self.adaythere.close_element ("footer") self.response.write (self.adaythere.get ())