ILIAS  release_5-4 Revision v5.4.26-12-gabc799a52e6
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
const IL_CAL_UNIX
Class for single dates.
static sendFailure($a_info="", $a_keep=false)
Send Failure Message to Screen.
sendRequest($a_url, array $a_param=array(), $a_is_post=false)