. * * 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\Application; use Espo\Core\Utils\Log; use Espo\Core\ApplicationUser; use Espo\Core\InjectableFactory; use Espo\Core\Application\Exceptions\RunnerException; use Espo\Core\Application\Runner\Params; use ReflectionClass; /** * Runs a runner. */ class RunnerRunner { public function __construct( private Log $log, private ApplicationUser $applicationUser, private InjectableFactory $injectableFactory ) {} /** * @param class-string $className * @throws RunnerException */ public function run(string $className, ?Params $params = null): void { if (!class_exists($className)) { $this->log->error("Application runner '$className' does not exist."); throw new RunnerException(); } $class = new ReflectionClass($className); if ( $class->getStaticPropertyValue('cli', false) && !str_starts_with(php_sapi_name() ?: '', 'cli') ) { throw new RunnerException("Can be run only via CLI."); } if ($class->getStaticPropertyValue('setupSystemUser', false)) { $this->applicationUser->setupSystemUser(); } $runner = $this->injectableFactory->create($className); if ($runner instanceof RunnerParameterized) { $runner->run($params ?? Params::create()); return; } $runner->run(); } }