diff options
Diffstat (limited to 'controller/editorapicontroller.php')
-rw-r--r-- | controller/editorapicontroller.php | 44 |
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"]; |