示例#1
0
def add_server(team_id=0):
    if not g.user.is_team_leader(team_id):
        flash(u'You must be a team leader to add a server.', 'error')
        return redirect(url_for('teams.my_teams'))

    servers = Server.query.\
            filter_by(team_id=team_id).\
            order_by(Server.name.asc()).\
            all()

    api = request.values.get('api') == '1'

    form = ServerForm()
    form.name.validators[0].values = [s.name for s in servers]
    if form.validate_on_submit():
        server = Server(team_id=team_id,
                        name=form.name.data,
                        address=form.address.data)
        db.session.add(server)
        db.session.commit()
        flash(u'The server was successfully added.', 'success')

        if api:
            return jsonify(success=True,
                           server_id=server.id,
                           csrf=form.csrf_token.data,
                           server_name=server.name)

        if form.f.data == 'add_match':
            return redirect(url_for('matches.add', new_server_id=server.id))
        elif form.f.data:
            return redirect(
                url_for('matches.show',
                        action='edit',
                        match_id=int(form.f.data),
                        new_server_id=server.id))

        return redirect(url_for('servers', team_id=team_id))

    form.f.data = request.values.get('f') or ''

    return rt('team_admin/server_form.html',
              page={
                  'top': 'my_teams',
                  'sub': 'servers'
              },
              team={
                  'id': team_id,
                  'name': g.user.teams[team_id].name
              },
              adding=True,
              form=form)
示例#2
0
def server(team_id, server_id, action):
    if not g.user.is_team_leader(team_id):
        flash(u'You must be a team leader to add a server.', 'error')
        return redirect(url_for('teams.my_teams'))

    server = Server.query.filter_by(id=server_id).first()

    if not server or not g.user.is_team_leader(server.team_id):
        flash(u'Server not found.', 'error')
        return redirect(url_for('teams.my_teams'))

    if action == 'edit':
        servers = Server.query.\
                filter_by(team_id=team_id).\
                order_by(Server.name.asc()).\
                all()

        form = ServerForm(request.form, obj=server)
        form.name.validators[0].values = [ s.name for s in servers if s.id != \
                server_id ]

        if form.validate_on_submit():
            form.populate_obj(server)
            db.session.commit()
            flash(u'The server was successfully updated.', 'success')
        else:
            return rt('team_admin/server_form.html',
                      team={
                          'id': team_id,
                          'name': g.user.teams[team_id].name
                      },
                      page={
                          'top': 'my_teams',
                          'sub': 'servers'
                      },
                      server_id=server_id,
                      adding=False,
                      form=form)
    elif action == 'delete':
        if request.method == 'POST':
            db.session.delete(server)
            db.session.commit()
            flash(u'The server was successfully deleted.', 'success')

    return redirect(url_for('servers', team_id=team_id))
示例#3
0
def add_server(team_id=0):
    if not g.user.is_team_leader(team_id):
        flash(u'You must be a team leader to add a server.', 'error')
        return redirect(url_for('teams.my_teams'))

    servers = Server.query.\
            filter_by(team_id=team_id).\
            order_by(Server.name.asc()).\
            all()

    api = request.values.get('api') == '1'

    form = ServerForm()
    form.name.validators[0].values = [ s.name for s in servers ]
    if form.validate_on_submit():
        server = Server(team_id=team_id,
                        name=form.name.data,
                        address=form.address.data)
        db.session.add(server)
        db.session.commit()
        flash(u'The server was successfully added.', 'success')

        if api:
            return jsonify(success=True, server_id=server.id,
                    csrf=form.csrf_token.data,
                    server_name=server.name)

        if form.f.data == 'add_match':
            return redirect(url_for('matches.add', new_server_id=server.id))
        elif form.f.data:
            return redirect(url_for('matches.show', action='edit',
                match_id=int(form.f.data), new_server_id=server.id))

        return redirect(url_for('servers',team_id=team_id))

    form.f.data = request.values.get('f') or ''

    return rt('team_admin/server_form.html',
            page={'top':'my_teams', 'sub':'servers'},
            team={'id':team_id,'name':g.user.teams[team_id].name},
            adding=True, form=form)
示例#4
0
def server(team_id, server_id, action):
    if not g.user.is_team_leader(team_id):
        flash(u'You must be a team leader to add a server.', 'error')
        return redirect(url_for('teams.my_teams'))

    server = Server.query.filter_by(id=server_id).first()

    if not server or not g.user.is_team_leader(server.team_id):
        flash(u'Server not found.', 'error')
        return redirect(url_for('teams.my_teams'))

    if action == 'edit':
        servers = Server.query.\
                filter_by(team_id=team_id).\
                order_by(Server.name.asc()).\
                all()

        form = ServerForm(request.form, obj=server)
        form.name.validators[0].values = [ s.name for s in servers if s.id != \
                server_id ]

        if form.validate_on_submit():
            form.populate_obj(server)
            db.session.commit()
            flash(u'The server was successfully updated.', 'success')
        else:
            return rt('team_admin/server_form.html',
                    team={'id':team_id, 'name':g.user.teams[team_id].name},
                    page={'top':'my_teams', 'sub':'servers'},
                    server_id=server_id,
                    adding=False, form=form)
    elif action == 'delete':
        if request.method == 'POST':
            db.session.delete(server)
            db.session.commit()
            flash(u'The server was successfully deleted.', 'success')

    return redirect(url_for('servers',team_id=team_id))
