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 #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 #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 #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 #2526: Allow for null values in batchInsert (skotos)
 | 
				
			||||||
- Enh: Added support for using arrays as option values for console commands (qiangxue)
 | 
					- 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)
 | 
					- 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.
 | 
						 * If not set, "," will be used.
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	public $thousandSeparator;
 | 
						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.
 | 
						 * Initializes the component.
 | 
				
			||||||
@ -404,4 +414,46 @@ class Formatter extends Component
 | 
				
			|||||||
		$ts = isset($this->thousandSeparator) ? $this->thousandSeparator: ',';
 | 
							$ts = isset($this->thousandSeparator) ? $this->thousandSeparator: ',';
 | 
				
			||||||
		return number_format($value, $decimals, $ds, $ts);
 | 
							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