Exemple #1
0
$keepAspect = array_key_exists('a', $_GET) ? true : false;
$always = array_key_exists('forceIcon', $_GET) ? (bool) $_GET['forceIcon'] : true;
if ($file === '') {
    //400 Bad Request
    \OC_Response::setStatus(400);
    \OC_Log::write('core-preview', 'No file parameter was passed', \OC_Log::DEBUG);
    exit;
}
if ($maxX === 0 || $maxY === 0) {
    //400 Bad Request
    \OC_Response::setStatus(400);
    \OC_Log::write('core-preview', 'x and/or y set to 0', \OC_Log::DEBUG);
    exit;
}
try {
    $preview = new \OC\Preview(\OC_User::getUser(), 'files');
    $info = \OC\Files\Filesystem::getFileInfo($file);
    if (!$always and !$preview->isAvailable($info)) {
        \OC_Response::setStatus(404);
    } else {
        $preview->setFile($file);
        $preview->setMaxX($maxX);
        $preview->setMaxY($maxY);
        $preview->setScalingUp($scalingUp);
        $preview->setKeepAspect($keepAspect);
    }
    $preview->showPreview();
} catch (\Exception $e) {
    \OC_Response::setStatus(500);
    \OC_Log::write('core', $e->getmessage(), \OC_Log::DEBUG);
}
Exemple #2
0
$maxY = array_key_exists('y', $_GET) ? (int) $_GET['y'] : '44';
$scalingUp = array_key_exists('scalingup', $_GET) ? (bool) $_GET['scalingup'] : true;
if ($file === '') {
    \OC_Response::setStatus(400);
    //400 Bad Request
    \OCP\Util::writeLog('core-preview', 'No file parameter was passed', \OCP\Util::DEBUG);
    exit;
}
if ($maxX === 0 || $maxY === 0) {
    \OC_Response::setStatus(400);
    //400 Bad Request
    \OCP\Util::writeLog('core-preview', 'x and/or y set to 0', \OCP\Util::DEBUG);
    exit;
}
try {
    $preview = new \OC\Preview(\OC_User::getUser(), 'files_trashbin/files', $file);
    $view = new \OC\Files\View('/' . \OC_User::getUser() . '/files_trashbin/files');
    if ($view->is_dir($file)) {
        $mimetype = 'httpd/unix-directory';
    } else {
        $pathInfo = pathinfo(ltrim($file, '/'));
        $fileName = $pathInfo['basename'];
        // if in root dir
        if ($pathInfo['dirname'] === '.') {
            // cut off the .d* suffix
            $i = strrpos($fileName, '.');
            if ($i !== false) {
                $fileName = substr($fileName, 0, $i);
            }
        }
        $mimetype = \OC::$server->getMimeTypeDetector()->detectPath($fileName);
 /**
  * return a preview of a file
  *
  * @param string $file The path to the file where you want a thumbnail from
  * @param int $maxX The maximum X size of the thumbnail. It can be smaller depending on the shape of the image
  * @param int $maxY The maximum Y size of the thumbnail. It can be smaller depending on the shape of the image
  * @param boolean $scaleUp Scale smaller images up to the thumbnail size or not. Might look ugly
  * @return \OCP\IImage
  */
 public function createPreview($file, $maxX = 100, $maxY = 75, $scaleUp = false)
 {
     $preview = new \OC\Preview('', '/', $file, $maxX, $maxY, $scaleUp);
     return $preview->getPreview();
 }
OCP\Util::addStyle('files_sharing', 'public');
OCP\Util::addStyle('files_sharing', 'mobile');
OCP\Util::addScript('files_sharing', 'public');
OCP\Util::addScript('files', 'fileactions');
OCP\Util::addScript('files', 'jquery.iframe-transport');
OCP\Util::addScript('files', 'jquery.fileupload');
// JS required for folders
OCP\Util::addStyle('files', 'files');
OCP\Util::addStyle('files', 'upload');
OCP\Util::addScript('files', 'filesummary');
OCP\Util::addScript('files', 'breadcrumb');
OCP\Util::addScript('files', 'files');
OCP\Util::addScript('files', 'filelist');
OCP\Util::addscript('files', 'keyboardshortcuts');
$thumbSize = 1024;
$previewSupported = OC\Preview::isMimeSupported($_['mimetype']) ? 'true' : 'false';
?>

<?php 
if (\OC\Preview::isMimeSupported($_['mimetype'])) {
    /* This enables preview images for links (e.g. on Facebook, Google+, ...)*/
    ?>
	<link rel="image_src" href="<?php 
    p(OCP\Util::linkToRoute('core_ajax_public_preview', array('x' => $thumbSize, 'y' => $thumbSize, 'file' => $_['directory_path'], 't' => $_['dirToken'])));
    ?>
" />
<?php 
}
?>

<div id="notification-container">
Exemple #5
0
    $root = \OC\Files\Filesystem::getPath($linkItem['file_source']) . '/';
    $images = array_map(function ($image) use($root) {
        return $root . $image;
    }, $images);
} else {
    $root = '';
    OCP\JSON::checkLoggedIn();
    $user = OCP\User::getUser();
}
session_write_close();
$eventSource = new OC_EventSource();
foreach ($images as $image) {
    $height = 200 * $scale;
    if ($square) {
        $width = 200 * $scale;
    } else {
        $width = 400 * $scale;
    }
    $userView = new \OC\Files\View('/' . $user);
    $preview = new \OC\Preview($user, 'files', '/' . $image, $width, $height);
    $preview->setKeepAspect(!$square);
    $fileInfo = $userView->getFileInfo('/files/' . $image);
    // if the thumbnails is already cached, get it directly from the filesystem to avoid decoding and re-encoding the image
    $imageName = substr($image, strlen($root));
    if ($path = $preview->isCached($fileInfo->getId())) {
        $eventSource->send('preview', array('image' => $imageName, 'preview' => base64_encode($userView->file_get_contents('/' . $path))));
    } else {
        $eventSource->send('preview', array('image' => $imageName, 'preview' => (string) $preview->getPreview()));
    }
}
$eventSource->close();
Exemple #6
0
 public function testCreationFromCached()
 {
     $sampleFile = '/' . $this->user . '/files/test.txt';
     $this->rootView->file_put_contents($sampleFile, 'dummy file data');
     // create base preview
     $x = 150;
     $y = 150;
     $preview = new \OC\Preview($this->user, 'files/', 'test.txt', $x, $y);
     $preview->getPreview();
     $fileInfo = $this->rootView->getFileInfo($sampleFile);
     $fileId = $fileInfo['fileid'];
     $thumbCacheFile = '/' . $this->user . '/' . \OC\Preview::THUMBNAILS_FOLDER . '/' . $fileId . '/' . $x . '-' . $y . '.png';
     $this->assertEquals($this->rootView->file_exists($thumbCacheFile), true);
     // create smaller previews
     $preview = new \OC\Preview($this->user, 'files/', 'test.txt', 50, 50);
     $isCached = $preview->isCached($fileId);
     $this->assertEquals($this->user . '/' . \OC\Preview::THUMBNAILS_FOLDER . '/' . $fileId . '/150-150.png', $isCached);
 }
Exemple #7
0
 /**
  * Initialises the preview
  *
  * @param int $width
  * @param int $height
  *
  * @return \OC\Preview
  */
 private function createPreview($width, $height)
 {
     $preview = new \OC\Preview(self::TEST_PREVIEW_USER1, 'files/', $this->sampleFilename, $width, $height);
     $this->assertSame(true, $preview->isFileValid());
     $preview->setKeepAspect($this->keepAspect);
     $preview->setScalingup($this->scalingUp);
     return $preview;
 }
        exit;
    }
    $sharedFile = \OC\Files\Filesystem::normalizePath($file);
}
if ($linkedItem['item_type'] === 'file') {
    $parent = $pathInfo['parent'];
    $path = $view->getPath($parent);
    $sharedFile = $pathInfo['name'];
}
$path = \OC\Files\Filesystem::normalizePath($path, false);
if (substr($path, 0, 1) === '/') {
    $path = substr($path, 1);
}
if ($maxX === 0 || $maxY === 0) {
    \OC_Response::setStatus(400);
    //400 Bad Request
    \OC_Log::write('core-preview', 'x and/or y set to 0', \OC_Log::DEBUG);
    exit;
}
$root = 'files/' . $path;
try {
    $preview = new \OC\Preview($userId, $root);
    $preview->setFile($sharedFile);
    $preview->setMaxX($maxX);
    $preview->setMaxY($maxY);
    $preview->setScalingUp($scalingUp);
    $preview->show();
} catch (\Exception $e) {
    \OC_Response::setStatus(500);
    \OC_Log::write('core', $e->getmessage(), \OC_Log::DEBUG);
}
 public function testIsCached()
 {
     $sourceFile = __DIR__ . '/../data/testimage.png';
     $userId = $this->getUniqueID();
     $this->createUser($userId, 'pass');
     $storage = new Temporary();
     $storage->mkdir('files');
     $this->registerMount($userId, $storage, '/' . $userId);
     \OC_Util::tearDownFS();
     \OC_Util::setupFS($userId);
     $preview = new \OC\Preview($userId, 'files');
     $view = new View('/' . $userId . '/files');
     $view->file_put_contents('test.png', file_get_contents($sourceFile));
     $info = $view->getFileInfo('test.png');
     $preview->setFile('test.png', $info);
     $preview->setMaxX(64);
     $preview->setMaxY(64);
     $this->assertFalse($preview->isCached($info->getId()));
     $preview->getPreview();
     $this->assertEquals('thumbnails/' . $info->getId() . '/64-64.png', $preview->isCached($info->getId()));
 }
