ILIAS  release_5-3 Revision v5.3.23-19-g915713cf615
class.ilBadgeBackpack.php
Go to the documentation of this file.
1<?php
2/* Copyright (c) 1998-2010 ILIAS open source, Extended GPL, see docs/LICENSE */
3
13{
14 protected $email; // [string]
15 protected $uid; // [int]
16
17 const URL_DISPLAYER = "https://backpack.openbadges.org/displayer/";
18
19 public function __construct($a_email)
20 {
21 $this->email = $a_email;
22 }
23
24 protected function authenticate()
25 {
26 $json = $this->sendRequest(
27 self::URL_DISPLAYER . "convert/email",
28 array("email"=>$this->email),
29 true
30 );
31
32 if (!isset($json->status) ||
33 $json->status != "okay") {
34 return false;
35 }
36
37 $this->uid = $json->userId;
38 return true;
39 }
40
41 public function getGroups()
42 {
43 if ($this->authenticate()) {
44 $json = $this->sendRequest(
45 self::URL_DISPLAYER . $this->uid . "/groups.json"
46 );
47
48 $result = array();
49
50 foreach ($json->groups as $group) {
51 $result[$group->groupId] = array(
52 "title" => $group->name,
53 "size" => $group->badges
54 );
55 }
56
57 return $result;
58 }
59 }
60
61 public function getBadges($a_group_id)
62 {
63 if ($this->authenticate()) {
64 $json = $this->sendRequest(
65 self::URL_DISPLAYER . $this->uid . "/group/" . $a_group_id . ".json"
66 );
67
68 if ($json->status &&
69 $json->status == "missing") {
70 return false;
71 }
72
73 $result = array();
74
75 foreach ($json->badges as $raw) {
76 $badge = $raw->assertion->badge;
77
78 // :TODO: not sure if this works reliably
79 $issued_on = is_numeric($raw->assertion->issued_on)
80 ? $raw->assertion->issued_on
81 : strtotime($raw->assertion->issued_on);
82
83 $result[] = array(
84 "title" => $badge->name,
85 "description" => $badge->description,
86 "image_url" => $badge->image,
87 "criteria_url" => $badge->criteria,
88 "issuer_name" => $badge->issuer->name,
89 "issuer_url" => $badge->issuer->origin,
90 "issued_on" => new ilDate($issued_on, IL_CAL_UNIX)
91 );
92 }
93
94 return $result;
95 }
96 }
97
98 protected function sendRequest($a_url, array $a_param = array(), $a_is_post = false)
99 {
100 try {
101 include_once "Services/WebServices/Curl/classes/class.ilCurlConnection.php";
102 $curl = new ilCurlConnection();
103 $curl->init();
104
105 $curl->setOpt(CURLOPT_FRESH_CONNECT, true);
106 $curl->setOpt(CURLOPT_RETURNTRANSFER, true);
107 $curl->setOpt(CURLOPT_FORBID_REUSE, true);
108 $curl->setOpt(CURLOPT_HEADER, 0);
109 $curl->setOpt(CURLOPT_CONNECTTIMEOUT, 3);
110 $curl->setOpt(CURLOPT_POSTREDIR, 3);
111
112 // :TODO: SSL problems on test server
113 $curl->setOpt(CURLOPT_SSL_VERIFYPEER, false);
114
115 $curl->setOpt(CURLOPT_HTTPHEADER, array(
116 "Accept: application/json",
117 "Expect:"
118 ));
119
120 if ((bool) $a_is_post) {
121 $curl->setOpt(CURLOPT_POST, 1);
122 if (sizeof($a_param)) {
123 $curl->setOpt(CURLOPT_POSTFIELDS, http_build_query($a_param));
124 }
125 } else {
126 $curl->setOpt(CURLOPT_HTTPGET, 1);
127 if (sizeof($a_param)) {
128 $a_url = $a_url .
129 (strpos($a_url, "?") === false ? "?" : "") .
130 http_build_query($a_param);
131 }
132 }
133 $curl->setOpt(CURLOPT_URL, $a_url);
134
135 $answer = $curl->exec();
136 } catch (Exception $ex) {
137 ilUtil::sendFailure($ex->getMessage());
138 return;
139 }
140
141 return json_decode($answer);
142 }
143}
$result
An exception for terminatinating execution or to throw for unit testing.
const IL_CAL_UNIX
sendRequest($a_url, array $a_param=array(), $a_is_post=false)
Class for single dates.
static sendFailure($a_info="", $a_keep=false)
Send Failure Message to Screen.