webworld888/app/Http/Controllers/MediaLibrary/MediaLibraryController.php
2021-10-26 19:14:12 +09:00

248 lines
7.1 KiB
PHP

<?php
/**
* MediaLibraryController.php
*
* PHP version 7
*
* @category MediaLibrary
* @package Xpressengine\MediaLibrary
* @author XE Developers <developers@xpressengine.com>
* @copyright 2020 Copyright XEHub Corp. <https://www.xehub.io>
* @license http://www.gnu.org/licenses/lgpl-3.0-standalone.html LGPL
* @link https://xpressengine.io
*/
namespace App\Http\Controllers\MediaLibrary;
use App\Http\Controllers\Controller;
use Symfony\Component\HttpKernel\Exception\HttpException;
use Xpressengine\Http\Request;
use XeDB;
use XePresenter;
use Xpressengine\MediaLibrary\Exceptions\NotFoundFileException;
use Xpressengine\MediaLibrary\Exceptions\UploadFileNotExistException;
use Xpressengine\MediaLibrary\MediaLibraryHandler;
use Xpressengine\Storage\Exceptions\InvalidFileException;
/**
* Class MediaLibraryController
*
* @category MediaLibrary
* @package Xpressengine\MediaLibrary
* @author XE Developers <developers@xpressengine.com>
* @copyright 2020 Copyright XEHub Corp. <https://www.xehub.io>
* @license http://www.gnu.org/licenses/lgpl-3.0-standalone.html LGPL
* @link https://xpressengine.io
*/
class MediaLibraryController extends Controller
{
/** @var MediaLibraryHandler $handler */
protected $handler;
/**
* MediaLibraryController constructor.
*/
public function __construct()
{
$this->handler = app('xe.media_library.handler');
}
/**
* @param Request $request request
*
* @return mixed|\Xpressengine\Presenter\Presentable
*/
public function index(Request $request)
{
$returnValue = [];
$targetFolderItem = $this->handler->getFolderItem($request->get('folder_id', ''));
$returnValue['path'] = $this->handler->getFolderPath($targetFolderItem);
$returnValue['folder'] = $this->handler->getFolderList($targetFolderItem, $request);
$returnValue['file'] = $this->handler->getMediaLibraryFileList($targetFolderItem, $request);
return XePresenter::makeApi($returnValue);
}
/**
* @param Request $request request
*
* @return mixed|\Xpressengine\Presenter\Presentable
* @throws \Exception
*/
public function drop(Request $request)
{
$this->handler->dropItems($request);
return XePresenter::makeApi([]);
}
/**
* @param Request $request request
* @param string $folderId target folder id
*
* @return mixed|\Xpressengine\Presenter\Presentable
*/
public function getFolder(Request $request, $folderId)
{
$folderItem = $this->handler->getFolderItem($folderId);
$folderItem->setAttribute('file_count', $this->handler->getChildHasFileCount($folderItem));
return XePresenter::makeApi([$folderItem]);
}
/**
* @param Request $request request
*
* @return mixed|\Xpressengine\Presenter\Presentable
* @throws \Exception
*/
public function createFolder(Request $request)
{
$folderItem = $this->handler->createFolder($request);
return XePresenter::makeApi([$folderItem]);
}
/**
* @param Request $request request
* @param string $folderId target folder id
*
* @return mixed|\Xpressengine\Presenter\Presentable
* @throws \Exception
*/
public function moveFolder(Request $request, $folderId)
{
$newParentFolderItem = $this->handler->moveFolder($request, $folderId);
return XePresenter::makeApi([$newParentFolderItem]);
}
/**
* @param Request $request request
* @param string $folderId target folder id
*
* @return mixed|\Xpressengine\Presenter\Presentable
*/
public function updateFolder(Request $request, $folderId)
{
$this->handler->updateFolder($request, $folderId);
return \XePresenter::makeApi([
'message' => xe_trans('xe::folderRenameMessage')
]);
}
/**
* @param Request $request request
* @param string $mediaLibraryFileId target file id
*
* @return mixed|\Xpressengine\Presenter\Presentable
*/
public function getFile(Request $request, $mediaLibraryFileId)
{
$fileItem = $this->handler->getMediaLibraryFileItem($mediaLibraryFileId);
return XePresenter::makeApi([$fileItem]);
}
/**
* @param Request $request request
* @param string $mediaLibraryFileId target file id
*
* @return mixed|\Xpressengine\Presenter\Presentable
*/
public function updateFile(Request $request, $mediaLibraryFileId)
{
$this->handler->updateFile($request, $mediaLibraryFileId);
return XePresenter::makeApi([
'message' => xe_trans('xe::fileInformationUpdateMessage')
]);
}
/**
* @param Request $request request
*
* @return mixed|\Xpressengine\Presenter\Presentable
* @throws \Exception
*/
public function moveFile(Request $request)
{
$this->handler->moveMediaLibraryFile($request);
return XePresenter::makeApi([]);
}
/**
* @param Request $request request
*
* @return mixed|\Xpressengine\Presenter\Presentable
* @throws \Exception
*/
public function upload(Request $request)
{
if ($request->file('file') == null) {
throw new UploadFileNotExistException();
}
XeDB::beginTransaction();
try {
$file = $this->handler->uploadMediaLibraryFile($request);
} catch (InvalidFileException $e) {
XeDB::rollback();
throw new HttpException(400, xe_trans('xe::msgInvalidUploadedFile'));
} catch (\Throwable $e) {
XeDB::rollback();
throw $e;
}
XeDB::commit();
return XePresenter::makeApi([$file]);
}
/**
* @param string $mediaLibraryFileId fileId
*
* @return mixed|\Symfony\Component\HttpFoundation\BinaryFileResponse
*/
public function download($mediaLibraryFileId)
{
$mediaLibraryFile = $this->handler->getMediaLibraryFileItem($mediaLibraryFileId);
if ($mediaLibraryFile == null || $mediaLibraryFile->file == null) {
throw new NotFoundFileException;
}
return \XeStorage::download($mediaLibraryFile->file);
}
public function modifyFile(Request $request, $originFileId)
{
$originalMediaLibraryFileItem = $this->handler->getMediaLibraryFileItem($originFileId);
if ($request->file('file') == null) {
throw new UploadFileNotExistException();
}
XeDB::beginTransaction();
try {
$newImageFile = $this->handler->uploadModifyFile($request, $originalMediaLibraryFileItem);
$this->handler->swapImageFile($originalMediaLibraryFileItem, $newImageFile);
} catch (InvalidFileException $e) {
XeDB::rollback();
throw new HttpException(400, xe_trans('xe::msgInvalidUploadedFile'));
} catch (\Throwable $e) {
XeDB::rollback();
throw $e;
}
XeDB::commit();
return redirect()->back();
}
}