Exemple #10
0
$maxX = array_key_exists('x', $_GET) ? (int) $_GET['x'] : '32';
$maxY = array_key_exists('y', $_GET) ? (int) $_GET['y'] : '32';
$scalingUp = array_key_exists('scalingup', $_GET) ? (bool) $_GET['scalingup'] : true;
$keepAspect = array_key_exists('a', $_GET) ? true : false;
$always = array_key_exists('forceIcon', $_GET) ? (bool) $_GET['forceIcon'] : true;
$mode = array_key_exists('mode', $_GET) ? $_GET['mode'] : 'fill';
if ($file === '') {
    //400 Bad Request
    \OC_Response::setStatus(400);
    \OCP\Util::writeLog('core-preview', 'No file parameter was passed', \OCP\Util::DEBUG);
    exit;
}
if ($maxX === 0 || $maxY === 0) {
    //400 Bad Request
    \OC_Response::setStatus(400);
    \OCP\Util::writeLog('core-preview', 'x and/or y set to 0', \OCP\Util::DEBUG);
    exit;
}
$info = \OC\Files\Filesystem::getFileInfo($file);
if (!$info instanceof OCP\Files\FileInfo || !$always && !\OC::$server->getPreviewManager()->isAvailable($info)) {
    \OC_Response::setStatus(404);
} else {
    $preview = new \OC\Preview(\OC_User::getUser(), 'files');
    $preview->setFile($file, $info);
    $preview->setMaxX($maxX);
    $preview->setMaxY($maxY);
    $preview->setScalingUp($scalingUp);
    $preview->setMode($mode);
    $preview->setKeepAspect($keepAspect);
    $preview->showPreview();
}
Exemple #11
0
$img = $_GET['file'];
if (!empty($_GET['token'])) {
    $linkItem = \OCP\Share::getShareByToken($_GET['token']);
    if (!(is_array($linkItem) && isset($linkItem['uid_owner']))) {
        exit;
    }
    // seems to be a valid share
    $rootLinkItem = \OCP\Share::resolveReShare($linkItem);
    $user = $rootLinkItem['uid_owner'];
    // Setup filesystem
    OCP\JSON::checkUserExists($user);
    OC_Util::tearDownFS();
    OC_Util::setupFS($user);
    $fullPath = \OC\Files\Filesystem::getPath($linkItem['file_source']);
    if ($fullPath === null) {
        exit;
    }
    $img = trim($fullPath . '/' . $img);
} else {
    OCP\JSON::checkLoggedIn();
    $user = OCP\User::getUser();
}
session_write_close();
$square = isset($_GET['square']) ? (bool) $_GET['square'] : false;
if ($square) {
    $preview = new \OC\Preview($user, 'files', '/' . $img, 200 * $scale, 200 * $scale);
} else {
    $preview = new \OC\Preview($user, 'files', '/' . $img, 400 * $scale, 200 * $scale);
    $preview->setKeepAspect(true);
}
$preview->showPreview();
if ($file === '') {
	//400 Bad Request
	\OC_Response::setStatus(400);
	\OC_Log::write('core-preview', 'No file parameter was passed', \OC_Log::DEBUG);
	exit;
}

