def admin_remove_user(): if not is_admin(): return not_admin_redirect() if request.method != 'POST': return '400' user_id = get_request_field_data('user_id') Logger().log("Deleting user with id=" + str(user_id)) delete_query.delete_user(user_id) characters = select_query.get_char_id(user_id) for c in characters: char_id = c['Character_ID'] delete_query.delete_character_abilites(char_id) delete_query.delete_character_skill(char_id) delete_query.delete_character_inventory(char_id) delete_query.delete_users_characters(user_id) delete_query.delete_login_attempts(user_id) delete_query.delete_users_notifications(user_id) return '200'
def get_stat_data(char_id: int, character_field: str, item_field: str): user_id = session["user_id"] if not check_if_user_has_character(user_id, char_id): if is_admin(): user_id = get_user_id_from_char_id(char_id) if user_id < 0: return jsonify(current_value="Err") query_result = select_query.select_char_fields(user_id, char_id, (character_field, )) if query_result is None: return jsonify(current_value=0, base=0) base_stat = query_result[character_field] characters = select_query.select_character_data(char_id) item_id_list = data_helper.get_character_items_id(characters) stat_additional = 0 for i in item_id_list: item = select_query.select_item_fields(i, (item_field, )) if item is not None: stat_additional += item[item_field] return jsonify(additional=stat_additional, base=base_stat)
def admin_notifications(): if not is_admin(): return not_admin_redirect() notifications = select_query.select_notifications() return render_template('admin/notifications.html', header_text=get_current_username(), notifications=notifications)
def admin_users_characters(username): if not is_admin(): return not_admin_redirect() user_id = select_query.get_user_id(username) characters = select_query.select_char_name_and_id(user_id) return render_template('admin/characters.html', characters=characters, header_text=get_current_username())
def admin_creationKit_add(): if not is_admin(): return not_admin_redirect() slot_names = select_query.select_slot_names() rarity_names = select_query.select_rarity_names() effect_names = select_query.select_effect_names() return render_template('admin/add_item.html', slots=slot_names, rarities=rarity_names, effects=effect_names, header_text=get_current_username())
def make_user_admin(): if not is_admin(): return not_admin_redirect() if request.method != 'POST': return '400' user_id = get_request_field_data('user_id') update_query.change_user_admin_status(user_id, True) Logger().log("User with id=" + str(user_id) + " is now admin") return '200'
def admin_creationKit_edit_submit(): if not is_admin(): return not_admin_redirect() if request.method == 'POST': full_dir_name = os.path.join(current_app.config['IMAGE_UPLOAD'], "items") creationKit_helper("UPDATE", full_dir_name) item_id = convert_form_field_data_to_int('id') update_item_image( item_id, full_dir_name, select_query.select_item_picture_name(item_id)["Item_Picture"]) return redirect(url_for('admin.admin_creationKit'))
def get_race(char_id): user_id = session["user_id"] if not check_if_user_has_character(user_id, char_id): if is_admin(): user_id = get_user_id_from_char_id(char_id) if user_id < 0: return jsonify(current_value="Err") query_result = select_query.select_character_race(user_id, char_id) if query_result is None: return jsonify(current_value="Error getting Race Name") return jsonify(current_value=query_result["Race_Name"])
def get_currency(char_id): field_name = "Character_Currency" user_id = session["user_id"] if not check_if_user_has_character(user_id, char_id): if is_admin(): user_id = get_user_id_from_char_id(char_id) if user_id < 0: return jsonify(current_value="Err") query_result = select_query.select_char_fields(user_id, char_id, (field_name, )) if query_result is None: return jsonify(current_value=0) return jsonify(current_value=query_result[field_name])
def admin_users(): if not is_admin(): return not_admin_redirect() users = select_query.select_user_data_except_user(session['user_id']) user_data = [] for u in users: user_data.append({ 'User_ID': u['User_ID'], 'Username': shorten_string(u['Username'], 16), 'Is_Verified': u['Is_Verified'], 'Is_Admin': u['Is_Admin'] }) return render_template('admin/users.html', users=user_data, header_text=get_current_username())
def get_items_in_slot(char_id, item_slot): user_id = session["user_id"] if not check_if_user_has_character(user_id, char_id): if is_admin(): user_id = get_user_id_from_char_id(char_id) if user_id < 0: return jsonify(current_value="Err") characters = select_query.select_char_fields(user_id, char_id) if characters is None: return 'NULL' item_id_list = data_helper.get_character_items_id(characters) select_fields = ("Items.Item_ID", "Items.Item_Weight", "Items.Item_Name", "Rarities.Rarities_Color", "Slots.Slots_ID", "Inventory.Amount") where_clause = "WHERE Inventory.Character_ID = ? AND Slots.Slots_Name = ?" joins = ("INNER JOIN Items on Inventory.Item_ID=Items.Item_ID", "INNER JOIN Rarities on Rarities.Rarities_ID=Items.Rarity_ID", "INNER JOIN Slots on Items.Item_Slot=Slots.Slots_ID") query_result = select_query.select(select_fields, "Inventory", True, where_clause, (char_id, item_slot), joins) items = [] for q in query_result: item_fields = { 'Item_ID': q['Item_ID'], 'Item_Weight': q['Item_Weight'], 'Item_Name': escape(q['Item_Name']), 'Rarities_Color': q['Rarities_Color'], 'Amount': q['Amount'], 'Slots_ID': int(q['Slots_ID']), 'Is_Equiped': True if q['Item_ID'] in item_id_list else False } items.append(item_fields) return jsonify(items)
def admin_creationKit(): if not is_admin(): return not_admin_redirect() items = select_query.select_items() buckets = {} slot_name_query_result = select_query.select_slot_names() for sn in slot_name_query_result: buckets[sn["Slots_Name"]] = [] for i in items: item_data = { 'Item_Name': shorten_string(i['Item_Name'], 13), 'Item_ID': i['Item_ID'] } buckets[i["Slots_Name"]].append(item_data) return render_template('admin/items.html', buckets=buckets, header_text=get_current_username())
def admin_creationKit_add_submit(): if not is_admin(): return not_admin_redirect() if request.method == 'POST': _new_name = get_request_field_data("name") name_check = select_query.get_item_id_from_name(_new_name) if name_check is not None: # Name already exist Logger().error("Item name," + _new_name + " , is already taken.") return '[TODO: Change this later]\n\nItem name already exist... Please go back and try again.' full_dir_name = os.path.join(current_app.config['IMAGE_UPLOAD'], "items") creationKit_helper("INSERT", full_dir_name) item_id = select_query.get_item_id_from_name(_new_name) update_item_image( item_id, full_dir_name, select_query.select_item_picture_name(item_id)["Item_Picture"]) return redirect(url_for('admin.admin_creationKit'))
def admin_creationKit_remove(item_id): if not is_admin(): return not_admin_redirect() delete_query.delete_item(item_id) Logger().log("Deleting item with id=" + str(item_id)) # go though user's equiped items and unequiped deleted item characters = select_query.select(("Character_ID", ), "Character", True) for c in characters: char_id = c["Character_ID"] update_dict = {} character_equiped_data = select_query.select(FIELD_NAMES, "Character", False, "WHERE Character_ID=?", (char_id, )) for ced in FIELD_NAMES: if character_equiped_data[ced] == item_id: # it's gotta go update_dict[ced] = -1 update_query.update("Character", update_dict, "WHERE Character_ID=?", (char_id, )) return redirect(url_for('admin.admin_creationKit'))
def getItemAmount(char_id, item_id): user_id = session["user_id"] if not check_if_user_has_character(user_id, char_id): if is_admin(): user_id = get_user_id_from_char_id(char_id) if user_id < 0: return jsonify(current_value="Err") characters = select_query.select_char_fields(user_id, char_id) if characters is None: return redirect(url_for('character.character_select')) select_fields = ("Inventory.Item_ID", "Amount", "Items.Item_Slot", "Slots.Slots_Name") joins = ("LEFT JOIN Items ON Inventory.Item_ID = Items.Item_ID", "LEFT JOIN Slots ON Items.Item_Slot = Slots.Slots_ID") where_clause = "WHERE Character_ID = ? AND Inventory.Item_ID = ?" query_result = select_query.select(select_fields, "Inventory", False, where_clause, (char_id, item_id), joins) return jsonify(current_value=query_result['Amount'], item_id=query_result['Item_ID'], slot_name=query_result['Slots_Name'])
def home(): from modules.data.database.query_modules import select_query from modules.account.authentication_checks import is_verified, not_verified_redirect, has_agreed_tos, not_agreed_redirect if not is_verified(): return not_verified_redirect() if not has_agreed_tos(): return not_agreed_redirect() header_text = get_current_username() site_notifications = select_query.select_site_notifications() if site_notifications is None or len(site_notifications) < 1: site_notifications = None if is_admin(): return render_template('auth/admin.html', header_text=header_text, unread=False, site_notification=site_notifications) return render_template('auth/user.html', header_text=header_text, site_notification=site_notifications)
def admin_verify_user(user_id): if not is_admin(): return not_admin_redirect() update_query.update_isVerified(user_id, True) return '200'
def get_current_equiped_items(char_id, item_slot): user_id = session["user_id"] if not check_if_user_has_character(user_id, char_id): if is_admin(): user_id = get_user_id_from_char_id(char_id) if user_id < 0: return jsonify(current_value="Err") characters = select_query.select_char_fields(user_id, char_id) if characters is None: return redirect(url_for('character.character_select')) slot_name = select_query.select_slot_names(item_slot)["Slots_Name"] multiple = {'Weapon': 4, 'Ring': 2, 'Item': 2, 'Trinket': 2} r = 1 slots = [] if slot_name in multiple.keys(): r = int(multiple[slot_name]) for i in range(r): field_name = "Character_" + slot_name + str(i + 1) slots.append(field_name) else: slots.append("Character_" + slot_name) item_ids = select_query.select_char_fields(user_id, char_id, tuple(slots)) field_names = ['Item_ID', 'Item_Name', 'Item_Picture', 'Rarities_Color'] item_list = [] item_defaults = { 'Ring': { 'item_name': 'Ring', 'picture': 'Ring.png' }, 'Item': { 'item_name': 'Item', 'picture': 'Item.png' }, 'Trinket': { 'item_name': 'Trinket', 'picture': 'Trinket.png' } } for i in range(r): temp_dict = {} temp_dict['Item_ID'] = -1 if slot_name == 'Weapon': if i % 2 == 1: temp_dict['Item_Name'] = 'Off Hand ' temp_dict['Item_Picture'] = 'Off_Hand.png' else: temp_dict['Item_Name'] = 'Main Hand ' temp_dict['Item_Picture'] = 'Main_Hand.png' temp_dict['Item_Name'] += str(math.ceil((i + 1) / 2)) else: temp_dict['Item_Name'] = item_defaults[slot_name]['item_name'] temp_dict['Item_Picture'] = item_defaults[slot_name]['picture'] temp_dict['Rarities_Color'] = '#606060' item_list.append(temp_dict) count = 0 for i in item_ids: join_str = "INNER JOIN Rarities ON Rarities.Rarities_ID=Items.Rarity_ID" item_data_result = select_query.select(tuple(field_names), "Items", False, "WHERE Item_ID=?", (i, ), (join_str, )) if item_data_result is None: count += 1 continue temp_data = {} for name in field_names: temp_data[name] = item_data_result[name] item_list[count] = temp_data count += 1 slot_name = select_query.select_slot_names(item_slot)['Slots_Name'] output = {'slot_name': slot_name, 'items': item_list, 'num_of_slots': r} return jsonify(output)
def admin_remove_notification(notification_id): if not is_admin(): return not_admin_redirect() delete_query.delete_notification(notification_id) return '200'
def _get_item_details(char_id, equipment_slot="", item_id=-1): user_id = session["user_id"] if not check_if_user_has_character(user_id, char_id): if is_admin(): user_id = get_user_id_from_char_id(char_id) if user_id < 0: return jsonify(None) # Get the character's item piece try: items = select_query.select_character_data(char_id, user_id) except: Logger().error("ERROR: Items were not found") return "" if equipment_slot is not None and equipment_slot != "": try: item_id = items['Character_' + equipment_slot] except: Logger().error("ERROR: Items were not found") return "" # Ensure a proper item_id is given if item_id < 1: # TODO: needs better error handling #raise Exception("Tried to get item details of item with id " + str(item_id)) return jsonify(None) item_query_result = select_query.select_items(item_id) # Check to see if ID has been assigned if item_query_result is None: item_query_result = data_helper.init_item_data() #TODO: this effect query also shows up in admin.py... Could extract this to a function if item_query_result is not None: # Check if item has an effect on it if item_query_result['Item_Effect1'] is not None and item_query_result[ 'Item_Effect1'] > 0: # Check to see if ID has been assigned effect1QueryResult = select_query.select_effect_data( item_query_result['Item_Effect1']) else: effect1QueryResult = { 'Effect_Name': 'Effect1', 'Effect_Description': 'None' } # Check if item has an effect on it if item_query_result['Item_Effect2'] is not None and item_query_result[ 'Item_Effect2'] > 0: # Check to see if ID has been assigned effect2QueryResult = select_query.select_effect_data( item_query_result['Item_Effect2']) else: effect2QueryResult = { 'Effect_Name': 'Effect2', 'Effect_Description': 'None' } image = url_for('static', filename='images/no_image.png') if item_query_result['Item_Picture'] is not None and item_query_result[ 'Item_Picture'] != '' and item_query_result[ 'Item_Picture'] != 'no_image.png': image = '/imageserver/item/' + item_query_result['Item_Picture'] return data_helper.item_data_to_json(item_query_result, image, effect1QueryResult, effect2QueryResult)
def admin_markRead_notification(notification_id): if not is_admin(): return not_admin_redirect() update_query.update_notification_read_status(notification_id, True) return '200'
def admin_creationKit_edit(item_id): if not is_admin(): return not_admin_redirect() slot_names = select_query.select_slot_names() rarity_names = select_query.select_rarity_names() effect_names = select_query.select_effect_names() item_query_result = select_query.select_items(item_id) if item_query_result is None: Logger().error("Failed to get item data for item_id: " + str(item_id)) item_query_result = { 'Item_Description': 'null', 'Item_Name': 'null', 'Item_Picture': 'no_image.png', 'Rarities_Name': 'null', 'Rarities_Color': 'white', #'Item_Slot' : 'null', 'Item_Weight': 'null', 'Item_Str_Bonus': 0, 'Item_Dex_Bonus': 0, 'Item_Con_Bonus': 0, 'Item_Int_Bonus': 0, 'Item_Wis_Bonus': 0, 'Item_Cha_Bonus': 0, 'Item_Attack_Bonus': 0, #'Item_Initiative_Bonus' : 0, 'Item_Health_Bonus': 0, 'Item_Damage_Num_Of_Dices': 0, 'Item_Damage_Num_Of_Dice_Sides': 0, 'Item_AC_Bonus': 0 } item_effect1 = 'None' item_effect2 = 'None' item_slots_name = '' if item_query_result is not None: # Check if item has an effect on it if item_query_result['Item_Effect1'] is not None and item_query_result[ 'Item_Effect1'] > 0: item_effect1 = select_query.select_effect_names( item_query_result['Item_Effect1'])['Effect_Name'] if item_query_result['Item_Effect2'] is not None and item_query_result[ 'Item_Effect2'] > 0: item_effect2 = select_query.select_effect_names( item_query_result['Item_Effect2'])['Effect_Name'] if item_query_result['Item_Slot'] is not None and item_query_result[ 'Item_Slot'] > 0: item_slots_name = select_query.select_slot_names( item_query_result['Item_Slot'])['Slots_Name'] return render_template('admin/edit_item.html', items=item_query_result, slots=slot_names, rarities=rarity_names, effects=effect_names, effect1_name=item_effect1, effect2_name=item_effect2, item_id=item_id, item_slots_name=item_slots_name, header_text=get_current_username())