Exemple #1
0
def steep_category_edit(steep_category_id=None):
    if not edit_is_allowed():
        return flask.render_template(
            'steep_category_edit.html', **{
                'user_id': get_user_id(),
                'steep_category_id': steep_category_id,
            })
    app = flask.current_app
    session = database.session

    referenced = False

    if steep_category_id is None:
        steep_categories_row = None
    else:
        steep_categories_row = database.get_or_404('steep_categories',
                                                   steep_category_id)
        steep_category_schema = schema.SteepCategoriesSchema.from_flat(
            steep_categories_row)
        referenced = is_referenced(table='steep_categories',
                                   row_id=steep_category_id)

    if flask.request.method == 'POST':
        form_data = dict(
            schema.SteepCategoriesSchema.from_defaults().flatten())
        form_data.update(flask.request.form.to_dict())

        steep_category_schema = schema.SteepCategoriesSchema.from_flat(
            form_data)

        if steep_category_schema.validate():
            if steep_categories_row is None:
                steep_categories_row = session['steep_categories'].new()
            steep_categories_row.update(steep_category_schema.flatten())

            session.save(steep_categories_row)
            session.commit()

            flask.flash('Geographical coverage saved', 'success')
            location = flask.url_for('lists.steep_category_view',
                                     steep_category_id=steep_categories_row.id)
            return flask.redirect(location)

        else:
            flask.flash(u'Errors in trends information', 'error')
    else:
        if steep_category_id:
            steep_category_schema = schema.SteepCategoriesSchema.from_flat(
                steep_categories_row)
        else:
            steep_category_schema = schema.SteepCategoriesSchema()

    return flask.render_template(
        'steep_category_edit.html', **{
            'mk':
            MarkupGenerator(app.jinja_env.get_template('widgets_edit.html')),
            'steep_category_schema': steep_category_schema,
            'steep_category_id': steep_category_id,
            'referenced': referenced,
        })
Exemple #2
0
def geo_scale_view(geo_scale_id):
    app = flask.current_app
    geo_scales_row = database.get_or_404('geo_scales', geo_scale_id)
    geo_scale = schema.GeographicalScalesSchema.from_flat(geo_scales_row)
    return flask.render_template(
        'geo_scale_view.html', **{
            'mk':
            MarkupGenerator(app.jinja_env.get_template('widgets_view.html')),
            'geo_scale': geo_scale,
            'geo_scale_id': geo_scale_id,
        })
Exemple #3
0
def source_view(source_id):
    app = flask.current_app
    sources_row = database.get_or_404('sources', source_id)
    source = schema.SourcesSchema.from_flat(sources_row)
    return flask.render_template(
        'source_view.html', **{
            'mk':
            MarkupGenerator(app.jinja_env.get_template('widgets_view.html')),
            'source': source,
            'source_id': source_id,
        })
Exemple #4
0
def interlink_view(interlink_id):
    app = flask.current_app
    interlinks_row = database.get_or_404('interlinks', interlink_id)
    interlink = schema.InterlinksSchema.from_flat(interlinks_row)
    return flask.render_template(
        'interlink_view.html', **{
            'mk':
            MarkupGenerator(app.jinja_env.get_template('widgets_view.html')),
            'interlink': interlink,
            'interlink_id': interlink_id,
        })
Exemple #5
0
def gmt_view(gmt_id):
    app = flask.current_app
    gmts_row = database.get_or_404('gmts', gmt_id)
    gmt = schema.GMTsSchema.from_flat(gmts_row)
    return flask.render_template(
        'gmt_view.html', **{
            'mk':
            MarkupGenerator(app.jinja_env.get_template('widgets_view.html')),
            'gmt': gmt,
            'gmt_id': gmt_id,
        })
Exemple #6
0
def photo(staff_id):
    session = database.get_session()
    staff_row = database.get_or_404("staff", staff_id)

    try:
        db_file = session.get_db_file(int(staff_row["photo"]))
    except KeyError:
        flask.abort(404)

    return flask.Response(''.join(db_file.iter_data()), # TODO stream response
                          mimetype="application/octet-stream")
Exemple #7
0
def timeline_view(timeline_id):
    app = flask.current_app
    timelines_row = database.get_or_404('timelines', timeline_id)
    timeline = schema.TimelinesSchema.from_flat(timelines_row)
    return flask.render_template(
        'timeline_view.html', **{
            'mk':
            MarkupGenerator(app.jinja_env.get_template('widgets_view.html')),
            'timeline': timeline,
            'timeline_id': timeline_id,
        })