if ($maxX === 0 || $maxY === 0) {
	//400 Bad Request
	\OC_Response::setStatus(400);
	\OC_Log::write('core-preview', 'x and/or y set to 0', \OC_Log::DEBUG);
	exit;
}

try {
	$preview = new \OC\Preview(\OC_User::getUser(), 'files');
	if (!$always and !$preview->isMimeSupported(\OC\Files\Filesystem::getMimeType($file))) {
		\OC_Response::setStatus(404);
	} else {
		$preview->setFile($file);
		$preview->setMaxX($maxX);
		$preview->setMaxY($maxY);
		$preview->setScalingUp($scalingUp);
		$preview->setKeepAspect($keepAspect);
	}

	$preview->showPreview();
} catch (\Exception $e) {
	\OC_Response::setStatus(500);
	\OC_Log::write('core', $e->getmessage(), \OC_Log::DEBUG);
}
\OC::$server->getSession()->close();
$file = array_key_exists('file', $_GET) ? (string) $_GET['file'] : '';
$maxX = array_key_exists('x', $_GET) ? (int) $_GET['x'] : '36';
$maxY = array_key_exists('y', $_GET) ? (int) $_GET['y'] : '36';
$scalingUp = array_key_exists('scalingup', $_GET) ? (bool) $_GET['scalingup'] : true;
$keepAspect = array_key_exists('a', $_GET) ? true : false;
$always = array_key_exists('forceIcon', $_GET) ? (bool) $_GET['forceIcon'] : true;
if ($file === '') {
    //400 Bad Request
    \OC_Response::setStatus(400);
    \OC_Log::write('core-preview', 'No file parameter was passed', \OC_Log::DEBUG);
    exit;
}
if ($maxX === 0 || $maxY === 0) {
    //400 Bad Request
    \OC_Response::setStatus(400);
    \OC_Log::write('core-preview', 'x and/or y set to 0', \OC_Log::DEBUG);
    exit;
}
$preview = new \OC\Preview(\OC_User::getUser(), 'files');
$info = \OC\Files\Filesystem::getFileInfo($file);
if (!$info instanceof OCP\Files\FileInfo || !$always && !$preview->isAvailable($info)) {
    \OC_Response::setStatus(404);
} else {
    $preview->setFile($file);
    $preview->setMaxX($maxX);
    $preview->setMaxY($maxY);
    $preview->setScalingUp($scalingUp);
    $preview->setKeepAspect($keepAspect);
    $preview->showPreview();
}
        exit;
    }
    $sharedFile = \OC\Files\Filesystem::normalizePath($file);
}
if ($linkedItem['item_type'] === 'file') {
    $parent = $pathInfo['parent'];
    $path = $view->getPath($parent);
    $sharedFile = $pathInfo['name'];
}
$path = \OC\Files\Filesystem::normalizePath($path, false);
if (substr($path, 0, 1) === '/') {
    $path = substr($path, 1);
}
if ($maxX === 0 || $maxY === 0) {
    \OC_Response::setStatus(\OC_Response::STATUS_BAD_REQUEST);
    \OCP\Util::writeLog('core-preview', 'x and/or y set to 0', \OCP\Util::DEBUG);
    exit;
}
$root = 'files/' . $path;
try {
    $preview = new \OC\Preview($userId, $root);
    $preview->setFile($sharedFile);
    $preview->setMaxX($maxX);
    $preview->setMaxY($maxY);
    $preview->setScalingUp($scalingUp);
    $preview->setKeepAspect($keepAspect);
    $preview->showPreview();
} catch (\Exception $e) {
    \OC_Response::setStatus(\OC_Response::STATUS_INTERNAL_SERVER_ERROR);
    \OCP\Util::writeLog('core', $e->getmessage(), \OCP\Util::DEBUG);
}
Exemple #15
0
 public function testKeepAspectRatioCover()
 {
     $originalWidth = 1680;
     $originalHeight = 1050;
     $originalAspectRation = $originalWidth / $originalHeight;
     $preview = new \OC\Preview(self::TEST_PREVIEW_USER1, 'files/', 'testimage.jpg', 150, 150);
     $preview->setKeepAspect(true);
     $preview->setMode(\OC\Preview::MODE_COVER);
     $image = $preview->getPreview();
     $aspectRatio = $image->width() / $image->height();
     $this->assertEquals(round($originalAspectRation, 2), round($aspectRatio, 2));
     $this->assertGreaterThanOrEqual(150, $image->width());
     $this->assertGreaterThanOrEqual(150, $image->height());
 }
