Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Certificates: Additional flags for regenerate_user #2530

Merged
merged 1 commit into from
Mar 21, 2014
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,16 @@ class Command(BaseCommand):
dest='username',
default=False,
help='The username or email address for whom grading and certification should be requested'),
make_option('-G', '--grade',
metavar='GRADE',
dest='grade_value',
default=None,
help='The grade string, such as "Distinction", which should be passed to the certificate agent'),
make_option('-T', '--template',
metavar='TEMPLATE',
dest='template_file',
default=None,
help='The template file used to render this certificate, like "QMSE01-distinction.pdf"'),
)

def handle(self, *args, **options):
Expand All @@ -59,7 +69,9 @@ def handle(self, *args, **options):
xq = XQueueCertInterface()
if options['insecure']:
xq.use_https = False
ret = xq.regen_cert(student, course_id, course=course)
ret = xq.regen_cert(student, course_id, course=course,
forced_grade=options['grade_value'],
template_file=options['template_file'])
print '{0} - {1}'.format(student, ret)
else:
print "noop option given, skipping work queueing..."
23 changes: 14 additions & 9 deletions lms/djangoapps/certificates/queue.py
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ def __init__(self, request=None):
self.restricted = UserProfile.objects.filter(allow_certificate=False)
self.use_https = True

def regen_cert(self, student, course_id, course=None):
def regen_cert(self, student, course_id, course=None, forced_grade=None, template_file=None):
"""(Re-)Make certificate for a particular student in a particular course
Arguments:
Expand All @@ -105,7 +105,7 @@ def regen_cert(self, student, course_id, course=None):
except GeneratedCertificate.DoesNotExist:
pass

return self.add_cert(student, course_id, course)
return self.add_cert(student, course_id, course, forced_grade, template_file)

def del_cert(self, student, course_id):

Expand All @@ -124,21 +124,24 @@ def del_cert(self, student, course_id):

raise NotImplementedError

def add_cert(self, student, course_id, course=None):
def add_cert(self, student, course_id, course=None, forced_grade=None, template_file=None, title='None'):
"""
Request a new certificate for a student.
Arguments:
student - User.object
student - User.object
course_id - courseenrollment.course_id (string)
forced_grade - a string indicating a grade parameter to pass with
the certificate request. If this is given, grading
will be skipped.
Request a new certificate for a student.
Will change the certificate status to 'generating'.
Certificate must be in the 'unavailable', 'error',
'deleted' or 'generating' state.
If a student has a passing grade or is in the whitelist
table for the course a request will made for a new cert.
table for the course a request will be made for a new cert.
If a student has allow_certificate set to False in the
userprofile table the status will change to 'restricted'
Expand All @@ -147,7 +150,6 @@ def add_cert(self, student, course_id, course=None):
will change to status.notpassing
Returns the student's status
"""

VALID_STATUSES = [status.generating,
Expand All @@ -173,9 +175,8 @@ def add_cert(self, student, course_id, course=None):
self.request.user = student
self.request.session = {}

is_whitelisted = self.whitelist.filter(user=student, course_id=course_id, whitelist=True).exists()
grade = grades.grade(student, self.request, course)
is_whitelisted = self.whitelist.filter(
user=student, course_id=course_id, whitelist=True).exists()
enrollment_mode = CourseEnrollment.enrollment_mode_for_user(student, course_id)
mode_is_verified = (enrollment_mode == GeneratedCertificate.MODES.verified)
user_is_verified = SoftwareSecurePhotoVerification.user_is_verified(student)
Expand All @@ -190,6 +191,8 @@ def add_cert(self, student, course_id, course=None):
else:
# honor code and audit students
template_pdf = "certificate-template-{org}-{course}.pdf".format(**course_id_dict)
if forced_grade:
grade['grade'] = forced_grade

cert, __ = GeneratedCertificate.objects.get_or_create(user=student, course_id=course_id)

Expand Down Expand Up @@ -221,6 +224,8 @@ def add_cert(self, student, course_id, course=None):
'grade': grade['grade'],
'template_pdf': template_pdf,
}
if template_file:
contents['template_pdf'] = template_file
new_status = status.generating
cert.status = new_status
cert.save()
Expand Down