Merge pull request #251 from virtualtam/linkdb/date-format
LinkDB::filterDay(): check input date format
This commit is contained in:
commit
7f1dfd1c12
5 changed files with 58 additions and 12 deletions
|
@ -375,7 +375,10 @@ You use the community supported version of the original Shaarli project, by Seba
|
|||
*/
|
||||
public function filterDay($day)
|
||||
{
|
||||
// TODO: check input format
|
||||
if (! checkDateFormat('Ymd', $day)) {
|
||||
throw new Exception('Invalid date format');
|
||||
}
|
||||
|
||||
$filtered = array();
|
||||
foreach ($this->links as $l) {
|
||||
if (startsWith($l['linkdate'], $day)) {
|
||||
|
|
|
@ -69,4 +69,19 @@ function sanitizeLink(&$link)
|
|||
$link['description'] = escape($link['description']);
|
||||
$link['tags'] = escape($link['tags']);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if a string represents a valid date
|
||||
*
|
||||
* @param string a string-formatted date
|
||||
* @param format the expected DateTime format of the string
|
||||
* @return whether the string is a valid date
|
||||
* @see http://php.net/manual/en/class.datetime.php
|
||||
* @see http://php.net/manual/en/datetime.createfromformat.php
|
||||
*/
|
||||
function checkDateFormat($format, $string)
|
||||
{
|
||||
$date = DateTime::createFromFormat($format, $string);
|
||||
return $date && $date->format($string) == $string;
|
||||
}
|
||||
?>
|
||||
|
|
|
@ -957,7 +957,13 @@ function showDaily()
|
|||
if ($i<count($days)-1) $nextday=$days[$i+1];
|
||||
}
|
||||
|
||||
$linksToDisplay=$LINKSDB->filterDay($day);
|
||||
try {
|
||||
$linksToDisplay = $LINKSDB->filterDay($day);
|
||||
} catch (Exception $exc) {
|
||||
error_log($exc);
|
||||
$linksToDisplay = [];
|
||||
}
|
||||
|
||||
// We pre-format some fields for proper output.
|
||||
foreach($linksToDisplay as $key=>$link)
|
||||
{
|
||||
|
|
|
@ -396,19 +396,22 @@ class LinkDBTest extends PHPUnit_Framework_TestCase
|
|||
|
||||
/**
|
||||
* Use an invalid date format
|
||||
* @expectedException Exception
|
||||
* @expectedExceptionMessageRegExp /Invalid date format/
|
||||
*/
|
||||
public function testFilterInvalidDay()
|
||||
public function testFilterInvalidDayWithChars()
|
||||
{
|
||||
$this->assertEquals(
|
||||
0,
|
||||
sizeof(self::$privateLinkDB->filterDay('Rainy day, dream away'))
|
||||
);
|
||||
self::$privateLinkDB->filterDay('Rainy day, dream away');
|
||||
}
|
||||
|
||||
// TODO: check input format
|
||||
$this->assertEquals(
|
||||
6,
|
||||
sizeof(self::$privateLinkDB->filterDay('20'))
|
||||
);
|
||||
/**
|
||||
* Use an invalid date format
|
||||
* @expectedException Exception
|
||||
* @expectedExceptionMessageRegExp /Invalid date format/
|
||||
*/
|
||||
public function testFilterInvalidDayDigits()
|
||||
{
|
||||
self::$privateLinkDB->filterDay('20');
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -74,5 +74,24 @@ class UtilsTest extends PHPUnit_Framework_TestCase
|
|||
$this->assertTrue(endsWith('å!ùµ', 'ùµ', false));
|
||||
$this->assertTrue(endsWith('µ$åù', 'åù', true));
|
||||
}
|
||||
|
||||
/**
|
||||
* Check valid date strings, according to a DateTime format
|
||||
*/
|
||||
public function testCheckValidDateFormat()
|
||||
{
|
||||
$this->assertTrue(checkDateFormat('Ymd', '20150627'));
|
||||
$this->assertTrue(checkDateFormat('Y-m-d', '2015-06-27'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Check erroneous date strings, according to a DateTime format
|
||||
*/
|
||||
public function testCheckInvalidDateFormat()
|
||||
{
|
||||
$this->assertFalse(checkDateFormat('Ymd', '2015'));
|
||||
$this->assertFalse(checkDateFormat('Y-m-d', '2015-06'));
|
||||
$this->assertFalse(checkDateFormat('Ymd', 'DeLorean'));
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
|
Loading…
Reference in a new issue