Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/ONLYOFFICE/onlyoffice-nextcloud.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'controller/editorapicontroller.php')
-rw-r--r--controller/editorapicontroller.php44
1 files changed, 27 insertions, 17 deletions
diff --git a/controller/editorapicontroller.php b/controller/editorapicontroller.php
index b8c2c7f..713b865 100644
--- a/controller/editorapicontroller.php
+++ b/controller/editorapicontroller.php
@@ -26,6 +26,11 @@ use OCP\Constants;
use OCP\Files\File;
use OCP\Files\Folder;
use OCP\Files\IRootFolder;
+use OCP\Files\Lock\ILock;
+use OCP\Files\Lock\ILockManager;
+use OCP\Files\Lock\NoLockProviderException;
+use OCP\Files\Lock\OwnerLockedException;
+use OCP\PreConditionNotMetException;
use OCP\IL10N;
use OCP\ILogger;
use OCP\IRequest;
@@ -40,8 +45,6 @@ use OCP\Share\IManager;
use OCP\Share\IShare;
use OCA\Files_Versions\Versions\IVersionManager;
-use OCA\FilesLock\Service\LockService;
-use OCA\FilesLock\Exceptions\LockNotFoundException;
use OCA\Onlyoffice\AppConfig;
use OCA\Onlyoffice\Crypt;
@@ -140,6 +143,13 @@ class EditorApiController extends OCSController {
private $extraPermissions;
/**
+ * Lock manager
+ *
+ * @var ILockManager
+ */
+ private $lockManager;
+
+ /**
* Mobile regex from https://github.com/ONLYOFFICE/CommunityServer/blob/v9.1.1/web/studio/ASC.Web.Studio/web.appsettings.config#L35
*/
const USER_AGENT_MOBILE = "/android|avantgo|playbook|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od|ad)|iris|kindle|lge |maemo|midp|mmp|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|symbian|treo|up\\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i";
@@ -158,6 +168,7 @@ class EditorApiController extends OCSController {
* @param IManager $shareManager - Share manager
* @param ISession $ISession - Session
* @param ITagManager $tagManager - Tag manager
+ * @param ILockManager $lockManager - Lock manager
*/
public function __construct($AppName,
IRequest $request,
@@ -171,7 +182,8 @@ class EditorApiController extends OCSController {
Crypt $crypt,
IManager $shareManager,
ISession $session,
- ITagManager $tagManager
+ ITagManager $tagManager,
+ ILockManager $lockManager
) {
parent::__construct($AppName, $request);
@@ -184,6 +196,7 @@ class EditorApiController extends OCSController {
$this->config = $config;
$this->crypt = $crypt;
$this->tagManager = $tagManager;
+ $this->lockManager = $lockManager;
if (\OC::$server->getAppManager()->isInstalled("files_versions")) {
try {
@@ -372,24 +385,21 @@ class EditorApiController extends OCSController {
$isTempLock = false;
if ($version < 1
- && \OC::$server->getAppManager()->isInstalled("files_lock")) {
+ && $this->lockManager->isLockProviderAvailable()) {
try {
- $lockService = \OC::$server->get(LockService::class);
- $lock = $lockService->getLockFromFileId($file->getId());
+ $locks = $this->lockManager->getLocks($file->getId());
+ $lock = !empty($locks) ? $locks[0] : null;
- $lockOwner = null;
- if (method_exists($lock, "getUserId")) {
- $lockOwner = $lock->getUserId();
- }
- else if(method_exists($lock, "getOwner")) {
+ if ($lock !== null) {
+ $lockType = $lock->getType();
$lockOwner = $lock->getOwner();
+ if (($lockType === ILock::TYPE_APP) && $lockOwner !== $this->appName
+ || ($lockType === ILock::TYPE_USER || $lockType === ILock::TYPE_TOKEN) && $lockOwner !== $userId) {
+ $isTempLock = true;
+ $this->logger->debug("File" . $file->getId() . "is locked by $lockOwner", ["app" => $this->appName]);
+ }
}
-
- if ($userId !== $lockOwner) {
- $isTempLock = true;
- $this->logger->debug("File" . $file->getId() . "is locked by $lockOwner", ["app" => $this->appName]);
- }
- } catch (LockNotFoundException $e) {}
+ } catch (PreConditionNotMetException | NoLockProviderException $e) {}
}
$canEdit = isset($format["edit"]) && $format["edit"];