Exemple #8
0
def trend_view(trend_id):
    app = flask.current_app
    trends_row = database.get_or_404('trends', trend_id)
    trend = schema.TrendsSchema.from_flat(trends_row)
    return flask.render_template(
        'trend_view.html', **{
            'mk':
            MarkupGenerator(app.jinja_env.get_template('widgets_view.html')),
            'trend': trend,
            'trend_id': trend_id,
        })
Exemple #9
0
def gmt_edit(gmt_id=None):
    if not edit_is_allowed():
        return flask.render_template(
            'gmt_edit.html', **{
                'user_id': get_user_id(),
                'gmt_id': gmt_id,
            })

    app = flask.current_app
    session = database.session

    referenced = False

    if gmt_id is None:
        gmts_row = None
    else:
        gmts_row = database.get_or_404('gmts', gmt_id)
        gmt_schema = schema.GMT.from_flat(gmts_row)
        referenced = is_referenced(table='gmts', row_id=gmt_id)

    if flask.request.method == 'POST':
        form_data = dict(schema.GMTsSchema.from_defaults().flatten())
        form_data.update(flask.request.form.to_dict())

        gmt_schema = schema.GMTsSchema.from_flat(form_data)

        if gmt_schema.validate():
            if gmts_row is None:
                gmts_row = session['gmts'].new()
            gmts_row.update(gmt_schema.flatten())

            session.save(gmts_row)
            session.commit()

            flask.flash('GMT saved', 'success')
            location = flask.url_for('flis.gmt_view', gmt_id=gmts_row.id)
            return flask.redirect(location)
        else:
            flask.flash(u'Errors in GMT information', 'error')
    else:
        if gmt_id:
            gmt_schema = schema.GMTsSchema.from_flat(gmts_row)
        else:
            gmt_schema = schema.GMTsSchema()

    return flask.render_template(
        'gmt_edit.html', **{
            'mk':
            MarkupGenerator(app.jinja_env.get_template('widgets_edit.html')),
            'gmt_schema': gmt_schema,
            'gmt_id': gmt_id,
            'referenced': referenced,
        })
Exemple #10
0
def thematic_category_view(thematic_category_id):
    app = flask.current_app
    thematic_categories_row = database.get_or_404('thematic_categories',
                                                  thematic_category_id)
    thematic_category = schema.ThematicCategoriesSchema.from_flat(
        thematic_categories_row)
    return flask.render_template(
        'thematic_category_view.html', **{
            'mk':
            MarkupGenerator(app.jinja_env.get_template('widgets_view.html')),
            'thematic_category': thematic_category,
            'thematic_category_id': thematic_category_id,
        })
Exemple #11
0
def steep_category_view(steep_category_id):
    app = flask.current_app
    steep_categories_row = database.get_or_404('steep_categories',
                                               steep_category_id)
    steep_category = schema.SteepCategoriesSchema.from_flat(
        steep_categories_row)
    return flask.render_template(
        'steep_category_view.html', **{
            'mk':
            MarkupGenerator(app.jinja_env.get_template('widgets_view.html')),
            'steep_category': steep_category,
            'steep_category_id': steep_category_id,
        })
Exemple #12
0
def indicator_delete(indicator_id):
    if not edit_is_allowed():
        return flask.render_template(
            'indicator_edit.html', **{
                'user_id': get_user_id(),
                'indicator_id': indicator_id,
            })
    session = database.session
    indicators_row = database.get_or_404('indicators', indicator_id)
    _delete_file(indicators_row)
    session['indicators'].delete(indicator_id)
    session.commit()
    return flask.redirect(flask.url_for('lists.indicators_listing'))
Exemple #13
0
def interlink_edit(interlink_id=None):
    if not edit_is_allowed():
        return flask.render_template(
            'interlink_edit.html', **{
                'user_id': get_user_id(),
                'interlink_id': interlink_id,
            })
    app = flask.current_app
    session = database.session

    if interlink_id is None:
        interlinks_row = None
    else:
        interlinks_row = database.get_or_404('interlinks', interlink_id)
        interlink_schema = schema.Interlink.from_flat(interlinks_row)

    if flask.request.method == 'POST':
        form_data = dict(schema.InterlinksSchema.from_defaults().flatten())
        form_data.update(flask.request.form.to_dict())

        interlink_schema = schema.InterlinksSchema.from_flat(form_data)

        if interlink_schema.validate():
            if interlinks_row is None:
                interlinks_row = session['interlinks'].new()
            interlinks_row.update(interlink_schema.flatten())

            session.save(interlinks_row)
            session.commit()

            flask.flash('Interlink saved', 'success')
            location = flask.url_for('flis.interlink_view',
                                     interlink_id=interlinks_row.id)
            return flask.redirect(location)
        else:
            flask.flash(u'Errors in Interlink information', 'error')
    else:
        if interlink_id:
            interlink_schema = schema.InterlinksSchema.from_flat(
                interlinks_row)
        else:
            interlink_schema = schema.InterlinksSchema()

    return flask.render_template(
        'interlink_edit.html', **{
            'mk':
            MarkupGenerator(app.jinja_env.get_template('widgets_edit.html')),
            'interlink_schema': interlink_schema,
            'interlink_id': interlink_id,
        })
