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 ...@@ -7,6 +7,7 @@ from lxml import etree
from pkg_resources import resource_string from pkg_resources import resource_string
from django.conf import settings from django.conf import settings
from django.contrib.auth.models import User
from xmodule.x_module import XModule from xmodule.x_module import XModule
from xmodule.seq_module import SequenceDescriptor from xmodule.seq_module import SequenceDescriptor
...@@ -29,6 +30,7 @@ class ProctorPanel(object): ...@@ -29,6 +30,7 @@ class ProctorPanel(object):
self.user_id = user_id self.user_id = user_id
self.procset_name = procset_name self.procset_name = procset_name
self.ses = requests.session() self.ses = requests.session()
self.user = User.objects.get(pk=user_id)
def is_released(self): def is_released(self):
url = '{2}/cmd/status/{0}/{1}'.format(self.user_id, self.procset_name, self.ProctorPanelServer) url = '{2}/cmd/status/{0}/{1}'.format(self.user_id, self.procset_name, self.ProctorPanelServer)
...@@ -101,21 +103,25 @@ class ProctorModule(ProctorFields, XModule): ...@@ -101,21 +103,25 @@ class ProctorModule(ProctorFields, XModule):
return [self.child_descriptor] return [self.child_descriptor]
def get_html(self): def not_released_html(self):
if not self.pp.is_released(): # check for release each time we do get_html() return self.system.render_template('proctor_release.html', {
log.info('is_released False')
return self.system.render_template('proctor_release.html', {
'element_id': self.location.html_id(), 'element_id': self.location.html_id(),
'id': self.id, 'id': self.id,
'name': self.display_name, 'name': self.display_name or self.procset_name,
'pp': self.pp, '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 # return "<div>%s not yet released</div>" % self.display_name
log.info('is_released True') log.info('is_released True')
# for sequential module, just return HTML (no ajax container) # 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 self.child.get_html()
# return ajax container, so that we can dynamically check for is_released changing # return ajax container, so that we can dynamically check for is_released changing
...@@ -131,7 +137,8 @@ class ProctorModule(ProctorFields, XModule): ...@@ -131,7 +137,8 @@ class ProctorModule(ProctorFields, XModule):
def handle_ajax(self, _dispatch, _data): def handle_ajax(self, _dispatch, _data):
if not self.pp.is_released(): # check for release each time we do get_html() if not self.pp.is_released(): # check for release each time we do get_html()
log.info('is_released False') 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)}) return json.dumps({'html': [html], 'message': bool(True)})
html = [child.get_html() for child in self.get_display_items()] html = [child.get_html() for child in self.get_display_items()]
......
<div id="proctor_${element_id}"> <div id="proctor_${element_id}">
<p>Welcome ${pp.user.profile.name or pp.user}</p>
<p>${name} not yet released</p> <p>${name} not yet released</p>
<p><a href="#" id="proctor_${element_id}">Request Access</a></p> <p><a href="#" id="proctor_${element_id}">Request Access</a></p>
...@@ -10,27 +12,65 @@ ...@@ -10,27 +12,65 @@
<script type="text/javascript"> <script type="text/javascript">
procrel = (function(){ procrel = (function(){
var el = $('#proctor_${element_id}'); 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 statel = $('#proctor_stat_${element_id}');
var setstat = function(status){ var setstat = function(status){
el.html('<font color="green">' + status + '</font>'); statel.html('<font color="green">' + status + '</font>');
} }
el.click(function(){ var check_access = function(){
$.ajax({ url: ppurl, $.get(mkurl('status'), function(data){
type: 'POST', console.log(data);
data: "", if (data.enabled) {
success: function(result){ alert ("Access Granted!");
setstat(result.status); 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(); // location.reload();
periodic_check();
}, },
crossDomain: true, //dataType: "text",
error: function() { dataType: "json",
alert('Error: cannot connect to server'); // 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> </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