2 // This file is part of Moodle - http://moodle.org/
4 // Moodle is free software: you can redistribute it and/or modify
5 // it under the terms of the GNU General Public License as published by
6 // the Free Software Foundation, either version 3 of the License, or
7 // (at your option) any later version.
9 // Moodle is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 // GNU General Public License for more details.
14 // You should have received a copy of the GNU General Public License
15 // along with Moodle. If not, see <http://www.gnu.org/licenses/>.
18 * External backpack library.
22 * @copyright 2012 onwards Totara Learning Solutions Ltd {@link http://www.totaralms.com/}
23 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
24 * @author Yuliya Bozhko <yuliya.bozhko@totaralms.com>
27 defined('MOODLE_INTERNAL') ||
die();
30 require_once($CFG->libdir
. '/filelib.php');
32 // Adopted from https://github.com/jbkc85/openbadges-class-php.
33 // Author Jason Cameron <jbkc85@gmail.com>.
35 class OpenBadgesBackpackHandler
{
38 private $backpackuid = 0;
40 public function __construct($record) {
41 $this->backpack
= $record->backpackurl
;
42 $this->email
= $record->email
;
43 $this->backpackuid
= isset($record->backpackuid
) ?
$record->backpackuid
: 0;
46 public function curl_request($action, $collection = null) {
51 $url = $this->backpack
. "/displayer/convert/email";
52 $param = array('email' => $this->email
);
55 $url = $this->backpack
. '/displayer/' . $this->backpackuid
. '/groups.json';
58 $url = $this->backpack
. '/displayer/' . $this->backpackuid
. '/group/' . $collection . '.json';
63 'FRESH_CONNECT' => true,
64 'RETURNTRANSFER' => true,
65 'FORBID_REUSE' => true,
67 'HTTPHEADER' => array('Expect:'),
68 'CONNECTTIMEOUT' => 3,
71 if ($action == 'user') {
72 $out = $curl->post($url, $param, $options);
74 $out = $curl->get($url, array(), $options);
77 return json_decode($out);
80 private function check_status($status) {
85 'message' => get_string('error:nosuchuser', 'badges')
91 public function get_collections() {
92 $json = $this->curl_request('user', $this->email
);
93 if (isset($json->status
)) {
94 if ($json->status
!= 'okay') {
95 return $this->check_status($json->status
);
97 $this->backpackuid
= $json->userId
;
98 return $this->curl_request('groups');
103 public function get_badges($collection) {
104 $json = $this->curl_request('user', $this->email
);
105 if (isset($json->status
)) {
106 if ($json->status
!= 'okay') {
107 return $this->check_status($json->status
);
109 return $this->curl_request('badges', $collection);
114 public function get_url() {
115 return $this->backpack
;