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; } }