Commit ca4ca008 by ichuang Committed by Justin Riley

proctor_module: get username, and also handle problemset

parent c7f88ae9
......@@ -7,6 +7,7 @@ from lxml import etree
from pkg_resources import resource_string
from django.conf import settings
from django.contrib.auth.models import User
from xmodule.x_module import XModule
from xmodule.seq_module import SequenceDescriptor
......@@ -29,6 +30,7 @@ class ProctorPanel(object):
self.user_id = user_id
self.procset_name = procset_name
self.ses = requests.session()
self.user = User.objects.get(pk=user_id)
def is_released(self):
url = '{2}/cmd/status/{0}/{1}'.format(self.user_id, self.procset_name, self.ProctorPanelServer)
......@@ -101,21 +103,25 @@ class ProctorModule(ProctorFields, XModule):
return [self.child_descriptor]
def get_html(self):
if not self.pp.is_released(): # check for release each time we do get_html()
log.info('is_released False')
return self.system.render_template('proctor_release.html', {
def not_released_html(self):
return self.system.render_template('proctor_release.html', {
'element_id': self.location.html_id(),
'id': self.id,
'name': self.display_name,
'name': self.display_name or self.procset_name,
'pp': self.pp,
})
})
def get_html(self):
if not self.pp.is_released(): # check for release each time we do get_html()
log.info('is_released False')
return self.not_released_html()
# return "<div>%s not yet released</div>" % self.display_name
log.info('is_released True')
# for sequential module, just return HTML (no ajax container)
if self.child.category in ['sequential', 'videosequence']:
if self.child.category in ['sequential', 'videosequence', 'problemset']:
return self.child.get_html()
# return ajax container, so that we can dynamically check for is_released changing
......@@ -131,7 +137,8 @@ class ProctorModule(ProctorFields, XModule):
def handle_ajax(self, _dispatch, _data):
if not self.pp.is_released(): # check for release each time we do get_html()
log.info('is_released False')
html = "<div>%s not yet released</div>" % self.display_name
# html = "<div>%s not yet released</div>" % self.display_name
html = self.not_released_html()
return json.dumps({'html': [html], 'message': bool(True)})
html = [child.get_html() for child in self.get_display_items()]
......
<div id="proctor_${element_id}">
<p>Welcome ${pp.user.profile.name or pp.user}</p>
<p>${name} not yet released</p>
<p><a href="#" id="proctor_${element_id}">Request Access</a></p>
......@@ -10,27 +12,65 @@
<script type="text/javascript">
procrel = (function(){
var el = $('#proctor_${element_id}');
var ppurl = "${pp.ProctorPanelServer}/cmd/request/${pp.user_id}/${pp.procset_name}";
var mkurl = function(cmd) {
ps = encodeURIComponent("${pp.procset_name}");
return "${pp.ProctorPanelServer}/cmd/" + cmd + "/${pp.user_id}/" + ps;
}
var statel = $('#proctor_stat_${element_id}');
var setstat = function(status){
el.html('<font color="green">' + status + '</font>');
statel.html('<font color="green">' + status + '</font>');
}
el.click(function(){
$.ajax({ url: ppurl,
type: 'POST',
data: "",
success: function(result){
setstat(result.status);
var check_access = function(){
$.get(mkurl('status'), function(data){
console.log(data);
if (data.enabled) {
alert ("Access Granted!");
location.reload();
}
});
}
var check_count = 0;
var periodic_check = function() {
check_count = check_count + 1;
if (check_count < 100){ // >
setTimeout(periodic_check, 2000);
}
check_access();
}
var make_request = function(){
check_count = 0;
$.ajax({ url: mkurl('request'),
type: 'GET',
data: { "uname": "${pp.user.username}",
"name": "${pp.user.profile.name}"
},
success: function(result, status, xhr){
//setstat(result.status);
setstat(result.status);
//alert(result);
// location.reload();
periodic_check();
},
crossDomain: true,
error: function() {
alert('Error: cannot connect to server');
//dataType: "text",
dataType: "json",
// crossDomain: true,
error: function(xhr, status, error) {
alert('Error: cannot connect to server' + status + "error:" + error);
}
});
});
}
el.click(make_request);
return { "check": check_access, "make": make_request, "mkurl": mkurl };
}() );
</script>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment