diff --git a/acmsite/admin/__init__.py b/acmsite/admin/__init__.py index c6332de..81331fc 100644 --- a/acmsite/admin/__init__.py +++ b/acmsite/admin/__init__.py @@ -1,9 +1,10 @@ -from flask import Blueprint, flash, redirect, render_template, request, url_for +from flask import Blueprint, flash, redirect, render_template, request, send_file, url_for import ulid import datetime from flask_login import current_user, login_required from acmsite.models import Link, User, Event +from acmsite import models from .forms import EventForm, LinkForm from acmsite import db @@ -30,6 +31,19 @@ def users(): return render_template("admin/users.html", u_list=user_list) +@bp.route("/users.csv") +@login_required +def users_csv(): + if not current_user.is_admin: + flash("Unauthorized") + return redirect(url_for('dashboard.home')) + + user_list = User.query.all() + + models.create_acm_csv(user_list) + + return send_file('./tmp/members.csv') + @bp.route("/events") @login_required diff --git a/acmsite/models.py b/acmsite/models.py index ecf7da5..e9490bf 100644 --- a/acmsite/models.py +++ b/acmsite/models.py @@ -1,6 +1,7 @@ from flask import flash, redirect, url_for from flask_login import UserMixin from sqlalchemy import Boolean, Column, DateTime, ForeignKey, Integer, String, null +import csv from . import db from . import login @@ -16,6 +17,15 @@ class User(db.Model, UserMixin): active = Column(Boolean, nullable=False, default=True) is_admin = Column(Boolean, nullable=False, default=False) +def create_acm_csv(user_list): + with open('acmsite/tmp/members.csv', 'w') as members_csv: + header = ['last', 'first', 'email'] + writer = csv.DictWriter(members_csv, fieldnames=header) + + for u in user_list: + writer.writerow({'last': u.last_name, 'first': u.first_name, + 'email': u.email}) + @login.user_loader def user_loader(user_id): return User.query.filter_by(id=user_id).first() diff --git a/acmsite/templates/admin/users.html b/acmsite/templates/admin/users.html index 619db9b..bd15541 100644 --- a/acmsite/templates/admin/users.html +++ b/acmsite/templates/admin/users.html @@ -2,6 +2,7 @@ {% block app_content %}

Member List

+CSV for ACM