<?php
namespace Cms\CoreBundle\EventSubscriber\OneRoster;
use Cms\CoreBundle\Entity\OneRosterJob;
use Cms\CoreBundle\Events\OneRosterEvents;
use Platform\QueueBundle\Event\AsyncEvent;
/**
* Class OneRosterInitSubscriber
* @package Cms\CoreBundle\EventSubscriber\OneRoster
*/
final class OneRosterInitSubscriber extends AbstractOneRosterSubscriber
{
/**
* {@inheritDoc}
*/
public static function getSubscribedEvents(): array
{
return [
OneRosterEvents::EVENT__INIT => [
['discardableDisable', self::PRIORITY__FIRST],
['phaseStart', self::PRIORITY__FIRST],
['refreshApiToken', 0],
['phaseFin', self::PRIORITY__LAST],
['phaseTrigger', self::PRIORITY__LAST],
['discardableEnable', self::PRIORITY__LAST],
],
];
}
/**
* {@inheritDoc}
*/
public function phase(): int
{
return OneRosterJob::PHASES__INIT;
}
/**
* {@inheritDoc}
*/
public function next(): ?int
{
return OneRosterJob::PHASES__STASH;
}
/**
* @param AsyncEvent $event
* @return void
*/
public function refreshApiToken(AsyncEvent $event)
{
// get the sync
$sync = $this->loadJob($event)->getSync();
$event->getOutput()->writeln(sprintf(
'DBG: OR PRE TOKEN | TENANT: %s | SYNC: %s | VENDOR: %s',
$sync->getTenant()->getId(),
$sync->getId(),
$sync->getVendor()
));
// obtain the api token
$span = microtime(true);
try {
$token = $this->oneroster->api($sync)->token(true);
} catch (\Exception $e) {
$event->getOutput()->writeln(sprintf(
'DBG: OR TOKEN FAIL: %s',
$e->getMessage(),
));
$this->em->save(
$sync->setApiToken([]),
);
return;
}
$span = intval(ceil((microtime(true) - $span) * 1000));
$event->getOutput()->writeln(sprintf(
'DBG: OR POST TOKEN | %s ms',
$span
));
// force updating of the api token
$this->em->save(
$sync->setApiToken(
$token
)
);
$event->getOutput()->writeln('DBG: OR SAVE TOKEN');
}
}