cleanup, added media type parameter

This commit is contained in:
Dennis Eichhorn 2020-11-10 22:12:45 +01:00
parent 1e0cf2fabc
commit a1abd3a5ae
2 changed files with 59 additions and 41 deletions

View File

@ -91,6 +91,7 @@ final class ApiController extends Controller
$request->getHeader()->getAccount(), $request->getHeader()->getAccount(),
__DIR__ . '/../../../Modules/Media/Files' . \urldecode((string) ($request->getData('path') ?? '')), __DIR__ . '/../../../Modules/Media/Files' . \urldecode((string) ($request->getData('path') ?? '')),
\urldecode((string) ($request->getData('virtualpath') ?? '')), \urldecode((string) ($request->getData('virtualpath') ?? '')),
(string) ($request->getData('type') ?? ''),
(string) ($request->getData('password') ?? ''), (string) ($request->getData('password') ?? ''),
(string) ($request->getData('encrypt') ?? ''), (string) ($request->getData('encrypt') ?? ''),
(int) ($request->getData('pathsettings') ?? PathSettings::RANDOM_PATH) (int) ($request->getData('pathsettings') ?? PathSettings::RANDOM_PATH)
@ -112,6 +113,7 @@ final class ApiController extends Controller
* @param int $account Uploader * @param int $account Uploader
* @param string $basePath Base path. The path which is used for the upload. * @param string $basePath Base path. The path which is used for the upload.
* @param string $virtualPath Virtual path The path which is used to visually structure the files, like directories. * @param string $virtualPath Virtual path The path which is used to visually structure the files, like directories.
* @param string $type Media type (internal/custom media categorization)
* The file storage on the system can be different * The file storage on the system can be different
* @param string $password File password. The password to protect the file (only database) * @param string $password File password. The password to protect the file (only database)
* @param string $encryptionKey Encryption key. Used to encrypt the file on the local file storage. * @param string $encryptionKey Encryption key. Used to encrypt the file on the local file storage.
@ -129,33 +131,33 @@ final class ApiController extends Controller
int $account, int $account,
string $basePath = '/Modules/Media/Files', string $basePath = '/Modules/Media/Files',
string $virtualPath = '', string $virtualPath = '',
string $type = '',
string $password = '', string $password = '',
string $encryptionKey = '', string $encryptionKey = '',
int $pathSettings = PathSettings::RANDOM_PATH int $pathSettings = PathSettings::RANDOM_PATH
) : array { ) : array {
$mediaCreated = []; if (empty($files)) {
return [];
if (!empty($files)) {
$outputDir = '';
$absolute = false;
if ($pathSettings === PathSettings::RANDOM_PATH) {
$outputDir = self::createMediaPath($basePath);
} elseif ($pathSettings === PathSettings::FILE_PATH) {
$outputDir = \rtrim($basePath, '/\\');
$absolute = true;
} else {
return $mediaCreated;
}
$upload = new UploadFile();
$upload->setOutputDir($outputDir);
$status = $upload->upload($files, $name, $absolute, $encryptionKey);
$mediaCreated = $this->createDbEntries($status, $account, $virtualPath);
} }
return $mediaCreated; $outputDir = '';
$absolute = false;
if ($pathSettings === PathSettings::RANDOM_PATH) {
$outputDir = self::createMediaPath($basePath);
} elseif ($pathSettings === PathSettings::FILE_PATH) {
$outputDir = \rtrim($basePath, '/\\');
$absolute = true;
} else {
return [];
}
$upload = new UploadFile();
$upload->setOutputDir($outputDir);
$status = $upload->upload($files, $name, $absolute, $encryptionKey);
return $this->createDbEntries($status, $account, $virtualPath, $type);
} }
/** /**
@ -177,18 +179,24 @@ final class ApiController extends Controller
* @param array $status Files * @param array $status Files
* @param int $account Uploader * @param int $account Uploader
* @param string $virtualPath Virtual path * @param string $virtualPath Virtual path
* @param string $type Media type (internal categorization)
* @param string $ip Ip * @param string $ip Ip
* *
* @return Media[] * @return Media[]
* *
* @since 1.0.0 * @since 1.0.0
*/ */
public function createDbEntries(array $status, int $account, string $virtualPath = '', string $ip = '127.0.0.1') : array public function createDbEntries(
{ array $status,
int $account,
string $virtualPath = '',
string $type = '',
string $ip = '127.0.0.1'
) : array {
$mediaCreated = []; $mediaCreated = [];
foreach ($status as $uFile) { foreach ($status as $uFile) {
if (($created = self::createDbEntry($uFile, $account, $virtualPath)) !== null) { if (($created = self::createDbEntry($uFile, $account, $virtualPath, $type)) !== null) {
$mediaCreated[] = $created; $mediaCreated[] = $created;
$this->app->moduleManager->get('Admin')->createAccountModelPermission( $this->app->moduleManager->get('Admin')->createAccountModelPermission(
@ -217,28 +225,30 @@ final class ApiController extends Controller
* @param array $status Files * @param array $status Files
* @param int $account Uploader * @param int $account Uploader
* @param string $virtualPath Virtual path (not on the hard-drive) * @param string $virtualPath Virtual path (not on the hard-drive)
* @param string $type Media type (internal categorization)
* *
* @return null|Media * @return null|Media
* *
* @since 1.0.0 * @since 1.0.0
*/ */
public static function createDbEntry(array $status, int $account, string $virtualPath = '') : ?Media public static function createDbEntry(array $status, int $account, string $virtualPath = '', string $type = '') : ?Media
{ {
$media = null; if ($status['status'] !== UploadStatus::OK) {
return null;
if ($status['status'] === UploadStatus::OK) {
$media = new Media();
$media->setPath(self::normalizeDbPath($status['path']) . '/' . $status['filename']);
$media->setName($status['name']);
$media->setSize($status['size']);
$media->setCreatedBy(new NullAccount($account));
$media->setExtension($status['extension']);
$media->setVirtualPath($virtualPath);
MediaMapper::create($media);
} }
$media = new Media();
$media->setPath(self::normalizeDbPath($status['path']) . '/' . $status['filename']);
$media->setName($status['name']);
$media->setSize($status['size']);
$media->setCreatedBy(new NullAccount($account));
$media->setExtension($status['extension']);
$media->setVirtualPath($virtualPath);
$media->setType($type)
MediaMapper::create($media);
return $media; return $media;
} }
@ -484,7 +494,15 @@ final class ApiController extends Controller
if (empty($request->getData('path'))) { if (empty($request->getData('path'))) {
$outputDir = self::createMediaPath(__DIR__ . '/../../../Modules/Media/Files'); $outputDir = self::createMediaPath(__DIR__ . '/../../../Modules/Media/Files');
} else { } else {
$outputDir = __DIR__ . '/../../../Modules/Media/Files/' . \ltrim($path, '\\/'); if (\stripos(
FileUtils::absolute(__DIR__ . '/../../../Modules/Media/Files/' . \ltrim($path, '\\/')),
FileUtils::absolute(__DIR__ . '/../../../Modules/Media/Files/')
) !== 0
) {
$outputDir = self::createMediaPath(__DIR__ . '/../../../Modules/Media/Files');
} else {
$outputDir = __DIR__ . '/../../../Modules/Media/Files/' . \ltrim($path, '\\/');
}
} }
if (!\is_dir($outputDir)) { if (!\is_dir($outputDir)) {
@ -509,7 +527,7 @@ final class ApiController extends Controller
], ],
]; ];
$created = $this->createDbEntries($status, $request->getHeader()->getAccount(), $virtualPath); $created = $this->createDbEntries($status, $request->getHeader()->getAccount(), $virtualPath, $request->getData('type') ?? '');
$ids = []; $ids = [];
foreach ($created as $file) { foreach ($created as $file) {

View File

@ -172,7 +172,7 @@ trait ApiControllerMediaTrait
{ {
self::assertEquals( self::assertEquals(
[], [],
$this->module->uploadFiles('test', ['test'], 1, '/test', '', '', '', 99) $this->module->uploadFiles('test', ['test'], 1, '/test', '', '', '', '', 99)
); );
} }