Exemple #1
0
def select_userinfo(userid, config=None):
    if config is None:
        [query] = d.engine.execute("""
            SELECT pr.config, ui.birthday, ui.gender, ui.country
            FROM profile pr
            INNER JOIN userinfo ui USING (userid)
            WHERE pr.userid = %(userid)s
        """, userid=userid)
    else:
        [query] = d.engine.execute("""
            SELECT %(config)s, birthday, gender, country
            FROM userinfo
            WHERE userid = %(userid)s
        """, userid=userid, config=config)

    user_link_rows = d.engine.execute("""
        SELECT link_type, ARRAY_AGG(link_value)
        FROM user_links
        WHERE userid = %(userid)s
        GROUP BY link_type
    """, userid=userid)
    user_links = {r[0]: r[1] for r in user_link_rows}

    show_age = "b" in query[0] or d.get_userid() in staff.MODS
    return {
        "birthday": query[1],
        "age": d.convert_age(query[1]) if show_age else None,
        "show_age": "b" in query[0],
        "gender": query[2],
        "country": query[3],
        "user_links": user_links,
    }
Exemple #2
0
def select_userinfo(userid, config=None):
    if config is None:
        [query] = d.engine.execute("""
            SELECT pr.config, ui.birthday, ui.gender, ui.country
            FROM profile pr
            INNER JOIN userinfo ui USING (userid)
            WHERE pr.userid = %(userid)s
        """,
                                   userid=userid)
    else:
        [query] = d.engine.execute("""
            SELECT %(config)s, birthday, gender, country
            FROM userinfo
            WHERE userid = %(userid)s
        """,
                                   userid=userid,
                                   config=config)

    user_link_rows = d.engine.execute("""
        SELECT link_type, ARRAY_AGG(link_value)
        FROM user_links
        WHERE userid = %(userid)s
        GROUP BY link_type
    """,
                                      userid=userid)
    user_links = {r[0]: r[1] for r in user_link_rows}

    show_age = "b" in query[0] or d.get_userid() in staff.MODS
    return {
        "birthday": query[1],
        "age": d.convert_age(query[1]) if show_age else None,
        "show_age": "b" in query[0],
        "gender": query[2],
        "country": query[3],
        "user_links": user_links,
    }
Exemple #3
0
def do_manage(my_userid, userid, username=None, full_name=None, catchphrase=None,
              birthday=None, gender=None, country=None):
    updates = []

    # Username
    if username is not None:
        if not d.get_sysname(username):
            raise WeasylError("usernameInvalid")
        elif d.execute("SELECT EXISTS (SELECT 0 FROM login WHERE login_name = '%s')",
                       [d.get_sysname(username)], ["bool"]):
            raise WeasylError("usernameExists")
        elif d.execute("SELECT EXISTS (SELECT 0 FROM useralias WHERE alias_name = '%s')",
                       [d.get_sysname(username)], ["bool"]):
            raise WeasylError("usernameExists")
        elif d.execute("SELECT EXISTS (SELECT 0 FROM logincreate WHERE login_name = '%s')",
                       [d.get_sysname(username)], ["bool"]):
            raise WeasylError("usernameExists")

        d.execute("UPDATE login SET login_name = '%s' WHERE userid = %i",
                  [d.get_sysname(username), userid])
        d._get_display_name.invalidate(userid)
        d.execute("UPDATE profile SET username = '******' WHERE userid = %i",
                  [username, userid])
        updates.append('- Username: %s' % (username,))

    # Full name
    if full_name is not None:
        d.execute("UPDATE profile SET full_name = '%s' WHERE userid = %i",
                  [full_name, userid])
        updates.append('- Full name: %s' % (full_name,))

    # Catchphrase
    if catchphrase is not None:
        d.execute("UPDATE profile SET catchphrase = '%s' WHERE userid = %i",
                  [catchphrase, userid])
        updates.append('- Catchphrase: %s' % (catchphrase,))

    # Birthday
    if birthday is not None and d.convert_inputdate(birthday):
        unixtime = d.convert_inputdate(birthday)
        age = d.convert_age(unixtime)

        d.execute("UPDATE userinfo SET birthday = %i WHERE userid = %i", [unixtime, userid])

        if age < ratings.MODERATE.minimum_age:
            max_rating = ratings.GENERAL.code
            rating_flag = ""
        elif age < ratings.EXPLICIT.minimum_age:
            max_rating = ratings.MODERATE.code
            rating_flag = "m"
        else:
            max_rating = ratings.EXPLICIT.code

        if d.get_rating(userid) > max_rating:
            d.execute(
                """
                UPDATE profile
                SET config = REGEXP_REPLACE(config, '[map]', '', 'g') || '%s'
                WHERE userid = %i
                """,
                [rating_flag, userid]
            )
            d._get_config.invalidate(userid)
        updates.append('- Birthday: %s' % (birthday,))

    # Gender
    if gender is not None:
        d.execute("UPDATE userinfo SET gender = '%s' WHERE userid = %i",
                  [gender, userid])
        updates.append('- Gender: %s' % (gender,))

    # Location
    if country is not None:
        d.execute("UPDATE userinfo SET country = '%s' WHERE userid = %i",
                  [country, userid])
        updates.append('- Country: %s' % (country,))

    if updates:
        from weasyl import moderation
        moderation.note_about(my_userid, userid, 'The following fields were changed:', '\n'.join(updates))
