# -*- coding: utf-8 -*-
#
# This file is part of INGInious. See the LICENSE and the COPYRIGHTS files for
# more information about the licensing of this file.
from collections import OrderedDict
import web
from inginious.frontend.pages.course_admin.utils import make_csv, INGIniousAdminPage
[docs]class CourseStudentListPage(INGIniousAdminPage):
""" Course administration page: list of registered students """
[docs] def GET_AUTH(self, courseid): # pylint: disable=arguments-differ
""" GET request """
course, __ = self.get_course_and_check_rights(courseid)
return self.page(course)
[docs] def POST_AUTH(self, courseid): # pylint: disable=arguments-differ
""" POST request """
course, __ = self.get_course_and_check_rights(courseid, None, False)
data = web.input()
if "remove" in data:
try:
if data["type"] == "all":
aggregations = list(self.database.aggregations.find({"courseid": courseid}))
for aggregation in aggregations:
aggregation["students"] = []
for group in aggregation["groups"]:
group["students"] = []
self.database.aggregations.replace_one({"_id": aggregation["_id"]}, aggregation)
else:
self.user_manager.course_unregister_user(course, data["username"])
except:
pass
elif "register" in data:
try:
self.user_manager.course_register_user(course, data["username"].strip(), '', True)
except:
pass
return self.page(course)
[docs] def submission_url_generator(self, username):
""" Generates a submission url """
return "?format=taskid%2Fusername&users=" + username
[docs] def page(self, course, error="", post=False):
""" Get all data and display the page """
users = sorted(list(self.user_manager.get_users_info(self.user_manager.get_course_registered_users(course, False)).items()),
key=lambda k: k[1][0] if k[1] is not None else "")
users = OrderedDict(sorted(list(self.user_manager.get_users_info(course.get_staff()).items()),
key=lambda k: k[1][0] if k[1] is not None else "") + users)
user_data = OrderedDict([(username, {
"username": username, "realname": user[0] if user is not None else "",
"email": user[1] if user is not None else "", "total_tasks": 0,
"task_grades": {"answer": 0, "match": 0}, "task_succeeded": 0, "task_tried": 0, "total_tries": 0,
"grade": 0, "url": self.submission_url_generator(username)}) for username, user in users.items()])
for username, data in self.user_manager.get_course_caches(list(users.keys()), course).items():
user_data[username].update(data if data is not None else {})
if "csv" in web.input():
return make_csv(user_data)
return self.template_helper.get_renderer().course_admin.student_list(course, list(user_data.values()), error, post)