コード例 #1
0
def route_community_guild_leave(gid, pid):
    user = current_user()
    found = False

    for player in user.players:
        if player.id == pid:
            found = True
            break

    if not found:
        return redirect(url_for('route_community_guild', id=gid))

    membership = GuildMembership.query.filter(GuildMembership.guild_id == gid)
    membership = membership.filter(GuildMembership.player_id == pid).first()

    if not membership:
        return redirect(url_for('route_community_guild', id=gid))

    rank = db.session().query(
        GuildRank.level).filter(GuildRank.id == membership.rank_id).first()
    if not rank:
        return redirect(url_for('route_community_guild', id=gid))

    if rank.level < 3:
        db.session().delete(membership)
        db.session().commit()

        flash('You left the guild.', 'success')
    else:
        flash(
            'Guild leaders can not leave the guild, use the disband feature instead.',
            'error')

    return redirect(url_for('route_community_guild', id=gid))
コード例 #2
0
ファイル: shop.py プロジェクト: diath/pyfsw
def route_shop_order(id):
	item = db.session.query(ShopItem).filter(ShopItem.id == id).first()
	if not item or not item.enabled:
		return redirect(url_for('route_shop'))

	characters = current_user().players
	return render_template('shop/order.htm', item=item, characters=characters)
コード例 #3
0
def route_community_guild(id):
    guild = Guild.query.filter(Guild.id == id).first()
    members = GuildMembership.query.filter(
        GuildMembership.guild_id == guild.id).all()
    invites = GuildInvite.query.filter(GuildInvite.guild_id == guild.id).all()
    wars = GuildWar.query.filter(
        or_(GuildWar.guild1 == id, GuildWar.guild2 == id)).filter(
            GuildWar.status == GuildWar.Active).all()

    user = current_user()
    if user:
        ids = []
        for player in user.players:
            ids.append(player.id)

        for invite in invites:
            if invite.player_id in ids:
                invite.own = True

        for member in members:
            if member.player_id in ids:
                member.own = True

    return render_template('community/guilds/view.htm',
                           guild=guild,
                           members=members,
                           invites=invites,
                           leader=is_guild_leader(id),
                           vice=is_guild_vice(id),
                           wars=wars)
コード例 #4
0
def route_account_restore(id):
	account = current_user()
	player = db.session().query(Player.account_id, Player.name).filter(Player.id == id).first()
	if not player or account.id != player.account_id:
		return redirect(url_for('route_account_manage'))

	return render_template('account/character_restore.htm', id=id, name=player.name)
コード例 #5
0
def route_admin_news_compose():
    user = current_user()
    boards = ForumBoard.query.all()

    return render_template('admin/news/compose.htm',
                           characters=user.players,
                           boards=boards)
コード例 #6
0
ファイル: community_guilds.py プロジェクト: EvulMastah/pyfsw
def route_community_guild_leave(gid, pid):
	user = current_user()
	found = False

	for player in user.players:
		if player.id == pid:
			found = True
			break

	if not found:
		return redirect(url_for('route_community_guild', id=gid))

	membership = GuildMembership.query.filter(GuildMembership.guild_id == gid)
	membership = membership.filter(GuildMembership.player_id == pid).first()

	if not membership:
		return redirect(url_for('route_community_guild', id=gid))

	rank = db.session().query(GuildRank.level).filter(GuildRank.id == membership.rank_id).first()
	if not rank:
		return redirect(url_for('route_community_guild', id=gid))

	if rank.level < 3:
		db.session().delete(membership)
		db.session().commit()

		flash('You left the guild.', 'success')
	else:
		flash('Guild leaders can not leave the guild, use the disband feature instead.', 'error')

	return redirect(url_for('route_community_guild', id=gid))
コード例 #7
0
def route_account_edit(id):
	account = current_user()
	player = db.session().query(Player.account_id, Player.comment).filter(Player.id == id).first()
	if not account or not player or account.id != player.account_id:
		return redirect(url_for('route_account_manage'))

	return render_template('account/character_edit.htm', id=id, comment=player.comment)
コード例 #8
0
def route_account_signature_post(id):
    account = current_user()
    player = Player.query.filter(Player.id == id).first()
    if player and account.id == player.account_id:
        signature = request.form.get('signature', '', type=str)

        # Strip the signature
        signature = signature.strip()

        # Strip consecutive spaces
        signature = ' '.join(signature.split())

        # Make sure that len(signature) <= 255
        signature = signature[:254]

        player.signature = signature
        db.session().commit()

        flash('The character signature has been updated.', 'success')
    else:
        flash(
            'You cannot edit the signature of a character that does not belong to you.',
            'error')

    return redirect(url_for('route_account_manage'))