Exemple #4
0
def get_user_age(userid):
    assert userid
    return d.convert_age(d.execute("SELECT birthday FROM userinfo WHERE userid = %i", [userid], ["element"]))
Exemple #5
0
def do_manage(my_userid,
              userid,
              username=None,
              full_name=None,
              catchphrase=None,
              birthday=None,
              gender=None,
              country=None):
    updates = []

    # Username
    if username is not None:
        if not d.get_sysname(username):
            raise WeasylError("usernameInvalid")
        elif d.execute(
                "SELECT EXISTS (SELECT 0 FROM login WHERE login_name = '%s')",
            [d.get_sysname(username)], ["bool"]):
            raise WeasylError("usernameExists")
        elif d.execute(
                "SELECT EXISTS (SELECT 0 FROM useralias WHERE alias_name = '%s')",
            [d.get_sysname(username)], ["bool"]):
            raise WeasylError("usernameExists")
        elif d.execute(
                "SELECT EXISTS (SELECT 0 FROM logincreate WHERE login_name = '%s')",
            [d.get_sysname(username)], ["bool"]):
            raise WeasylError("usernameExists")

        d.execute("UPDATE login SET login_name = '%s' WHERE userid = %i",
                  [d.get_sysname(username), userid])
        d._get_display_name.invalidate(userid)
        d.execute("UPDATE profile SET username = '******' WHERE userid = %i",
                  [username, userid])
        updates.append('- Username: %s' % (username, ))

    # Full name
    if full_name is not None:
        d.execute("UPDATE profile SET full_name = '%s' WHERE userid = %i",
                  [full_name, userid])
        updates.append('- Full name: %s' % (full_name, ))

    # Catchphrase
    if catchphrase is not None:
        d.execute("UPDATE profile SET catchphrase = '%s' WHERE userid = %i",
                  [catchphrase, userid])
        updates.append('- Catchphrase: %s' % (catchphrase, ))

    # Birthday
    if birthday is not None and d.convert_inputdate(birthday):
        unixtime = d.convert_inputdate(birthday)
        age = d.convert_age(unixtime)

        d.execute("UPDATE userinfo SET birthday = %i WHERE userid = %i",
                  [unixtime, userid])

        if age < ratings.MODERATE.minimum_age:
            max_rating = ratings.GENERAL.code
            rating_flag = ""
        elif age < ratings.EXPLICIT.minimum_age:
            max_rating = ratings.MODERATE.code
            rating_flag = "m"
        else:
            max_rating = ratings.EXPLICIT.code

        if d.get_rating(userid) > max_rating:
            d.execute(
                """
                UPDATE profile
                SET config = REGEXP_REPLACE(config, '[map]', '', 'g') || '%s'
                WHERE userid = %i
                """, [rating_flag, userid])
            d._get_config.invalidate(userid)
        updates.append('- Birthday: %s' % (birthday, ))

    # Gender
    if gender is not None:
        d.execute("UPDATE userinfo SET gender = '%s' WHERE userid = %i",
                  [gender, userid])
        updates.append('- Gender: %s' % (gender, ))

    # Location
    if country is not None:
        d.execute("UPDATE userinfo SET country = '%s' WHERE userid = %i",
                  [country, userid])
        updates.append('- Country: %s' % (country, ))

    if updates:
        from weasyl import moderation
        moderation.note_about(my_userid, userid,
                              'The following fields were changed:',
                              '\n'.join(updates))
Exemple #6
0
def get_user_age(userid):
    assert userid
    return d.convert_age(
        d.execute("SELECT birthday FROM userinfo WHERE userid = %i", [userid],
                  ["element"]))