priorist/edm-sdk

A PHP library to interact with the RESTful API of the Education Manager (EDM).

1.0.0 2024-04-10 21:04 UTC

README

Build Status License GitHub release (latest SemVer including pre-releases) PHP from Travis config

A PHP library to interact with the RESTful API of the Education Manager (EDM).

Install with Composer

docker compose run --rm composer install

Usage

Init client

use Priorist\EDM\Client\Client;

$client = new Client('https://edm.example.com', 'CLIENT_ID', 'CLIENT_SECRET');

// $client now works with global permission, e.g. to read events.

$events = $client->event->findUpcoming();

// To switch to permissions of a given user, e.g. to read participant data, call logIn
// with the user’s login name and password:

$accessToken = $client->logIn('USER_NAME', 'PASSWORD');

$client->event->findParticipating();

// You may store $accessToken in your session to re-use it later:

$client->setAccessToken($accessToken);

Events

Single event for a given ID

$event = $client->event->findById(4711);

if ($event !== null)
    echo $event['event_base_name'] . "\n";
}

List of upcoming events

$upcomingEvents = $client->event->findUpcoming();

foreach ($upcomingEvents as $event) {
    echo $event['event_base_name'] . "\n";
}

Categories

Single category for a given ID

$location = $client->category->findById(4711);

if ($category !== null)
    echo $category['name'] . "\n";
}

List of all categories

$categories = $client->category->findAll();

foreach ($categories as $category) {
    echo $category['name'] . "\n";
}

Event locations

Single location for a given ID

$location = $client->eventLocation->findById(4711);

if ($location !== null)
    echo $location['name'] . "\n";
}

List of all locations

$locations = $client->eventLocation->findAll();

foreach ($locations as $location) {
    echo $location['name'] . "\n";
}

Lecturers

Single lecturer for a given ID

$lecturer = $client->lecturer->findById(4711);

if ($lecturer !== null)
    echo $lecturer['name'] . "\n";
}

List of all lecturers

$lecturers = $client->lecturer->findAll();

foreach ($lecturers as $lecturer) {
    echo $lecturer['name'] . "\n";
}

Tags

Single tag for a given ID

$lecturer = $client->tag->findById(4711);

if ($tag !== null)
    echo $tag['name'] . "\n";
}

List of all tags

$tags = $client->tag->findAll();

foreach ($tags as $tag) {
    echo $tag['name'] . "\n";
}

Enrollments

Enroll for a given event

use Priorist\EDM\Client\Rest\ClientException;

$enrollment = [
    'first_name'    => 'John',
    'last_name'     => 'Doe',
    'event'         => 4711,
    'price'         => 4712,
];

try {
    $enrollment = $client->enrollment->create($enrollment);
} catch (ClientException $e) {
    $errors = $e->getDetails(); // Contains errors for missing/invalid fields/values
}

echo $enrollment['id']; // Holds the resulting ID on success.

Generic requests

If you do not find a suitable method of a given repository, you may use the more generic methods fetchCollection($params = []) and fetchSingle(int $id, array $params = []).

E.g. $client->event->findUpcoming() equals

$client->event->fetchCollection([
    'ordering' => 'first_day',
    'first_day__gte' => date('Y-m-d'),
]);

You can even call any endpoint you like, even the ones without an actual repository:

$client->getRestClient()->fetchCollection('events', [
    'ordering' => 'first_day',
    'first_day__gte' => date('Y-m-d'),
]);

Class docs

Current PHPDocs can be viewed here: https://priorist.github.io/edm-sdk-php/

Run tests

Enable compose.override.yml and run

docker compose run --rm test

XDebug support for Docker for Mac included.

To create and view a detailed, browsable test coverage report run

docker compose run --rm test tests --coverage-html test_results/coverage && open test_results/coverage/index.html

Generate docs

docker compose run --rm docs && open docs/index.html

Build *.phar archive

To use the SDK in legacy applications, you may build and include a *.phar package in your application.

Download phar-composer first:

curl --location --output phar-composer.phar https://clue.engineering/phar-composer-latest.phar

Build the archive:

docker compose run --rm phar

To use the client, include the autoload of the archive:

include 'edm-sdk.phar/vendor/autoload.php';