X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=classes%2FFile_thumbnail.php;h=68cb2a737fb2a939e34beebbcfb14e394de78ca2;hb=b9a07330621b8c09339e33779798af46c517b7cd;hp=925a3b24295ab057ca30db27e0d1a234ac385de5;hpb=265fa12917132631e44dea63a70d750222867344;p=quix0rs-gnu-social.git diff --git a/classes/File_thumbnail.php b/classes/File_thumbnail.php index 925a3b2429..68cb2a737f 100644 --- a/classes/File_thumbnail.php +++ b/classes/File_thumbnail.php @@ -98,6 +98,7 @@ class File_thumbnail extends Managed_DataObject if ($notNullUrl) { $thumb->whereAdd('url IS NOT NULL'); } + $thumb->orderBy('modified ASC'); // the first created, a somewhat ugly hack $thumb->limit(1); if (!$thumb->find(true)) { throw new NoResultException($thumb); @@ -129,12 +130,10 @@ class File_thumbnail extends Managed_DataObject static function path($filename) { - if (!File::validFilename($filename)) { - // TRANS: Client exception thrown if a file upload does not have a valid name. - throw new ClientException(_('Invalid filename.')); - } + File::tryFilename($filename); - $dir = common_config('thumbnail', 'dir') ?: File::path('thumb'); + // NOTE: If this is left empty in default config, it will be set to File::path('thumb') + $dir = common_config('thumbnail', 'dir'); if (!in_array($dir[mb_strlen($dir)-1], ['/', '\\'])) { $dir .= DIRECTORY_SEPARATOR; @@ -145,10 +144,7 @@ class File_thumbnail extends Managed_DataObject static function url($filename) { - if (!File::validFilename($filename)) { - // TRANS: Client exception thrown if a file upload does not have a valid name. - throw new ClientException(_('Invalid filename.')); - } + File::tryFilename($filename); // FIXME: private site thumbnails? @@ -172,23 +168,39 @@ class File_thumbnail extends Managed_DataObject public function getFilename() { - if (!File::validFilename($this->filename)) { - // TRANS: Client exception thrown if a file upload does not have a valid name. - throw new ClientException(_("Invalid filename.")); - } - return $this->filename; + return File::tryFilename($this->filename); } + /** + * + * @return string full filesystem path to the locally stored thumbnail file + * @throws + */ public function getPath() { $oldpath = File::path($this->getFilename()); $thumbpath = self::path($this->getFilename()); - // If we have a file in our old thumbnail storage path, move it to the new one + // If we have a file in our old thumbnail storage path, move (or copy) it to the new one + // (if the if/elseif don't match, we have a $thumbpath just as we should and can return it) if (file_exists($oldpath) && !file_exists($thumbpath)) { - if ($this->getFilename() === $this->getFile()->filename) { - // special case where thumbnail file exactly matches stored File - common_debug('File filename and File_thumbnail filename match on '.$this->file_id); + try { + // let's get the filename of the File, to check below if it happens to be identical + $file_filename = $this->getFile()->getFilename(); + } catch (NoResultException $e) { + // reasonably the function calling us will handle the following as "File_thumbnail entry should be deleted" + throw new FileNotFoundException($thumbpath); + } catch (InvalidFilenameException $e) { + // invalid filename in getFile()->getFilename(), just + // means the File object isn't stored locally and that + // means it's safe to move it below. + $file_filename = null; + } + + if ($this->getFilename() === $file_filename) { + // special case where thumbnail file exactly matches stored File filename + common_debug('File filename and File_thumbnail filename match on '.$this->file_id.', copying instead'); + copy($oldpath, $thumbpath); } elseif (!rename($oldpath, $thumbpath)) { common_log(LOG_ERR, 'Could not move thumbnail from '._ve($oldpath).' to '._ve($thumbpath)); throw new ServerException('Could not move thumbnail from old path to new path.'); @@ -198,6 +210,7 @@ class File_thumbnail extends Managed_DataObject } elseif (!file_exists($thumbpath)) { throw new FileNotFoundException($thumbpath); } + return $thumbpath; } @@ -241,15 +254,15 @@ class File_thumbnail extends Managed_DataObject public function delete($useWhere=false) { - if (!empty($this->filename)) { - try { - $deleted = @unlink($this->getPath()); - if (!$deleted) { - common_log(LOG_ERR, 'Could not unlink existing thumbnail file: '._ve($this->getPath())); - } - } catch (FileNotFoundException $e) { - common_log(LOG_INFO, 'Thumbnail already gone from '._ve($e->path)); + try { + $thumbpath = self::path($this->getFilename()); + // if file does not exist, try to delete it + $deleted = !file_exists($thumbpath) || @unlink($thumbpath); + if (!$deleted) { + common_log(LOG_ERR, 'Could not unlink existing thumbnail file: '._ve($thumbpath)); } + } catch (InvalidFilenameException $e) { + common_log(LOG_ERR, 'Deleting object but not attempting deleting file: '._ve($e->getMessage())); } return parent::delete($useWhere); @@ -260,6 +273,10 @@ class File_thumbnail extends Managed_DataObject return File::getByID($this->file_id); } + public function getFileId() + { + return $this->file_id; + } static public function hashurl($url) {