mirror of
				https://github.com/yiisoft/yii2.git
				synced 2025-11-04 14:46:19 +08:00 
			
		
		
		
	Merge branch '2524-formatter-format-file-size' of github.com:VinceG/yii2 into VinceG-2524-formatter-format-file-size
Conflicts: framework/CHANGELOG.md
This commit is contained in:
		@ -124,6 +124,7 @@ Yii Framework 2 Change Log
 | 
			
		||||
- Enh #2490: `yii\db\Query::count()` and other query scalar methods now properly handle queries with GROUP BY clause (qiangxue)
 | 
			
		||||
- Enh #2491: Added support for using the same base class name of search model and data model in Gii (qiangxue)
 | 
			
		||||
- Enh #2499: Added ability to downgrade migrations by their absolute apply time (resurtm, gorcer)
 | 
			
		||||
- Enh #2525: Added support for formatting file sizes with `yii\base\Formatter` (VinceG)
 | 
			
		||||
- Enh #2526: Allow for null values in batchInsert (skotos)
 | 
			
		||||
- Enh: Added support for using arrays as option values for console commands (qiangxue)
 | 
			
		||||
- Enh: Added `favicon.ico` and `robots.txt` to default application templates (samdark)
 | 
			
		||||
 | 
			
		||||
@ -66,6 +66,16 @@ class Formatter extends Component
 | 
			
		||||
	 * If not set, "," will be used.
 | 
			
		||||
	 */
 | 
			
		||||
	public $thousandSeparator;
 | 
			
		||||
	/**
 | 
			
		||||
	 * @var array the format used to format size (bytes). Three elements may be specified: "base", "decimals" and "decimalSeparator".
 | 
			
		||||
	 * They correspond to the base at which a kilobyte is calculated (1000 or 1024 bytes per kilobyte, defaults to 1024),
 | 
			
		||||
	 * the number of digits after the decimal point (defaults to 2) and the character displayed as the decimal point.
 | 
			
		||||
	 */
 | 
			
		||||
	public $sizeFormat = [
 | 
			
		||||
		'base' => 1024,
 | 
			
		||||
		'decimals' => 2,
 | 
			
		||||
		'decimalSeparator' => null,
 | 
			
		||||
	];
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Initializes the component.
 | 
			
		||||
@ -404,4 +414,46 @@ class Formatter extends Component
 | 
			
		||||
		$ts = isset($this->thousandSeparator) ? $this->thousandSeparator: ',';
 | 
			
		||||
		return number_format($value, $decimals, $ds, $ts);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Formats the value in bytes as a size in human readable form.
 | 
			
		||||
	 * @param integer $value value in bytes to be formatted
 | 
			
		||||
	 * @param boolean $verbose if full names should be used (e.g. bytes, kilobytes, ...).
 | 
			
		||||
	 * Defaults to false meaning that short names will be used (e.g. B, KB, ...).
 | 
			
		||||
	 * @return string the formatted result
 | 
			
		||||
	 * @see sizeFormat
 | 
			
		||||
	 */
 | 
			
		||||
	public function asSize($value, $verbose = false)
 | 
			
		||||
	{
 | 
			
		||||
		$position = 0;
 | 
			
		||||
 | 
			
		||||
		do {
 | 
			
		||||
			if ($value < $this->sizeFormat['base']) {
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			$value = $value / $this->sizeFormat['base'];
 | 
			
		||||
			$position++;
 | 
			
		||||
		} while ($position < 6);
 | 
			
		||||
 | 
			
		||||
		$value = round($value, $this->sizeFormat['decimals']);
 | 
			
		||||
		$formattedValue = isset($this->sizeFormat['decimalSeparator']) ? str_replace('.', $this->sizeFormat['decimalSeparator'], $value) : $value;
 | 
			
		||||
		$params = ['n' => $formattedValue];
 | 
			
		||||
		
 | 
			
		||||
		switch($position)
 | 
			
		||||
		{
 | 
			
		||||
			case 0:
 | 
			
		||||
				return $verbose ? Yii::t('yii','{n, plural, =1{# byte} other{# bytes}}', $params) : Yii::t('yii', '{n} B', $params);
 | 
			
		||||
			case 1:
 | 
			
		||||
				return $verbose ? Yii::t('yii','{n, plural, =1{# kilobyte} other{# kilobytes}}', $params) : Yii::t('yii','{n} KB', $params);
 | 
			
		||||
			case 2:
 | 
			
		||||
				return $verbose ? Yii::t('yii','{n, plural, =1{# megabyte} other{# megabytes}}', $params) : Yii::t('yii','{n} MB', $params);
 | 
			
		||||
			case 3:
 | 
			
		||||
				return $verbose ? Yii::t('yii','{n, plural, =1{# gigabyte} other{# gigabytes}}', $params) : Yii::t('yii','{n} GB', $params);
 | 
			
		||||
			case 4:
 | 
			
		||||
				return $verbose ? Yii::t('yii','{n, plural, =1{# terabyte} other{# terabytes}}', $params) : Yii::t('yii','{n} TB', $params);
 | 
			
		||||
			default:
 | 
			
		||||
				return $verbose ? Yii::t('yii','{n, plural, =1{# petabyte} other{# petabytes}}', $params) : Yii::t('yii','{n} PB', $params);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user