コード例 #9
0
def route_account_character_post():
	name = request.form.get('name', '', type=str)
	gender = request.form.get('gender', 0, type=int)
	vocation = request.form.get('vocation', 0, type=int)
	town = request.form.get('town', 1, type=int)
	error = False

	if len(name) < 4:
		flash('The name must be at least 4 characters long.', 'error')
		error = True

	if not CHAR_NAME_EXPR.match(name):
		flash('The name may only contain latin characters (A-Z, a-z and spaces).', 'error')
		error = True

	if len(name.split(' ')) > 3:
		flash('The name may only consist of 3 words.', 'error')
		error = True

	if gender not in NEW_CHARACTER.get('genders'):
		flash('The selected gender is not valid.', 'error')
		error = True

	if vocation not in NEW_CHARACTER.get('vocations'):
		flash('The selected vocation is not valid.', 'error')
		error = True

	if town not in NEW_CHARACTER.get('towns'):
		flash('The selected town is not valid.', 'error')
		error = True

	name = string.capwords(name)
	player = db.session().query(Player.id).filter(Player.name == name).first()
	if player:
		flash('The character name is already in use.', 'error')
		error = True

	if error:
		return redirect(url_for('route_account_character'))

	player = Player()
	player.name = name
	player.sex = gender
	player.vocation = vocation
	player.town_id = town
	player.account_id = current_user().id

	player.looktype = 136 if gender == 0 else 128
	player.lookhead = NEW_CHARACTER.get('outfit')[0]
	player.lookbody = NEW_CHARACTER.get('outfit')[1]
	player.looklegs = NEW_CHARACTER.get('outfit')[2]
	player.lookfeet = NEW_CHARACTER.get('outfit')[3]

	db.session().add(player)
	db.session().commit()

	flash('The character has been created.', 'success')

	return redirect(url_for('route_account_manage'))
コード例 #10
0
ファイル: news.py プロジェクト: EvulMastah/pyfsw
def route_admin_news_compose():
	user = current_user()
	boards = ForumBoard.query.all()

	return render_template(
		'admin/news/compose.htm',
		characters=user.players, boards=boards
	)
コード例 #11
0
ファイル: shop.py プロジェクト: diath/pyfsw
def route_shop():
	categories = db.session.query(ShopCategory).all()
	user = current_user()

	return render_template(
		'shop/browse.htm',
		categories=categories, user=user
	)
コード例 #12
0
ファイル: news.py プロジェクト: EvulMastah/pyfsw
def route_admin_news_edit(id):
	news = News.query.filter(News.id == id).first()
	user = current_user()
	boards = ForumBoard.query.all()
	news.thread_content = db.session().query(ForumThread.content).filter(ForumThread.id == news.thread_id).first().content

	return render_template(
		'admin/news/edit.htm',
		news = news, characters = user.players, boards = boards
	)
コード例 #13
0
def route_forum_thread(thread, page):
    thread = ForumThread.query.filter(ForumThread.id == thread).first()
    if not thread:
        return redirect(url_for('route_forum'))

    if thread.deleted and session.get('access', 0) != ADMIN_ACCOUNT_TYPE:
        return redirect(url_for('route_forum'))

    player = db.session().query(
        Player.name, Player.level, Player.vocation, Player.town_id,
        Player.group_id, Player.postcount, Player.signature, Player.looktype,
        Player.lookhead, Player.lookbody, Player.looklegs, Player.lookfeet,
        Player.lookaddons).filter(Player.id == thread.author_id).first()
    if player:
        thread.player = player

    total = db.session().query(
        ForumPost.id).filter(ForumPost.thread_id == thread.id).count()
    perpage = POSTS_PER_PAGE

    posts = ForumPost.query.filter(ForumPost.thread_id == thread.id)

    if session.get('access', 0) != ADMIN_ACCOUNT_TYPE:
        posts = posts.filter(ForumPost.deleted == 0)

    posts = posts.order_by(ForumPost.timestamp.asc())
    posts = posts.offset((page - 1) * perpage)
    posts = posts.limit(perpage).all()

    for post in posts:
        player = db.session().query(
            Player.name, Player.level, Player.vocation, Player.town_id,
            Player.group_id, Player.postcount, Player.signature,
            Player.looktype, Player.lookhead, Player.lookbody, Player.looklegs,
            Player.lookfeet,
            Player.lookaddons).filter(Player.id == post.author_id).first()
        if player:
            post.player = player

    user = current_user()
    characters = None

    if user:
        characters = db.session().query(
            Player.id, Player.name).filter(Player.account_id == user.id).all()

    pagination = Pagination(posts, page, perpage, total, posts)

    return render_template('forum/thread.htm',
                           thread=thread,
                           posts=posts,
                           characters=characters,
                           pagination=pagination,
                           perpage=perpage,
                           page=page)
コード例 #14
0
def route_admin_news_edit(id):
    news = News.query.filter(News.id == id).first()
    user = current_user()
    boards = ForumBoard.query.all()
    news.thread_content = db.session().query(ForumThread.content).filter(
        ForumThread.id == news.thread_id).first().content

    return render_template('admin/news/edit.htm',
                           news=news,
                           characters=user.players,
                           boards=boards)
