<?php declare(strict_types=1); namespace Xentral\Modules\Datanorm; use Config; use Xentral\Components\Filesystem\FilesystemFactory; use Xentral\Components\Filesystem\FilesystemInterface; use Xentral\Core\LegacyConfig\ConfigLoader; use Xentral\Modules\Datanorm\Handler\DatanormReaderHandlerInterface; use Xentral\Modules\Datanorm\Service\DatanormIntermediateService; use Xentral\Modules\Datanorm\Service\DatanormReader; final class DatanormReaderFactory { /** @var DatanormIntermediateService $intermediateService */ private $intermediateService; /** @var DatanormReaderHandlerInterface[] $readerHandlers */ private $readerHandlers; /** @var FilesystemFactory $fileSystemFactory */ private $fileSystemFactory; /** * @param DatanormIntermediateService $intermediateService * @param array $readerHandlers * @param FilesystemFactory $fileSystemFactory */ public function __construct( DatanormIntermediateService $intermediateService, array $readerHandlers, FilesystemFactory $fileSystemFactory ) { $this->intermediateService = $intermediateService; $this->readerHandlers = $readerHandlers; $this->fileSystemFactory = $fileSystemFactory; } /** * @param string $uploadDir * @param string $baseDir * * @return DatanormReader */ public function createDatanormReader(string $uploadDir, string $baseDir = ''): DatanormReader { return new DatanormReader( $this->getFileSystem($baseDir), $this->intermediateService, $this->readerHandlers, $uploadDir ); } /** * @param string $baseDir * * @return FilesystemInterface */ private function getFileSystem(string $baseDir = ''): FilesystemInterface { $config = ConfigLoader::load(); if (empty($baseDir)) { $baseDir = $config->WFuserdata !== null ? $config->WFuserdata : dirname(dirname(dirname(__DIR__))) . '/userdata'; } $fileSystemConfig = [ 'permissions' => [ 'file' => [ 'public' => 0664, 'private' => 0664, ], 'dir' => [ 'public' => 0775, 'private' => 0775, ], ], ]; return $this->fileSystemFactory->createLocal($baseDir, $fileSystemConfig); } }