示例#5
0
def show(match_id, action):
    match = Match.query.filter_by(id=match_id).first()
    if not match:
        flash(u"That match doesn't exist.", "error")
        return redirect(url_for('my_matches'))

    if not g.user.is_on_team(match.team_id):
        flash(u'You must be on the team to view its match availability.',
              "error")
        return redirect(url_for('all'))

    if match.date < datetime.datetime.utcnow():
        up_prev = 'previous'
    else:
        up_prev = 'upcoming'

    if action == 'edit':
        if not g.user.is_team_leader(match.team_id):
            flash(u'You must be a team leader to edit this match.', 'error')
            return redirect(url_for('my_matches'))

        servers = Server.query.\
                filter_by(team_id=match.team_id).\
                order_by('server_name')

        form = MatchForm(request.form, obj=match)
        form.competition_id.choices = [
            (c.id, c.name)
            for c in Competition.query.order_by('competition_name')
        ]
        form.server_id.choices = [(s.id, s.name) for s in servers]
        form.team_id.choices = [(t, g.user.teams[t].name)
                                for t in g.user.team_leader_teams]
        form.opponent_id.choices = [ (o.id, o.name) for o in \
                Opponent.query.filter_by(team_id=match.team_id).\
                order_by(Opponent.name.asc()).all() ]

        players = {}
        for p in match.players:
            players[p.user_id] = p.user.name

        if request.method == 'GET':
            if request.values.get('new_opponent_id'):
                form.opponent_id.data = int(
                    request.values.get('new_opponent_id'))
            elif request.values.get('new_server_id'):
                form.server_id.data = int(request.values.get('new_server_id'))

            form.date.data = to_user_timezone(form.date.data)
            form.date.label.text += ' (in %s)' \
                    % format_datetime(form.date.data, 'zzzz')

        if form.validate_on_submit():
            form.date.data = to_utc(form.date.data)

            to_delete = []
            for f in form.players:
                if f.delete.data:
                    to_delete.append(f.user_id.data)

            form.populate_obj(match)

            if len(to_delete):
                MatchPlayer.query.\
                        filter_by(match_id=match_id).\
                        filter(MatchPlayer.user_id.in_(to_delete)).delete(False)

            db.session.commit()
            flash(u'The match was successfully updated.', 'success')

            if request.values.get('from') == 'single':
                return redirect(url_for('show', match_id=match_id))

            return redirect(url_for('my_matches'))

        oform = OpponentForm()
        sform = ServerForm()
        tzform = UserTimeZoneForm(obj=g.user)

        return rt('matches/form.html',
                  form=form,
                  players=players,
                  page={
                      'top': 'my_matches',
                      'sub': up_prev
                  },
                  when=up_prev,
                  adding=False,
                  user_now=to_user_timezone(datetime.datetime.utcnow()),
                  tzform=tzform,
                  oform=oform,
                  sform=sform,
                  team_id=g.user.team_leader_teams[0],
                  match_id=match.id)
    elif action == 'delete':
        if not g.user.is_team_leader(match.team_id):
            flash(u'You must be a team leader to edit this match.', 'error')
            return redirect(url_for('my_matches'))

        if request.method == 'POST':
            db.session.delete(match)
            db.session.commit()
            flash(u'The match was successfully deleted.', 'success')

        return redirect(url_for('my_matches'))
    elif action == 'status':
        if not g.user.is_on_team(match.team_id):
            flash(u'You must be on this team to change your status.', 'error')
            return redirect(url_for('my_matches'))

        if up_prev == 'previous':
            flash(u'You cannot change your status on a past match.', 'error')
            return redirect(url_for('my_previous_matches'))

        form = MatchPlayerStatusForm(request.form)

        if form.validate_on_submit():
            if request.values.get('s') == 'available':
                player_status = MatchPlayer.StatusAvailable
            elif request.values.get('s') == 'maybe':
                player_status = MatchPlayer.StatusMaybe
            elif request.values.get('s') == 'unavailable':
                player_status = MatchPlayer.StatusUnavailable
            else:
                player_status = None

            if player_status is None:
                flash(u'That status is not valid!', 'error')
            else:
                try:
                    mu = MatchPlayer.query.filter_by(match_id=match.id,
                                                     user_id=g.user.id).one()
                    mu.status = player_status
                except NoResultFound:
                    mu = MatchPlayer(match_id=match.id,
                                     user_id=g.user.id,
                                     status=player_status)
                except Exception, e:
                    app.logger.error('Error finding MatchPlayer: %s, %s' % \
                            (g.user.id, e))
                    flash(u'Something bad happened. Please try again.',
                          'error')
                    return redirect(url_for('my_matches'))

                mu.date_updated = datetime.datetime.utcnow()
                db.session.add(mu)
                db.session.commit()

                if request.values.get('api') == '1':
                    psp = mu.pretty_status
                    return jsonify(success=True,
                                   csrf=form.csrf_token.data,
                                   match_id=match.id,
                                   user_id=g.user.id,
                                   user_name=g.user.name,
                                   player_status=player_status,
                                   player_status_pretty=psp)

                if request.values.get('from') == 'single':
                    return redirect(url_for('show', match_id=match_id))
示例#6
0
            # now notify players of new match via forum post
            if form.post_on_forums.data:
                forum_post = ForumBotQueuedPost(
                    team_id=match.team_id,
                    game_id=match.competition.game_id,
                    match_id=match.id,
                    subject=team_subject,
                    message=team_message)
                db.session.add(forum_post)
                db.session.commit()

            flash(u'The match was successfully added.', 'success')
            return redirect(url_for('my_matches'))

    oform = OpponentForm()
    sform = ServerForm()
    tzform = UserTimeZoneForm(obj=g.user)

    return rt('matches/form.html',
              page={
                  'top': 'my_matches',
                  'sub': 'add_match'
              },
              adding=True,
              team_id=g.user.team_leader_teams[0],
              user_now=to_user_timezone(datetime.datetime.utcnow()),
              tzform=tzform,
              oform=oform,
              sform=sform,
              form=form)