Exemple #16
0
 public static function prepare_delete($args, $prefix = '')
 {
     $path = $args['path'];
     if (substr($path, 0, 1) === '/') {
         $path = substr($path, 1);
     }
     $view = new \OC\Files\View('/' . \OC_User::getUser() . '/' . $prefix);
     $info = $view->getFileInfo($path);
     \OC\Preview::$deleteFileMapper = array_merge(\OC\Preview::$deleteFileMapper, array(Files\Filesystem::normalizePath($view->getAbsolutePath($path)) => $info));
 }
Exemple #17
0
 /**
  * @brief offer preview for download
  *
  * if no preview exists for this file, send icon instead
  * 
  * @param string $path full path to file
  * @param string type type of preview requested
  */
 public static function servePreview($path, $type)
 {
     \OCP\User::checkLoggedIn();
     \OC::$server->getSession()->close();
     $i = \OC\Files\Filesystem::getFileInfo($path, false);
     /* check for predefined cover, if found replace $path with that of cover file */
     $meta = Meta::get($i['fileid']);
     if ($meta['cover']) {
         $path = pathinfo($path)['dirname'] . '/' . $meta['cover'];
         $i = \OC\Files\Filesystem::getFileInfo($path, false);
     }
     if (\OC::$server->getPreviewManager()->isMimeSupported($i['mimetype'])) {
         $preview = new \OC\Preview(\OC_User::getUser(), 'files');
         $preview->setFile($path);
         switch ($type) {
             case 'cover':
                 $preview->setMaxX(Config::getApp('cover-x', '200'));
                 $preview->setMaxY(Config::getApp('cover-y', '200'));
                 break;
             case 'thumbnail':
                 $preview->setMaxX(Config::getApp('thumb-x', '36'));
                 $preview->setMaxY(Config::getApp('thumb-y', '36'));
                 break;
         }
         $preview->showPreview();
     } else {
         // no preview, serve icon instead
         $scheme = !empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443 ? 'https' : 'http';
         header("Location: " . $scheme . "://" . $_SERVER['HTTP_HOST'] . \OC_Helper::mimetypeIcon($i->getMimeType()));
         /* Note: relative URL should be enough (RFC7231) but some OPDS clients
          * (especially those in dedicated book readers) might not support them
          * 
          * header("Location: " . \OC_Helper::mimetypeIcon($i->getMimeType()));
          */
     }
 }