Fix update of avatar image
This commit is contained in:
parent
4c695e63c0
commit
f558ac7dd5
2 changed files with 49 additions and 33 deletions
|
@ -21,6 +21,7 @@
|
||||||
|
|
||||||
namespace OCA\DAV\CardDAV;
|
namespace OCA\DAV\CardDAV;
|
||||||
|
|
||||||
|
use OCP\IImage;
|
||||||
use OCP\IUser;
|
use OCP\IUser;
|
||||||
use Sabre\VObject\Component\VCard;
|
use Sabre\VObject\Component\VCard;
|
||||||
use Sabre\VObject\Property\Text;
|
use Sabre\VObject\Property\Text;
|
||||||
|
@ -68,21 +69,22 @@ class Converter {
|
||||||
$image = $user->getAvatarImage(-1);
|
$image = $user->getAvatarImage(-1);
|
||||||
|
|
||||||
$updated = false;
|
$updated = false;
|
||||||
if((is_null($vCard->FN) && !empty($displayName)) || (!is_null($vCard->FN) && $vCard->FN->getValue() !== $displayName)) {
|
if($this->propertyNeedsUpdate($vCard, 'FN', $displayName)) {
|
||||||
$vCard->FN = new Text($vCard, 'FN', $displayName);
|
$vCard->FN = new Text($vCard, 'FN', $displayName);
|
||||||
unset($vCard->N);
|
unset($vCard->N);
|
||||||
$vCard->add(new Text($vCard, 'N', $this->splitFullName($displayName)));
|
$vCard->add(new Text($vCard, 'N', $this->splitFullName($displayName)));
|
||||||
$updated = true;
|
$updated = true;
|
||||||
}
|
}
|
||||||
if((is_null($vCard->EMail) && !empty($emailAddress)) || (!is_null($vCard->EMail) && $vCard->EMail->getValue() !== $emailAddress)) {
|
if($this->propertyNeedsUpdate($vCard, 'EMAIL', $emailAddress)) {
|
||||||
$vCard->EMAIL = new Text($vCard, 'EMAIL', $emailAddress);
|
$vCard->EMAIL = new Text($vCard, 'EMAIL', $emailAddress);
|
||||||
$updated = true;
|
$updated = true;
|
||||||
}
|
}
|
||||||
if((is_null($vCard->CLOUD) && !empty($cloudId)) || (!is_null($vCard->CLOUD) && $vCard->CLOUD->getValue() !== $cloudId)) {
|
if($this->propertyNeedsUpdate($vCard, 'CLOUD', $cloudId)) {
|
||||||
$vCard->CLOUD = new Text($vCard, 'CLOUD', $cloudId);
|
$vCard->CLOUD = new Text($vCard, 'CLOUD', $cloudId);
|
||||||
$updated = true;
|
$updated = true;
|
||||||
}
|
}
|
||||||
if((is_null($vCard->PHOTO) && !empty($image)) || (!is_null($vCard->PHOTO) && $vCard->PHOTO->getValue() !== $image)) {
|
|
||||||
|
if($this->propertyNeedsUpdate($vCard, 'PHOTO', $image)) {
|
||||||
$vCard->add('PHOTO', $image->data(), ['ENCODING' => 'b', 'TYPE' => $image->mimeType()]);
|
$vCard->add('PHOTO', $image->data(), ['ENCODING' => 'b', 'TYPE' => $image->mimeType()]);
|
||||||
$updated = true;
|
$updated = true;
|
||||||
}
|
}
|
||||||
|
@ -103,6 +105,20 @@ class Converter {
|
||||||
return $updated;
|
return $updated;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function propertyNeedsUpdate(VCard $vCard, $name, $newValue) {
|
||||||
|
if (is_null($newValue)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
$value = $vCard->__get($name);
|
||||||
|
if (!is_null($value)) {
|
||||||
|
$value = $value->getValue();
|
||||||
|
$newValue = $newValue instanceof IImage ? $newValue->data() : $newValue;
|
||||||
|
|
||||||
|
return $value !== $newValue;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param string $fullName
|
* @param string $fullName
|
||||||
* @return string[]
|
* @return string[]
|
||||||
|
@ -126,4 +142,5 @@ class Converter {
|
||||||
|
|
||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,11 +30,7 @@ class ConverterTests extends TestCase {
|
||||||
* @dataProvider providesNewUsers
|
* @dataProvider providesNewUsers
|
||||||
*/
|
*/
|
||||||
public function testCreation($expectedVCard, $displayName = null, $eMailAddress = null, $cloudId = null) {
|
public function testCreation($expectedVCard, $displayName = null, $eMailAddress = null, $cloudId = null) {
|
||||||
$user = $this->getMockBuilder('OCP\IUser')->disableOriginalConstructor()->getMock();
|
$user = $this->getUserMock($displayName, $eMailAddress, $cloudId);
|
||||||
$user->method('getUID')->willReturn('12345');
|
|
||||||
$user->method('getDisplayName')->willReturn($displayName);
|
|
||||||
$user->method('getEMailAddress')->willReturn($eMailAddress);
|
|
||||||
$user->method('getCloudId')->willReturn($cloudId);
|
|
||||||
|
|
||||||
$converter = new Converter();
|
$converter = new Converter();
|
||||||
$vCard = $converter->createCardFromUser($user);
|
$vCard = $converter->createCardFromUser($user);
|
||||||
|
@ -45,22 +41,18 @@ class ConverterTests extends TestCase {
|
||||||
|
|
||||||
public function providesNewUsers() {
|
public function providesNewUsers() {
|
||||||
return [
|
return [
|
||||||
["BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Sabre//Sabre VObject 3.4.7//EN\r\nUID:12345\r\nFN:12345\r\nN:12345;;;;\r\nEND:VCARD\r\n"],
|
["BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Sabre//Sabre VObject 3.4.7//EN\r\nUID:12345\r\nFN:12345\r\nN:12345;;;;\r\nPHOTO;ENCODING=b;TYPE=JPEG:MTIzNDU2Nzg5\r\nEND:VCARD\r\n"],
|
||||||
["BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Sabre//Sabre VObject 3.4.7//EN\r\nUID:12345\r\nFN:Dr. Foo Bar\r\nN:Bar;Dr.;Foo;;\r\nEND:VCARD\r\n", "Dr. Foo Bar"],
|
["BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Sabre//Sabre VObject 3.4.7//EN\r\nUID:12345\r\nFN:Dr. Foo Bar\r\nN:Bar;Dr.;Foo;;\r\nPHOTO;ENCODING=b;TYPE=JPEG:MTIzNDU2Nzg5\r\nEND:VCARD\r\n", "Dr. Foo Bar"],
|
||||||
["BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Sabre//Sabre VObject 3.4.7//EN\r\nUID:12345\r\nFN:Dr. Foo Bar\r\nN:Bar;Dr.;Foo;;\r\nEMAIL;TYPE=OTHER:foo@bar.net\r\nEND:VCARD\r\n", "Dr. Foo Bar", "foo@bar.net"],
|
["BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Sabre//Sabre VObject 3.4.7//EN\r\nUID:12345\r\nFN:Dr. Foo Bar\r\nN:Bar;Dr.;Foo;;\r\nEMAIL;TYPE=OTHER:foo@bar.net\r\nPHOTO;ENCODING=b;TYPE=JPEG:MTIzNDU2Nzg5\r\nEND:VCARD\r\n", "Dr. Foo Bar", "foo@bar.net"],
|
||||||
["BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Sabre//Sabre VObject 3.4.7//EN\r\nUID:12345\r\nFN:Dr. Foo Bar\r\nN:Bar;Dr.;Foo;;\r\nCLOUD:foo@bar.net\r\nEND:VCARD\r\n", "Dr. Foo Bar", null, "foo@bar.net"],
|
["BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Sabre//Sabre VObject 3.4.7//EN\r\nUID:12345\r\nFN:Dr. Foo Bar\r\nN:Bar;Dr.;Foo;;\r\nCLOUD:foo@bar.net\r\nPHOTO;ENCODING=b;TYPE=JPEG:MTIzNDU2Nzg5\r\nEND:VCARD\r\n", "Dr. Foo Bar", null, "foo@bar.net"],
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @dataProvider providesUsersForUpdate
|
* @dataProvider providesNewUsers
|
||||||
*/
|
*/
|
||||||
public function testUpdateOfUnchangedUser($expectedVCard, $displayName = null, $eMailAddress = null, $cloudId = null) {
|
public function testUpdateOfUnchangedUser($expectedVCard, $displayName = null, $eMailAddress = null, $cloudId = null) {
|
||||||
$user = $this->getMockBuilder('OCP\IUser')->disableOriginalConstructor()->getMock();
|
$user = $this->getUserMock($displayName, $eMailAddress, $cloudId);
|
||||||
$user->method('getUID')->willReturn('12345');
|
|
||||||
$user->method('getDisplayName')->willReturn($displayName);
|
|
||||||
$user->method('getEMailAddress')->willReturn($eMailAddress);
|
|
||||||
$user->method('getCloudId')->willReturn($cloudId);
|
|
||||||
|
|
||||||
$converter = new Converter();
|
$converter = new Converter();
|
||||||
$vCard = $converter->createCardFromUser($user);
|
$vCard = $converter->createCardFromUser($user);
|
||||||
|
@ -71,24 +63,11 @@ class ConverterTests extends TestCase {
|
||||||
$this->assertEquals($expectedVCard, $cardData);
|
$this->assertEquals($expectedVCard, $cardData);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function providesUsersForUpdate() {
|
|
||||||
return [
|
|
||||||
["BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Sabre//Sabre VObject 3.4.7//EN\r\nUID:12345\r\nFN:12345\r\nN:12345;;;;\r\nEND:VCARD\r\n"],
|
|
||||||
["BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Sabre//Sabre VObject 3.4.7//EN\r\nUID:12345\r\nFN:Dr. Foo Bar\r\nN:Bar;Dr.;Foo;;\r\nEND:VCARD\r\n", "Dr. Foo Bar"],
|
|
||||||
["BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Sabre//Sabre VObject 3.4.7//EN\r\nUID:12345\r\nFN:Dr. Foo Bar\r\nN:Bar;Dr.;Foo;;\r\nEMAIL;TYPE=OTHER:foo@bar.net\r\nEND:VCARD\r\n", "Dr. Foo Bar", "foo@bar.net"],
|
|
||||||
["BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Sabre//Sabre VObject 3.4.7//EN\r\nUID:12345\r\nFN:Dr. Foo Bar\r\nN:Bar;Dr.;Foo;;\r\nCLOUD:foo@bar.net\r\nEND:VCARD\r\n", "Dr. Foo Bar", null, "foo@bar.net"],
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @dataProvider providesUsersForUpdateOfRemovedElement
|
* @dataProvider providesUsersForUpdateOfRemovedElement
|
||||||
*/
|
*/
|
||||||
public function testUpdateOfRemovedElement($expectedVCard, $displayName = null, $eMailAddress = null, $cloudId = null) {
|
public function testUpdateOfRemovedElement($expectedVCard, $displayName = null, $eMailAddress = null, $cloudId = null) {
|
||||||
$user = $this->getMockBuilder('OCP\IUser')->disableOriginalConstructor()->getMock();
|
$user = $this->getUserMock($displayName, $eMailAddress, $cloudId);
|
||||||
$user->method('getUID')->willReturn('12345');
|
|
||||||
$user->method('getDisplayName')->willReturn($displayName);
|
|
||||||
$user->method('getEMailAddress')->willReturn($eMailAddress);
|
|
||||||
$user->method('getCloudId')->willReturn($cloudId);
|
|
||||||
|
|
||||||
$converter = new Converter();
|
$converter = new Converter();
|
||||||
$vCard = $converter->createCardFromUser($user);
|
$vCard = $converter->createCardFromUser($user);
|
||||||
|
@ -98,6 +77,7 @@ class ConverterTests extends TestCase {
|
||||||
$user1->method('getDisplayName')->willReturn(null);
|
$user1->method('getDisplayName')->willReturn(null);
|
||||||
$user1->method('getEMailAddress')->willReturn(null);
|
$user1->method('getEMailAddress')->willReturn(null);
|
||||||
$user1->method('getCloudId')->willReturn(null);
|
$user1->method('getCloudId')->willReturn(null);
|
||||||
|
$user1->method('getAvatarImage')->willReturn(null);
|
||||||
|
|
||||||
$updated = $converter->updateCard($vCard, $user1);
|
$updated = $converter->updateCard($vCard, $user1);
|
||||||
$this->assertTrue($updated);
|
$this->assertTrue($updated);
|
||||||
|
@ -134,4 +114,23 @@ class ConverterTests extends TestCase {
|
||||||
['Tolkien;John;Ronald Reuel;;', 'John Ronald Reuel Tolkien'],
|
['Tolkien;John;Ronald Reuel;;', 'John Ronald Reuel Tolkien'],
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param $displayName
|
||||||
|
* @param $eMailAddress
|
||||||
|
* @param $cloudId
|
||||||
|
* @return \PHPUnit_Framework_MockObject_MockObject
|
||||||
|
*/
|
||||||
|
protected function getUserMock($displayName, $eMailAddress, $cloudId) {
|
||||||
|
$image0 = $this->getMockBuilder('OCP\IImage')->disableOriginalConstructor()->getMock();
|
||||||
|
$image0->method('mimeType')->willReturn('JPEG');
|
||||||
|
$image0->method('data')->willReturn('123456789');
|
||||||
|
$user = $this->getMockBuilder('OCP\IUser')->disableOriginalConstructor()->getMock();
|
||||||
|
$user->method('getUID')->willReturn('12345');
|
||||||
|
$user->method('getDisplayName')->willReturn($displayName);
|
||||||
|
$user->method('getEMailAddress')->willReturn($eMailAddress);
|
||||||
|
$user->method('getCloudId')->willReturn($cloudId);
|
||||||
|
$user->method('getAvatarImage')->willReturn($image0);
|
||||||
|
return $user;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue