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, }
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))
def get_user_age(userid): assert userid return d.convert_age(d.execute("SELECT birthday FROM userinfo WHERE userid = %i", [userid], ["element"]))
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))
def get_user_age(userid): assert userid return d.convert_age( d.execute("SELECT birthday FROM userinfo WHERE userid = %i", [userid], ["element"]))