diff --git a/lam/lib/account.inc b/lam/lib/account.inc index 99a0e822..9b0a7e81 100644 --- a/lam/lib/account.inc +++ b/lam/lib/account.inc @@ -1485,9 +1485,11 @@ function formatSecondsToShortFormat($numSeconds) { $minutes = ($minutes == 0) ? '' : $minutes . 'm'; $hours = floor(($numSeconds % 86400) / 3600); $hours = ($hours == 0) ? '' : $hours . 'h'; - $days = floor($numSeconds / 86400); + $days = floor(($numSeconds % 604800) / 86400); $days = ($days == 0) ? '' : $days . 'd'; - return $days . $hours . $minutes . $seconds; + $weeks = floor($numSeconds / 604800); + $weeks = ($weeks == 0) ? '' : $weeks . 'w'; + return $weeks . $days . $hours . $minutes . $seconds; } /** @@ -1501,19 +1503,22 @@ function unformatShortFormatToSeconds($text) { return $text; } $matches = array(); - if (preg_match('/^(([0-9]+)d)?(([0-9]+)h)?(([0-9]+)m)?(([0-9]+)s)?$/', $text, $matches)) { + if (preg_match('/^(([0-9]+)w)?(([0-9]+)d)?(([0-9]+)h)?(([0-9]+)m)?(([0-9]+)s)?$/', $text, $matches)) { $newValue = 0; if (!empty($matches[2])) { - $newValue += $matches[2] * 86400; + $newValue += $matches[2] * 604800; } if (!empty($matches[4])) { - $newValue += $matches[4] * 3600; + $newValue += $matches[4] * 86400; } if (!empty($matches[6])) { - $newValue += $matches[6] * 60; + $newValue += $matches[6] * 3600; } if (!empty($matches[8])) { - $newValue += $matches[8]; + $newValue += $matches[8] * 60; + } + if (!empty($matches[10])) { + $newValue += $matches[10]; } return $newValue; } diff --git a/lam/tests/lib/accountTest.php b/lam/tests/lib/accountTest.php index 3990fa7f..5c6e02d5 100644 --- a/lam/tests/lib/accountTest.php +++ b/lam/tests/lib/accountTest.php @@ -48,6 +48,7 @@ class AccountTest extends PHPUnit_Framework_TestCase { $this->assertEquals(7215, unformatShortFormatToSeconds('2h15s')); $this->assertEquals(172815, unformatShortFormatToSeconds('2d15s')); $this->assertEquals(173700, unformatShortFormatToSeconds('2d15m')); + $this->assertEquals(1209615, unformatShortFormatToSeconds('2w15s')); } /** @@ -58,4 +59,33 @@ class AccountTest extends PHPUnit_Framework_TestCase { $this->assertEquals('', unformatShortFormatToSeconds('')); } + /** + * Tests formatShortFormatToSeconds() without characters. + */ + function testFormatSecondsToShortFormat_basic() { + $this->assertEquals("15s", formatSecondsToShortFormat('15')); + } + + /** + * Tests formatShortFormatToSeconds() with characters. + */ + function testFormatSecondsToShortFormat_conversion() { + $this->assertEquals('12s', formatSecondsToShortFormat(12)); + $this->assertEquals('3m', formatSecondsToShortFormat(180)); + $this->assertEquals('2h', formatSecondsToShortFormat(7200)); + $this->assertEquals('1d', formatSecondsToShortFormat(86400)); + $this->assertEquals('2m15s', formatSecondsToShortFormat(135)); + $this->assertEquals('2h15s', formatSecondsToShortFormat(7215)); + $this->assertEquals('2d15s', formatSecondsToShortFormat(172815)); + $this->assertEquals('2d15m', formatSecondsToShortFormat(173700)); + $this->assertEquals('2w15s', formatSecondsToShortFormat(1209615)); + } + + /** + * Tests formatShortFormatToSeconds() with invalid values. + */ + function testFormatSecondsToShortFormat_invalidNumber() { + $this->assertEquals('', formatSecondsToShortFormat('')); + } + }