def collection_options_get_(request): jsonb_settings = define.get_profile_settings(request.userid) form_settings = { "allow_request": jsonb_settings.allow_collection_requests, "allow_notification": jsonb_settings.allow_collection_notifs, } return Response(define.webpage(request.userid, "manage/collection_options.html", [form_settings], title="Collection Options"))
def GET(self): jsonb_settings = define.get_profile_settings(self.user_id) form_settings = { "allow_request": jsonb_settings.allow_collection_requests, "allow_notification": jsonb_settings.allow_collection_notifs, } return define.webpage(self.user_id, "manage/collection_options.html", [form_settings])
def POST(self): form = web.input(allow_request="", allow_notification="") jsonb_settings = define.get_profile_settings(self.user_id) jsonb_settings.allow_collection_requests = form.allow_request jsonb_settings.allow_collection_notifs = form.allow_notification profile.edit_preferences(self.user_id, jsonb_settings=jsonb_settings) raise web.seeother("/control")
def collection_options_post_(request): form = request.web_input(allow_request="", allow_notification="") jsonb_settings = define.get_profile_settings(request.userid) jsonb_settings.allow_collection_requests = form.allow_request jsonb_settings.allow_collection_notifs = form.allow_notification profile.edit_preferences(request.userid, jsonb_settings=jsonb_settings) raise HTTPSeeOther(location="/control")
def POST(self): form = web.input(rating="", sfwrating="", custom_thumbs="", tagging="", edittagging="", hideprofile="", hidestats="", hidefavorites="", hidefavbar="", shouts="", notes="", filter="", follow_s="", follow_c="", follow_f="", follow_t="", follow_j="", timezone="", twelvehour="") rating = ratings.CODE_MAP[define.get_int(form.rating)] jsonb_settings = define.get_profile_settings(self.user_id) jsonb_settings.disable_custom_thumbs = form.custom_thumbs == "disable" jsonb_settings.max_sfw_rating = define.get_int(form.sfwrating) preferences = profile.Config() preferences.twelvehour = bool(form.twelvehour) preferences.rating = rating preferences.tagging = bool(form.tagging) preferences.edittagging = bool(form.edittagging) preferences.hideprofile = bool(form.hideprofile) preferences.hidestats = bool(form.hidestats) preferences.hidefavorites = bool(form.hidefavorites) preferences.hidefavbar = bool(form.hidefavbar) preferences.shouts = ("friends_only" if form.shouts == "x" else "staff_only" if form.shouts == "w" else "anyone") preferences.notes = ("friends_only" if form.notes == "z" else "staff_only" if form.notes == "y" else "anyone") preferences.filter = bool(form.filter) preferences.follow_s = bool(form.follow_s) preferences.follow_c = bool(form.follow_c) preferences.follow_f = bool(form.follow_f) preferences.follow_t = bool(form.follow_t) preferences.follow_j = bool(form.follow_j) profile.edit_preferences(self.user_id, timezone=form.timezone, preferences=preferences, jsonb_settings=jsonb_settings) # release the cache on the index page in case the Maximum Viewable Content Rating changed. index.template_fields.invalidate(self.user_id) raise web.seeother("/control")
def control_editpreferences_get_(request): config = define.get_config(request.userid) current_rating, current_sfw_rating = define.get_config_rating(request.userid) age = profile.get_user_age(request.userid) allowed_ratings = ratings.get_ratings_for_age(age) jsonb_settings = define.get_profile_settings(request.userid) return Response(define.webpage(request.userid, "control/edit_preferences.html", [ # Config config, jsonb_settings, # Rating current_rating, current_sfw_rating, age, allowed_ratings, request.weasyl_session.timezone.timezone, define.timezones(), ]))
def control_editpreferences_get_(request): config = define.get_config(request.userid) current_rating, current_sfw_rating = define.get_config_rating(request.userid) age = profile.get_user_age(request.userid) allowed_ratings = ratings.get_ratings_for_age(age) jsonb_settings = define.get_profile_settings(request.userid) return Response(define.webpage(request.userid, "control/edit_preferences.html", [ # Config config, jsonb_settings, # Rating current_rating, current_sfw_rating, age, allowed_ratings, request.weasyl_session.timezone.timezone, define.timezones(), ], title="Site Preferences"))
def GET(self): config = define.get_config(self.user_id) current_rating, current_sfw_rating = define.get_config_rating(self.user_id) age = profile.get_user_age(self.user_id) allowed_ratings = ratings.get_ratings_for_age(age) jsonb_settings = define.get_profile_settings(self.user_id) return define.webpage(self.user_id, "control/edit_preferences.html", [ # Config config, jsonb_settings, # Rating current_rating, current_sfw_rating, age, allowed_ratings, web.ctx.weasyl_session.timezone.timezone, define.timezones(), ])
def request(userid, submitid, otherid): query = d.engine.execute( "SELECT userid, rating, settings " "FROM submission WHERE submitid = %(submission)s", submission=submitid).first() rating = d.get_rating(userid) if not query or "h" in query.settings: raise WeasylError("Unexpected") if otherid != query.userid: raise WeasylError("Unexpected") # not checking for blocktags here because if you want to collect # something with a tag you don't like that's your business if rating < query.rating: raise WeasylError("RatingExceeded") if "f" in query.settings: raise WeasylError("collectionUnacceptable") if ignoreuser.check(otherid, userid): raise WeasylError("IgnoredYou") if ignoreuser.check(userid, otherid): raise WeasylError("YouIgnored") if _check_throttle(userid, otherid): raise WeasylError("collectionThrottle") settings = d.get_profile_settings(otherid) if not settings.allow_collection_requests: raise WeasylError("Unexpected") request_settings = "r" try: d.engine.execute( "INSERT INTO collection (userid, submitid, unixtime, settings) " "VALUES (%(userid)s, %(submitid)s, %(now)s, %(settings)s)", userid=userid, submitid=submitid, now=d.get_time(), settings=request_settings) except PostgresError: raise WeasylError("collectionExists") welcome.collectrequest_insert(userid, otherid, submitid)
def GET(self): config = define.get_config(self.user_id) current_rating, current_sfw_rating = define.get_config_rating( self.user_id) age = profile.get_user_age(self.user_id) allowed_ratings = ratings.get_ratings_for_age(age) jsonb_settings = define.get_profile_settings(self.user_id) return define.webpage( self.user_id, "control/edit_preferences.html", [ # Config config, jsonb_settings, # Rating current_rating, current_sfw_rating, age, allowed_ratings, web.ctx.weasyl_session.timezone.timezone, define.timezones(), ])
def control_editpreferences_post_(request): form = request.web_input( rating="", sfwrating="", custom_thumbs="", tagging="", edittagging="", hideprofile="", hidestats="", hidefavorites="", hidefavbar="", shouts="", notes="", filter="", follow_s="", follow_c="", follow_f="", follow_t="", follow_j="", timezone="", twelvehour="") rating = ratings.CODE_MAP[define.get_int(form.rating)] jsonb_settings = define.get_profile_settings(request.userid) jsonb_settings.disable_custom_thumbs = form.custom_thumbs == "disable" jsonb_settings.max_sfw_rating = define.get_int(form.sfwrating) preferences = profile.Config() preferences.twelvehour = bool(form.twelvehour) preferences.rating = rating preferences.tagging = bool(form.tagging) preferences.edittagging = bool(form.edittagging) preferences.hideprofile = bool(form.hideprofile) preferences.hidestats = bool(form.hidestats) preferences.hidefavorites = bool(form.hidefavorites) preferences.hidefavbar = bool(form.hidefavbar) preferences.shouts = ("friends_only" if form.shouts == "x" else "staff_only" if form.shouts == "w" else "anyone") preferences.notes = ("friends_only" if form.notes == "z" else "staff_only" if form.notes == "y" else "anyone") preferences.filter = bool(form.filter) preferences.follow_s = bool(form.follow_s) preferences.follow_c = bool(form.follow_c) preferences.follow_f = bool(form.follow_f) preferences.follow_t = bool(form.follow_t) preferences.follow_j = bool(form.follow_j) profile.edit_preferences(request.userid, timezone=form.timezone, preferences=preferences, jsonb_settings=jsonb_settings) # release the cache on the index page in case the Maximum Viewable Content Rating changed. index.template_fields.invalidate(request.userid) raise HTTPSeeOther(location="/control")
def can_notify(other): other_jsonb = d.get_profile_settings(other) allow_notify = other_jsonb.allow_collection_notifs ignored = ignoreuser.check(other, userid) return allow_notify and not ignored
def select_view(userid, submitid, rating, ignore=True, anyway=None): query = d.execute(""" SELECT su.userid, pr.username, su.folderid, su.unixtime, su.title, su.content, su.subtype, su.rating, su.settings, su.page_views, su.sorttime, pr.config, fd.title FROM submission su INNER JOIN profile pr USING (userid) LEFT JOIN folder fd USING (folderid) WHERE su.submitid = %i """, [submitid], options=["single", "list"]) # Sanity check if query and userid in staff.MODS and anyway == "true": pass elif not query or "h" in query[8]: raise WeasylError("submissionRecordMissing") elif query[7] > rating and ((userid != query[0] and userid not in staff.MODS) or d.is_sfw_mode()): raise WeasylError("RatingExceeded") elif "f" in query[8] and not frienduser.check(userid, query[0]): raise WeasylError("FriendsOnly") elif ignore and ignoreuser.check(userid, query[0]): raise WeasylError("UserIgnored") elif ignore and blocktag.check(userid, submitid=submitid): raise WeasylError("TagBlocked") # Get submission filename submitfile = media.get_submission_media(submitid).get('submission', [None])[0] # Get submission text if submitfile and submitfile['file_type'] in ['txt', 'htm']: submittext = files.read(submitfile['full_file_path']) else: submittext = None embedlink = d.text_first_line(query[5]) if "v" in query[8] else None google_doc_embed = None if 'D' in query[8]: db = d.connect() gde = d.meta.tables['google_doc_embeds'] q = (sa.select([gde.c.embed_url]) .where(gde.c.submitid == submitid)) results = db.execute(q).fetchall() if not results: raise WeasylError("can't find embed information") google_doc_embed = results[0] tags, artist_tags = searchtag.select_with_artist_tags(submitid) settings = d.get_profile_settings(query[0]) return { "submitid": submitid, "userid": query[0], "username": query[1], "folderid": query[2], "unixtime": query[3], "title": query[4], "content": (d.text_first_line(query[5], strip=True) if "v" in query[8] else query[5]), "subtype": query[6], "rating": query[7], "settings": query[8], "page_views": ( query[9] + 1 if d.common_view_content(userid, 0 if anyway == "true" else submitid, "submit") else query[9]), "fave_count": d.execute( "SELECT COUNT(*) FROM favorite WHERE (targetid, type) = (%i, 's')", [submitid], ["element"]), "mine": userid == query[0], "reported": report.check(submitid=submitid), "favorited": favorite.check(userid, submitid=submitid), "friends_only": "f" in query[8], "hidden_submission": "h" in query[8], "collectors": collection.find_owners(submitid), "no_request": not settings.allow_collection_requests, "text": submittext, "sub_media": media.get_submission_media(submitid), "user_media": media.get_user_media(query[0]), "submit": submitfile, "embedlink": embedlink, "embed": embed.html(embedlink) if embedlink is not None else None, "google_doc_embed": google_doc_embed, "tags": tags, "artist_tags": artist_tags, "removable_tags": searchtag.removable_tags(userid, query[0], tags, artist_tags), "can_remove_tags": searchtag.can_remove_tags(userid, query[0]), "folder_more": select_near(userid, rating, 1, query[0], query[2], submitid), "folder_title": query[12] if query[12] else "Root", "comments": comment.select(userid, submitid=submitid), }
def select_view(userid, submitid, rating, ignore=True, anyway=None): query = d.engine.execute(""" SELECT su.userid, pr.username, su.folderid, su.unixtime, su.title, su.content, su.subtype, su.rating, su.settings, su.page_views, fd.title, su.favorites, su.image_representations FROM submission su INNER JOIN profile pr USING (userid) LEFT JOIN folder fd USING (folderid) WHERE su.submitid = %(id)s """, id=submitid).first() # Sanity check if query and userid in staff.MODS and anyway == "true": pass elif not query or "h" in query[8]: raise WeasylError("submissionRecordMissing") elif query[7] > rating and ( (userid != query[0] and userid not in staff.MODS) or d.is_sfw_mode()): raise WeasylError("RatingExceeded") elif "f" in query[8] and not frienduser.check(userid, query[0]): raise WeasylError("FriendsOnly") elif ignore and ignoreuser.check(userid, query[0]): raise WeasylError("UserIgnored") elif ignore and blocktag.check(userid, submitid=submitid): raise WeasylError("TagBlocked") # Get submission filename submitfile = media.get_submission_media(submitid).get( 'submission', [None])[0] # Get submission text if submitfile and submitfile['file_type'] in ['txt', 'htm']: submittext = files.read(submitfile['full_file_path']) else: submittext = None embedlink = d.text_first_line(query[5]) if "v" in query[8] else None google_doc_embed = None if 'D' in query[8]: db = d.connect() gde = d.meta.tables['google_doc_embeds'] q = (sa.select([gde.c.embed_url]).where(gde.c.submitid == submitid)) results = db.execute(q).fetchall() if not results: raise WeasylError("can't find embed information") google_doc_embed = results[0] tags, artist_tags = searchtag.select_with_artist_tags(submitid) settings = d.get_profile_settings(query[0]) if query[12] is None: sub_media = media.get_submission_media(submitid) else: sub_media = media.deserialize_image_representations(query[12]) return { "submitid": submitid, "userid": query[0], "username": query[1], "folderid": query[2], "unixtime": query[3], "title": query[4], "content": (d.text_first_line(query[5], strip=True) if "v" in query[8] else query[5]), "subtype": query[6], "rating": query[7], "settings": query[8], "page_views": (query[9] + 1 if d.common_view_content( userid, 0 if anyway == "true" else submitid, "submit") else query[9]), "fave_count": query[11], "mine": userid == query[0], "reported": report.check(submitid=submitid), "favorited": favorite.check(userid, submitid=submitid), "friends_only": "f" in query[8], "hidden_submission": "h" in query[8], "collected": collection.owns(userid, submitid), "no_request": not settings.allow_collection_requests, "text": submittext, "sub_media": sub_media, "user_media": media.get_user_media(query[0]), "submit": submitfile, "embedlink": embedlink, "embed": embed.html(embedlink) if embedlink is not None else None, "google_doc_embed": google_doc_embed, "tags": tags, "artist_tags": artist_tags, "removable_tags": searchtag.removable_tags(userid, query[0], tags, artist_tags), "can_remove_tags": searchtag.can_remove_tags(userid, query[0]), "folder_more": select_near(userid, rating, 1, query[0], query[2], submitid), "folder_title": query[10] if query[10] else "Root", "comments": comment.select(userid, submitid=submitid), }