diff --git a/classes/File.php b/classes/File.php index d31141cf8e..977c02bce6 100644 --- a/classes/File.php +++ b/classes/File.php @@ -85,29 +85,34 @@ class File extends Managed_DataObject public static function saveNew(array $redir_data, $given_url) { $file = null; - try { // I don't know why we have to keep doing this but we run a last check to avoid // uniqueness bugs. $file = File::getByUrl($given_url); + return $file; } catch (NoResultException $e) { - $file = new File; - $file->urlhash = self::hashurl($given_url); - $file->url = $given_url; - if (!empty($redir_data['protected'])) $file->protected = $redir_data['protected']; - if (!empty($redir_data['title'])) $file->title = $redir_data['title']; - if (!empty($redir_data['type'])) $file->mimetype = $redir_data['type']; - if (!empty($redir_data['size'])) $file->size = intval($redir_data['size']); - if (isset($redir_data['time']) && $redir_data['time'] > 0) $file->date = intval($redir_data['time']); - $file_id = $file->insert(); + // We don't have the file's URL since before, so let's continue. + } - if ($file_id === false) { - throw new ServerException('File/URL metadata could not be saved to the database.'); - } + if (!Event::handle('StartFileSaveNew', array(&$redir_data, $given_url))) { + throw new ServerException('File not saved due to an aborted StartFileSaveNew event.'); + } + + $file = new File; + $file->urlhash = self::hashurl($given_url); + $file->url = $given_url; + if (!empty($redir_data['protected'])) $file->protected = $redir_data['protected']; + if (!empty($redir_data['title'])) $file->title = $redir_data['title']; + if (!empty($redir_data['type'])) $file->mimetype = $redir_data['type']; + if (!empty($redir_data['size'])) $file->size = intval($redir_data['size']); + if (isset($redir_data['time']) && $redir_data['time'] > 0) $file->date = intval($redir_data['time']); + $file_id = $file->insert(); + + if ($file_id === false) { + throw new ServerException('File/URL metadata could not be saved to the database.'); } Event::handle('EndFileSaveNew', array($file, $redir_data, $given_url)); - assert ($file instanceof File); return $file; } @@ -476,7 +481,7 @@ class File extends Managed_DataObject /** * @param string $hashstr String of (preferrably lower case) hexadecimal characters, same as result of 'hash_file(...)' */ - static public function getByHash($hashstr, $alg=File::FILEHASH_ALG) + static public function getByHash($hashstr) { $file = new File(); $file->filehash = strtolower($hashstr); diff --git a/lib/attachmentlist.php b/lib/attachmentlist.php index d6cfda6f95..dcae917be3 100644 --- a/lib/attachmentlist.php +++ b/lib/attachmentlist.php @@ -58,7 +58,7 @@ class AttachmentList extends Widget * * @param Notice $notice stream of notices from DB_DataObject */ - function __construct($notice, $out=null) + function __construct(Notice $notice, $out=null) { parent::__construct($out); $this->notice = $notice; @@ -75,7 +75,6 @@ class AttachmentList extends Widget function show() { $attachments = $this->notice->attachments(); - $representable = false; foreach ($attachments as $key=>$att) { // Only show attachments representable with a title if ($att->getTitle() === null) { diff --git a/lib/imagefile.php b/lib/imagefile.php index 68cfea48e7..7107487737 100644 --- a/lib/imagefile.php +++ b/lib/imagefile.php @@ -125,7 +125,7 @@ class ImageFile $imgPath = null; $media = common_get_mime_media($file->mimetype); if (Event::handle('CreateFileImageThumbnailSource', array($file, &$imgPath, $media))) { - if (empty($file->filename)) { + if (empty($file->filename) && !file_exists($imgPath)) { throw new UnsupportedMediaException(_('File without filename could not get a thumbnail source.')); } diff --git a/lib/util.php b/lib/util.php index a5acd8d86b..edada03864 100644 --- a/lib/util.php +++ b/lib/util.php @@ -1868,6 +1868,7 @@ function common_get_mime_media($type) return strtolower($tmp[0]); } +// Get only the mimetype and not additional info (separated from bare mime with semi-colon) function common_bare_mime($mimetype) { $mimetype = mb_strtolower($mimetype);