This repository has been archived on 2025-02-26. You can view files and clone it, but cannot push or open issues or pull requests.
szurubooru/src/Api/Api.php
2014-05-07 17:58:23 +02:00

55 lines
1.1 KiB
PHP

<?php
final class Api
{
public static function run($job, $jobArgs)
{
$user = Auth::getCurrentUser();
return \Chibi\Database::transaction(function() use ($job, $jobArgs)
{
$job->setArguments($jobArgs);
if (!$job->isSatisfied())
throw new ApiJobUnsatisfiedException($job);
$job->prepare();
self::checkPrivileges($job);
return $job->execute();
});
}
public static function checkPrivileges(AbstractJob $job)
{
if ($job->requiresAuthentication())
Access::assertAuthentication();
if ($job->requiresConfirmedEmail())
Access::assertEmailConfirmation();
$privileges = $job->requiresPrivilege();
if ($privileges !== false)
{
if (!is_array($privileges))
$privileges = [$privileges];
foreach ($privileges as $privilege)
Access::assert($privilege);
}
}
public static function runMultiple($jobs)
{
$statuses = [];
\Chibi\Database::transaction(function() use ($jobs, &$statuses)
{
foreach ($jobs as $jobItem)
{
list ($job, $jobArgs) = $jobItem;
$statuses []= self::run($job, $jobArgs);
}
});
return $statuses;
}
}