mirror of
https://github.com/Lastorder-DC/rhymix.git
synced 2026-05-12 05:22:35 +09:00
Fix #1174 Add number_shorten() function and 'shorten' template filter
This commit is contained in:
parent
4f20f0e8c1
commit
72577ce6bb
4 changed files with 73 additions and 0 deletions
|
|
@ -664,6 +664,11 @@ class TemplateHandler
|
||||||
case 'number_format':
|
case 'number_format':
|
||||||
$var = $filter_option ? "number_format({$var}, {$filter_option})" : "number_format({$var})";
|
$var = $filter_option ? "number_format({$var}, {$filter_option})" : "number_format({$var})";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'shorten':
|
||||||
|
case 'number_shorten':
|
||||||
|
$var = $filter_option ? "number_shorten({$var}, {$filter_option})" : "number_shorten({$var})";
|
||||||
|
break;
|
||||||
|
|
||||||
case 'link':
|
case 'link':
|
||||||
$var = $this->_applyEscapeOption($var, $escape_option);
|
$var = $this->_applyEscapeOption($var, $escape_option);
|
||||||
|
|
|
||||||
|
|
@ -381,6 +381,35 @@ function base64_decode_urlsafe($str)
|
||||||
return @base64_decode(str_pad(strtr($str, '-_', '+/'), ceil(strlen($str) / 4) * 4, '=', STR_PAD_RIGHT));
|
return @base64_decode(str_pad(strtr($str, '-_', '+/'), ceil(strlen($str) / 4) * 4, '=', STR_PAD_RIGHT));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This function shortens a number using common suffixes.
|
||||||
|
*
|
||||||
|
* @param int $number The number to shorten
|
||||||
|
* @param int $significant_digits The number of significant digits to retain
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
function number_shorten($number, $significant_digits = 2)
|
||||||
|
{
|
||||||
|
$length = strlen(abs(intval($number)));
|
||||||
|
switch ($length)
|
||||||
|
{
|
||||||
|
case 0: case 1: case 2: case 3: return strval(intval($number));
|
||||||
|
case 4: return number_format($number / 1000, max(0, $significant_digits - 1)) . 'K';
|
||||||
|
case 5: return number_format($number / 1000, max(0, $significant_digits - 2)) . 'K';
|
||||||
|
case 6: return number_format($number / 1000, max(0, $significant_digits - 3)) . 'K';
|
||||||
|
case 7: return number_format($number / 1000000, max(0, $significant_digits - 1)) . 'M';
|
||||||
|
case 8: return number_format($number / 1000000, max(0, $significant_digits - 2)) . 'M';
|
||||||
|
case 9: return number_format($number / 1000000, max(0, $significant_digits - 3)) . 'M';
|
||||||
|
case 10: return number_format($number / 1000000000, max(0, $significant_digits - 1)) . 'G';
|
||||||
|
case 11: return number_format($number / 1000000000, max(0, $significant_digits - 2)) . 'G';
|
||||||
|
case 12: return number_format($number / 1000000000, max(0, $significant_digits - 3)) . 'G';
|
||||||
|
case 13: return number_format($number / 1000000000000, max(0, $significant_digits - 1)) . 'T';
|
||||||
|
case 14: return number_format($number / 1000000000000, max(0, $significant_digits - 2)) . 'T';
|
||||||
|
case 15: return number_format($number / 1000000000000, max(0, $significant_digits - 3)) . 'T';
|
||||||
|
default: return floor($number / 1000000000000) . 'T';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Convert a server-side path to a URL.
|
* Convert a server-side path to a URL.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -399,6 +399,14 @@ class TemplateHandlerTest extends \Codeception\TestCase\Test
|
||||||
'<p>{$foo|format:2}</p>',
|
'<p>{$foo|format:2}</p>',
|
||||||
'?><p><?php echo number_format($__Context->foo, \'2\') ?></p>'
|
'?><p><?php echo number_format($__Context->foo, \'2\') ?></p>'
|
||||||
),
|
),
|
||||||
|
array(
|
||||||
|
'<p>{$foo|shorten}</p>',
|
||||||
|
'?><p><?php echo number_shorten($__Context->foo) ?></p>'
|
||||||
|
),
|
||||||
|
array(
|
||||||
|
'<p>{$foo|shorten:2}</p>',
|
||||||
|
'?><p><?php echo number_shorten($__Context->foo, \'2\') ?></p>'
|
||||||
|
),
|
||||||
array(
|
array(
|
||||||
'<p>{$foo|date:His}</p>',
|
'<p>{$foo|date:His}</p>',
|
||||||
'?><p><?php echo getDisplayDateTime(ztime($__Context->foo), \'His\') ?></p>'
|
'?><p><?php echo getDisplayDateTime(ztime($__Context->foo), \'His\') ?></p>'
|
||||||
|
|
|
||||||
|
|
@ -103,6 +103,37 @@ class FunctionsTest extends \Codeception\TestCase\Test
|
||||||
$this->assertEquals('Rhymix ^~', base64_decode_urlsafe('Umh5bWl4IF5-'));
|
$this->assertEquals('Rhymix ^~', base64_decode_urlsafe('Umh5bWl4IF5-'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testNumberShorten()
|
||||||
|
{
|
||||||
|
$this->assertEquals('1', number_shorten(1));
|
||||||
|
$this->assertEquals('12', number_shorten(12));
|
||||||
|
$this->assertEquals('123', number_shorten(123));
|
||||||
|
$this->assertEquals('1.2K', number_shorten(1234));
|
||||||
|
$this->assertEquals('12K', number_shorten(12345));
|
||||||
|
$this->assertEquals('123K', number_shorten(123456));
|
||||||
|
$this->assertEquals('1.2M', number_shorten(1234567));
|
||||||
|
$this->assertEquals('12M', number_shorten(12345678));
|
||||||
|
$this->assertEquals('123M', number_shorten(123456789));
|
||||||
|
$this->assertEquals('1.2G', number_shorten(1234567890));
|
||||||
|
$this->assertEquals('12G', number_shorten(12345678900));
|
||||||
|
$this->assertEquals('123G', number_shorten(123456789000));
|
||||||
|
$this->assertEquals('1.2T', number_shorten(1234567890000));
|
||||||
|
$this->assertEquals('12T', number_shorten(12345678900000));
|
||||||
|
$this->assertEquals('123T', number_shorten(123456789000000));
|
||||||
|
$this->assertEquals('1234T', number_shorten(1234567890000000));
|
||||||
|
$this->assertEquals('123', number_shorten(123, 1));
|
||||||
|
$this->assertEquals('1K', number_shorten(1234, 1));
|
||||||
|
$this->assertEquals('12K', number_shorten(12345, 1));
|
||||||
|
$this->assertEquals('5.68K', number_shorten(5678, 3));
|
||||||
|
$this->assertEquals('56.8K', number_shorten(56789, 3));
|
||||||
|
$this->assertEquals('9.877M', number_shorten(9876543, 4));
|
||||||
|
$this->assertEquals('98.77M', number_shorten(98765432, 4));
|
||||||
|
$this->assertEquals('3.3333G', number_shorten(3333333333, 5));
|
||||||
|
$this->assertEquals('33.333G', number_shorten(33333333333, 5));
|
||||||
|
$this->assertEquals('1.00000T', number_shorten(1000000000000, 6));
|
||||||
|
$this->assertEquals('10.0000T', number_shorten(10000000000000, 6));
|
||||||
|
}
|
||||||
|
|
||||||
public function testHex2Rgb2Hex()
|
public function testHex2Rgb2Hex()
|
||||||
{
|
{
|
||||||
$this->assertEquals(array(128, 128, 128), hex2rgb('808080'));
|
$this->assertEquals(array(128, 128, 128), hex2rgb('808080'));
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue