/** * Create new genesis document * @param OCA\Documents\File $file * */ public function __construct(\OCA\Documents\File $file) { list($view, $path) = $file->getOwnerViewAndPath(); $owner = $file->getOwner(); $this->view = new View('/' . $owner); if (!$this->view->file_exists(self::DOCUMENTS_DIRNAME)) { $this->view->mkdir(self::DOCUMENTS_DIRNAME); } $this->hash = $this->getDocumentHash($view, $path); $this->path = self::DOCUMENTS_DIRNAME . '/' . $this->hash . '.odt'; if (!$this->view->file_exists($this->path)) { //copy new genesis to /user/documents/{hash}.odt // get decrypted content $content = $view->file_get_contents($path); $mimetype = $view->getMimeType($path); $data = Filter::read($content, $mimetype); $proxyStatus = \OC_FileProxy::$enabled; \OC_FileProxy::$enabled = false; $this->view->file_put_contents($this->path, $data['content']); \OC_FileProxy::$enabled = $proxyStatus; } try { $this->validate($this->view, $this->path); } catch (\Exception $e) { throw new \Exception('Failed to copy genesis'); } }
/** * Start a editing session or return an existing one * @param string $uid of the user starting a session * @param \OCA\Documents\File $file - file object * @return array * @throws \Exception */ public static function start($uid, $file) { // Create a directory to store genesis $genesis = new Genesis($file); list($ownerView, $path) = $file->getOwnerViewAndPath(); $oldSession = new Db_Session(); $oldSession->loadBy('file_id', $file->getFileId()); //If there is no existing session we need to start a new one if (!$oldSession->hasData()) { $newSession = new Db_Session(array($genesis->getPath(), $genesis->getHash(), $file->getOwner(), $file->getFileId())); if (!$newSession->insert()) { throw new \Exception('Failed to add session into database'); } } $sessionData = $oldSession->loadBy('file_id', $file->getFileId())->getData(); $memberColor = Helper::getMemberColor($uid); $member = new Db_Member(array($sessionData['es_id'], $uid, $memberColor, time(), intval($file->isPublicShare()), $file->getToken())); if ($member->insert()) { // Do we have OC_Avatar in out disposal? if (!class_exists('\\OC_Avatar') || \OC_Config::getValue('enable_avatars', true) !== true) { $imageUrl = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAAAAACH5BAAAAAAALAAAAAABAAEAAAICTAEAOw=='; } else { $imageUrl = $uid; } $displayName = $file->isPublicShare() ? $uid . ' ' . Db_Member::getGuestPostfix() : \OCP\User::getDisplayName($uid); $sessionData['member_id'] = (string) $member->getLastInsertId(); $op = new Db_Op(); $op->addMember($sessionData['es_id'], $sessionData['member_id'], $displayName, $memberColor, $imageUrl); } else { throw new \Exception('Failed to add member into database'); } $sessionData['title'] = basename($path); $sessionData['permissions'] = $ownerView->getFilePermissions($path); return $sessionData; }
/** * Start a editing session or return an existing one * @param string $uid of the user starting a session * @param \OCA\Documents\File $file - file object * @return array * @throws \Exception */ public static function start($uid, $file) { // Create a directory to store genesis $genesis = new \OCA\Documents\Genesis($file); $oldSession = new Session(); $oldSession->loadBy('file_id', $file->getFileId()); //If there is no existing session we need to start a new one if (!$oldSession->hasData()) { $newSession = new Session(array($genesis->getPath(), $genesis->getHash(), $file->getOwner(), $file->getFileId())); if (!$newSession->insert()) { throw new \Exception('Failed to add session into database'); } } $sessionData = $oldSession->loadBy('file_id', $file->getFileId())->getData(); $memberColor = \OCA\Documents\Helper::getMemberColor($uid); $member = new \OCA\Documents\Db\Member([$sessionData['es_id'], $uid, $memberColor, time(), intval($file->isPublicShare()), $file->getToken()]); if (!$member->insert()) { throw new \Exception('Failed to add member into database'); } $sessionData['member_id'] = (string) $member->getLastInsertId(); // Do we have OC_Avatar in out disposal? if (\OC::$server->getConfig()->getSystemValue('enable_avatars', true) !== true) { $imageUrl = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAAAAACH5BAAAAAAALAAAAAABAAEAAAICTAEAOw=='; } else { $imageUrl = $uid; } $displayName = $file->isPublicShare() ? $uid . ' ' . \OCA\Documents\Db\Member::getGuestPostfix() : \OC::$server->getUserSession()->getUser()->getDisplayName($uid); $userId = $file->isPublicShare() ? $displayName : \OC::$server->getUserSession()->getUser()->getUID(); $op = new \OCA\Documents\Db\Op(); $op->addMember($sessionData['es_id'], $sessionData['member_id'], $displayName, $userId, $memberColor, $imageUrl); $sessionData['title'] = basename($file->getPath()); $sessionData['permissions'] = $file->getPermissions(); return $sessionData; }