Exemple #14
0
def document_file_delete(meeting_id, document_id, lang):
    meeting = sugar.get_object_or_404(models.Meeting, id=meeting_id)
    response = {'status': 'success'}

    document_row = database.get_or_404('document', document_id)
    document_schema = schema.DocumentSchema.from_flat(document_row)
    file_id = int(document_schema['doc_id'][lang].value)
    document_schema['doc_id'][lang].set(None)
    document_schema['filename'][lang].set(None)
    document_row.clear()
    document_row.update(document_schema.flatten())

    session = database.get_session()
    session.del_db_file(file_id)
    session.save(document_row)
    session.commit()

    return flask.json.dumps(response)
Exemple #15
0
def remove_photo(staff_id):
    staff_row = database.get_or_404("staff", staff_id)

    response = {}
    photo = staff_row.get("photo", "")
    if photo and photo.isdigit():
        session = database.get_session()
        session.del_db_file(int(staff_row["photo"]))

        del staff_row["photo"]

        session.save(staff_row)
        session.commit()

        response["status"] = "success"
    else:
        response["status"] = "error"
        response["message"] = "Staff member doesn't have a photo"

    return flask.json.dumps(response)
Exemple #16
0
def resend_mail(mail_id):
    app = flask.current_app

    sent_mail = database.get_or_404('mail_log', mail_id)
    sent_mail_schema = schema.MailSchema.from_flat(sent_mail)
    if flask.request.method == 'POST':
        mail = Mail(app)
        meeting = schema.Meeting.get_or_404(sent_mail['meeting_id'])
        msg = Message(sent_mail['mail_subject'],
                      sender=meeting['info']['admin_email'],
                      recipients=[m.value for m in sent_mail_schema['to']],
                      cc=[m.value for m in sent_mail_schema['cc']],
                      body=sent_mail['mail_message'])
        mail.send(msg)
        if app.config['MAIL_SUPPRESS_SEND']:
            flask.flash(u'This is a demo, no real email was sent', 'info')
        else:
            flask.flash('Email resent.', 'success')
    return flask.redirect(flask.url_for('meeting.view_mail_log',
                          meeting_id=sent_mail['meeting_id'],
                          mail_log_id=mail_id))
Exemple #17
0
def edit_photo(staff_id):
    response = {"status": "error"}
    photo_file = flask.request.files["photo"]

    if photo_file.filename != u'':
        session = database.get_session()

        db_file = session.get_db_file()
        db_file.save_from(photo_file)

        staff_row = database.get_or_404("staff", staff_id)
        staff_row["photo"] = str(db_file.id)

        session.save(staff_row)
        session.commit()

        response["status"] = "success"
        response["url"] = flask.url_for("staff.photo", staff_id=staff_id)
    else:
        response["error"] = "Please select a photo"
    return flask.json.dumps(response)
Exemple #18
0
def view_mail_log(meeting_id, mail_log_id):
    app = flask.current_app

    mail_log_row = database.get_or_404('mail_log', mail_log_id)
    meeting = sugar.get_object_or_404(models.Meeting, id=meeting_id)

    if mail_log_row.get('type') == 'bulk_mail':
        mail_log = schema.BulkMailLog.from_flat(mail_log_row)
        mail_schema = schema.BulkMailSchema.from_flat(mail_log_row)
        lang = mail_log['mail']['to']
        mail_log['mail']['to'] = 'All %s speakers' % refdata.language.get(lang)
    else:
        mail_log = schema.MailLog.from_flat(mail_log_row)
        mail_schema = schema.MailSchema.from_flat(mail_log_row)

    return {
        'mk': sugar.MarkupGenerator(
            app.jinja_env.get_template('widgets/widgets_view_mail.html')
        ),
        'meeting': meeting,
        'mail_schema': mail_schema,
        'mail_log': mail_log,
        'mail_type': mail_log_row.get('type')
    }
Exemple #19
0
 def has_file(self):
     assert self.id is not None
     indicator_row = database.get_or_404("indicators", self.id)
     return bool(indicator_row.get("file_id", ""))
