diff --git a/.github/workflows/integration.yml b/.github/workflows/integration.yml index 95e6783d2..d53f5ccd5 100644 --- a/.github/workflows/integration.yml +++ b/.github/workflows/integration.yml @@ -72,7 +72,7 @@ jobs: with: php-version: ${{ matrix.php-versions }} tools: phpunit - extensions: mbstring, iconv, fileinfo, intl, sqlite, pdo_sqlite, mysql, pdo_mysql, pgsql, pdo_pgsql, + extensions: mbstring, gd, iconv, fileinfo, intl, sqlite, pdo_sqlite, mysql, pdo_mysql, pgsql, pdo_pgsql, coverage: none - name: Set up PHPUnit diff --git a/.github/workflows/phpunit.yml b/.github/workflows/phpunit.yml index 48c5ee220..04cda0056 100644 --- a/.github/workflows/phpunit.yml +++ b/.github/workflows/phpunit.yml @@ -62,7 +62,7 @@ jobs: path: apps/${{ env.APP_NAME }} - name: Set up php ${{ matrix.php-versions }} - uses: shivammathur/setup-php@2.18.0 + uses: shivammathur/setup-php@2.15.0 with: php-version: ${{ matrix.php-versions }} tools: phpunit diff --git a/lib/Service/ConfigService.php b/lib/Service/ConfigService.php index 5aca2222c..48bf068c0 100644 --- a/lib/Service/ConfigService.php +++ b/lib/Service/ConfigService.php @@ -176,4 +176,12 @@ class ConfigService { return $this->config->getUserValue($userId ?? $this->getUserId(), 'deck', 'attachment_folder', '/Deck'); } + + public function setAttachmentFolder(?string $userId = null, string $path): void { + if ($userId === null && $this->getUserId() === null) { + throw new NoPermissionException('Must be logged in get the attachment folder'); + } + + $this->config->setUserValue($userId ?? $this->getUserId(), 'deck', 'attachment_folder', $path); + } } diff --git a/lib/Service/FilesAppService.php b/lib/Service/FilesAppService.php index 2ec7de929..e214b7ca3 100644 --- a/lib/Service/FilesAppService.php +++ b/lib/Service/FilesAppService.php @@ -31,6 +31,7 @@ use OCA\Deck\Sharing\DeckShareProvider; use OCA\Deck\StatusException; use OCP\AppFramework\Http\StreamResponse; use OCP\Constants; +use OCP\Files\Folder; use OCP\Files\IMimeTypeDetector; use OCP\Files\IRootFolder; use OCP\Files\NotFoundException; @@ -189,6 +190,16 @@ class FilesAppService implements IAttachmentService, ICustomAttachmentService { $folder = $userFolder->newFolder($this->configService->getAttachmentFolder()); } + if ($folder->isShared()) { + $folderName = $userFolder->getNonExistingName($this->configService->getAttachmentFolder()); + $folder = $userFolder->newFolder($folderName); + $this->configService->setAttachmentFolder($this->userId, $folderName); + } + + if (!$folder instanceof Folder || $folder->isShared()) { + throw new NotFoundException('No target folder found'); + } + $fileName = $folder->getNonExistingName($fileName); $target = $folder->newFile($fileName); $content = fopen($file['tmp_name'], 'rb');