コード例 #15
0
def route_account_show(id):
	account = current_user()
	player = db.session().query(Player).filter(Player.id == id).first()
	if player and account.id == player.account_id:
		player.hidden = 0
		db.session().commit()

		flash('The characted is no longer hidden.', 'success')
	else:
		flash('You cannot show a character that does not belong to you.', 'error')

	return redirect(url_for('route_account_manage'))
コード例 #16
0
def route_account_restore_post(id):
	account = current_user()
	player = db.session().query(Player).filter(Player.id == id).first()
	if player and account.id == player.account_id:
		player.deletion = 0
		db.session().commit()

		flash('The character has been restored.', 'success')
	else:
		flash('You cannot restore a character that does not belong to you.', 'error')

	return redirect(url_for('route_account_manage'))
コード例 #17
0
def route_account_delete_post(id):
	account = current_user()
	player = db.session().query(Player).filter(Player.id == id).first()
	if player and account.id == player.account_id:
		player.deletion = int(time()) + (DELETION_DELAY * 86400)
		db.session().commit()

		flash('The character has been scheduled for deletion.', 'success')
	else:
		flash('You cannot delete a character that does not belong to you.', 'error')

	return redirect(url_for('route_account_manage'))
コード例 #18
0
def route_account_edit_post(id):
	account = current_user()
	player = db.session().query(Player).filter(Player.id == id).first()
	if player and account.id == player.account_id:
		player.comment = request.form.get('comment', '', type=str)
		db.session().commit()

		flash('The character comment has been updated.', 'success')
	else:
		flash('You cannot edit the comment of a character that does not belong to you.', 'error')

	return redirect(url_for('route_account_manage'))
コード例 #19
0
def route_account_key():
	user = current_user()
	if user.key != '':
		return redirect(url_for('route_account_manage'))

	parts = []
	for i in range(4):
		parts.append(''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(4)))

	key = '-'.join(parts)

	user.key = key
	db.session().commit()

	return render_template('account/key.htm', key=key)
コード例 #20
0
ファイル: forum.py プロジェクト: EvulMastah/pyfsw
def route_forum_thread(thread, page):
	thread = ForumThread.query.filter(ForumThread.id == thread).first()
	if not thread:
		return redirect(url_for('route_forum'))

	if thread.deleted and session.get('access', 0) != ADMIN_ACCOUNT_TYPE:
		return redirect(url_for('route_forum'))

	player = db.session().query(
		Player.name, Player.level, Player.vocation, Player.town_id, Player.group_id, Player.postcount, Player.signature,
		Player.looktype, Player.lookhead, Player.lookbody, Player.looklegs, Player.lookfeet, Player.lookaddons
	).filter(Player.id == thread.author_id).first()
	if player:
		thread.player = player

	total = db.session().query(ForumPost.id).filter(ForumPost.thread_id == thread.id).count()
	perpage = POSTS_PER_PAGE

	posts = ForumPost.query.filter(ForumPost.thread_id == thread.id)

	if session.get('access', 0) != ADMIN_ACCOUNT_TYPE:
		posts = posts.filter(ForumPost.deleted == 0)

	posts = posts.order_by(ForumPost.timestamp.asc())
	posts = posts.offset((page - 1) * perpage)
	posts = posts.limit(perpage).all()

	for post in posts:
		player = db.session().query(
			Player.name, Player.level, Player.vocation, Player.town_id, Player.group_id, Player.postcount, Player.signature,
			Player.looktype, Player.lookhead, Player.lookbody, Player.looklegs, Player.lookfeet, Player.lookaddons
		).filter(Player.id == post.author_id).first()
		if player:
			post.player = player

	user = current_user()
	characters = None

	if user:
		characters = db.session().query(Player.id, Player.name).filter(Player.account_id == user.id).all()

	pagination = Pagination(posts, page, perpage, total, posts)

	return render_template(
		'forum/thread.htm', thread=thread, posts=posts, characters=characters,
		pagination=pagination, perpage=perpage, page=page
	)
コード例 #21
0
ファイル: shop.py プロジェクト: diath/pyfsw
def route_shop_order_post(id):
	item = request.form.get('item', 0, type=int)
	character = request.form.get('character', 0, type=int)
	error = False

	if item == 0 or character == 0:
		return redirect(url_for('route_shop'))

	item = db.session().query(ShopItem).filter(ShopItem.id == item).first()
	if not item:
		flash('Failed to find the selected item.', 'error')
		error = True

	character = db.session().query(Player).filter(Player.id == character).first()
	if not character:
		flash('Failed to find the selected character.', 'error')
		error = True

	account = current_user()
	if character not in account.players:
		flash('You can not order an item for foreign character.', 'error')
		error = True

	if account.points < item.price:
		flash('You do not have enough premium points to purchase this item.', 'error')
		error = True

	if not error:
		order = ShopOrder()
		order.name = item.name
		order.type = item.type
		order.key = item.key
		order.value = item.value
		order.price = item.price
		order.ordered = int(time())
		order.character_id = character.id

		account.points -= item.price

		db.session().add(order)
		db.session().commit()

		flash('The item has been ordered and should be soon delivered to your character.', 'success')

	return redirect(url_for('route_shop'))
