Merge pull request #2961 from phptek/cms-issue-965

NEW Added FormatFromSettings(). Formats dates as per user preferences.
This commit is contained in:
Simon Welsh 2014-03-17 13:09:18 +13:00
commit 804b942e8a
4 changed files with 92 additions and 0 deletions

View File

@ -152,6 +152,28 @@ class Date extends DBField {
}
}
/**
* Return a date formatted as per a CMS user's settings.
*
* @param Member $member
* @return boolean | string A date formatted as per user-defined settings.
*/
public function FormatFromSettings($member = null) {
require_once 'Zend/Date.php';
if(!$member) {
if(!Member::currentUserID()) {
return false;
}
$member = Member::currentUser();
}
$formatD = $member->getDateFormat();
$zendDate = new Zend_Date($this->getValue());
return $zendDate->toString($formatD);
}
/*
* Return a string in the form "12 - 16 Sept" or "12 Aug - 16 Sept"
* @param Date $otherDateObj Another date object specifying the end of the range

View File

@ -92,6 +92,29 @@ class SS_Datetime extends Date implements TemplateGlobalProvider {
public function Time24() {
if($this->value) return $this->Format('H:i');
}
/**
* Return a date and time formatted as per a CMS user's settings.
*
* @param Member $member
* @return boolean | string A time and date pair formatted as per user-defined settings.
*/
public function FormatFromSettings($member = null) {
require_once 'Zend/Date.php';
if(!$member) {
if(!Member::currentUserID()) {
return false;
}
$member = Member::currentUser();
}
$formatD = $member->getDateFormat();
$formatT = $member->getTimeFormat();
$zendDate = new Zend_Date($this->getValue());
return $zendDate->toString($formatD).' '.$zendDate->toString($formatT);
}
public function requireField() {
$parts=Array('datatype'=>'datetime', 'arrayValue'=>$this->arrayValue);

View File

@ -201,5 +201,27 @@ class DateTest extends SapphireTest {
SS_Datetime::clear_mock_now();
}
public function testFormatFromSettings() {
$memberID = $this->logInWithPermission();
$member = DataObject::get_by_id('Member', $memberID);
$member->DateFormat = 'dd/MM/YYYY';
$member->write();
$fixtures = array(
'2000-12-31' => '31/12/2000',
'31-12-2000' => '31/12/2000',
'31/12/2000' => '31/12/2000'
);
foreach($fixtures as $from => $to) {
$date = DBField::create_field('Date', $from);
// With member
$this->assertEquals($to, $date->FormatFromSettings($member));
// Without member
$this->assertEquals($to, $date->FormatFromSettings());
}
}
}

View File

@ -148,5 +148,30 @@ class SS_DatetimeTest extends SapphireTest {
SS_Datetime::clear_mock_now();
}
public function testFormatFromSettings() {
$memberID = $this->logInWithPermission();
$member = DataObject::get_by_id('Member', $memberID);
$member->DateFormat = 'dd/MM/YYYY';
$member->TimeFormat = 'hh:mm:ss';
$member->write();
$fixtures = array(
'2000-12-31 10:11:01' => '31/12/2000 10:11:01',
'2000-12-31 1:11:01' => '31/12/2000 01:11:01',
'12/12/2000 1:11:01' => '12/12/2000 01:11:01',
'2000-12-31' => '31/12/2000 12:00:00',
'10:11:01' => date('d/m/Y').' 10:11:01'
);
foreach($fixtures as $from => $to) {
$date = DBField::create_field('Datetime', $from);
// With member
$this->assertEquals($to, $date->FormatFromSettings($member));
// Without member
$this->assertEquals($to, $date->FormatFromSettings());
}
}
}