Ejemplo n.º 1
0
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"))
Ejemplo n.º 2
0
 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])
Ejemplo n.º 3
0
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"))
Ejemplo n.º 4
0
 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])
Ejemplo n.º 5
0
    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")
Ejemplo n.º 6
0
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")
Ejemplo n.º 7
0
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")
Ejemplo n.º 8
0
    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")
Ejemplo n.º 9
0
    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")
Ejemplo n.º 10
0
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(),
        ]))
Ejemplo n.º 11
0
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"))
Ejemplo n.º 12
0
 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(),
     ])
Ejemplo n.º 13
0
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)
Ejemplo n.º 14
0
 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(),
         ])
Ejemplo n.º 15
0
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")
Ejemplo n.º 16
0
 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
Ejemplo n.º 17
0
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),
    }
Ejemplo n.º 18
0
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),
    }
Ejemplo n.º 19
0
 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