コード例 #22
0
def route_forum_board(board, page):
    board = ForumBoard.query.filter(ForumBoard.id == board).first()
    if not board:
        return redirect(url_for('route_forum'))

    total = db.session().query(
        ForumThread.id).filter(ForumThread.board_id == board.id).count()
    perpage = THREADS_PER_PAGE

    threads = ForumThread.query.filter(ForumThread.board_id == board.id)

    if session.get('access', 0) != ADMIN_ACCOUNT_TYPE:
        threads = threads.filter(ForumThread.deleted == 0)

    if page == 1:
        threads = threads.order_by(ForumThread.pinned.desc())

    threads = threads.order_by(ForumThread.lastpost.desc())
    threads = threads.offset((page - 1) * perpage)
    threads = threads.limit(perpage).all()

    for thread in threads:
        posts = db.session().query(
            ForumPost.id).filter(ForumPost.thread_id == thread.id).count()
        thread.posts = posts

    user = current_user()
    characters = None

    if user:
        characters = db.session().query(
            Player.id, Player.name).filter(Player.account_id == user.id).all()

    pagination = Pagination(threads, page, perpage, total, threads)

    return render_template('forum/board.htm',
                           board=board,
                           threads=threads,
                           characters=characters,
                           pagination=pagination,
                           perpage=perpage,
                           page=page)
コード例 #23
0
def route_account_password_post():
	pswd = request.form.get('pswd', '', type=str)
	pswdNew = request.form.get('pswdNew', '', type=str)
	pswdRepeat = request.form.get('pswdRepeat', '', type=str)
	user = current_user()
	error = False

	hash = sha1()
	hash.update(pswd.encode('utf-8'))
	pswd = hash.hexdigest()

	if user.password != pswd:
		flash('The current password is not correct.', 'error')
		error = True

	if len(pswdNew) < 5:
		flash('The new password must be at least 5 characters long.', 'error')
		error = True

	if pswdNew == user.password:
		flash('The new password must be different than the current one.', 'error')
		error = True

	if pswdNew != pswdRepeat:
		flash('The new passwords do not match.', 'error')
		error = True

	if error:
		return redirect(url_for('route_account_password'))

	hash = sha1()
	hash.update(pswdNew.encode('utf-8'))
	newPswd = hash.hexdigest()

	user.password = newPswd
	db.session().commit()

	flash('The password has been changed.', 'success')

	return redirect(url_for('route_account_manage'))
コード例 #24
0
def route_community_guild_join(gid, pid):
    user = current_user()
    found = False

    for player in user.players:
        if player.id == pid:
            found = True
            break

    if not found:
        return redirect(url_for('route_community_guild', id=gid))

    invite = GuildInvite.query.filter(GuildInvite.guild_id == gid)
    invite = invite.filter(GuildInvite.player_id == pid).first()

    if not invite:
        return redirect(url_for('route_community_guild', id=gid))

    rank = db.session().query(GuildRank.id).filter(GuildRank.guild_id == gid)
    rank = rank.filter(GuildRank.level == 1).first()

    if not rank:
        return redirect(url_for('route_community_guild', id=gid))

    membership = GuildMembership()
    membership.player_id = pid
    membership.guild_id = gid
    membership.rank_id = rank.id
    membership.nick = ''

    db.session().delete(invite)
    db.session().add(membership)

    db.session().commit()

    flash('You have joined the guild.', 'success')

    return redirect(url_for('route_community_guild', id=gid))
コード例 #25
0
ファイル: community_guilds.py プロジェクト: EvulMastah/pyfsw
def route_community_guild_join(gid, pid):
	user = current_user()
	found = False

	for player in user.players:
		if player.id == pid:
			found = True
			break

	if not found:
		return redirect(url_for('route_community_guild', id=gid))

	invite = GuildInvite.query.filter(GuildInvite.guild_id == gid)
	invite = invite.filter(GuildInvite.player_id == pid).first()

	if not invite:
		return redirect(url_for('route_community_guild', id=gid))

	rank = db.session().query(GuildRank.id).filter(GuildRank.guild_id == gid)
	rank = rank.filter(GuildRank.level == 1).first()

	if not rank:
		return redirect(url_for('route_community_guild', id=gid))

	membership = GuildMembership()
	membership.player_id = pid
	membership.guild_id = gid
	membership.rank_id = rank.id
	membership.nick = ''

	db.session().delete(invite)
	db.session().add(membership)

	db.session().commit()

	flash('You have joined the guild.', 'success')

	return redirect(url_for('route_community_guild', id=gid))
