/** * 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 $file) { list($ownerView, $path) = $file->getOwnerViewAndPath(); // Create a directory to store genesis $genesis = new Genesis($ownerView, $path, $file->getOwner()); $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'); } } $session = $oldSession->loadBy('file_id', $file->getFileId())->getData(); $memberColor = Helper::getRandomColor(); $member = new Db_Member(array($session['es_id'], $uid, $memberColor, time())); if ($member->insert()) { // Do we have OC_Avatar in out disposal? if (!class_exists('\\OC_Avatar') || \OC_Config::getValue('enable_avatars', true) !== true) { //$x['avatar_url'] = \OCP\Util::linkToRoute('documents_user_avatar'); $imageUrl = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAAAAACH5BAAAAAAALAAAAAABAAEAAAICTAEAOw=='; } else { // https://github.com/owncloud/documents/issues/51 // Temporary stub $imageUrl = $uid; /* $avatar = new \OC_Avatar($uid); $image = $avatar->get(64); // User has an avatar if ($image instanceof \OC_Image) { $imageUrl = \OC_Helper::linkToRoute( 'core_avatar_get', array( 'user' => $uid, 'size' => 64) ) . '?requesttoken=' . \OC::$session->get('requesttoken'); } else { //shortcircuit if it's not an image $imageUrl = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAAAAACH5BAAAAAAALAAAAAABAAEAAAICTAEAOw=='; } */ } $session['member_id'] = (string) $member->getLastInsertId(); $op = new Db_Op(); $op->addMember($session['es_id'], $session['member_id'], \OCP\User::getDisplayName($uid), $memberColor, $imageUrl); } else { throw new \Exception('Failed to add member into database'); } $session['permissions'] = $ownerView->getFilePermissions($path); return $session; }
/** * @brief Cleanup session data on removing the document * @param array * * This function is connected to the delete signal of OC_Filesystem * to delete the related info from database */ public static function onDelete($params) { $info = \OC\Files\Filesystem::getFileInfo($params['path']); $fileId = @$info['fileid']; if (!$fileId) { return; } $sessionObj = new Db_Session(); $session = $sessionObj->loadBy('file_id', $fileId)->getData(); if (!is_array($session) || !isset($session['es_id'])) { return; } Db_Session::cleanUp($session['es_id']); }
/** * @brief Cleanup session data on removing the document * @param array * * This function is connected to the delete signal of OC_Filesystem * to delete the related info from database */ public static function onDelete($params) { $info = \OC\Files\Filesystem::getFileInfo($params['path']); $fileId = @$info['fileid']; if (!$fileId) { return; } $session = new Db_Session(); $session->loadBy('file_id', $fileId); if (!$session->getEsId()) { return; } $member = new Db_Member(); $sessionMembers = $member->getCollectionBy('es_id', $session->getEsId()); foreach ($sessionMembers as $memberData) { if (intval($memberData['status']) === Db_Member::MEMBER_STATUS_ACTIVE) { return; } } Db_Session::cleanUp($session->getEsId()); }
$token = $_GET['t']; $tmpl = new \OCP\Template('documents', 'public', 'guest'); try { $file = File::getByShareToken($token); if ($file->isPasswordProtected() && !$file->checkPassword(@$_POST['password'])) { if (isset($_POST['password'])) { $tmpl->assign('wrongpw', true); } $tmpl->assign('hasPassword', true); } else { \OCP\Util::addStyle('documents', '3rdparty/webodf/dojo-app'); \OCP\Util::addStyle('documents', '3rdparty/webodf/editor'); \OCP\Util::addScript('documents', 'documents'); if ($file->getFileId()) { $session = new Db_Session(); $session->loadBy('file_id', $file->getFileId()); if ($session->getEsId()) { $member = new Db_Member(); $members = $member->getCollectionBy('es_id', $session->getEsId()); } else { $members = 0; } $tmpl->assign('total', count($members) + 1); } else { $tmpl->assign('total', 1); } $tmpl->assign('document', $token); } } catch (\Exception $e) { $tmpl->assign('notFound', true); }