/** * Gets all versions of a note * * @NoAdminRequired * @NoCSRFRequired * @CORS * * @return array */ public function getAllVersions() { $source = $this->request->getParam("file_name", ""); list($uid, $filename) = Storage::getUidAndFilename($source); $versions = Storage::getVersions($uid, $filename, $source); $versionsResults = array(); if (is_array($versions) && count($versions) > 0) { require_once __DIR__ . '/../3rdparty/finediff/finediff.php'; $users_view = new View('/' . $uid); $currentData = $users_view->file_get_contents('files/' . $filename); // $previousData = $currentData; // $versions = array_reverse( $versions, true ); foreach ($versions as $versionData) { // get timestamp of version $mtime = (int) $versionData["version"]; // get filename of note version $versionFileName = 'files_versions/' . $filename . '.v' . $mtime; // load the data from the file $data = $users_view->file_get_contents($versionFileName); // calculate diff between versions $opcodes = \FineDiff::getDiffOpcodes($currentData, $data); $html = \FineDiff::renderDiffToHTMLFromOpcodes($currentData, $opcodes); $versionsResults[] = array("timestamp" => $mtime, "humanReadableTimestamp" => $versionData["humanReadableTimestamp"], "diffHtml" => $html, "data" => $data); // $previousData = $data; } // $versionsResults = array_reverse( $versionsResults ); } return array("file_name" => $source, "versions" => $versionsResults); }
} $file = array_key_exists('file', $_GET) ? (string) urldecode($_GET['file']) : ''; $maxX = array_key_exists('x', $_GET) ? (int) $_GET['x'] : 44; $maxY = array_key_exists('y', $_GET) ? (int) $_GET['y'] : 44; $version = array_key_exists('version', $_GET) ? $_GET['version'] : ''; $scalingUp = array_key_exists('scalingup', $_GET) ? (bool) $_GET['scalingup'] : true; if ($file === '' && $version === '') { \OC_Response::setStatus(400); //400 Bad Request \OC_Log::write('versions-preview', 'No file parameter was passed', \OC_Log::DEBUG); exit; } if ($maxX === 0 || $maxY === 0) { \OC_Response::setStatus(400); //400 Bad Request \OC_Log::write('versions-preview', 'x and/or y set to 0', \OC_Log::DEBUG); exit; } try { list($user, $file) = \OCA\Files_Versions\Storage::getUidAndFilename($file); $preview = new \OC\Preview($user, 'files_versions', $file . '.v' . $version); $mimetype = \OC_Helper::getFileNameMimeType($file); $preview->setMimetype($mimetype); $preview->setMaxX($maxX); $preview->setMaxY($maxY); $preview->setScalingUp($scalingUp); $preview->showPreview(); } catch (\Exception $e) { \OC_Response::setStatus(500); \OC_Log::write('core', $e->getmessage(), \OC_Log::DEBUG); }
/** * @NoAdminRequired * @NoCSRFRequired * @PublicPage * Given an access token and a fileId, returns the contents of the file. * Expects a valid token in access_token parameter. */ public function wopiGetFile($fileId) { $token = $this->request->getParam('access_token'); $arr = explode('_', $fileId, 2); $version = '0'; if (count($arr) == 2) { $fileId = $arr[0]; $version = $arr[1]; } \OC::$server->getLogger()->debug('Getting contents of file {fileId}, version {version} by token {token}.', ['app' => $this->appName, 'fileId' => $fileId, 'version' => $version, 'token' => $token]); $row = new Db\Wopi(); $row->loadBy('token', $token); //TODO: Support X-WOPIMaxExpectedSize header. $res = $row->getPathForToken($fileId, $version, $token); $ownerid = $res['owner']; // Login the user to see his mount locations $this->loginUser($ownerid); $filename = ''; // If some previous version is requested, fetch it from Files_Version app if ($version !== '0') { \OCP\JSON::checkAppEnabled('files_versions'); // Setup the FS \OC_Util::tearDownFS(); \OC_Util::setupFS($ownerid, '/' . $ownerid . '/files'); list($ownerid, $filename) = \OCA\Files_Versions\Storage::getUidAndFilename($res['path']); $filename = '/files_versions/' . $filename . '.v' . $version; \OC_Util::tearDownFS(); } else { $filename = '/files' . $res['path']; } // Close the session created for user login \OC::$server->getSession()->close(); return new DownloadResponse($this->request, $ownerid, $filename); }