def report_view(report_id): app = flask.current_app report = database.get_report_or_404(report_id) country = flask.request.args.get('country') region = flask.request.args.get('region') return flask.render_template( 'report_view.html', **{ 'mk': MarkupGenerator(app.jinja_env.get_template('widgets-view.html')), 'report': { 'id': report_id, 'data': schema.ReportSchema.from_flat(report), 'seris_reviews': [{ 'id': row.id, 'data': schema.SerisReviewSchema.from_flat(row) } for row in database.get_seris_reviews_list(report_id)] }, 'country': country, 'region': region, 'edit_is_allowed': edit_is_allowed(report_id), })
def report_delete(report_id): if flask.request.method == 'POST': session = database.get_session() reviews_list = database.get_seris_reviews_list(report_id) if reviews_list: # TODO change when multiple reviews will be implemented session.table(database.SerisReviewRow) \ .delete(reviews_list[0].id) report_row = database.get_report_or_404(report_id) title = report_row['details_original_name'] session.table(database.ReportRow).delete(report_id) session.commit() action = 'deleted' contributor_id = getattr(flask.g, 'user_id') contributor_name = '%s %s' % (getattr( flask.g, 'user_first_name'), getattr(flask.g, 'user_last_name')) contributor_profile = ( 'http://www.eionet.europa.eu/directory/user?uid=%s' % contributor_id) send_notification_mail(None, title, action, contributor_profile, contributor_name, contributor_id) flask.flash("Report deleted.", "success") url = flask.url_for('views.report_list') country = flask.request.args.get('country') if country: url = url + '?country=' + country region = flask.request.args.get('region') if region: url = url + '?region=' + region return flask.redirect(url)
def edit_is_allowed(report_id=None): if flask.current_app.config.get('SKIP_EDIT_AUTHORIZATION', False): return True roles = getattr(flask.g, 'user_roles', []) if 'Administrator' in roles: return True groups = getattr(flask.g, 'groups', []) group_ids = [group[0] for group in groups] if check_common(schema.administrators, group_ids): return True if report_id is not None: report_row = database.get_report_or_404(report_id) for i in range(0, 40): country = report_row.get('header_country_%s' % i) if not country: break if not check_common(schema.countries_dict[country], group_ids): return False process_country_list(group_ids) return True else: if check_common(schema.all_contributors, group_ids): process_country_list(group_ids) return True
def report_view(report_id): app = flask.current_app report = database.get_report_or_404(report_id) return flask.render_template('report_view.html', **{ 'mk': MarkupGenerator(app.jinja_env.get_template('widgets-view.html')), 'report': {'id': report_id, 'data': schema.ReportSchema.from_flat(report), 'seris_reviews': [ {'id': row.id, 'data': schema.SerisReviewSchema.from_flat(row)} for row in database.get_seris_reviews_list(report_id)] } } )
def report_edit(report_id=None): if report_id is None: report_row = database.ReportRow() seris_review_row = database.SerisReviewRow() else: report_row = database.get_report_or_404(report_id) reviews_list = database.get_seris_reviews_list(report_id) if reviews_list: #TODO to be changed when there will be more than one seris seris_review_row = reviews_list[0] else: seris_review_row = database.SerisReviewRow() if flask.request.method == 'POST': session = database.get_session() form_data = {} form_data.update(schema.ReportSchema.from_defaults().flatten()) form_data.update(schema.SerisReviewSchema.from_defaults().flatten()) form_data.update(flask.request.form.to_dict()) _expand_lists(form_data, ['header_region', 'header_country', 'header_subregion', 'details_translated_in', 'details_original_language', 'links_target_audience']) report_schema = schema.ReportSchema.from_flat(form_data) seris_review_schema = schema.SerisReviewSchema.from_flat(form_data) file_upload.handle_request(session, report_schema, report_row) if report_schema.validate(): report_row.clear() report_row.update(report_schema.flatten()) session.save(report_row) #TODO create filter to display data without losing information if report_row['format_report_type'] == 'report (static source)': report_row['format_date_of_last_update'] = '' report_row['format_freq_of_upd'] = '' report_row['format_size'] = '' if report_row['format_report_type'] == 'portals (dynamic source)': report_row['format_date_of_publication'] = '' report_row['format_freq_of_pub'] = '' report_row['format_no_of_pages'] = '' if report_row['format_availability_paper_or_web'] == 'paper only': report_row['format_availability_registration_required'] = '' if report_row['format_availability_paper_or_web'] in [ 'web only', 'web and print']: if not report_row['format_availability_registration_required']: report_row['format_availability_costs'] = 'free' uploader = getattr(flask.g, 'user_id') if not uploader: uploader = 'Developer' report_row['header_uploader'] = uploader report_row['header_upload_date'] = datetime.datetime.now().strftime('%d %b %Y, %H:%M') session.save(report_row) seris_review_schema['report_id'].set(report_row.id) if seris_review_schema.validate(): seris_review_row.clear() seris_review_row.update(seris_review_schema.flatten()) if seris_review_row['structure_indicator_based'] == 'No': seris_review_row['structure_indicators_estimation'] = '' seris_review_row['structure_indicators_usage_to_compare_countries'] = '' seris_review_row['structure_indicators_usage_to_compare_subnational'] = '' seris_review_row['structure_indicators_usage_to_compare_eea'] = '' seris_review_row['structure_indicators_usage_to_compare_global'] = '' seris_review_row['structure_indicators_usage_to_assess_progress'] = '' seris_review_row['structure_indicators_usage_to_evaluate'] = '' seris_review_row['structure_indicators_usage_evaluation_method'] = '' elif not seris_review_row['structure_indicators_usage_to_evaluate']: seris_review_row['structure_indicators_usage_evaluation_method'] = '' session.save(seris_review_row) session.commit() flask.flash("Report saved.", "success") url = flask.url_for('views.report_view', report_id=report_row.id) return flask.redirect(url) session.rollback() flask.flash("Errors in form.", "error") else: report_schema = schema.ReportSchema() seris_review_schema = schema.SerisReviewSchema() if report_id is not None: report_schema = schema.ReportSchema.from_flat(report_row) seris_review_schema = schema.SerisReviewSchema.from_flat(seris_review_row) app = flask.current_app return flask.render_template('report-edit.html', **{ 'mk': MarkupGenerator(app.jinja_env.get_template('widgets-edit.html')), 'report_id': report_id, 'report_schema': report_schema, 'seris_review_schema': seris_review_schema, })
def report_edit(report_id=None): country = flask.request.args.get('country') if not country: country = flask.request.form.get('country') if country == u'None': country = None region = flask.request.args.get('region') if not region: region = flask.request.form.get('region') if region == u'None': region = None if report_id is None: report_row = database.ReportRow() seris_review_row = database.SerisReviewRow() else: report_row = database.get_report_or_404(report_id) reviews_list = database.get_seris_reviews_list(report_id) if reviews_list: # TODO to be changed when there will be more than one seris seris_review_row = reviews_list[0] else: seris_review_row = database.SerisReviewRow() if flask.request.method == 'POST': session = database.get_session() form_data = {} form_data.update(schema.ReportSchema.from_defaults().flatten()) form_data.update(schema.SerisReviewSchema.from_defaults().flatten()) form_data.update(flask.request.form.to_dict()) _expand_lists(form_data, [ 'header_region', 'header_country', 'header_subregion', 'details_translated_in', 'details_original_language', 'links_target_audience' ]) report_schema = schema.ReportSchema.from_flat(form_data) seris_review_schema = schema.SerisReviewSchema.from_flat(form_data) file_upload.handle_request(session, report_schema, report_row) if report_schema.validate(): report_row.clear() report_row.update(report_schema.flatten()) session.save(report_row) # TODO create filter to display data without losing information if report_row['format_report_type'] == 'report (static source)': report_row['format_date_of_last_update'] = '' report_row['format_freq_of_upd'] = '' report_row['format_size'] = '' if report_row['format_report_type'] == 'portals (dynamic source)': report_row['format_date_of_publication'] = '' report_row['format_freq_of_pub'] = '' report_row['format_no_of_pages'] = '' if report_row['format_availability_paper_or_web'] == 'paper only': report_row['format_availability_registration_required'] = '' report_row['format_availability_url'] = '' if report_row['format_availability_paper_or_web'] in [ 'web only', 'web and print' ]: if not report_row['format_availability_registration_required']: report_row['format_availability_costs'] = 'free' uploader = getattr(flask.g, 'user_id', None) if not uploader: uploader = 'Developer' report_row['header_uploader'] = uploader now = datetime.datetime.now() report_row['header_upload_date'] = now.strftime('%d %b %Y, %H:%M') session.save(report_row) seris_review_schema['report_id'].set(report_row.id) if seris_review_schema.validate(): seris_review_row.clear() seris_review_row.update(seris_review_schema.flatten()) if seris_review_row['structure_indicator_based'] == 'No': seris_review_row['structure_indicators_estimation'] = '' seris_review_row[ 'structure_indicators_usage_to_compare_countries'] = '' seris_review_row[ 'structure_indicators_usage_to_compare_subnational'] = '' seris_review_row[ 'structure_indicators_usage_to_compare_eea'] = '' seris_review_row[ 'structure_indicators_usage_to_compare_global'] = '' seris_review_row[ 'structure_indicators_usage_to_assess_progress'] = '' seris_review_row[ 'structure_indicators_usage_to_evaluate'] = '' seris_review_row[ 'structure_indicators_usage_evaluation_method'] = '' elif not seris_review_row[ 'structure_indicators_usage_to_evaluate']: seris_review_row[ 'structure_indicators_usage_evaluation_method'] = '' session.save(seris_review_row) session.commit() flask.flash("Report saved.", "success") url = flask.url_for('views.report_view', report_id=report_row.id) title = report_row['details_original_name'] if report_id is None: action = 'added' else: action = 'edited' if not flask.current_app.config.get('SKIP_EDIT_AUTHORIZATION', False): contributor_name = '%s %s' % (getattr( flask.g, 'user_first_name'), getattr(flask.g, 'user_last_name')) contributor_profile = ( 'http://www.eionet.europa.eu/directory/user?uid=%s' % uploader) send_notification_mail('%s%s' % (flask.request.host, url), title, action, contributor_profile, contributor_name, uploader) if country: url = url + '?country=' + country if region: url = url + '?region=' + region return flask.redirect(url) session.rollback() flask.flash( "There were some errors in the submitted form. " "Please review look further down for the error messages.", "error") else: report_schema = schema.ReportSchema() seris_review_schema = schema.SerisReviewSchema() if report_id is not None: report_schema = schema.ReportSchema.from_flat(report_row) seris_review_schema = schema.SerisReviewSchema.from_flat( seris_review_row) app = flask.current_app return flask.render_template( 'report-edit.html', **{ 'mk': MarkupGenerator(app.jinja_env.get_template('widgets-edit.html')), 'report_id': report_id, 'report_schema': report_schema, 'seris_review_schema': seris_review_schema, 'country': country, 'region': region, })