Exemplo n.º 1
0
def edit_graph(graph_id):
    graph = m.Graph.objects.get(id=graph_id)
    axes = [(None, 'Use column titles for X axis')]
    choices = []
    for i, col in enumerate(graph.table.data['cols']):
        axes.append((str(i), col['title']['value']))
        choices.append((str(i), col['title']['value']))

    class Form(wtf.Form):
        title = wtf.StringField('Graph title')
        type  = wtf.SelectField('Type', choices=m.Graph.type_choices)
        xaxis = wtf.SelectField('X Axis Column', choices=axes, default=graph.axis)
        yaxis_title = wtf.TextField('Y Axis title')
        columns = wtf.CheckListField('Series', choices=choices, default=graph.cols)

    form = Form(obj=graph)

    if form.validate_on_submit():
        graph.title = form.title.data
        graph.type = form.type.data
        graph.axis = form.xaxis.data
        graph.cols = form.columns.data
        graph.yaxis_title = form.yaxis_title.data
        graph.save()
        flash("Graph updated")
        return redirect(url_for('index.view_graph', graph_id=graph.id))

    return dict(form=form, graph=graph)
Exemplo n.º 2
0
def create_graph(table_id):
    table = m.Table.objects.get(id=table_id)
    axes = [('-1', 'Use column titles for X axis')]
    choices = []
    for i, col in enumerate(table.data['cols']):
        axes.append((str(i), col['title']['value']))
        choices.append((str(i), col['title']['value']))

    class Form(wtf.Form):
        title = wtf.StringField('Graph Title')
        type  = wtf.SelectField('Type', choices=m.Graph.type_choices)
        xaxis = wtf.SelectField('X Axis Column', choices=axes)
        yaxis_title = wtf.TextField('Y Axis title')
        columns = wtf.CheckListField('Series', choices=choices)

    form = Form()

    if form.validate_on_submit():
        graph = m.Graph(title=form.title.data,
                 table=table,
                 creator=g.user,
                 type=form.type.data,
                 axis=int(form.xaxis.data),
                 cols=[int(x) for x in form.columns.data],
                 yaxis_title=form.yaxis_title.data)
        graph.save()
        flash("Graph created")
        return redirect(url_for('index.view_graph', graph_id=graph.id))

    return dict(form=form, table=table)
Exemplo n.º 3
0
def delete_table(table_id):
    table = m.Table.objects.get(id=table_id)
    if m.Graph.objects(table=table).count() > 0:
        flash('Table has existing graphs, delete graphs first')
        return redirect(url_for('index.tables'), 302)
    table.delete()
    flash('Table deleted')
    return redirect(url_for('index.tables'), 302)
Exemplo n.º 4
0
def delete_source(source_id):
    source = m.Source.objects.get(id=source_id)
    if m.Table.objects(source=source).count() > 0:
        flash('Source has existing tables, delete tables first')
        return redirect(url_for('index.sources'), 302)
    source.delete()
    flash('Source deleted')
    return redirect(url_for('index.sources'), 302)
Exemplo n.º 5
0
def deactivate(user_token):
    try:
        user = m.User.active.get(token=user_token)
    except m.DoesNotExist:
        abort(404)

    if not g.user.has_role(user.role):
        return abort(404)

    user.deactivate(actor=g.user)

    flash('User deactivated', category='success')
    return redirect(url_for('.index'))
Exemplo n.º 6
0
def reactivate(user_token):
    try:
        user = m.User.inactive.get(token=user_token)
    except m.DoesNotExist:
        abort(404)

    if not g.user.has_role(user.role):
        return abort(404)

    user.reactivate(actor=g.user)

    flash("User reactivated and new password issued", category='success')
    return redirect(url_for('.index'))
Exemplo n.º 7
0
def edit(user_token=None):
    if user_token:
        try:
            user = m.User.active.get(token=user_token)
        except m.DoesNotExist:
            return abort(404)
    else:
        user = m.User()

    if not g.user.has_role(user.role):
        return abort(404)

    role_choices = [ (x[0], x[1]['label']) for x in sorted(m.User.roles().items(), key=lambda x: x[1]['level']) if g.user.has_role(x[0]) ]

    class Form(wtf.Form):
        display_name = wtf.TextField('Display name', [wtf.validators.Required()])
        email        = wtf.TextField('Email address', [wtf.validators.Required(), wtf.validators.Email()])
        role         = wtf.SelectField('Role', [wtf.validators.Required()], choices=role_choices)
        country      = wtf.SelectField('Country', [wtf.validators.Required()], choices=wtf.country_choices())
        timezone     = wtf.DependentSelectField(
            'Time Zone',
            [wtf.validators.Required()],
            parent_field = 'country',
            select_text = '',
            choices = wtf.timezone_dependent_choices(),
        )

        def validate_email(form, field):
            existing = m.User.objects(email=field.data).first()
            if existing and existing.token != user.token:
                raise wtf.ValidationError("This email address is already used")

    form = Form(obj=user)

    if form.validate_on_submit():
        user.display_name = form.display_name.data
        user.email        = form.email.data
        user.role         = form.role.data
        user.country      = form.country.data
        user.timezone     = form.timezone.data
        user.save()
        if user_token:
            audit("Updated user %s" % user.display_name, ['User Management'], [user])
            flash("Updated user %s" % user.display_name)
        else:
            audit("Added user %s" % user.display_name, ['User Management'], [user])
            flash("Added user %s" % user.display_name)
        return redirect(url_for('.index'))

    return dict(form=form, add=user_token is None)
Exemplo n.º 8
0
def reset_password(user_token):
    try:
        user = m.User.active.get(token=user_token)
    except m.DoesNotExist:
        abort(404)

    if not g.user.has_role(user.role):
        return abort(404)

    new_password = token.create_token(length=8)

    user.set_password(new_password)
    user.save()
    audit("Reset user password %s" % user.display_name, ['User Management'], [user])
    flash_message = user.notify_password_reset(new_password)

    flash(flash_message, category='success')
    return redirect(url_for('.index'))
Exemplo n.º 9
0
def import_begin():
    class Form(wtf.Form):
        title = wtf.StringField('Title')
        source = wtf.StringField('Source', description='e.g. Statistics New Zealand')
        data_file = wtf.FileField(
            'File to import',
            [wtf.validators.Required()],
            allow_clear = False,
        )

    form = Form()

    if form.validate_on_submit():
        m.Source(title=form.title.data,
                 source=form.source.data,
                 file=form.data_file.data,
                 created=quantum.now('Pacific/Auckland'),
                 creator=g.user,
                 filename=form.data_file.data.file.filename).save()
        flash('Source "%s" added' % form.title.data)
        return redirect(url_for('index.sources'))

    return dict(form=form)
Exemplo n.º 10
0
def spreadjs_save(source_id):
    source = m.Source.get_404(id=source_id)

    column_data = json.loads(request.form.get('columns'))

    data = dict(cols=[])

    for column in column_data:
        data['cols'].append(dict(
            title = dict(value=column['title']),
            values = [dict(value=x) for x in column['values']],
        ))

    table = m.Table(
        title = request.form.get('table-title'),
        description = request.form.get('table-description'),
        creator = g.user,
        source = source,
        data = data,
    )
    table.save()

    flash('Table created')
    return redirect(url_for('index.view_table', table_id=table.id))
Exemplo n.º 11
0
def delete_graph(graph_id):
    graph = m.Graph.objects.get(id=graph_id)
    graph.delete()
    flash('Graph deleted')
    return redirect(url_for('index.graphs'), 302)