コード例 #26
0
ファイル: account.py プロジェクト: diath/pyfsw
def route_account_signature_post(id):
	account = current_user()
	player = Player.query.filter(Player.id == id).first()
	if player and account.id == player.account_id:
		signature = request.form.get('signature', '', type=str)

		# Strip the signature
		signature = signature.strip()

		# Strip consecutive spaces
		signature = ' '.join(signature.split())

		# Make sure that len(signature) <= 255
		signature = signature[:254]

		player.signature = signature
		db.session().commit()

		flash('The character signature has been updated.', 'success')
	else:
		flash('You cannot edit the signature of a character that does not belong to you.', 'error')

	return redirect(url_for('route_account_manage'))
コード例 #27
0
ファイル: community_guilds.py プロジェクト: EvulMastah/pyfsw
def route_community_guild(id):
	guild = Guild.query.filter(Guild.id == id).first()
	members = GuildMembership.query.filter(GuildMembership.guild_id == guild.id).all()
	invites = GuildInvite.query.filter(GuildInvite.guild_id == guild.id).all()
	wars = GuildWar.query.filter(or_(GuildWar.guild1 == id, GuildWar.guild2 == id)).filter(GuildWar.status == GuildWar.Active).all()

	user = current_user()
	if user:
		ids = []
		for player in user.players:
			ids.append(player.id)

		for invite in invites:
			if invite.player_id in ids:
				invite.own = True

		for member in members:
			if member.player_id in ids:
				member.own = True

	return render_template(
		'community/guilds/view.htm', guild=guild, members=members, invites=invites,
		leader=is_guild_leader(id), vice=is_guild_vice(id), wars=wars
	)
コード例 #28
0
ファイル: forum.py プロジェクト: EvulMastah/pyfsw
def route_forum_board(board, page):
	board = ForumBoard.query.filter(ForumBoard.id == board).first()
	if not board:
		return redirect(url_for('route_forum'))

	total = db.session().query(ForumThread.id).filter(ForumThread.board_id == board.id).count()
	perpage = THREADS_PER_PAGE

	threads = ForumThread.query.filter(ForumThread.board_id == board.id)

	if session.get('access', 0) != ADMIN_ACCOUNT_TYPE:
		threads = threads.filter(ForumThread.deleted == 0)

	if page == 1:
		threads = threads.order_by(ForumThread.pinned.desc())

	threads = threads.order_by(ForumThread.lastpost.desc())
	threads = threads.offset((page - 1) * perpage)
	threads = threads.limit(perpage).all()

	for thread in threads:
		posts = db.session().query(ForumPost.id).filter(ForumPost.thread_id == thread.id).count()
		thread.posts = posts

	user = current_user()
	characters = None

	if user:
		characters = db.session().query(Player.id, Player.name).filter(Player.account_id == user.id).all()

	pagination = Pagination(threads, page, perpage, total, threads)

	return render_template(
		'forum/board.htm', board=board, threads=threads, characters=characters,
		pagination=pagination, perpage=perpage, page=page
	)
コード例 #29
0
def route_community_guild_create():
    characters = current_user().players
    return render_template('community/guilds/create.htm',
                           characters=characters)
コード例 #30
0
ファイル: zaypay.py プロジェクト: EvulMastah/pyfsw
def route_zaypay():
	return render_template(
		'zaypay/pay.htm',
		options = ZAYPAY_OPTIONS, account_id = current_user().id
	)
