public static function rename($args) { self::preDispatchGuest(); $memberId = Helper::getArrayValueByKey($args, 'member_id'); $name = Helper::getArrayValueByKey($_POST, 'name'); $member = new Db\Member(); $member->load($memberId); if ($member->getEsId() && $member->getStatus() == Db\Member::MEMBER_STATUS_ACTIVE && $member->getIsGuest()) { $guestMark = Db\Member::getGuestPostfix(); if (substr($name, -strlen($guestMark)) !== $guestMark) { $name = $name . ' ' . $guestMark; } $op = new Db\Op(); $op->changeNick($member->getEsId(), $memberId, $name); } \OCP\JSON::success(); }
/** * Store the document content to its origin */ public static function save() { try { $esId = @$_SERVER['HTTP_WEBODF_SESSION_ID']; if (!$esId) { throw new \Exception('Session id can not be empty'); } $memberId = @$_SERVER['HTTP_WEBODF_MEMBER_ID']; $currentMember = new Db\Member(); $currentMember->load($memberId); if (is_null($currentMember->getIsGuest()) || $currentMember->getIsGuest()) { self::preDispatchGuest(); } else { $uid = self::preDispatch(); } //check if member belongs to the session if ($esId != $currentMember->getEsId()) { throw new \Exception($memberId . ' does not belong to session ' . $esId); } // Extra info for future usage // $sessionRevision = Helper::getArrayValueByKey($_SERVER, 'HTTP_WEBODF_SESSION_REVISION'); $stream = fopen('php://input', 'r'); if (!$stream) { throw new \Exception('New content missing'); } $content = stream_get_contents($stream); $session = new Db\Session(); $session->load($esId); if (!$session->getEsId()) { throw new \Exception('Session does not exist'); } try { if ($currentMember->getIsGuest()) { $file = File::getByShareToken($currentMember->getToken()); } else { $file = new File($session->getFileId()); } list($view, $path) = $file->getOwnerViewAndPath(true); } catch (\Exception $e) { //File was deleted or unshared. We need to save content as new file anyway //Sorry, but for guests it would be lost :( if (isset($uid)) { $view = new \OC\Files\View('/' . $uid . '/files'); $dir = \OCP\Config::getUserValue(\OCP\User::getUser(), 'documents', 'save_path', ''); $path = Helper::getNewFileName($view, $dir . 'New Document.odt'); } } $member = new Db\Member(); $members = $member->getActiveCollection($esId); $memberIds = array_map(function ($x) { return $x['member_id']; }, $members); // Active users except current user $memberCount = count($memberIds) - 1; if ($view->file_exists($path)) { $proxyStatus = \OC_FileProxy::$enabled; \OC_FileProxy::$enabled = false; $currentHash = sha1($view->file_get_contents($path)); \OC_FileProxy::$enabled = $proxyStatus; if (!Helper::isVersionsEnabled() && $currentHash !== $session->getGenesisHash()) { // Original file was modified externally. Save to a new one $path = Helper::getNewFileName($view, $path, '-conflict'); } $mimetype = $view->getMimeType($path); } else { $mimetype = Storage::MIMETYPE_LIBREOFFICE_WORDPROCESSOR; } $data = Filter::write($content, $mimetype); if ($view->file_put_contents($path, $data['content'])) { // Not a last user if ($memberCount > 0) { // Update genesis hash to prevent conflicts Helper::debugLog('Update hash'); $session->updateGenesisHash($esId, sha1($data['content'])); } else { // Last user. Kill session data Db\Session::cleanUp($esId); } $view->touch($path); } \OCP\JSON::success(); } catch (\Exception $e) { Helper::warnLog('Saving failed. Reason:' . $e->getMessage()); //\OCP\JSON::error(array('message'=>$e->getMessage())); \OC_Response::setStatus(500); } exit; }
} public function getBody() { return $this->body; } } $response = array(); try { $request = new Request(); $esId = $request->getParam('args/es_id'); $session = new Db\Session(); $session->load($esId); $memberId = $request->getParam('args/member_id'); $member = new Db\Member(); $member->load($memberId); if ($member->getIsGuest() || is_null($member->getIsGuest())) { Controller::preDispatchGuest(false); } else { Controller::preDispatch(false); } try { $file = new File($session->getFileId()); } catch (\Exception $e) { Helper::warnLog('Error. Session no longer exists. ' . $e->getMessage()); $ex = new BadRequestException(); $ex->setBody($request->getRawRequest()); throw $ex; } $command = $request->getParam('command'); switch ($command) { case 'sync_ops':