summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrion Vibber <brion@status.net>2010-11-08 17:20:04 -0800
committerBrion Vibber <brion@status.net>2010-11-08 17:20:04 -0800
commitc36fecb79431218016615cde45215337d67fee67 (patch)
treedaedc113463f47c3d22410499c89b186d431580c
parentdc497ed090d94561db195983a4346a2f66503422 (diff)
Save a thumbnail image when uploading an image file into the file attachments system. Currently hardcoded to 100x75, needs aspect-sensitivity etc.
-rw-r--r--classes/File_thumbnail.php30
-rw-r--r--lib/mediafile.php35
2 files changed, 61 insertions, 4 deletions
diff --git a/classes/File_thumbnail.php b/classes/File_thumbnail.php
index edae8ac21..d371b9e8a 100644
--- a/classes/File_thumbnail.php
+++ b/classes/File_thumbnail.php
@@ -48,12 +48,34 @@ class File_thumbnail extends Memcached_DataObject
return array(false, false, false);
}
- function saveNew($data, $file_id) {
+ /**
+ * Save oEmbed-provided thumbnail data
+ *
+ * @param object $data
+ * @param int $file_id
+ */
+ public static function saveNew($data, $file_id) {
+ self::saveThumbnail($file_id,
+ $data->thumbnail_url,
+ $data->thumbnail_width,
+ $data->thumbnail_height);
+ }
+
+ /**
+ * Save a thumbnail record for the referenced file record.
+ *
+ * @param int $file_id
+ * @param string $url
+ * @param int $width
+ * @param int $height
+ */
+ static function saveThumbnail($file_id, $url, $width, $height)
+ {
$tn = new File_thumbnail;
$tn->file_id = $file_id;
- $tn->url = $data->thumbnail_url;
- $tn->width = intval($data->thumbnail_width);
- $tn->height = intval($data->thumbnail_height);
+ $tn->url = $url;
+ $tn->width = intval($width);
+ $tn->height = intval($height);
$tn->insert();
}
}
diff --git a/lib/mediafile.php b/lib/mediafile.php
index aad3575d7..2c04b4650 100644
--- a/lib/mediafile.php
+++ b/lib/mediafile.php
@@ -48,11 +48,14 @@ class MediaFile
{
if ($user == null) {
$this->user = common_current_user();
+ } else {
+ $this->user = $user;
}
$this->filename = $filename;
$this->mimetype = $mimetype;
$this->fileRecord = $this->storeFile();
+ $this->thumbnailRecord = $this->storeThumbnail();
$this->fileurl = common_local_url('attachment',
array('attachment' => $this->fileRecord->id));
@@ -102,6 +105,38 @@ class MediaFile
return $file;
}
+ /**
+ * Generate and store a thumbnail image for the uploaded file, if applicable.
+ *
+ * @return File_thumbnail or null
+ */
+ function storeThumbnail()
+ {
+ if (substr($this->mimetype, 0, strlen('image/')) != 'image/') {
+ // @fixme video thumbs would be nice!
+ return null;
+ }
+ try {
+ $image = new ImageFile($this->fileRecord->id,
+ File::path($this->filename));
+ } catch (Exception $e) {
+ // Unsupported image type.
+ return null;
+ }
+
+ $outname = File::filename($this->user->getProfile(), 'thumb-' . $this->filename, $this->mimetype);
+ $outpath = File::path($outname);
+
+ $width = 100;
+ $height = 75;
+
+ $image->resizeTo($outpath, $width, $height);
+ File_thumbnail::saveThumbnail($this->fileRecord->id,
+ File::url($outname),
+ $width,
+ $height);
+ }
+
function rememberFile($file, $short)
{
$this->maybeAddRedir($file->id, $short);