コード例 #31
0
def route_forum_thread_post(id):
    thread = ForumThread.query.filter(ForumThread.id == id).first()
    if not thread:
        flash('The thread you are trying to reply to does not exist.', 'error')
        return redirect(url_for('route_forum'))

    character = request.form.get('character', 0, type=int)
    content = request.form.get('content', '', type=str)
    error = False

    user = current_user()
    found = False
    for player in user.players:
        if player.id == character:
            found = True
            break

    if not found:
        flash('You cannot post from a character that does not belong to you.',
              'error')
        error = True

    timestamp = int(time())
    if session.get('access', 0) != ADMIN_ACCOUNT_TYPE:
        if thread.deleted:
            flash('You cannot post in a deleted thread.', 'error')
            error = True

        if thread.locked:
            flash('You cannot post in a locked thread.', 'error')
            error = True

        if user.lastpost + POST_COOLDOWN > timestamp:
            flash(
                'You must wait {} seconds before posting again.'.format(
                    POST_COOLDOWN), 'error')
            error = True

        if user.creation + (60 * 60 * 24 *
                            FORUM_ACCOUNT_AGE_REQUIREMENT) > timestamp:
            flash(
                'Your account must be at least {} days old to post on the forum.'
                .format(FORUM_ACCOUNT_AGE_REQUIREMENT), 'error')
            error = True

        if player.level < FORUM_LEVEL_REQUIREMENT:
            flash(
                'Your character must be at least level {} to post on the forum.'
                .format(FORUM_LEVEL_REQUIREMENT), 'error')
            error = True

        if len(content) < 4:
            flash('Your reply must be at least 4 characters long.', 'error')
            error = True

    # Redirect page
    page = 1

    if not error:
        if len(content) > FORUM_CHARACTER_LIMIT:
            content = content[:FORUM_CHARACTER_LIMIT]

        content = content.strip()
        content = '\n'.join(content.split('\n'))

        content = escape(content)
        content = str(content).replace('\n', '<br>')

        post = ForumPost()
        post.author_id = character
        post.content = content
        post.timestamp = timestamp
        post.thread_id = id
        post.deleted = 0

        thread.lastpost = timestamp
        user.lastpost = timestamp
        player.postcount = player.postcount + 1

        db.session().add(post)
        db.session().commit()

        posts = db.session().query(
            ForumPost.id).filter(ForumPost.thread_id == id).count()
        page = ceil(posts / POSTS_PER_PAGE)

        print(posts)
        print(page)

    return redirect(url_for('route_forum_thread', thread=id, page=page))
コード例 #32
0
def route_zaypay():
    return render_template('zaypay/pay.htm',
                           options=ZAYPAY_OPTIONS,
                           account_id=current_user().id)
コード例 #33
0
def route_account_manage():
	return render_template('account/manage.htm', account=current_user())
コード例 #34
0
ファイル: community_guilds.py プロジェクト: EvulMastah/pyfsw
def route_community_guilds():
	guilds = Guild.query.order_by(Guild.name).all()
	return render_template('community/guilds/list.htm', guilds=guilds, user=current_user())
コード例 #35
0
ファイル: community_guilds.py プロジェクト: EvulMastah/pyfsw
def route_community_guild_create_post():
	name = request.form.get('name', '', type=str)
	character = request.form.get('character', 0, type=int)
	motd = request.form.get('motd', '', type=str)
	user = current_user()
	error = False

	character = Player.query.filter(Player.id == character).first()
	if not character or character.account_id != user.id:
		flash('You can not create a guild with not your own character.', 'error')
		error = True

	if character and character.level < GUILD_LEVEL:
		flash('The character needs to be at least level {}.'.format(GUILD_LEVEL), 'error')
		error = True

	if character and character.getGuild():
		flash('The character can not be a member of another guild.', 'error')
		error = True

	if len(name) < 4 or len(name) > 32:
		flash('The guild name must be between 4 and 32 characters long.', 'error')
		error = True

	if not GUILD_NAME_EXPR.match(name):
		flash('The guild name may only contain latin characters (A-Z, a-z and spaces).', 'error')
		error = True

	if len(name.split(' ')) > 3:
		flash('The guild name may only consist of 3 words.', 'error')
		error = True

	guild = Guild.query.filter(Guild.name == name).first()
	if guild:
		flash('The guild name is taken by another guild.', 'error')
		error = True

	if error:
		return redirect(url_for('route_community_guild_create'))

	guild = Guild()
	guild.name = name
	guild.ownerid = character.id
	guild.creationdata = int(time())
	guild.motd = motd

	db.session().add(guild)
	db.session().commit()

	rank = db.session().query(GuildRank.id).filter(GuildRank.guild_id == guild.id).filter(GuildRank.level == 3).first()

	membership = GuildMembership()
	membership.player_id = character.id
	membership.guild_id = guild.id
	membership.rank_id = rank[0]

	db.session().add(membership)
	db.session().commit()

	flash('The guild has been created.', 'success')

	return redirect(url_for('route_community_guild', id=guild.id))
