Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 25 additions & 21 deletions .github/scripts/generate-matrix.sh
Original file line number Diff line number Diff line change
Expand Up @@ -78,27 +78,31 @@ if [ -n "$LATEST_STABLE_NC_VERSION" ]; then
latestStableNCVersion="stable$latestStableNCVersion"
fi
else
# determine latest stable version from the list
# this only takes into account the major version number and stable branches
# e.g. 30, stable30
for ncVersion in $nextcloudVersions; do
# parse the major version number from stable branch
# e.g. stable30 -> 30
if [[ "$ncVersion" =~ ^stable[0-9]+$ ]]; then
ncVersion=${ncVersion//stable/}
fi
if ! [[ "$ncVersion" =~ ^[0-9]+$ ]]; then
continue
fi
if [ -z "$latestStableNCVersion" ]; then
latestStableNCVersion=$ncVersion
continue
fi
if [ "$ncVersion" -gt "$latestStableNCVersion" ]; then
latestStableNCVersion=$ncVersion
fi
done
latestStableNCVersion="stable$latestStableNCVersion"
if [ $(echo "$nextcloudVersions" | wc -w) -eq 1 ]; then
latestStableNCVersion="$nextcloudVersions"
else
# determine latest stable version from the list
# this only takes into account the major version number and stable branches
# e.g. 30, stable30
for ncVersion in $nextcloudVersions; do
# parse the major version number from stable branch
# e.g. stable30 -> 30
if [[ "$ncVersion" =~ ^stable[0-9]+$ ]]; then
ncVersion=${ncVersion//stable/}
fi
if ! [[ "$ncVersion" =~ ^[0-9]+$ ]]; then
continue
fi
if [ -z "$latestStableNCVersion" ]; then
latestStableNCVersion=$ncVersion
continue
fi
if [ "$ncVersion" -gt "$latestStableNCVersion" ]; then
latestStableNCVersion=$ncVersion
fi
done
latestStableNCVersion="stable$latestStableNCVersion"
fi
fi

MATRIX=""
Expand Down
17 changes: 14 additions & 3 deletions lib/Controller/FilesController.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
use OCA\Activity\Data;
use OCA\Activity\GroupHelperDisabled;
use OCA\Activity\UserSettings;
use OCA\OpenProject\ServerVersion;
use OCP\Activity\IManager;
use OCP\AppFramework\Http;
use OCP\AppFramework\Http\DataResponse;
Expand All @@ -20,6 +21,7 @@
use OCP\Files\DavUtil;
use OCP\Files\FileInfo;
use OCP\Files\IRootFolder;
use OCP\Files\Node;
use OCP\IDBConnection;
use OCP\IRequest;
use OCP\IUser;
Expand Down Expand Up @@ -86,7 +88,8 @@ public function __construct(string $appName,
IDBConnection $connection,
LoggerInterface $logger,
IUserManager $userManager,
DavUtil $davUtils
DavUtil $davUtils,
private ServerVersion $serverVersion,
) {
parent::__construct($appName, $request);
$this->user = $userSession->getUser();
Expand Down Expand Up @@ -289,7 +292,15 @@ private function getLastModifier(string $ownerId, int $fileId, int $since = 0):

// `davUtils->getDavPermissions` method is static so it cannot be mocked to
// creating similar function here for testing purposes
public function getDavPermissions(FileInfo $info): string {
return $this->davUtils->getDavPermissions($info);
public function getDavPermissions(Node $file): string {
// BREAKING CHANGE (Nextcloud 34):
// "getDavPermissions()" expects parent node as second parameter.
// See: https://github.com/nextcloud/server/pull/57374#issuecomment-4394748935
if ($this->serverVersion->getMajorVersion() >= 34) {
/** @psalm-suppress TooManyArguments */
return $this->davUtils->getDavPermissions($file, $file->getParent());
}
/** @psalm-suppress TooFewArguments */
return $this->davUtils->getDavPermissions($file);
}
}
44 changes: 44 additions & 0 deletions lib/ServerVersion.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
<?php

/**
* SPDX-FileCopyrightText: 2026 Jankari Tech Pvt. Ltd.
* SPDX-License-Identifier: AGPL-3.0-or-later
*/

declare(strict_types=1);

namespace OCA\OpenProject;

use OCP\IConfig;
use OCP\ServerVersion as NCServerVersion;

class ServerVersion {
public function __construct(private IConfig $config) {
}

/**
* Get Nextcloud version.
*
* @return string
*/
public function getVersion(): string {
// For Nextcloud below 31, ServerVersion class does not exist.
// NOTE: we can remove alternative code path once we stop supporting Nextcloud 30
if (class_exists(NCServerVersion::class)) {
$serverVersion = new NCServerVersion();
return $serverVersion->getVersionString();
}

return $this->config->getSystemValueString('version', '0.0.0');
}

/**
* Get Nextcloud MAJOR version.
*
* @return string
*/
public function getMajorVersion(): string {
$versionString = $this->getVersion();
return explode('.', $versionString)[0] ?? '0';
}
}
18 changes: 9 additions & 9 deletions tests/acceptance/features/api/getFileinfoByFileIDAPI.feature
Original file line number Diff line number Diff line change
Expand Up @@ -1203,11 +1203,11 @@ Feature: retrieve file information of a single file, using the file ID
Examples:
| share-permission | requester-dav-permissions | owner-dav-permissions |
| all | SRGNVW | RGDNVW |
| read | SG | RGDNVW |
| read+share | SRG | RGDNVW |
| read | SGN? | RGDNVW |
| read+share | SRGN? | RGDNVW |
| read+update | SGNVW | RGDNVW |
| read+update+share | SRGNVW | RGDNVW |
| read+delete | SG | RGDNVW |
| read+delete | SGN? | RGDNVW |
| read+delete+update | SGNVW | RGDNVW |


Expand Down Expand Up @@ -1294,16 +1294,16 @@ Feature: retrieve file information of a single file, using the file ID
Examples:
| share-permission | requester-dav-permissions | owner-dav-permissions |
| all | SRGDNVCK | RGDNVCK |
| read | SG | RGDNVCK |
| read+share | SRG | RGDNVCK |
| read | SGN? | RGDNVCK |
| read+share | SRGN? | RGDNVCK |
| read+update | SGNV | RGDNVCK |
| read+update+share | SRGNV | RGDNVCK |
| read+delete | SGD | RGDNVCK |
| read+delete | SGDN? | RGDNVCK |
| read+delete+update | SGDNV | RGDNVCK |
| read+create | SGCK | RGDNVCK |
| read+create | SGN?CK | RGDNVCK |
| read+create+update | SGNVCK | RGDNVCK |
| read+create+share | SRGCK | RGDNVCK |
| read+create+share+delete | SRGDCK | RGDNVCK |
| read+create+share | SRGN?CK | RGDNVCK |
| read+create+share+delete | SRGDN?CK | RGDNVCK |
| read+create+update+delete | SGDNVCK | RGDNVCK |
| read+create+update+share | SRGNVCK | RGDNVCK |

Expand Down
5 changes: 4 additions & 1 deletion tests/lib/Controller/FilesControllerTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@

namespace OCA\OpenProject\Controller;

use OCA\OpenProject\ServerVersion;
use OCP\Activity\IManager;
use OCP\Files\Config\ICachedMountFileInfo;
use OCP\Files\Config\IUserMountCache;
Expand Down Expand Up @@ -900,6 +901,7 @@ private function createFilesController(
$this->createMock(LoggerInterface::class),
$this->createMock(IUserManager::class),
$this->createMock(DavUtil::class),
$this->createMock(ServerVersion::class),
);
return $controller;
}
Expand Down Expand Up @@ -950,7 +952,8 @@ public function getFilesControllerMock(
$this->createMock(IDBConnection::class),
$this->createMock(LoggerInterface::class),
$this->createMock(IUserManager::class),
$davUtilsMock
$davUtilsMock,
$this->createMock(ServerVersion::class),
])
->onlyMethods($onlyMethods)
->getMock();
Expand Down
Loading