ILIAS  release_8 Revision v8.19
All Data Structures Namespaces Files Functions Variables Modules Pages
class.ilCmiXapiAbstractRequest.php
Go to the documentation of this file.
1 <?php
2 
3 declare(strict_types=1);
4 
31 {
32  private string $basicAuth;
33  public static bool $plugin = false;
34 
38  public function __construct(string $basicAuth)
39  {
40  $this->basicAuth = $basicAuth;
41  }
42 
43  protected function sendRequest(string $url): string
44  {
45  $client = new GuzzleHttp\Client();
46  $req_opts = array(
47  GuzzleHttp\RequestOptions::VERIFY => true,
48  GuzzleHttp\RequestOptions::CONNECT_TIMEOUT => 10,
49  GuzzleHttp\RequestOptions::HTTP_ERRORS => false
50  );
51  ilObjCmiXapi::log()->debug($url);
52  $request = new GuzzleHttp\Psr7\Request('GET', $url, [
53  'Authorization' => $this->basicAuth,
54  'X-Experience-API-Version' => '1.0.3'
55  ]);
56  try {
57  $body = '';
58  $promises = array();
59  $promises['default'] = $client->sendAsync($request, $req_opts);
60  $responses = GuzzleHttp\Promise\Utils::settle($promises)->wait();
61  self::checkResponse($responses['default'], $body);
62  return $body;
63  } catch (Exception $e) {
64  ilObjCmiXapi::log()->error($e->getMessage());
65  throw new Exception("LRS Connection Problems", $e->getCode(), $e);
66  }
67  }
68 
69  //todo body?
70  public static function checkResponse(array $response, &$body, array $allowedStatus = [200, 204]): bool
71  {
72  if ($response['state'] == 'fulfilled') {
73  $status = $response['value']->getStatusCode();
74  if (in_array($status, $allowedStatus)) {
75  $body = $response['value']->getBody()->getContents();
76  return true;
77  } else {
78  ilObjCmiXapi::log()->error("LRS error: " . $response['value']->getBody()->getContents());
79  return false;
80  }
81  } else {
82  try {
83  ilObjCmiXapi::log()->error("Connection error: " . $response['reason']->getMessage());
84  } catch (Exception $e) {
85  ilObjCmiXapi::log()->error('error:' . $e->getMessage());
86  }
87  return false;
88  }
89  }
90 
91  //todo
92  public static function buildQuery(array $params, $encoding = PHP_QUERY_RFC3986): string
93  {
94  if ($params === []) {
95  return '';
96  }
97 
98  if ($encoding === false) {
99  $encoder = fn ($str) => $str;
100  } elseif ($encoding === PHP_QUERY_RFC3986) {
101  $encoder = 'rawurlencode';
102  } elseif ($encoding === PHP_QUERY_RFC1738) {
103  $encoder = 'urlencode';
104  } else {
105  throw new \InvalidArgumentException('Invalid type');
106  }
107 
108  $qs = '';
109  foreach ($params as $k => $v) {
110  $k = $encoder($k);
111  if (!is_array($v)) {
112  $qs .= $k;
113  if ($v !== null) {
114  $qs .= '=' . $encoder($v);
115  }
116  $qs .= '&';
117  } else {
118  foreach ($v as $vv) {
119  $qs .= $k;
120  if ($vv !== null) {
121  $qs .= '=' . $encoder($vv);
122  }
123  $qs .= '&';
124  }
125  }
126  }
127  return $qs ? (string) substr($qs, 0, -1) : '';
128  }
129 }
if(! $DIC->user() ->getId()||!ilLTIConsumerAccess::hasCustomProviderCreationAccess()) $params
Definition: ltiregstart.php:33
$client
__construct(string $basicAuth)
ilCmiXapiAbstractRequest constructor.
$url
static buildQuery(array $params, $encoding=PHP_QUERY_RFC3986)
$response
static checkResponse(array $response, &$body, array $allowedStatus=[200, 204])