diff --git a/Admin/Routes/Web/Api.php b/Admin/Routes/Web/Api.php index a3af8db..2ca54e6 100644 --- a/Admin/Routes/Web/Api.php +++ b/Admin/Routes/Web/Api.php @@ -3,15 +3,15 @@ use phpOMS\Router\RouteVerb; use phpOMS\Account\PermissionType; use Modules\Media\Models\PermissionState; -use Modules\Media\Controller; +use Modules\Media\Controller\ApiController; return [ '^.*/api/media/collection.*$' => [ [ - 'dest' => '\Modules\Media\Controller:apiCollectionCreate', + 'dest' => '\Modules\Media\Controller\ApiController:apiCollectionCreate', 'verb' => RouteVerb::SET, 'permission' => [ - 'module' => Controller::MODULE_NAME, + 'module' => ApiController::MODULE_NAME, 'type' => PermissionType::CREATE, 'state' => PermissionState::COLLECTION, ], @@ -19,10 +19,10 @@ return [ ], '^.*/api/media$' => [ [ - 'dest' => '\Modules\Media\Controller:apiMediaUpload', + 'dest' => '\Modules\Media\Controller\ApiController:apiMediaUpload', 'verb' => RouteVerb::SET, 'permission' => [ - 'module' => Controller::MODULE_NAME, + 'module' => ApiController::MODULE_NAME, 'type' => PermissionType::CREATE, 'state' => PermissionState::MEDIA, ], @@ -30,10 +30,10 @@ return [ ], '^.*/api/media/create.*$' => [ [ - 'dest' => '\Modules\Media\Controller:apiMediaCreate', + 'dest' => '\Modules\Media\Controller\ApiController:apiMediaCreate', 'verb' => RouteVerb::SET, 'permission' => [ - 'module' => Controller::MODULE_NAME, + 'module' => ApiController::MODULE_NAME, 'type' => PermissionType::CREATE, 'state' => PermissionState::MEDIA, ], diff --git a/Admin/Routes/Web/Backend.php b/Admin/Routes/Web/Backend.php index 10355bb..2b9c3c1 100644 --- a/Admin/Routes/Web/Backend.php +++ b/Admin/Routes/Web/Backend.php @@ -3,15 +3,15 @@ use phpOMS\Router\RouteVerb; use phpOMS\Account\PermissionType; use Modules\Media\Models\PermissionState; -use Modules\Media\Controller; +use Modules\Media\Controller\BackendController; return [ '^.*/backend/media/list.*$' => [ [ - 'dest' => '\Modules\Media\Controller:viewMediaList', + 'dest' => '\Modules\Media\Controller\BackendController:viewMediaList', 'verb' => RouteVerb::GET, 'permission' => [ - 'module' => Controller::MODULE_NAME, + 'module' => BackendController::MODULE_NAME, 'type' => PermissionType::READ, 'state' => PermissionState::MEDIA, ], @@ -19,19 +19,19 @@ return [ ], '^.*/backend/media/create.*$' => [ [ - 'dest' => '\Modules\Media\Controller:setUpFileUploader', + 'dest' => '\Modules\Media\Controller\BackendController:setUpFileUploader', 'verb' => RouteVerb::GET, 'permission' => [ - 'module' => Controller::MODULE_NAME, + 'module' => BackendController::MODULE_NAME, 'type' => PermissionType::CREATE, 'state' => PermissionState::MEDIA, ], ], [ - 'dest' => '\Modules\Media\Controller:viewMediaCreate', + 'dest' => '\Modules\Media\Controller\BackendController:viewMediaCreate', 'verb' => RouteVerb::GET, 'permission' => [ - 'module' => Controller::MODULE_NAME, + 'module' => BackendController::MODULE_NAME, 'type' => PermissionType::CREATE, 'state' => PermissionState::MEDIA, ], @@ -39,10 +39,10 @@ return [ ], '^.*/backend/media/single.*$' => [ [ - 'dest' => '\Modules\Media\Controller:viewMediaSingle', + 'dest' => '\Modules\Media\Controller\BackendController:viewMediaSingle', 'verb' => RouteVerb::GET, 'permission' => [ - 'module' => Controller::MODULE_NAME, + 'module' => BackendController::MODULE_NAME, 'type' => PermissionType::READ, 'state' => PermissionState::MEDIA, ], diff --git a/Controller/ApiController.php b/Controller/ApiController.php new file mode 100644 index 0000000..71cc85e --- /dev/null +++ b/Controller/ApiController.php @@ -0,0 +1,172 @@ +uploadFiles( + $request->getFiles(), + $request->getHeader()->getAccount(), + (string) ($request->getData('path') ?? __DIR__ . '/../../Modules/Media/Files') + ); + + $ids = []; + foreach ($uploads as $file) { + $ids[] = $file->getId(); + } + + $response->getHeader()->set('Content-Type', MimeType::M_JSON . '; charset=utf-8', true); + $response->set($request->getUri()->__toString(), [['uploads' => $ids, 'type' => 'UI']]); + } + + /** + * Shows api content. + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiMediaCreate(RequestAbstract $request, ResponseAbstract $response, $data = null) : void + { + // todo: change database entry for files if has write permission + } + + /** + * @param array $files Files + * @param int $account Uploader + * @param string $basePath Base path + * + * @return array + * + * @since 1.0.0 + */ + public function uploadFiles(array $files, int $account, string $basePath = 'Modules/Media/Files') : array + { + $mediaCreated = []; + + if (!empty($files)) { + $upload = new UploadFile(); + $upload->setOutputDir(self::createMediaPath($basePath)); + + $status = $upload->upload($files); + $mediaCreated = self::createDbEntries($status, $account); + } + + return $mediaCreated; + } + + public static function createMediaPath(string $basePath = 'Modules/Media/Files') : string + { + $rndPath = str_pad(dechex(rand(0, 65535)), 4, '0', STR_PAD_LEFT); + return $basePath . '/' . $rndPath[0] . $rndPath[1] . '/' . $rndPath[2] . $rndPath[3]; + } + + /** + * @param array $status Files + * @param int $account Uploader + * + * @return array + * + * @since 1.0.0 + */ + public static function createDbEntries(array $status, int $account) : array + { + $mediaCreated = []; + + foreach ($status as $uFile) { + if (!is_null($created = self::createDbEntry($uFile, $account))) { + $mediaCreated[] = $created; + } + } + + return $mediaCreated; + } + + public static function createDbEntry(array $status, int $account) : ?Media + { + $media = 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($account); + $media->setExtension($status['extension']); + + MediaMapper::create($media); + } + + return $media; + } + + private static function normalizeDbPath(string $path) : string + { + return \str_replace('\\', '/', + \str_replace(realpath(__DIR__ . '/../../'), '', + rtrim($path, '/') + ) + ); + } +} diff --git a/Controller.php b/Controller/BackendController.php similarity index 55% rename from Controller.php rename to Controller/BackendController.php index f87fa5d..0122eb3 100644 --- a/Controller.php +++ b/Controller/BackendController.php @@ -12,7 +12,7 @@ */ declare(strict_types=1); -namespace Modules\Media; +namespace Modules\Media\Controller; use Modules\Media\Models\Media; use Modules\Media\Models\MediaMapper; @@ -40,7 +40,7 @@ use phpOMS\Message\Http\RequestStatusCode; * @link http://website.orange-management.de * @since 1.0.0 */ -final class Controller extends ModuleAbstract implements WebInterface +class BackendController extends Controller { /** @@ -176,131 +176,4 @@ final class Controller extends ModuleAbstract implements WebInterface return $view; } - - /** - * Shows api content. - * - * @param RequestAbstract $request Request - * @param ResponseAbstract $response Response - * @param mixed $data Generic data - * - * @return void - * - * @api - * - * @since 1.0.0 - */ - public function apiMediaUpload(RequestAbstract $request, ResponseAbstract $response, $data = null) : void - { - $uploads = $this->uploadFiles( - $request->getFiles(), - $request->getHeader()->getAccount(), - (string) ($request->getData('path') ?? __DIR__ . '/../../Modules/Media/Files') - ); - - $ids = []; - foreach ($uploads as $file) { - $ids[] = $file->getId(); - } - - $response->getHeader()->set('Content-Type', MimeType::M_JSON . '; charset=utf-8', true); - $response->set($request->getUri()->__toString(), [['uploads' => $ids, 'type' => 'UI']]); - } - - /** - * Shows api content. - * - * @param RequestAbstract $request Request - * @param ResponseAbstract $response Response - * @param mixed $data Generic data - * - * @return void - * - * @api - * - * @since 1.0.0 - */ - public function apiMediaCreate(RequestAbstract $request, ResponseAbstract $response, $data = null) : void - { - // todo: change database entry for files if has write permission - } - - /** - * @param array $files Files - * @param int $account Uploader - * @param string $basePath Base path - * - * @return array - * - * @since 1.0.0 - */ - public function uploadFiles(array $files, int $account, string $basePath = 'Modules/Media/Files') : array - { - $mediaCreated = []; - - if (!empty($files)) { - $upload = new UploadFile(); - $upload->setOutputDir(self::createMediaPath($basePath)); - - $status = $upload->upload($files); - $mediaCreated = self::createDbEntries($status, $account); - } - - return $mediaCreated; - } - - public static function createMediaPath(string $basePath = 'Modules/Media/Files') : string - { - $rndPath = str_pad(dechex(rand(0, 65535)), 4, '0', STR_PAD_LEFT); - return $basePath . '/' . $rndPath[0] . $rndPath[1] . '/' . $rndPath[2] . $rndPath[3]; - } - - /** - * @param array $status Files - * @param int $account Uploader - * - * @return array - * - * @since 1.0.0 - */ - public static function createDbEntries(array $status, int $account) : array - { - $mediaCreated = []; - - foreach ($status as $uFile) { - if (!is_null($created = self::createDbEntry($uFile, $account))) { - $mediaCreated[] = $created; - } - } - - return $mediaCreated; - } - - public static function createDbEntry(array $status, int $account) : ?Media - { - $media = 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($account); - $media->setExtension($status['extension']); - - MediaMapper::create($media); - } - - return $media; - } - - private static function normalizeDbPath(string $path) : string - { - return \str_replace('\\', '/', - \str_replace(realpath(__DIR__ . '/../../'), '', - rtrim($path, '/') - ) - ); - } } diff --git a/Controller/Controller.php b/Controller/Controller.php new file mode 100644 index 0000000..d8398d0 --- /dev/null +++ b/Controller/Controller.php @@ -0,0 +1,94 @@ +