set birthday year to 1970, take X-APPLE-OMIT-YEAR into account
Signed-off-by: Georg Ehrke <developer@georgehrke.com>
This commit is contained in:
parent
54093e2bd6
commit
9d0ce12970
|
@ -191,10 +191,26 @@ class BirthdayService {
|
|||
}
|
||||
|
||||
$unknownYear = false;
|
||||
$originalYear = null;
|
||||
if (!$dateParts['year']) {
|
||||
$birthday = '1900-' . $dateParts['month'] . '-' . $dateParts['date'];
|
||||
$birthday = '1970-' . $dateParts['month'] . '-' . $dateParts['date'];
|
||||
|
||||
$unknownYear = true;
|
||||
} else {
|
||||
$parameters = $birthday->parameters();
|
||||
if (isset($parameters['X-APPLE-OMIT-YEAR'])) {
|
||||
$omitYear = $parameters['X-APPLE-OMIT-YEAR'];
|
||||
if ($dateParts['year'] === $omitYear) {
|
||||
$birthday = '1970-' . $dateParts['month'] . '-' . $dateParts['date'];
|
||||
$unknownYear = true;
|
||||
}
|
||||
} else {
|
||||
$originalYear = (int)$dateParts['year'];
|
||||
|
||||
if ($originalYear < 1970) {
|
||||
$birthday = '1970-' . $dateParts['month'] . '-' . $dateParts['date'];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
|
@ -205,8 +221,7 @@ class BirthdayService {
|
|||
if ($unknownYear) {
|
||||
$summary = $doc->FN->getValue() . ' ' . $summarySymbol;
|
||||
} else {
|
||||
$year = (int)$date->format('Y');
|
||||
$summary = $doc->FN->getValue() . " ($summarySymbol$year)";
|
||||
$summary = $doc->FN->getValue() . " ($summarySymbol$originalYear)";
|
||||
}
|
||||
$vCal = new VCalendar();
|
||||
$vCal->VERSION = '2.0';
|
||||
|
@ -226,6 +241,11 @@ class BirthdayService {
|
|||
$vEvent->{'RRULE'} = 'FREQ=YEARLY';
|
||||
$vEvent->{'SUMMARY'} = $summary;
|
||||
$vEvent->{'TRANSP'} = 'TRANSPARENT';
|
||||
$vEvent->{'X-NEXTCLOUD-BC-FIELD-TYPE'} = $dateField;
|
||||
$vEvent->{'X-NEXTCLOUD-BC-UNKNOWN-YEAR'} = $unknownYear ? '1' : '0';
|
||||
if ($originalYear !== null) {
|
||||
$vEvent->{'X-NEXTCLOUD-BC-YEAR'} = (string) $originalYear;
|
||||
}
|
||||
$alarm = $vCal->createComponent('VALARM');
|
||||
$alarm->add($vCal->createProperty('TRIGGER', '-PT0M', ['VALUE' => 'DURATION']));
|
||||
$alarm->add($vCal->createProperty('ACTION', 'DISPLAY'));
|
||||
|
|
|
@ -60,10 +60,14 @@ class BirthdayServiceTest extends TestCase {
|
|||
|
||||
/**
|
||||
* @dataProvider providesVCards
|
||||
* @param boolean $expectedSummary
|
||||
* @param string $expectedSummary
|
||||
* @param string $expectedDTStart
|
||||
* @param string $expectedFieldType
|
||||
* @param string $expectedUnknownYear
|
||||
* @param string $expectedOriginalYear
|
||||
* @param string | null $data
|
||||
*/
|
||||
public function testBuildBirthdayFromContact($expectedSummary, $data) {
|
||||
public function testBuildBirthdayFromContact($expectedSummary, $expectedDTStart, $expectedFieldType, $expectedUnknownYear, $expectedOriginalYear, $data) {
|
||||
$cal = $this->service->buildDateFromContact($data, 'BDAY', '', '*');
|
||||
if ($expectedSummary === null) {
|
||||
$this->assertNull($cal);
|
||||
|
@ -72,6 +76,14 @@ class BirthdayServiceTest extends TestCase {
|
|||
$this->assertTrue(isset($cal->VEVENT));
|
||||
$this->assertEquals('FREQ=YEARLY', $cal->VEVENT->RRULE->getValue());
|
||||
$this->assertEquals($expectedSummary, $cal->VEVENT->SUMMARY->getValue());
|
||||
$this->assertEquals($expectedDTStart, $cal->VEVENT->DTSTART->getValue());
|
||||
$this->assertEquals($expectedFieldType, $cal->VEVENT->{'X-NEXTCLOUD-BC-FIELD-TYPE'}->getValue());
|
||||
$this->assertEquals($expectedUnknownYear, $cal->VEVENT->{'X-NEXTCLOUD-BC-UNKNOWN-YEAR'}->getValue());
|
||||
|
||||
if ($expectedOriginalYear) {
|
||||
$this->assertEquals($expectedOriginalYear, $cal->VEVENT->{'X-NEXTCLOUD-BC-YEAR'}->getValue());
|
||||
}
|
||||
|
||||
$this->assertEquals('TRANSPARENT', $cal->VEVENT->TRANSP->getValue());
|
||||
}
|
||||
}
|
||||
|
@ -338,19 +350,20 @@ class BirthdayServiceTest extends TestCase {
|
|||
|
||||
public function providesVCards() {
|
||||
return [
|
||||
[null, null],
|
||||
[null, ''],
|
||||
[null, 'yasfewf'],
|
||||
[null, "BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Sabre//Sabre VObject 4.1.1//EN\r\nUID:12345\r\nFN:12345\r\nN:12345;;;;\r\nEND:VCARD\r\n", "Dr. Foo Bar"],
|
||||
[null, "BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Sabre//Sabre VObject 4.1.1//EN\r\nUID:12345\r\nFN:12345\r\nN:12345;;;;\r\nBDAY:\r\nEND:VCARD\r\n", "Dr. Foo Bar"],
|
||||
[null, "BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Sabre//Sabre VObject 4.1.1//EN\r\nUID:12345\r\nFN:12345\r\nN:12345;;;;\r\nBDAY:someday\r\nEND:VCARD\r\n", "Dr. Foo Bar"],
|
||||
['12345 (*1900)', "BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Sabre//Sabre VObject 4.1.1//EN\r\nUID:12345\r\nFN:12345\r\nN:12345;;;;\r\nBDAY:19000101\r\nEND:VCARD\r\n", "Dr. Foo Bar"],
|
||||
['12345 (*1900)', "BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Sabre//Sabre VObject 4.1.1//EN\r\nUID:12345\r\nFN:12345\r\nN:12345;;;;\r\nBDAY:19001231\r\nEND:VCARD\r\n", "Dr. Foo Bar"],
|
||||
['12345 *', "BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Sabre//Sabre VObject 4.1.1//EN\r\nUID:12345\r\nFN:12345\r\nN:12345;;;;\r\nBDAY:--1231\r\nEND:VCARD\r\n", "Dr. Foo Bar"],
|
||||
['12345 *', "BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Sabre//Sabre VObject 4.1.1//EN\r\nUID:12345\r\nFN:12345\r\nN:12345;;;;\r\nBDAY;X-APPLE-OMIT-YEAR=1604:16041231\r\nEND:VCARD\r\n", "Dr. Foo Bar"],
|
||||
[null, "BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Sabre//Sabre VObject 4.1.1//EN\r\nUID:12345\r\nFN:12345\r\nN:12345;;;;\r\nBDAY:;VALUE=text:circa 1800\r\nEND:VCARD\r\n", "Dr. Foo Bar"],
|
||||
[null, "BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Sabre//Sabre VObject 4.1.1//EN\r\nUID:12345\r\nN:12345;;;;\r\nBDAY:20031231\r\nEND:VCARD\r\n", "Dr. Foo Bar"],
|
||||
['12345 (*900)', "BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Sabre//Sabre VObject 4.1.1//EN\r\nUID:12345\r\nFN:12345\r\nN:12345;;;;\r\nBDAY:09001231\r\nEND:VCARD\r\n", "Dr. Foo Bar"],
|
||||
// $expectedSummary, $expectedDTStart, $expectedFieldType, $expectedUnknownYear, $expectedOriginalYear, $data
|
||||
[null, null, null, null, null, null],
|
||||
[null, null, null, null, null, ''],
|
||||
[null, null, null, null, null, 'yasfewf'],
|
||||
[null, null, null, null, null, "BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Sabre//Sabre VObject 4.1.1//EN\r\nUID:12345\r\nFN:12345\r\nN:12345;;;;\r\nEND:VCARD\r\n", "Dr. Foo Bar"],
|
||||
[null, null, null, null, null, "BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Sabre//Sabre VObject 4.1.1//EN\r\nUID:12345\r\nFN:12345\r\nN:12345;;;;\r\nBDAY:\r\nEND:VCARD\r\n", "Dr. Foo Bar"],
|
||||
[null, null, null, null, null, "BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Sabre//Sabre VObject 4.1.1//EN\r\nUID:12345\r\nFN:12345\r\nN:12345;;;;\r\nBDAY:someday\r\nEND:VCARD\r\n", "Dr. Foo Bar"],
|
||||
['12345 (*1900)', '19700101', 'BDAY', '0', '1900', "BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Sabre//Sabre VObject 4.1.1//EN\r\nUID:12345\r\nFN:12345\r\nN:12345;;;;\r\nBDAY:19000101\r\nEND:VCARD\r\n", "Dr. Foo Bar"],
|
||||
['12345 (*1900)', '19701231', 'BDAY', '0', '1900', "BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Sabre//Sabre VObject 4.1.1//EN\r\nUID:12345\r\nFN:12345\r\nN:12345;;;;\r\nBDAY:19001231\r\nEND:VCARD\r\n", "Dr. Foo Bar"],
|
||||
['12345 *', '19701231', 'BDAY', '1', null, "BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Sabre//Sabre VObject 4.1.1//EN\r\nUID:12345\r\nFN:12345\r\nN:12345;;;;\r\nBDAY:--1231\r\nEND:VCARD\r\n", "Dr. Foo Bar"],
|
||||
['12345 *', '19701231', 'BDAY', '1', null, "BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Sabre//Sabre VObject 4.1.1//EN\r\nUID:12345\r\nFN:12345\r\nN:12345;;;;\r\nBDAY;X-APPLE-OMIT-YEAR=1604:16041231\r\nEND:VCARD\r\n", "Dr. Foo Bar"],
|
||||
[null, null, null, null, null, "BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Sabre//Sabre VObject 4.1.1//EN\r\nUID:12345\r\nFN:12345\r\nN:12345;;;;\r\nBDAY:;VALUE=text:circa 1800\r\nEND:VCARD\r\n", "Dr. Foo Bar"],
|
||||
[null, null, null, null, null, "BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Sabre//Sabre VObject 4.1.1//EN\r\nUID:12345\r\nN:12345;;;;\r\nBDAY:20031231\r\nEND:VCARD\r\n", "Dr. Foo Bar"],
|
||||
['12345 (*900)', '19701231', 'BDAY', '0', '900', "BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Sabre//Sabre VObject 4.1.1//EN\r\nUID:12345\r\nFN:12345\r\nN:12345;;;;\r\nBDAY:09001231\r\nEND:VCARD\r\n", "Dr. Foo Bar"],
|
||||
];
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue