/** * Start a editing session or return an existing one * @param string $uid of the user starting a session * @param \OCA\Richdocuments\File $file - file object * @return array * @throws \Exception */ public static function start($uid, $file) { // Create a directory to store genesis $genesis = new \OCA\Richdocuments\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\Richdocuments\Helper::getMemberColor($uid); $member = new \OCA\Richdocuments\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\Richdocuments\Db\Member::getGuestPostfix() : \OC::$server->getUserSession()->getUser()->getDisplayName($uid); $userId = $file->isPublicShare() ? $displayName : \OC::$server->getUserSession()->getUser()->getUID(); $op = new \OCA\Richdocuments\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; }
/** * Create new genesis document * @param File $file * */ public function __construct(File $file) { $view = $file->getOwnerView(); $path = $file->getPath(); $owner = $file->getOwner(); $this->view = new View('/' . $owner); if (!$this->view->file_exists(self::DOCUMENTS_DIRNAME)) { $this->view->mkdir(self::DOCUMENTS_DIRNAME); } $this->validate($view, $path); $this->hash = $view->hash('sha1', $path, false); $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); $this->view->file_put_contents($this->path, $data['content']); } try { $this->validate($this->view, $this->path); } catch (\Exception $e) { throw new \Exception('Failed to copy genesis'); } }