File handling changes for better logic

Also prepares for StoreRemoteMediaPlugin, coming up...
This commit is contained in:
Mikael Nordfeldth 2015-10-01 22:14:49 +02:00
parent 5b7deee0cc
commit 80bc7f0e25
4 changed files with 23 additions and 18 deletions

View File

@ -85,29 +85,34 @@ class File extends Managed_DataObject
public static function saveNew(array $redir_data, $given_url) public static function saveNew(array $redir_data, $given_url)
{ {
$file = null; $file = null;
try { try {
// I don't know why we have to keep doing this but we run a last check to avoid // I don't know why we have to keep doing this but we run a last check to avoid
// uniqueness bugs. // uniqueness bugs.
$file = File::getByUrl($given_url); $file = File::getByUrl($given_url);
return $file;
} catch (NoResultException $e) { } catch (NoResultException $e) {
$file = new File; // We don't have the file's URL since before, so let's continue.
$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) { if (!Event::handle('StartFileSaveNew', array(&$redir_data, $given_url))) {
throw new ServerException('File/URL metadata could not be saved to the database.'); 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)); Event::handle('EndFileSaveNew', array($file, $redir_data, $given_url));
assert ($file instanceof File);
return $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(...)' * @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 = new File();
$file->filehash = strtolower($hashstr); $file->filehash = strtolower($hashstr);

View File

@ -58,7 +58,7 @@ class AttachmentList extends Widget
* *
* @param Notice $notice stream of notices from DB_DataObject * @param Notice $notice stream of notices from DB_DataObject
*/ */
function __construct($notice, $out=null) function __construct(Notice $notice, $out=null)
{ {
parent::__construct($out); parent::__construct($out);
$this->notice = $notice; $this->notice = $notice;
@ -75,7 +75,6 @@ class AttachmentList extends Widget
function show() function show()
{ {
$attachments = $this->notice->attachments(); $attachments = $this->notice->attachments();
$representable = false;
foreach ($attachments as $key=>$att) { foreach ($attachments as $key=>$att) {
// Only show attachments representable with a title // Only show attachments representable with a title
if ($att->getTitle() === null) { if ($att->getTitle() === null) {

View File

@ -125,7 +125,7 @@ class ImageFile
$imgPath = null; $imgPath = null;
$media = common_get_mime_media($file->mimetype); $media = common_get_mime_media($file->mimetype);
if (Event::handle('CreateFileImageThumbnailSource', array($file, &$imgPath, $media))) { 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.')); throw new UnsupportedMediaException(_('File without filename could not get a thumbnail source.'));
} }

View File

@ -1868,6 +1868,7 @@ function common_get_mime_media($type)
return strtolower($tmp[0]); return strtolower($tmp[0]);
} }
// Get only the mimetype and not additional info (separated from bare mime with semi-colon)
function common_bare_mime($mimetype) function common_bare_mime($mimetype)
{ {
$mimetype = mb_strtolower($mimetype); $mimetype = mb_strtolower($mimetype);