124 lines
3.9 KiB
Markdown
124 lines
3.9 KiB
Markdown
The Statements API
|
|
==================
|
|
|
|
Obtaining the Agent Profile API Client
|
|
--------------------------------------
|
|
|
|
After you have [built the global xAPI client](client.md), you can obtain a statements
|
|
API client by calling its ``getStatementsApiClient()`` method:
|
|
|
|
```php
|
|
$statementsApiClient = $xApiClient->getStatementsApiClient();
|
|
```
|
|
|
|
Storing Statements
|
|
------------------
|
|
|
|
The ``storeStatement()`` and ``storeStatements()`` methods can be used to store
|
|
a single Statement or a collection of Statements. Both method return the stored
|
|
Statement(s) each having a unique id created by the remote LRS.
|
|
|
|
```php
|
|
|
|
use Xabbuh\XApi\Model\Statement;
|
|
|
|
$statement = new Statement();
|
|
// ...
|
|
|
|
// store a single Statement
|
|
$statementsApiClient->storeStatement($statement);
|
|
|
|
$statement2 = new Statement();
|
|
// ...
|
|
|
|
// store a collection of clients
|
|
$statementsApiClient->storeStatements(array($statement, $statement2));
|
|
```
|
|
|
|
Retrieving Statements
|
|
---------------------
|
|
|
|
Use the ``getStatement()`` method to obtain a certain Statement given its id:
|
|
|
|
```php
|
|
// ...
|
|
|
|
// get a single Statement
|
|
$statement = $statementsApiClient->getStatement($statementId);
|
|
```
|
|
|
|
``getStatements()`` returns a collection of Statements encapsulated in a
|
|
StatementResult instance:
|
|
|
|
```php
|
|
// ...
|
|
|
|
// returns all accessible Statements
|
|
$result = $statementsApiClient->getStatements();
|
|
```
|
|
|
|
You can even filter Statements using a StatementFilter:
|
|
|
|
```php
|
|
use Xabbuh\XApi\Model\StatementsFilter;
|
|
|
|
// ...
|
|
$filter = new StatementsFilter();
|
|
$filter
|
|
->byActor($actor) // filter by Actor
|
|
->byVerb($verb) // filter by Verb
|
|
->byActivity($activity) // filter by Activity
|
|
->byRegistration(...) // filter for Statements matching the given
|
|
// registration id
|
|
->enableRelatedActivityFilter() // apply the Activity filter to Sub-Statements
|
|
->disableRelatedActivityFilter() // apply the Activity filter to Sub-Statements
|
|
->enableRelatedAgentFilter() // apply the Agent filter to Sub-Statements
|
|
->disableRelatedAgentFilter() // apply the Agent filter to Sub-Statements
|
|
->since(new \DateTime(...)) // filter for Statements stored since
|
|
// the given timestamp
|
|
->until(new \DateTime(...)) // filter for Statements stored before
|
|
// the given timestamp
|
|
->limit(5) // limit the number of Statements returned
|
|
->format(...) // the result format (one of "ids", "exact",
|
|
// "canonical")
|
|
->includeAttachments() // return Statements with attachments included
|
|
->excludeAttachments() // return Statements without attachments
|
|
->ascending() // ascending order of stored time
|
|
->descending(); // ascending order of stored time
|
|
|
|
$result = $statementsApiClient->getStatements($filter->getFilter());
|
|
```
|
|
|
|
If you limited the number of returned results, you can get the next Statements
|
|
by calling the ``getNextStatements()`` method passing the ``StatementResult``
|
|
of the previous request to it:
|
|
|
|
```php
|
|
// ....
|
|
$filter = new StatementsFilter();
|
|
$filter->limit(3);
|
|
$firstStatementResult = $statementsApiClient->getStatements($filter);
|
|
|
|
// get the next Statements
|
|
$nextStatementResult = $statementsApiClient->getNextStatements($firstStatementResult);
|
|
```
|
|
|
|
The Experience API doesn't allow to delete Statements. You have to mark them as
|
|
voided instead:
|
|
|
|
```php
|
|
// ...
|
|
$statement = ...; // The Statement being voided
|
|
$actor = ...; // The Actor voiding the Statement
|
|
$statementsApiClient->voidStatement($statement, $actor);
|
|
```
|
|
|
|
Voided Statements won't be returned when requesting either a single Statement or
|
|
a collection of Statements. Though, you can retrieve a single voided Statement
|
|
using the ``getVoidedStatement()`` method:
|
|
|
|
```php
|
|
// ...
|
|
$voidedStatement = $statementsApiClient->getVoidedStatement($statementId);
|
|
```
|