X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=classes%2FFile.php;h=7bd7da27ba5b96b7a8fcefbc0d9b12f54c444b85;hb=1981cb76622977ed3a0a480bfcb427b09ca3c688;hp=0368153acda7a2acba235ef567774d69199061aa;hpb=a24c6fdb3960f27c47d239af5699512decc51332;p=quix0rs-gnu-social.git diff --git a/classes/File.php b/classes/File.php index 0368153acd..7bd7da27ba 100644 --- a/classes/File.php +++ b/classes/File.php @@ -120,7 +120,7 @@ class File extends Managed_DataObject // $args['attachment'] should always be set if action===attachment, given our routing rules $file = File::getByID($args['attachment']); return $file; - } catch (EmptyIdException $e) { + } catch (EmptyPkeyValueException $e) { // ...but $args['attachment'] can also be 0... } catch (NoResultException $e) { // apparently this link goes to us, but is _not_ an existing attachment (File) ID? @@ -260,11 +260,12 @@ class File extends Managed_DataObject public function getFilename() { - if (!self::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 self::tryFilename($this->filename); + } + + public function getSize() + { + return intval($this->size); } // where should the file go? @@ -303,13 +304,12 @@ class File extends Managed_DataObject $ext = common_supported_mime_to_ext($mimetype); // we do, so use it! return $ext; - } catch (Exception $e) { // FIXME: Make this exception more specific to "unknown mime=>ext relation" + } catch (UnknownMimeExtensionException $e) { // We don't know the extension for this mimetype, but let's guess. - // If we are very liberal with uploads ($config['attachments']['supported'] === true) - // then we try to do some guessing based on the filename, if it was supplied. - if (!is_null($filename) && common_config('attachments', 'supported')===true - && preg_match('/^.+\.([A-Za-z0-9]+)$/', $filename, $matches)) { + // If we can't recognize the extension from the MIME, we try + // to guess based on filename, if one was supplied. + if (!is_null($filename) && preg_match('/^.+\.([A-Za-z0-9]+)$/', $filename, $matches)) { // we matched on a file extension, so let's see if it means something. $ext = mb_strtolower($matches[1]); @@ -329,6 +329,8 @@ class File extends Managed_DataObject // the attachment extension based on its filename was not blacklisted so it's ok to use it return $ext; } + } catch (Exception $e) { + common_log(LOG_INFO, 'Problem when figuring out extension for mimetype: '._ve($e)); } // If nothing else has given us a result, try to extract it from @@ -349,15 +351,23 @@ class File extends Managed_DataObject return preg_match('/^[A-Za-z0-9._-]+$/', $filename); } + static function tryFilename($filename) + { + if (!self::validFilename($filename)) + { + throw new InvalidFilenameException($filename); + } + // if successful, return the filename for easy if-statementing + return $filename; + } + /** * @throws ClientException on invalid filename */ static function path($filename) { - if (!self::validFilename($filename)) { - // TRANS: Client exception thrown if a file upload does not have a valid name. - throw new ClientException(_("Invalid filename.")); - } + self::tryFilename($filename); + $dir = common_config('attachments', 'dir'); if (!in_array($dir[mb_strlen($dir)-1], ['/', '\\'])) { @@ -369,10 +379,7 @@ class File extends Managed_DataObject static function url($filename) { - if (!self::validFilename($filename)) { - // TRANS: Client exception thrown if a file upload does not have a valid name. - throw new ClientException(_("Invalid filename.")); - } + self::tryFilename($filename); if (common_config('site','private')) { @@ -477,6 +484,8 @@ class File extends Managed_DataObject * @param $width int Max width of thumbnail in pixels. (if null, use common_config values) * @param $height int Max height of thumbnail in pixels. (if null, square-crop to $width) * @param $crop bool Crop to the max-values' aspect ratio + * @param $force_still bool Don't allow fallback to showing original (such as animated GIF) + * @param $upscale mixed Whether or not to scale smaller images up to larger thumbnail sizes. (null = site default) * * @return File_thumbnail * @@ -497,7 +506,7 @@ class File extends Managed_DataObject return File_thumbnail::byFile($this); } catch (NoResultException $e) { // and if it's not a remote file, it'll be safe to use the locally stored File - throw new UseFileAsThumbnailException($this->id); + throw new UseFileAsThumbnailException($this); } } } @@ -515,13 +524,28 @@ class File extends Managed_DataObject return $filepath; } - public function getUrl($prefer_local=true) + public function getAttachmentUrl() + { + return common_local_url('attachment', array('attachment'=>$this->getID())); + } + + /** + * @param mixed $use_local true means require local, null means prefer local, false means use whatever is stored + */ + public function getUrl($use_local=null) { - if ($prefer_local && !empty($this->filename)) { - // A locally stored file, so let's generate a URL for our instance. - return self::url($this->getFilename()); + if ($use_local !== false) { + if (is_string($this->filename) || !empty($this->filename)) { + // A locally stored file, so let's generate a URL for our instance. + return self::url($this->getFilename()); + } + if ($use_local) { + // if the file wasn't stored locally (has filename) and we require a local URL + throw new FileNotStoredLocallyException($this); + } } + // No local filename available, return the URL we have stored return $this->url; }