コード例 #36
0
def route_forum_board_post(id):
    board = ForumBoard.query.filter(ForumBoard.id == id).first()
    if not board:
        flash('The board you are trying to create a thread on does not exist.',
              'error')
        return redirect(url_for('route_forum'))

    subject = request.form.get('subject', '', type=str)
    character = request.form.get('character', 0, type=int)
    content = request.form.get('content', '', type=str)
    error = False

    user = current_user()
    found = False
    for player in user.players:
        if player.id == character:
            found = True
            break

    if not found:
        flash('You cannot post from a character that does not belong to you.',
              'error')
        error = True

    timestamp = int(time())
    if session.get('access', 0) != ADMIN_ACCOUNT_TYPE:
        if board.locked:
            flash('You cannot create a thread in a locked board.', 'error')
            error = True

        if user.lastpost + POST_COOLDOWN > timestamp:
            flash(
                'You must wait {} seconds before posting again.'.format(
                    POST_COOLDOWN), 'error')
            error = True

        if user.creation + (60 * 60 * 24 *
                            FORUM_ACCOUNT_AGE_REQUIREMENT) > timestamp:
            flash(
                'Your account must be at least {} days old to post on the forum.'
                .format(FORUM_ACCOUNT_AGE_REQUIREMENT), 'error')
            error = True

        if player.level < FORUM_LEVEL_REQUIREMENT:
            flash(
                'Your character must be at least level {} to post on the forum.'
                .format(FORUM_LEVEL_REQUIREMENT), 'error')
            error = True

        if len(content) < 15:
            flash('Your thread content must be at least 15 characters long.',
                  'error')
            error = True

    if len(subject) < 5:
        flash('Your thread subject must be at least 5 characters long',
              'error')
        error = True

    if not error:
        if len(content) > FORUM_CHARACTER_LIMIT:
            content = content[:FORUM_CHARACTER_LIMIT]

        content = content.strip()
        content = '\n'.join(content.split('\n'))

        content = escape(content)
        content = str(content).replace('\n', '<br>')

        thread = ForumThread()
        thread.subject = subject
        thread.timestamp = timestamp
        thread.board_id = id
        thread.locked = 0
        thread.pinned = 0
        thread.lastpost = timestamp
        thread.author_id = character
        thread.content = content
        thread.deleted = 0

        user.lastpost = timestamp
        player.postcount = player.postcount + 1

        db.session().add(thread)
        db.session().commit()

        return redirect(url_for('route_forum_thread', thread=thread.id,
                                page=1))

    return redirect(url_for('route_forum_board', board=id, page=1))
コード例 #37
0
ファイル: forum.py プロジェクト: EvulMastah/pyfsw
def route_forum_thread_post(id):
	thread = ForumThread.query.filter(ForumThread.id == id).first()
	if not thread:
		flash('The thread you are trying to reply to does not exist.', 'error')
		return redirect(url_for('route_forum'))

	character = request.form.get('character', 0, type=int)
	content = request.form.get('content', '', type=str)
	error = False

	user = current_user()
	found = False
	for player in user.players:
		if player.id == character:
			found = True
			break

	if not found:
		flash('You cannot post from a character that does not belong to you.', 'error')
		error = True

	timestamp = int(time())
	if session.get('access', 0) != ADMIN_ACCOUNT_TYPE:
		if thread.deleted:
			flash('You cannot post in a deleted thread.', 'error')
			error = True

		if thread.locked:
			flash('You cannot post in a locked thread.', 'error')
			error = True

		if user.lastpost + POST_COOLDOWN > timestamp:
			flash('You must wait {} seconds before posting again.'.format(POST_COOLDOWN), 'error')
			error = True

		if user.creation + (60 * 60 * 24 * FORUM_ACCOUNT_AGE_REQUIREMENT) > timestamp:
			flash('Your account must be at least {} days old to post on the forum.'.format(FORUM_ACCOUNT_AGE_REQUIREMENT), 'error')
			error = True

		if player.level < FORUM_LEVEL_REQUIREMENT:
			flash('Your character must be at least level {} to post on the forum.'.format(FORUM_LEVEL_REQUIREMENT), 'error')
			error = True

		if len(content) < 4:
			flash('Your reply must be at least 4 characters long.', 'error')
			error = True

	# Redirect page
	page = 1

	if not error:
		if len(content) > FORUM_CHARACTER_LIMIT:
			content = content[:FORUM_CHARACTER_LIMIT]

		content = content.strip()
		content = '\n'.join(content.split('\n'))

		content = escape(content)
		content = str(content).replace('\n', '<br>')

		post = ForumPost()
		post.author_id = character
		post.content = content
		post.timestamp = timestamp
		post.thread_id = id
		post.deleted = 0

		thread.lastpost = timestamp
		user.lastpost = timestamp
		player.postcount = player.postcount + 1

		db.session().add(post)
		db.session().commit()

		posts = db.session().query(ForumPost.id).filter(ForumPost.thread_id == id).count()
		page = ceil(posts / POSTS_PER_PAGE)

		print(posts)
		print(page)

	return redirect(url_for('route_forum_thread', thread=id, page=page))
コード例 #38
0
def route_community_guilds():
    guilds = Guild.query.order_by(Guild.name).all()
    return render_template('community/guilds/list.htm',
                           guilds=guilds,
                           user=current_user())
コード例 #39
0
ファイル: community_guilds.py プロジェクト: EvulMastah/pyfsw
def route_community_guild_create():
	characters = current_user().players
	return render_template('community/guilds/create.htm', characters=characters)
