diff options
author | Antipkin-A <Artem.Antipkin@onlyoffice.com> | 2020-09-08 17:19:27 +0300 |
---|---|---|
committer | Antipkin-A <Artem.Antipkin@onlyoffice.com> | 2020-09-08 17:19:27 +0300 |
commit | 9e37f409a8c639116f54ce1d1333e07dc4204ec4 (patch) | |
tree | 17b0f473a365251a859de9a8ecda8da2fd185400 | |
parent | ce0540ae4ad7b19072dbc4d64b7154354d6ca09a (diff) |
added base lock/unlockfeature/lock
-rw-r--r-- | controller/callbackcontroller.php | 112 |
1 files changed, 70 insertions, 42 deletions
diff --git a/controller/callbackcontroller.php b/controller/callbackcontroller.php index 8742ce6..59313bd 100644 --- a/controller/callbackcontroller.php +++ b/controller/callbackcontroller.php @@ -36,6 +36,8 @@ use OCP\IUserSession; use OCP\Lock\LockedException; use OCP\Share\Exceptions\ShareNotFound; use OCP\Share\IManager; +use OCP\IDBConnection; +use OCP\AppFramework\Utility\ITimeFactory; use OCA\Files_Versions\Versions\IVersionManager; @@ -43,6 +45,8 @@ use OCA\Onlyoffice\AppConfig; use OCA\Onlyoffice\Crypt; use OCA\Onlyoffice\DocumentService; use OCA\Onlyoffice\FileVersions; +use OCA\Onlyoffice\LockingManager; +use OCA\Onlyoffice\LockingProvider; /** * Callback handler for the document server. @@ -115,6 +119,20 @@ class CallbackController extends Controller { private $versionManager; /** + * Time factory + * + * @var ITimeFactory + */ + private $timeFactory; + + /** + * Database provider + * + * @var IDBConnection + */ + private $db; + + /** * Status of the document * * @var Array @@ -148,7 +166,9 @@ class CallbackController extends Controller { ILogger $logger, AppConfig $config, Crypt $crypt, - IManager $shareManager + IManager $shareManager, + ITimeFactory $timeFactory, + IDBConnection $db ) { parent::__construct($AppName, $request); @@ -161,6 +181,8 @@ class CallbackController extends Controller { $this->crypt = $crypt; $this->shareManager = $shareManager; + $this->lockingProvider = new LockingProvider($db, $logger, $timeFactory); + if (\OC::$server->getAppManager()->isInstalled("files_versions")) { try { $this->versionManager = \OC::$server->query(IVersionManager::class); @@ -418,6 +440,46 @@ class CallbackController extends Controller { $trackerStatus = $this->_trackerStatus[$status]; + $shareToken = isset($hashData->shareToken) ? $hashData->shareToken : null; + $filePath = null; + + \OC_Util::tearDownFS(); + + $userId = $this->parseUserId($users[0]); + \OC_User::setUserId($userId); + + $user = $this->userManager->get($userId); + if (!empty($user)) { + \OC_Util::setupFS($userId); + + if ($userId === $hashData->userId) { + $filePath = $hashData->filePath; + } + } else { + if (empty($shareToken)) { + // author of the callback link + $userId = $hashData->userId; + \OC_User::setUserId($userId); + $this->logger->debug("Track for $userId: $fileId status $trackerStatus", ["app" => $this->appName]); + + $user = $this->userManager->get($userId); + if (!empty($user)) { + \OC_Util::setupFS($userId); + + // path for author of the callback link + $filePath = $hashData->filePath; + } + } else { + $this->logger->debug("Track $fileId by token for $userId", ["app" => $this->appName]); + } + } + list ($file, $error) = empty($shareToken) ? $this->getFile($userId, $fileId, $filePath) : $this->getFileByToken($fileId, $shareToken); + + if (isset($error)) { + $this->logger->error("track error $fileId " . json_encode($error->getData()), ["app" => $this->appName]); + return $error; + } + $result = 1; switch ($trackerStatus) { case "MustSave": @@ -428,47 +490,7 @@ class CallbackController extends Controller { } try { - $shareToken = isset($hashData->shareToken) ? $hashData->shareToken : null; - $filePath = null; - - \OC_Util::tearDownFS(); - - // author of the latest changes - $userId = $this->parseUserId($users[0]); - \OC_User::setUserId($userId); - - $user = $this->userManager->get($userId); - if (!empty($user)) { - \OC_Util::setupFS($userId); - - if ($userId === $hashData->userId) { - $filePath = $hashData->filePath; - } - } else { - if (empty($shareToken)) { - // author of the callback link - $userId = $hashData->userId; - \OC_User::setUserId($userId); - $this->logger->debug("Track for $userId: $fileId status $trackerStatus", ["app" => $this->appName]); - - $user = $this->userManager->get($userId); - if (!empty($user)) { - \OC_Util::setupFS($userId); - - // path for author of the callback link - $filePath = $hashData->filePath; - } - } else { - $this->logger->debug("Track $fileId by token for $userId", ["app" => $this->appName]); - } - } - - list ($file, $error) = empty($shareToken) ? $this->getFile($userId, $fileId, $filePath) : $this->getFileByToken($fileId, $shareToken); - - if (isset($error)) { - $this->logger->error("track error $fileId " . json_encode($error->getData()), ["app" => $this->appName]); - return $error; - } + LockingManager :: unlockFile($file, LockingProvider::LOCK_SHARED, $this->lockingProvider); $url = $this->config->ReplaceDocumentServerUrlToInternal($url); @@ -513,7 +535,13 @@ class CallbackController extends Controller { break; case "Editing": + LockingManager :: lockFile($file, LockingProvider::LOCK_SHARED, $this->lockingProvider); + + $result = 0; + break; case "Closed": + LockingManager :: unlockFile($file, LockingProvider::LOCK_SHARED, $this->lockingProvider); + $result = 0; break; } |