2013-04-02 13:57:39 +13:00
|
|
|
/**
|
|
|
|
* Push badges to backpack.
|
|
|
|
*/
|
|
|
|
function addtobackpack(event, args) {
|
2013-07-16 16:09:11 +12:00
|
|
|
var badgetable = Y.one('#issued-badge-table');
|
|
|
|
var errordiv = Y.one('#addtobackpack-error');
|
|
|
|
var errortext = M.util.get_string('error:backpackproblem', 'badges');
|
|
|
|
var errorhtml = '<div id="addtobackpack-error" class="box boxaligncenter notifyproblem">' + errortext + '</div>';
|
|
|
|
|
|
|
|
if (typeof OpenBadges !== 'undefined') {
|
|
|
|
OpenBadges.issue([args.assertion], function(errors, successes) { });
|
|
|
|
} else {
|
|
|
|
// Add error div if it doesn't exist yet.
|
|
|
|
if (!errordiv) {
|
|
|
|
var badgerror = Y.Node.create(errorhtml);
|
|
|
|
badgetable.insert(badgerror, 'before');
|
|
|
|
}
|
|
|
|
}
|
2013-04-02 13:57:39 +13:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Check if website is externally accessible from the backpack.
|
|
|
|
*/
|
|
|
|
function check_site_access() {
|
|
|
|
var add = Y.one('#check_connection');
|
2013-04-29 14:36:14 +12:00
|
|
|
|
2013-04-02 13:57:39 +13:00
|
|
|
var callback = {
|
2013-04-29 14:36:14 +12:00
|
|
|
method: "GET",
|
|
|
|
on: {
|
|
|
|
success: function(id, o, args) {
|
|
|
|
var data = Y.JSON.parse(o.responseText);
|
|
|
|
if (data.code == 'http-unreachable') {
|
|
|
|
add.setHTML(data.response);
|
|
|
|
add.removeClass('hide');
|
|
|
|
}
|
|
|
|
},
|
|
|
|
failure: function(o) { }
|
2013-04-02 13:57:39 +13:00
|
|
|
}
|
2013-04-29 14:36:14 +12:00
|
|
|
};
|
2013-04-02 13:57:39 +13:00
|
|
|
|
2013-04-29 14:36:14 +12:00
|
|
|
Y.use('io-base', function(Y) {
|
|
|
|
Y.io('ajax.php', callback);
|
2013-04-02 13:57:39 +13:00
|
|
|
});
|
|
|
|
|
|
|
|
return false;
|
2013-09-16 20:15:32 +12:00
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Update the status indicator to show connection progress.
|
|
|
|
*/
|
|
|
|
function badges_set_connection_progress(status) {
|
|
|
|
switch (status) {
|
|
|
|
case 'connecting':
|
|
|
|
var connecting = M.util.get_string('connecting', 'badges');
|
|
|
|
var imageurl = M.util.image_url('i/loading_small', 'moodle');
|
|
|
|
var loading = Y.Node.create(connecting + ' <img src="'+imageurl+'" width="16" height="16" alt="'+connecting+'"/>');
|
|
|
|
Y.one('#connection-status').removeClass('notconnected').addClass('connecting').setHTML(loading);
|
|
|
|
break;
|
|
|
|
case 'notconnected':
|
|
|
|
var notconnected = M.util.get_string('notconnected', 'badges');;
|
|
|
|
Y.one('#connection-status').removeClass('connecting').addClass('notconnected').setHTML(notconnected);
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
// Unknown status, do nothing.
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Print an error message at the top of the page.
|
|
|
|
*/
|
|
|
|
function badges_set_error_message(messagekey, param) {
|
|
|
|
var errortext = M.util.get_string(messagekey, 'badges', param);
|
|
|
|
Y.one('#connection-error').setHTML(errortext);
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Handle the assertion generated by the Persona dialog.
|
|
|
|
*/
|
|
|
|
function badges_handle_assertion(assertion) {
|
|
|
|
|
|
|
|
if (!assertion) {
|
|
|
|
var noassertionstr = M.util.get_string('error:noassertion', 'badges');
|
|
|
|
badges_set_error_message('error:backpackloginfailed', noassertionstr);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
badges_set_connection_progress('connecting');
|
|
|
|
|
|
|
|
Y.io("backpackconnect.php", {
|
|
|
|
method: "POST",
|
|
|
|
data: "assertion="+assertion+"&sesskey="+M.cfg.sesskey,
|
|
|
|
on: {
|
|
|
|
success: function (id, result) {
|
|
|
|
// Reload page to display connected email address.
|
|
|
|
window.location.href = "mybackpack.php";
|
|
|
|
},
|
|
|
|
failure: function (id, result) {
|
|
|
|
try {
|
|
|
|
var parsedResponse = Y.JSON.parse(result.response);
|
|
|
|
} catch (e) {
|
|
|
|
badges_set_connection_progress('notconnected');
|
|
|
|
var badjsonstr = M.util.get_string('error:badjson', 'badges');
|
|
|
|
badges_set_error_message('error:backpackloginfailed', badjsonstr);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
badges_set_connection_progress('notconnected');
|
|
|
|
badges_set_error_message('error:backpackloginfailed', parsedResponse.reason);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Create and bind the persona login button.
|
|
|
|
*/
|
|
|
|
function badges_init_persona_login_button() {
|
|
|
|
// Create the login button and add to the page via Javascript.
|
|
|
|
var imageurl = M.util.image_url('i/persona_sign_in_black', 'moodle');
|
|
|
|
var imagealt = M.util.get_string('signinwithyouremail', 'badges');
|
|
|
|
var button = Y.Node.create('<img id="persona_signin" src="'+imageurl+'" width="202" height="25" alt="'+imagealt+'"/>');
|
|
|
|
Y.one('#persona-container').append(button);
|
|
|
|
|
|
|
|
// Bind a click event to trigger login when clicked.
|
|
|
|
button.on('click', function() {
|
|
|
|
Y.one('#connection-error').empty();
|
|
|
|
navigator.id.get(badges_handle_assertion);
|
|
|
|
});
|
|
|
|
}
|