コード例 #40
0
def route_community_guild_create_post():
    name = request.form.get('name', '', type=str)
    character = request.form.get('character', 0, type=int)
    motd = request.form.get('motd', '', type=str)
    user = current_user()
    error = False

    character = Player.query.filter(Player.id == character).first()
    if not character or character.account_id != user.id:
        flash('You can not create a guild with not your own character.',
              'error')
        error = True

    if character and character.level < GUILD_LEVEL:
        flash(
            'The character needs to be at least level {}.'.format(GUILD_LEVEL),
            'error')
        error = True

    if character and character.getGuild():
        flash('The character can not be a member of another guild.', 'error')
        error = True

    if len(name) < 4 or len(name) > 32:
        flash('The guild name must be between 4 and 32 characters long.',
              'error')
        error = True

    if not GUILD_NAME_EXPR.match(name):
        flash(
            'The guild name may only contain latin characters (A-Z, a-z and spaces).',
            'error')
        error = True

    if len(name.split(' ')) > 3:
        flash('The guild name may only consist of 3 words.', 'error')
        error = True

    guild = Guild.query.filter(Guild.name == name).first()
    if guild:
        flash('The guild name is taken by another guild.', 'error')
        error = True

    if error:
        return redirect(url_for('route_community_guild_create'))

    guild = Guild()
    guild.name = name
    guild.ownerid = character.id
    guild.creationdata = int(time())
    guild.motd = motd

    db.session().add(guild)
    db.session().commit()

    rank = db.session().query(GuildRank.id).filter(
        GuildRank.guild_id == guild.id).filter(GuildRank.level == 3).first()

    membership = GuildMembership()
    membership.player_id = character.id
    membership.guild_id = guild.id
    membership.rank_id = rank[0]

    db.session().add(membership)
    db.session().commit()

    flash('The guild has been created.', 'success')

    return redirect(url_for('route_community_guild', id=guild.id))
コード例 #41
0
ファイル: paypal.py プロジェクト: EvulMastah/pyfsw
def route_paypal():
	return render_template(
		'paypal/donate.htm',
		buttons=PAYPAL_BUTTONS, account_id=current_user().id
	)
コード例 #42
0
ファイル: forum.py プロジェクト: EvulMastah/pyfsw
def route_forum_board_post(id):
	board = ForumBoard.query.filter(ForumBoard.id == id).first()
	if not board:
		flash('The board you are trying to create a thread on does not exist.', 'error')
		return redirect(url_for('route_forum'))

	subject = request.form.get('subject', '', type=str)
	character = request.form.get('character', 0, type=int)
	content = request.form.get('content', '', type=str)
	error = False

	user = current_user()
	found = False
	for player in user.players:
		if player.id == character:
			found = True
			break

	if not found:
		flash('You cannot post from a character that does not belong to you.', 'error')
		error = True

	timestamp = int(time())
	if session.get('access', 0) != ADMIN_ACCOUNT_TYPE:
		if board.locked:
			flash('You cannot create a thread in a locked board.', 'error')
			error = True

		if user.lastpost + POST_COOLDOWN > timestamp:
			flash('You must wait {} seconds before posting again.'.format(POST_COOLDOWN), 'error')
			error = True

		if user.creation + (60 * 60 * 24 * FORUM_ACCOUNT_AGE_REQUIREMENT) > timestamp:
			flash('Your account must be at least {} days old to post on the forum.'.format(FORUM_ACCOUNT_AGE_REQUIREMENT), 'error')
			error = True

		if player.level < FORUM_LEVEL_REQUIREMENT:
			flash('Your character must be at least level {} to post on the forum.'.format(FORUM_LEVEL_REQUIREMENT), 'error')
			error = True

		if len(content) < 15:
			flash('Your thread content must be at least 15 characters long.', 'error')
			error = True

	if len(subject) < 5:
		flash('Your thread subject must be at least 5 characters long', 'error')
		error = True

	if not error:
		if len(content) > FORUM_CHARACTER_LIMIT:
			content = content[:FORUM_CHARACTER_LIMIT]

		content = content.strip()
		content = '\n'.join(content.split('\n'))

		content = escape(content)
		content = str(content).replace('\n', '<br>')

		thread = ForumThread()
		thread.subject = subject
		thread.timestamp = timestamp
		thread.board_id = id
		thread.locked = 0
		thread.pinned = 0
		thread.lastpost = timestamp
		thread.author_id = character
		thread.content = content
		thread.deleted = 0

		user.lastpost = timestamp
		player.postcount = player.postcount + 1

		db.session().add(thread)
		db.session().commit()

		return redirect(url_for('route_forum_thread', thread=thread.id, page=1))

	return redirect(url_for('route_forum_board', board=id, page=1))
コード例 #43
0
ファイル: paypal.py プロジェクト: diath/pyfsw
def route_paypal():
    return render_template('paypal/donate.htm',
                           buttons=PAYPAL_BUTTONS,
                           account_id=current_user().id)
コード例 #44
0
ファイル: shop.py プロジェクト: diath/pyfsw
def route_shop_history():
	user = current_user()
	history = ShopHistory.query.filter(ShopHistory.account_id == user.id).all()

	return render_template('shop/history.htm', history=history)