Exemple #20
0
def edit_document(meeting_id, document_id=None):
    app = flask.current_app
    session = database.get_session()

    meeting = sugar.get_object_or_404(models.Meeting, id=meeting_id)
    page_info = {}

    if document_id:
        document_row = database.get_or_404('document', document_id)
        document = schema.Document.from_flat(document_row)
        page_info['title'] = 'Edit %s' % document['name']
    else:
        document_row = None
        document = None
        page_info['title'] = 'Add document'

    if flask.request.method == 'POST':
        doc = flask.request.files['file']

        form_dict = flask.request.form.to_dict()
        form_data = dict(schema.DocumentSchema.from_defaults().flatten())
        form_data.update(form_dict)

        lang = form_dict['language']
        form_data['meeting_id'] = meeting.id
        form_data['date'] = str(date.today())

        # old files should be kept
        db_file = session.get_db_file()
        if document_row:
            form_data['doc_id_E'] = document_row['doc_id_E']
            form_data['doc_id_F'] = document_row['doc_id_F']
            form_data['doc_id_S'] = document_row['doc_id_S']

            form_data['filename_E'] = document_row['filename_E']
            form_data['filename_F'] = document_row['filename_F']
            form_data['filename_S'] = document_row['filename_S']

        if doc.filename:
            form_data['doc_id_%s' % lang] = db_file.id
            form_data['filename_%s' % lang] = doc.filename

        document_schema = schema.DocumentSchema.from_flat(form_data)
        if document_schema.validate():
            db_file.save_from(doc)
            if document_row is None:
                document_row = database.new('document')

            document_row.update(document_schema.flatten())
            session.save(document_row)
            session.commit()

            flask.flash('Document saved', 'success')

            location = flask.url_for('meeting.documents',
                                     meeting_id=meeting.id)
            return flask.redirect(location)
        else:
            flask.flash(u'Errors in document information', 'error')
    else:
        if document_id:
            document_schema = schema.DocumentSchema.from_flat(document_row)
        else:
            document_schema = schema.DocumentSchema()

    return {
        'mk': sugar.MarkupGenerator(
            app.jinja_env.get_template('widgets/widgets_documents.html')
        ),
        'meeting': meeting,
        'document': document,
        'document_schema': document_schema,
        'document_id': document_id,
        'page_info': page_info,
    }
Exemple #21
0
def indicator_edit(indicator_id=None):
    if not edit_is_allowed():
        return flask.render_template(
            'indicator_edit.html', **{
                'user_id': get_user_id(),
                'indicator_id': indicator_id,
            })
    app = flask.current_app
    session = database.session

    referenced = False

    if indicator_id is None:
        indicators_row = None
    else:
        indicators_row = database.get_or_404('indicators', indicator_id)
        indicator_schema = schema.IndicatorsSchema.from_flat(indicators_row)
        referenced = is_referenced(table='indicators', row_id=indicator_id)

    if flask.request.method == 'POST':
        form_data = dict(schema.IndicatorsSchema.from_defaults().flatten())
        form_data.update(flask.request.form.to_dict())

        uploaded_file = flask.request.files['file']
        file_error = None
        if uploaded_file.filename != u'':
            mb_limit = flask.current_app.config.get('FILE_SIZE_LIMIT_MB')
            limit = mb_limit * MByte
            try:
                _save_file(form_data, uploaded_file, limit)
                if indicators_row:
                    try:
                        _delete_file(indicators_row)
                    except IndicatorMissingFile:
                        pass
            except FileSizeLimitExceeded:
                file_error = 'File size limit exceeded (%d MB)' % mb_limit

        indicator_schema = schema.IndicatorsSchema.from_flat(form_data)
        if indicator_schema.validate() and not file_error:
            if indicators_row is None:
                indicators_row = session['indicators'].new()
            indicators_row.update(indicator_schema.flatten())

            session.save(indicators_row)
            session.commit()

            flask.flash('Indicator saved', 'success')
            location = flask.url_for('lists.indicator_view',
                                     indicator_id=indicators_row.id)
            return flask.redirect(location)

        else:
            flask.flash(u'Errors in indicators information', 'error')
            if file_error:
                indicator_schema['file_id'].valid = False
                indicator_schema['file_id'].errors.append(file_error)
    else:
        if indicator_id:
            indicator_schema = schema.IndicatorsSchema.from_flat(
                indicators_row)
        else:
            indicator_schema = schema.IndicatorsSchema()

    if indicators_row:
        indicator = schema.Indicator.from_flat(indicators_row)
    else:
        indicator = None
    return flask.render_template(
        'indicator_edit.html', **{
            'mk':
            MarkupGenerator(app.jinja_env.get_template('widgets_edit.html')),
            'indicator_schema': indicator_schema,
            'indicator': indicator,
            'indicator_id': indicator_id,
            'referenced': referenced,
        })