Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
moodle
moodle
Commits
c4d19c5a
Commit
c4d19c5a
authored
Apr 18, 2012
by
David Mudrák
Browse files
MDL-32471 introducing file_storage::get_file_preview() method
parent
f0a23f53
Changes
1
Hide whitespace changes
Inline
Side-by-side
lib/filestorage/file_storage.php
View file @
c4d19c5a
...
...
@@ -152,6 +152,113 @@ class file_storage {
return
new
stored_file
(
$this
,
$file_record
,
$this
->
filedir
);
}
/**
* Returns an image file that represent the given stored file as a preview
*
* At the moment, only GIF, JPEG and PNG files are supported to have previews. In the
* future, the support for other mimetypes can be added, too (eg. generate an image
* preview of PDF, text documents etc).
*
* @param stored_file $file the file we want to preview
* @param string $mode preview mode, eg. 'thumb'
* @return stored_file|bool false if unable to create the preview, stored file otherwise
*/
public
function
get_file_preview
(
stored_file
$file
,
$mode
)
{
$context
=
context_system
::
instance
();
$path
=
'/'
.
trim
(
$mode
,
'/'
)
.
'/'
;
$preview
=
$this
->
get_file
(
$context
->
id
,
'core'
,
'preview'
,
0
,
$path
,
$file
->
get_contenthash
());
if
(
!
$preview
)
{
$preview
=
$this
->
create_file_preview
(
$file
,
$mode
);
if
(
!
$preview
)
{
return
false
;
}
}
return
$preview
;
}
/**
* Generates a preview image for the stored file
*
* @param stored_file $file the file we want to preview
* @param string $mode preview mode, eg. 'thumb'
* @return stored_file|bool the newly created preview file or false
*/
protected
function
create_file_preview
(
stored_file
$file
,
$mode
)
{
$mimetype
=
$file
->
get_mimetype
();
if
(
$mimetype
==
'image/gif'
or
$mimetype
==
'image/jpeg'
or
$mimetype
==
'image/png'
)
{
// make a preview of the image
$data
=
$this
->
create_imagefile_preview
(
$file
,
$mode
);
}
else
{
// unable to create the preview of this mimetype yet
return
false
;
}
if
(
empty
(
$data
))
{
return
false
;
}
// getimagesizefromstring() is available from PHP 5.4 but we need to support
// lower versions, so...
$tmproot
=
make_temp_directory
(
'thumbnails'
);
$tmpfilepath
=
$tmproot
.
'/'
.
$file
->
get_contenthash
()
.
'_thumb'
;
file_put_contents
(
$tmpfilepath
,
$data
);
$imageinfo
=
getimagesize
(
$tmpfilepath
);
unlink
(
$tmpfilepath
);
$context
=
context_system
::
instance
();
$record
=
array
(
'contextid'
=>
$context
->
id
,
'component'
=>
'core'
,
'filearea'
=>
'preview'
,
'itemid'
=>
0
,
'filepath'
=>
'/'
.
trim
(
$mode
,
'/'
)
.
'/'
,
'filename'
=>
$file
->
get_contenthash
(),
);
if
(
$imageinfo
)
{
$record
[
'mimetype'
]
=
$imageinfo
[
'mime'
];
}
return
$this
->
create_file_from_string
(
$record
,
$data
);
}
/**
* Generates a preview for the stored image file
*
* @param stored_file $file the image we want to preview
* @param string $mode preview mode, eg. 'thumb'
* @return string|bool false if a problem occurs, the thumbnail image data otherwise
*/
protected
function
create_imagefile_preview
(
stored_file
$file
,
$mode
)
{
global
$CFG
;
require_once
(
$CFG
->
libdir
.
'/gdlib.php'
);
$tmproot
=
make_temp_directory
(
'thumbnails'
);
$tmpfilepath
=
$tmproot
.
'/'
.
$file
->
get_contenthash
();
$file
->
copy_content_to
(
$tmpfilepath
);
if
(
$mode
==
'tinyicon'
)
{
$data
=
generate_image_thumbnail
(
$tmpfilepath
,
16
,
16
);
}
else
if
(
$mode
==
'thumb'
)
{
$data
=
generate_image_thumbnail
(
$tmpfilepath
,
90
,
90
);
}
else
{
throw
new
file_exception
(
'storedfileproblem'
,
'Invalid preview mode requested'
);
}
unlink
(
$tmpfilepath
);
return
$data
;
}
/**
* Fetch file using local file id.
*
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment