mirror of
https://github.com/Karaka-Management/phpOMS.git
synced 2026-02-09 21:48:41 +00:00
Add file size formatting
This commit is contained in:
parent
7275e7b475
commit
80dee41e9e
|
|
@ -15,6 +15,7 @@ declare(strict_types=1);
|
||||||
namespace phpOMS\Utils\Converter;
|
namespace phpOMS\Utils\Converter;
|
||||||
|
|
||||||
use phpOMS\Stdlib\Base\Enum;
|
use phpOMS\Stdlib\Base\Enum;
|
||||||
|
use phpOMS\Utils\Converter\Measurement;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* File size type enum.
|
* File size type enum.
|
||||||
|
|
@ -45,4 +46,26 @@ abstract class FileSizeType extends Enum
|
||||||
public const KILOBIT = 'kbit';
|
public const KILOBIT = 'kbit';
|
||||||
|
|
||||||
public const BIT = 'bit';
|
public const BIT = 'bit';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Auto format file size in bytes
|
||||||
|
*
|
||||||
|
* @param float $size File size
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*
|
||||||
|
* @since 1.0.0
|
||||||
|
*/
|
||||||
|
public static function autoFormat(float $size) : array
|
||||||
|
{
|
||||||
|
if ($size < 300) {
|
||||||
|
return [$size, 'B'];
|
||||||
|
} elseif ($size < 1000) {
|
||||||
|
return [Measurement::convertFileSize($size, FileSizeType::BYTE, FileSizeType::KILOBYTE), 'KB'];
|
||||||
|
} elseif ($size < 1000 * 1000 * 1000) {
|
||||||
|
return [Measurement::convertFileSize($size, FileSizeType::BYTE, FileSizeType::MEGABYTE), 'MB'];
|
||||||
|
}
|
||||||
|
|
||||||
|
return [Measurement::convertFileSize($size, FileSizeType::BYTE, FileSizeType::GIGABYTE), 'GB'];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,8 @@ namespace phpOMS\tests\Utils\Converter;
|
||||||
use phpOMS\Utils\Converter\FileSizeType;
|
use phpOMS\Utils\Converter\FileSizeType;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @testdox phpOMS\tests\Utils\Converter\FileSizeTypeTest: File size types
|
||||||
|
*
|
||||||
* @internal
|
* @internal
|
||||||
*/
|
*/
|
||||||
class FileSizeTypeTest extends \PHPUnit\Framework\TestCase
|
class FileSizeTypeTest extends \PHPUnit\Framework\TestCase
|
||||||
|
|
@ -56,4 +58,32 @@ class FileSizeTypeTest extends \PHPUnit\Framework\TestCase
|
||||||
self::assertEquals('kbit', FileSizeType::KILOBIT);
|
self::assertEquals('kbit', FileSizeType::KILOBIT);
|
||||||
self::assertEquals('bit', FileSizeType::BIT);
|
self::assertEquals('bit', FileSizeType::BIT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @testdox File sizes can get automatically formatted according to their size
|
||||||
|
* @covers phpOMS\Utils\Converter\FileSizeType
|
||||||
|
* @group framework
|
||||||
|
*/
|
||||||
|
public function testAutoFormat() : void
|
||||||
|
{
|
||||||
|
self::assertEquals(
|
||||||
|
[250.0, 'B'],
|
||||||
|
FileSizeType::autoFormat(250)
|
||||||
|
);
|
||||||
|
|
||||||
|
self::assertEquals(
|
||||||
|
[0.5, 'KB'],
|
||||||
|
FileSizeType::autoFormat(500)
|
||||||
|
);
|
||||||
|
|
||||||
|
self::assertEquals(
|
||||||
|
[1.024, 'MB'],
|
||||||
|
FileSizeType::autoFormat(1024 * 1000)
|
||||||
|
);
|
||||||
|
|
||||||
|
self::assertEquals(
|
||||||
|
[1.024, 'GB'],
|
||||||
|
FileSizeType::autoFormat(1024 * 1000 * 1000)
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user