Skip to content

Commit

Permalink
Merge branch 'MDL-63262-master' of git://github.com/damyon/moodle
Browse files Browse the repository at this point in the history
  • Loading branch information
stronk7 authored and abgreeve committed May 7, 2019
2 parents 2daa199 + 58c7d2c commit 7726bec
Show file tree
Hide file tree
Showing 65 changed files with 5,156 additions and 1,677 deletions.
29 changes: 26 additions & 3 deletions admin/settings/badges.php
Original file line number Diff line number Diff line change
Expand Up @@ -57,9 +57,11 @@
new lang_string('badgesalt_desc', 'badges'),
'badges' . $SITE->timecreated, PARAM_ALPHANUM));

$globalsettings->add(new admin_setting_configcheckbox('badges_allowexternalbackpack',
new lang_string('allowexternalbackpack', 'badges'),
new lang_string('allowexternalbackpack_desc', 'badges'), 1));
$backpacks = badges_get_site_backpacks();
$choices = array();
foreach ($backpacks as $backpack) {
$choices[$backpack->id] = $backpack->backpackweburl;
}

$globalsettings->add(new admin_setting_configcheckbox('badges_allowcoursebadges',
new lang_string('allowcoursebadges', 'badges'),
Expand Down Expand Up @@ -91,4 +93,25 @@
array('moodle/badges:createbadge'), empty($CFG->enablebadges)
)
);
$backpacksettings = new admin_settingpage('backpacksettings', new lang_string('backpacksettings', 'badges'),
array('moodle/badges:manageglobalsettings'), empty($CFG->enablebadges));

$backpacksettings->add(new admin_setting_configcheckbox('badges_allowexternalbackpack',
new lang_string('allowexternalbackpack', 'badges'),
new lang_string('allowexternalbackpack_desc', 'badges'), 1));

$backpacksettings->add(new admin_setting_configselect('badges_site_backpack',
new lang_string('sitebackpack', 'badges'),
new lang_string('sitebackpack_help', 'badges'),
1, $choices));

$ADMIN->add('badges', $backpacksettings);

