forked from joomla/super-powers
Update 2024-09-12 05:08:23
This commit is contained in:
parent
b0cdf9d36e
commit
65a2f83ed1
@ -12,6 +12,7 @@
|
||||
namespace VDM\Joomla\Componentbuilder\File;
|
||||
|
||||
|
||||
use Joomla\CMS\Language\Text;
|
||||
use VDM\Joomla\Interfaces\Data\ItemInterface as Item;
|
||||
use VDM\Joomla\Interfaces\Data\ItemsInterface as Items;
|
||||
use VDM\Joomla\Data\Guid;
|
||||
@ -120,7 +121,7 @@ final class Manager
|
||||
|
||||
// store file in the file table
|
||||
$this->item->set(
|
||||
$this->modelFileDetails($details, $guid)
|
||||
$this->modelFileDetails($details, $guid, $entity, $target)
|
||||
);
|
||||
}
|
||||
|
||||
@ -153,13 +154,13 @@ final class Manager
|
||||
protected function modelFileDetails(array $details, string $guid, string $entity, string $target): object
|
||||
{
|
||||
return (object) [
|
||||
'name' => 'soon',
|
||||
'name' => $details['name'],
|
||||
'file_type' => $guid,
|
||||
'ext' => 'me',
|
||||
'size_kb' => 45,
|
||||
'filepath' => $details['full_path'],
|
||||
'entity_type' => $target,
|
||||
'entity' => $guid,
|
||||
'entity' => $entity,
|
||||
'guid' => $this->getGuid('file'),
|
||||
];
|
||||
}
|
||||
|
@ -92,7 +92,7 @@
|
||||
|
||||
// store file in the file table
|
||||
$this->item->set(
|
||||
$this->modelFileDetails($details, $guid)
|
||||
$this->modelFileDetails($details, $guid, $entity, $target)
|
||||
);
|
||||
}
|
||||
|
||||
@ -125,13 +125,13 @@
|
||||
protected function modelFileDetails(array $details, string $guid, string $entity, string $target): object
|
||||
{
|
||||
return (object) [
|
||||
'name' => 'soon',
|
||||
'name' => $details['name'],
|
||||
'file_type' => $guid,
|
||||
'ext' => 'me',
|
||||
'size_kb' => 45,
|
||||
'filepath' => $details['full_path'],
|
||||
'entity_type' => $target,
|
||||
'entity' => $guid,
|
||||
'entity' => $entity,
|
||||
'guid' => $this->getGuid('file'),
|
||||
];
|
||||
}
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"add_head": "0",
|
||||
"add_head": "1",
|
||||
"add_licensing_template": "2",
|
||||
"extends": "",
|
||||
"guid": "67a5e0ca-0ff0-4979-9b41-da0b09988016",
|
||||
@ -35,6 +35,6 @@
|
||||
"namespace": "[[[NamespacePrefix]]]\\Joomla\\[[[ComponentNamespace]]].File.Manager",
|
||||
"description": "File Manager Class\r\n\r\n@since 5.0.2",
|
||||
"licensing_template": "\/**\r\n * @package Joomla.Component.Builder\r\n *\r\n * @created 3rd September, 2020\r\n * @author Llewellyn van der Merwe <https:\/\/dev.vdm.io>\r\n * @git Joomla Component Builder <https:\/\/git.vdm.dev\/joomla\/Component-Builder>\r\n * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.\r\n * @license GNU General Public License version 2 or later; see LICENSE.txt\r\n *\/\r\n",
|
||||
"head": "",
|
||||
"head": "use Joomla\\CMS\\Language\\Text;",
|
||||
"composer": ""
|
||||
}
|
@ -53,7 +53,7 @@ final class Display
|
||||
*/
|
||||
public function get(string $entity, string $target): ?array
|
||||
{
|
||||
if (($files = $this->items->table->('file')->get([$entity], 'entity')) !== null)
|
||||
if (($files = $this->items->table('file')->get([$entity], 'entity')) !== null)
|
||||
{
|
||||
foreach ($files as $n => $file)
|
||||
{
|
||||
|
@ -29,7 +29,7 @@
|
||||
*/
|
||||
public function get(string $entity, string $target): ?array
|
||||
{
|
||||
if (($files = $this->items->table->('file')->get([$entity], 'entity')) !== null)
|
||||
if (($files = $this->items->table('file')->get([$entity], 'entity')) !== null)
|
||||
{
|
||||
foreach ($files as $n => $file)
|
||||
{
|
||||
|
@ -14,7 +14,7 @@
|
||||
abstract UploadHelper #Orange {
|
||||
+ {static} get(string $field, string $type, ...) : ?array
|
||||
+ {static} getError(bool $toString = false) : array|string
|
||||
# {static} check(array $upload, string $type) : array|null
|
||||
# {static} check(array $upload, string $type) : ?array
|
||||
# {static} remove(string $fullPath) : boolean
|
||||
# {static} setError(string $message) : void
|
||||
}
|
||||
@ -42,7 +42,7 @@ end note
|
||||
note right of UploadHelper::check
|
||||
Check a file and verifies it as a allowed file format file
|
||||
|
||||
return: array|null
|
||||
return: ?array
|
||||
end note
|
||||
|
||||
note right of UploadHelper::remove
|
||||
|
@ -14,9 +14,9 @@ namespace VDM\Joomla\Utilities;
|
||||
|
||||
use Joomla\CMS\Factory;
|
||||
use Joomla\CMS\Language\Text;
|
||||
use Joomla\CMS\Filesystem\File;
|
||||
use Joomla\CMS\Filesystem\Folder;
|
||||
use Joomla\CMS\Filesystem\Path;
|
||||
use Joomla\Filesystem\File;
|
||||
use Joomla\Filesystem\Folder;
|
||||
use Joomla\Filesystem\Path;
|
||||
use VDM\Joomla\Utilities\Component\Helper;
|
||||
|
||||
|
||||
@ -84,9 +84,9 @@ abstract class UploadHelper
|
||||
/**
|
||||
* Get file/files from a HTTP upload.
|
||||
*
|
||||
* @param string $field The input field name
|
||||
* @param string $type The file type
|
||||
* @param string|null $filter The filter to use when uploading the file
|
||||
* @param string $field The input field name
|
||||
* @param string $type The file type
|
||||
* @param string|null $filter The filter to use when uploading the file
|
||||
* @param string|null $path The path to the directory where the file must be placed
|
||||
*
|
||||
* @return array|null File details or false on failure.
|
||||
@ -187,7 +187,7 @@ abstract class UploadHelper
|
||||
// check that his name has file format
|
||||
if (is_string($name) && strpos($name, '.') === false)
|
||||
{
|
||||
$name = $name . '.' . MimeHelper::extension(null, $userfile['type']);
|
||||
$name = $name . '.' . MimeHelper::extension($userfile['name']);
|
||||
}
|
||||
$userfile['file_name'] = $name;
|
||||
}
|
||||
@ -231,10 +231,10 @@ abstract class UploadHelper
|
||||
* @return array|null of elements
|
||||
*
|
||||
*/
|
||||
protected static function check(array $upload, string $type)? ?array
|
||||
protected static function check(array $upload, string $type): ?array
|
||||
{
|
||||
// Default formats
|
||||
$formats = MimeHelper::extensions($type);
|
||||
$formats = MimeHelper::getFileExtensions($type);
|
||||
|
||||
// Clean the path
|
||||
$upload_path = Path::clean($upload['full_path']);
|
||||
@ -250,7 +250,7 @@ abstract class UploadHelper
|
||||
{
|
||||
// get allowed formats
|
||||
$legal_formats = (array) Helper::getParams()->get($type . '_formats', []);
|
||||
$legal = array_values(array_unique(array_merge($legal_formats, static::$legalFormats)))
|
||||
$legal = array_values(array_unique(array_merge($legal_formats, static::$legalFormats)));
|
||||
}
|
||||
|
||||
// check the extension
|
||||
|
@ -55,9 +55,9 @@
|
||||
/**
|
||||
* Get file/files from a HTTP upload.
|
||||
*
|
||||
* @param string $field The input field name
|
||||
* @param string $type The file type
|
||||
* @param string|null $filter The filter to use when uploading the file
|
||||
* @param string $field The input field name
|
||||
* @param string $type The file type
|
||||
* @param string|null $filter The filter to use when uploading the file
|
||||
* @param string|null $path The path to the directory where the file must be placed
|
||||
*
|
||||
* @return array|null File details or false on failure.
|
||||
@ -158,7 +158,7 @@
|
||||
// check that his name has file format
|
||||
if (is_string($name) && strpos($name, '.') === false)
|
||||
{
|
||||
$name = $name . '.' . MimeHelper::extension(null, $userfile['type']);
|
||||
$name = $name . '.' . MimeHelper::extension($userfile['name']);
|
||||
}
|
||||
$userfile['file_name'] = $name;
|
||||
}
|
||||
@ -202,10 +202,10 @@
|
||||
* @return array|null of elements
|
||||
*
|
||||
*/
|
||||
protected static function check(array $upload, string $type)? ?array
|
||||
protected static function check(array $upload, string $type): ?array
|
||||
{
|
||||
// Default formats
|
||||
$formats = MimeHelper::extensions($type);
|
||||
$formats = MimeHelper::getFileExtensions($type);
|
||||
|
||||
// Clean the path
|
||||
$upload_path = Path::clean($upload['full_path']);
|
||||
@ -221,7 +221,7 @@
|
||||
{
|
||||
// get allowed formats
|
||||
$legal_formats = (array) Helper::getParams()->get($type . '_formats', []);
|
||||
$legal = array_values(array_unique(array_merge($legal_formats, static::$legalFormats)))
|
||||
$legal = array_values(array_unique(array_merge($legal_formats, static::$legalFormats)));
|
||||
}
|
||||
|
||||
// check the extension
|
||||
|
@ -26,6 +26,6 @@
|
||||
"namespace": "[[[NamespacePrefix]]]\\Joomla\\Utilities.UploadHelper",
|
||||
"description": "Upload Helper\r\n\r\n@since 3.0.11",
|
||||
"licensing_template": "\/**\r\n * @package Joomla.Component.Builder\r\n *\r\n * @created 3rd September, 2020\r\n * @author Llewellyn van der Merwe <https:\/\/dev.vdm.io>\r\n * @git Joomla Component Builder <https:\/\/git.vdm.dev\/joomla\/Component-Builder>\r\n * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.\r\n * @license GNU General Public License version 2 or later; see LICENSE.txt\r\n *\/\r\n",
|
||||
"head": "use Joomla\\CMS\\Factory;\r\nuse Joomla\\CMS\\Language\\Text;\r\nuse Joomla\\CMS\\Filesystem\\File;\r\nuse Joomla\\CMS\\Filesystem\\Folder;\r\nuse Joomla\\CMS\\Filesystem\\Path;",
|
||||
"head": "use Joomla\\CMS\\Factory;\r\nuse Joomla\\CMS\\Language\\Text;\r\nuse Joomla\\Filesystem\\File;\r\nuse Joomla\\Filesystem\\Folder;\r\nuse Joomla\\Filesystem\\Path;",
|
||||
"composer": ""
|
||||
}
|
@ -12,13 +12,30 @@
|
||||
```uml
|
||||
@startuml
|
||||
abstract MimeHelper #Orange {
|
||||
+ {static} extension(string $file) : string
|
||||
+ {static} mimeType(string $file) : string
|
||||
# {static} mimeTypeFilename(string $file) : string
|
||||
+ {static} getFileExtensions(string $target = null, boolean $sorted = false) : array
|
||||
}
|
||||
|
||||
note right of MimeHelper::mimeType
|
||||
Get the mime type based on file extension
|
||||
note right of MimeHelper::extension
|
||||
Get the file extension from a full path OR file name.
|
||||
|
||||
since: 5.0.3
|
||||
return: string
|
||||
end note
|
||||
|
||||
note right of MimeHelper::mimeType
|
||||
Get the mime type based on the full file path.
|
||||
|
||||
since: 5.0.3
|
||||
return: string
|
||||
end note
|
||||
|
||||
note right of MimeHelper::mimeTypeFilename
|
||||
Get the mime type based on the file extension from a file name.
|
||||
|
||||
since: 5.0.3
|
||||
return: string
|
||||
end note
|
||||
|
||||
|
@ -1015,14 +1015,34 @@ abstract class MimeHelper
|
||||
|
||||
|
||||
/**
|
||||
* Get the mime type based on file extension
|
||||
* Get the file extension from a full path OR file name.
|
||||
*
|
||||
* @param string $file The file name or path
|
||||
* @param string $file The full file path or file name.
|
||||
*
|
||||
* @return string the mime type on success
|
||||
*
|
||||
* @return string The file extension in lowercase or an empty string if none found.
|
||||
* @since 5.0.3
|
||||
*/
|
||||
public static function mimeType($file)
|
||||
public static function extension(string $file): string
|
||||
{
|
||||
// Ensure the input is a valid string and contains a file extension
|
||||
if (strpos($file, '.') === false)
|
||||
{
|
||||
return '';
|
||||
}
|
||||
|
||||
// Extract and return the extension from the path
|
||||
return strtolower(pathinfo($file, PATHINFO_EXTENSION));
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the mime type based on the full file path.
|
||||
*
|
||||
* @param string $file The full file path.
|
||||
*
|
||||
* @return string The mime type or 'application/octet-stream' if none found.
|
||||
* @since 5.0.3
|
||||
*/
|
||||
public static function mimeType(string $file): string
|
||||
{
|
||||
/**
|
||||
* **DISCLAIMER**
|
||||
@ -1030,26 +1050,61 @@ abstract class MimeHelper
|
||||
* array. It does not guarantee that the file is TRULY that
|
||||
* of the extension that this function returns.
|
||||
* https://gist.github.com/Llewellynvdm/74be373357e131b8775a7582c3de508b
|
||||
*/
|
||||
*/
|
||||
|
||||
// get the extension form file
|
||||
$extension = strtolower(pathinfo($file, PATHINFO_EXTENSION));
|
||||
// check if we have the extension listed
|
||||
if (isset(self::$fileExtensionToMimeType[$extension]))
|
||||
// Ensure the file exists to avoid unnecessary processing
|
||||
if (!is_file($file) || !is_readable($file))
|
||||
{
|
||||
return self::mimeTypeFilename($file);
|
||||
}
|
||||
|
||||
// Use finfo to get MIME type based on file content if available
|
||||
if (function_exists('finfo_open'))
|
||||
{
|
||||
$finfo = finfo_open(FILEINFO_MIME_TYPE);
|
||||
$mimetype = finfo_file($finfo, $file);
|
||||
finfo_close($finfo);
|
||||
|
||||
if ($mimetype)
|
||||
{
|
||||
return $mimetype;
|
||||
}
|
||||
}
|
||||
|
||||
// Fallback to mime_content_type() if available
|
||||
if (function_exists('mime_content_type'))
|
||||
{
|
||||
$mimetype = mime_content_type($file);
|
||||
if ($mimetype)
|
||||
{
|
||||
return $mimetype;
|
||||
}
|
||||
}
|
||||
|
||||
// Fallback to application/octet-stream as a generic binary stream type
|
||||
return 'application/octet-stream';
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the mime type based on the file extension from a file name.
|
||||
*
|
||||
* @param string $file The file name (without path).
|
||||
*
|
||||
* @return string The mime type or 'application/octet-stream' if none found.
|
||||
* @since 5.0.3
|
||||
*/
|
||||
protected static function mimeTypeFilename(string $file): string
|
||||
{
|
||||
// Get the extension
|
||||
$extension = self::extension($file);
|
||||
|
||||
// Predefined MIME types by extension for quick lookup
|
||||
if (!empty($extension) && isset(self::$fileExtensionToMimeType[$extension]))
|
||||
{
|
||||
return self::$fileExtensionToMimeType[$extension];
|
||||
}
|
||||
elseif (function_exists('mime_content_type'))
|
||||
{
|
||||
return mime_content_type($file);
|
||||
}
|
||||
elseif (function_exists('finfo_open'))
|
||||
{
|
||||
$finfo = finfo_open(FILEINFO_MIME);
|
||||
$mimetype = finfo_file($finfo, $file);
|
||||
finfo_close($finfo);
|
||||
return $mimetype;
|
||||
}
|
||||
|
||||
// Fallback to application/octet-stream if extension is unknown
|
||||
return 'application/octet-stream';
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user