Skip to content

Commit

Permalink
Merge pull request #2530 from edx/jrbl/certs_regen_handy_flags
Browse files Browse the repository at this point in the history
Certificates: Additional flags for regenerate_user
  • Loading branch information
jrbl committed Mar 21, 2014
2 parents 3bcf619 + b8b8652 commit 1fe68fa
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 10 deletions.
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

0 comments on commit 1fe68fa

Please sign in to comment.