$ADMIN->add('badges',
new admin_externalpage('managebackpacks',
new lang_string('managebackpacks', 'badges'),
new moodle_url('/badges/backpacks.php'),
array('moodle/badges:manageglobalsettings'), empty($CFG->enablebadges) || empty($CFG->badges_allowexternalbackpack)
)
);
}
2 changes: 1 addition & 1 deletion badges/action.php
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@
$cloneid = $badge->make_clone();
// If a user can edit badge details, they will be redirected to the edit page.
if (has_capability('moodle/badges:configuredetails', $context)) {
redirect(new moodle_url('/badges/edit.php', array('id' => $cloneid, 'action' => 'details')));
redirect(new moodle_url('/badges/edit.php', array('id' => $cloneid, 'action' => 'badge')));
}
redirect(new moodle_url('/badges/overview.php', array('id' => $cloneid)));
}
Expand Down
2 changes: 1 addition & 1 deletion badges/alignment.php
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@
}
$alignments = $badge->get_alignments();
if (count($alignments) > 0) {
$renderrelated = new badge_alignments($alignments, $badgeid);
$renderrelated = new \core_badges\output\badge_alignments($alignments, $badgeid);
echo $output->render($renderrelated);
} else {
echo $output->notification(get_string('noalignment', 'badges'));
Expand Down
1 change: 1 addition & 0 deletions badges/assertion.php
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
define('NO_MOODLE_COOKIES', true); // No need for a session here.

require_once(__DIR__ . '/../config.php');
require_once($CFG->libdir . '/badgeslib.php');

if (empty($CFG->enablebadges)) {
print_error('badgesdisabled', 'badges');
Expand Down
97 changes: 97 additions & 0 deletions badges/backpack-add.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.

/**
* Optionally award a badge and redirect to the my badges page.
*
* @package core_badges
* @copyright 2019 Damyon Wiese
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/

require_once(__DIR__ . '/../config.php');
require_once($CFG->libdir . '/badgeslib.php');

if (badges_open_badges_backpack_api() != OPEN_BADGES_V2) {
throw new coding_exception('No backpacks support Open Badges V2.');
}

require_login();

$id = required_param('hash', PARAM_ALPHANUM);

$PAGE->set_url('/badges/backpack-add.php', array('hash' => $id));
$PAGE->set_context(context_system::instance());
$output = $PAGE->get_renderer('core', 'badges');

$issuedbadge = new \core_badges\output\issued_badge($id);
if (!empty($issuedbadge->recipient->id)) {
// The flow for issuing a badge is:
// * Create issuer
// * Create badge
// * Create assertion (Award the badge!)

// Get the backpack.
$badgeid = $issuedbadge->badgeid;
$badge = new badge($badgeid);
$backpack = $DB->get_record('badge_backpack', array('userid' => $USER->id));
$sitebackpack = badges_get_site_backpack($backpack->externalbackpackid);
$assertion = new core_badges_assertion($id, $sitebackpack->apiversion);
$api = new \core_badges\backpack_api($sitebackpack);
$api->authenticate();

// Create issuer.
$issuer = $assertion->get_issuer();
if (!($issuerentityid = badges_external_get_mapping($sitebackpack->id, OPEN_BADGES_V2_TYPE_ISSUER, $issuer['email']))) {
$response = $api->put_issuer($issuer);
if (!$response) {
throw new moodle_exception('invalidrequest', 'error');
}
$issuerentityid = $response->id;
badges_external_create_mapping($sitebackpack->id, OPEN_BADGES_V2_TYPE_ISSUER, $issuer['email'], $issuerentityid);
}
// Create badge.
$badge = $assertion->get_badge_class(false);
$badgeid = $assertion->get_badge_id();
if (!($badgeentityid = badges_external_get_mapping($sitebackpack->id, OPEN_BADGES_V2_TYPE_BADGE, $badgeid))) {
$response = $api->put_badgeclass($issuerentityid, $badge);
if (!$response) {
throw new moodle_exception('invalidrequest', 'error');
}
$badgeentityid = $response->id;
badges_external_create_mapping($sitebackpack->id, OPEN_BADGES_V2_TYPE_BADGE, $badgeid, $badgeentityid);
}

// Create assertion (Award the badge!).
$assertiondata = $assertion->get_badge_assertion(false, false);

$assertionid = $assertion->get_assertion_hash();

if (!($assertionentityid = badges_external_get_mapping($sitebackpack->id, OPEN_BADGES_V2_TYPE_ASSERTION, $assertionid))) {
$response = $api->put_badgeclass_assertion($badgeentityid, $assertiondata);
if (!$response) {
throw new moodle_exception('invalidrequest', 'error');
}
$assertionentityid = $response->id;
badges_external_create_mapping($sitebackpack->id, OPEN_BADGES_V2_TYPE_ASSERTION, $assertionid, $assertionentityid);
$response = ['success' => 'addedtobackpack'];
} else {
$response = ['warning' => 'existsinbackpack'];
}
redirect(new moodle_url('/badges/mybadges.php', $response));
} else {
redirect(new moodle_url('/badges/mybadges.php'));
}
2 changes: 2 additions & 0 deletions badges/backpack.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
/**
* Push badges to backpack.
* @deprecated since 3.7
*/
function addtobackpack(event, args) {
var badgetable = Y.one('#issued-badge-table');
Expand All @@ -20,6 +21,7 @@ function addtobackpack(event, args) {

/**
* Check if website is externally accessible from the backpack.
* @deprecated since 3.7
*/
function check_site_access() {
var add = Y.one('#check_connection');
Expand Down
23 changes: 13 additions & 10 deletions badges/backpackemailverify.php
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,10 @@
*/
require_once(__DIR__ . '/../config.php');
require_once($CFG->libdir . '/badgeslib.php');
require_once(__DIR__ . '/lib/backpacklib.php');

$data = optional_param('data', '', PARAM_RAW);
require_login();
$PAGE->set_url('/badges/openbackpackemailverify.php');
$PAGE->set_url('/badges/backpackemailverify.php');
$PAGE->set_context(context_user::instance($USER->id));
$redirect = '/badges/mybackpack.php';

Expand All @@ -37,28 +36,32 @@
if (!is_null($storedsecret)) {
if ($data === $storedsecret) {
$storedemail = get_user_preferences('badges_email_verify_address');
$backpackid = get_user_preferences('badges_email_verify_backpackid');
$password = get_user_preferences('badges_email_verify_password');

$backpack = badges_get_site_backpack($backpackid);

$data = new stdClass();
$data->backpackurl = BADGE_BACKPACKURL;
$data->email = $storedemail;
$bp = new OpenBadgesBackpackHandler($data);
$data->password = $password;
$data->externalbackpackid = $backpackid;
$bp = new \core_badges\backpack_api($backpack, $data);

// Make sure we have all the required information before trying to save the connection.
$backpackuser = $bp->curl_request('user');
if (isset($backpackuser->status) && $backpackuser->status === 'okay' && isset($backpackuser->userId)) {
$backpackuid = $backpackuser->userId;
} else {
$backpackuid = $bp->authenticate();
if (empty($backpackuid) || !empty($backpackuid->error)) {
redirect(new moodle_url($redirect), get_string('backpackconnectionunexpectedresult', 'badges'),
null, \core\output\notification::NOTIFY_ERROR);
}

$obj = new stdClass();
$obj->userid = $USER->id;
$obj->email = $data->email;
$obj->backpackurl = $data->backpackurl;
$obj->externalbackpackid = $backpackid;
$obj->backpackuid = $backpackuid;
$obj->autosync = 0;
$obj->password = '';
$obj->password = $password;

$DB->insert_record('badge_backpack', $obj);

// Remove the verification vars and redirect to the mypackpack page.
Expand Down
78 changes: 78 additions & 0 deletions badges/backpacks.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.

/**
* Display a list of badge backpacks for the site.
*
* @package core_badges
* @copyright 2019 Damyon Wiese
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/

require_once(__DIR__ . '/../config.php');
require_once($CFG->libdir . '/badgeslib.php');
$context = context_system::instance();
$PAGE->set_context($context);

require_login(0, false);
require_capability('moodle/badges:manageglobalsettings', $context);
// There should be an admin setting to completely turn off badges.
$output = $PAGE->get_renderer('core', 'badges');

$id = optional_param('id', 0, PARAM_INT);
$action = optional_param('action', '', PARAM_ALPHA);

$PAGE->set_pagelayout('admin');
$url = new moodle_url('/badges/backpacks.php');

if (empty($CFG->badges_allowexternalbackpack)) {
redirect($CFG->wwwroot);
}

$PAGE->set_url($url);
$PAGE->set_title(get_string('managebackpacks', 'badges'));
$PAGE->set_heading($SITE->fullname);
if ($action == 'edit') {
$backpack = null;
if (!empty($id)) {
$backpack = badges_get_site_backpack($id);
}
$form = new \core_badges\form\external_backpack(null, ['externalbackpack' => $backpack]);
if ($form->is_cancelled()) {
redirect($url);
} else if ($data = $form->get_data()) {
require_sesskey();
if (!empty($data->id)) {
badges_update_site_backpack($data->id, $data);
} else {
badges_create_site_backpack($data);
}
redirect($url);
}

echo $OUTPUT->header();
echo $output->heading(get_string('managebackpacks', 'badges'));

$form->display();
} else {
echo $OUTPUT->header();
echo $output->heading(get_string('managebackpacks', 'badges'));

$page = new \core_badges\output\external_backpacks_page($url);
echo $output->render($page);
}

echo $OUTPUT->footer();
2 changes: 1 addition & 1 deletion badges/badge.php
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@
$PAGE->set_pagelayout('base');
$PAGE->set_title(get_string('issuedbadge', 'badges'));

$badge = new issued_badge($id);
$badge = new \core_badges\output\issued_badge($id);
if (!empty($badge->recipient->id)) {
if ($bake && ($badge->recipient->id == $USER->id)) {
$name = str_replace(' ', '_', $badge->badgeclass['name']) . '.png';
Expand Down
2 changes: 1 addition & 1 deletion badges/badge_json.php
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@
if ($item->targetcode) {
$alignment['targetCode'] = $item->targetcode;
}
$json['alignment'][] = $alignment;
$json['alignments'][] = $alignment;
}
}
} else if ($action == 0) {
Expand Down
Loading

0 comments on commit 7726bec

Please sign in to comment.