. * * The interactive user interfaces in modified source and object code versions * of this program must display Appropriate Legal Notices, as required under * Section 5 of the GNU Affero General Public License version 3. * * In accordance with Section 7(b) of the GNU Affero General Public License version 3, * these Appropriate Legal Notices must retain the display of the "EspoCRM" word. ************************************************************************/ namespace Espo\Core\Job; use Espo\Core\InjectableFactory; use Espo\Core\Utils\ClassFinder; use RuntimeException; class JobFactory { public function __construct( private ClassFinder $classFinder, private InjectableFactory $injectableFactory, private MetadataProvider $metadataProvider ) {} /** * Create a job by a scheduled job name. * * @return Job|JobDataLess */ public function create(string $name): object { $className = $this->getClassName($name); if (!$className) { throw new RuntimeException("Job '$name' not found."); } return $this->createByClassName($className); } /** * Create a job by a class name. * * @param class-string $className * @return Job|JobDataLess */ public function createByClassName(string $className): object { return $this->injectableFactory->create($className); } /** * @return ?class-string */ private function getClassName(string $name): ?string { /** @var ?class-string $className */ $className = $this->metadataProvider->getJobClassName($name); if ($className) { return $className; } /** @var ?class-string */ return $this->classFinder->find('Jobs', ucfirst($name)); } }