Merge pull request #21845 from owncloud/sync-system-addressbook-on-avatar-change
Changing the avatar of the user emits the changeUser event which trig…
This commit is contained in:
commit
5285460669
|
@ -29,9 +29,12 @@
|
|||
|
||||
namespace OC;
|
||||
|
||||
use OC\User\User;
|
||||
use OCP\Files\Folder;
|
||||
use OCP\Files\File;
|
||||
use OCP\Files\NotFoundException;
|
||||
use OCP\IAvatar;
|
||||
use OCP\IImage;
|
||||
use OCP\IL10N;
|
||||
use OC_Image;
|
||||
|
||||
|
@ -39,22 +42,25 @@ use OC_Image;
|
|||
* This class gets and sets users avatars.
|
||||
*/
|
||||
|
||||
class Avatar implements \OCP\IAvatar {
|
||||
class Avatar implements IAvatar {
|
||||
/** @var Folder */
|
||||
private $folder;
|
||||
|
||||
/** @var IL10N */
|
||||
private $l;
|
||||
/** @var User */
|
||||
private $user;
|
||||
|
||||
/**
|
||||
* constructor
|
||||
*
|
||||
* @param Folder $folder The folder where the avatars are
|
||||
* @param IL10N $l
|
||||
* @param User $user
|
||||
*/
|
||||
public function __construct (Folder $folder, IL10N $l) {
|
||||
public function __construct (Folder $folder, IL10N $l, $user) {
|
||||
$this->folder = $folder;
|
||||
$this->l = $l;
|
||||
$this->user = $user;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -83,15 +89,15 @@ class Avatar implements \OCP\IAvatar {
|
|||
|
||||
/**
|
||||
* sets the users avatar
|
||||
* @param \OCP\IImage|resource|string $data An image object, imagedata or path to set a new avatar
|
||||
* @param IImage|resource|string $data An image object, imagedata or path to set a new avatar
|
||||
* @throws \Exception if the provided file is not a jpg or png image
|
||||
* @throws \Exception if the provided image is not valid
|
||||
* @throws \OC\NotSquareException if the image is not square
|
||||
* @throws NotSquareException if the image is not square
|
||||
* @return void
|
||||
*/
|
||||
public function set ($data) {
|
||||
|
||||
if($data instanceOf \OCP\IImage) {
|
||||
if($data instanceOf IImage) {
|
||||
$img = $data;
|
||||
$data = $img->data();
|
||||
} else {
|
||||
|
@ -110,11 +116,12 @@ class Avatar implements \OCP\IAvatar {
|
|||
}
|
||||
|
||||
if (!($img->height() === $img->width())) {
|
||||
throw new \OC\NotSquareException();
|
||||
throw new NotSquareException();
|
||||
}
|
||||
|
||||
$this->remove();
|
||||
$this->folder->newFile('avatar.'.$type)->putContent($data);
|
||||
$this->user->triggerChange();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -130,13 +137,14 @@ class Avatar implements \OCP\IAvatar {
|
|||
$avatar->delete();
|
||||
}
|
||||
}
|
||||
$this->user->triggerChange();
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public function getFile($size) {
|
||||
$ext = $this->getExtention();
|
||||
$ext = $this->getExtension();
|
||||
|
||||
if ($size === -1) {
|
||||
$path = 'avatar.' . $ext;
|
||||
|
@ -166,12 +174,12 @@ class Avatar implements \OCP\IAvatar {
|
|||
}
|
||||
|
||||
/**
|
||||
* Get the extention of the avatar. If there is no avatar throw Exception
|
||||
* Get the extension of the avatar. If there is no avatar throw Exception
|
||||
*
|
||||
* @return string
|
||||
* @throws NotFoundException
|
||||
*/
|
||||
private function getExtention() {
|
||||
private function getExtension() {
|
||||
if ($this->folder->nodeExists('avatar.jpg')) {
|
||||
return 'jpg';
|
||||
} elseif ($this->folder->nodeExists('avatar.png')) {
|
||||
|
|
|
@ -61,10 +61,11 @@ class AvatarManager implements IAvatarManager {
|
|||
* @return \OCP\IAvatar
|
||||
* @throws \Exception In case the username is potentially dangerous
|
||||
*/
|
||||
public function getAvatar($user) {
|
||||
if (!$this->userManager->userExists($user)) {
|
||||
public function getAvatar($userId) {
|
||||
$user = $this->userManager->get($userId);
|
||||
if (is_null($user)) {
|
||||
throw new \Exception('user does not exist');
|
||||
}
|
||||
return new Avatar($this->rootFolder->getUserFolder($user)->getParent(), $this->l);
|
||||
return new Avatar($this->rootFolder->getUserFolder($userId)->getParent(), $this->l, $user);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -140,9 +140,7 @@ class User implements IUser {
|
|||
$result = $this->backend->setDisplayName($this->uid, $displayName);
|
||||
if ($result) {
|
||||
$this->displayName = $displayName;
|
||||
if ($this->emitter) {
|
||||
$this->emitter->emit('\OC\User', 'changeUser', array($this));
|
||||
}
|
||||
$this->triggerChange();
|
||||
}
|
||||
return $result !== false;
|
||||
} else {
|
||||
|
@ -163,9 +161,7 @@ class User implements IUser {
|
|||
} else {
|
||||
$this->config->setUserValue($this->uid, 'settings', 'email', $mailAddress);
|
||||
}
|
||||
if ($this->emitter) {
|
||||
$this->emitter->emit('\OC\User', 'changeUser', array($this));
|
||||
}
|
||||
$this->triggerChange();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -389,4 +385,10 @@ class User implements IUser {
|
|||
return $url;
|
||||
}
|
||||
|
||||
public function triggerChange() {
|
||||
if ($this->emitter) {
|
||||
$this->emitter->emit('\OC\User', 'changeUser', array($this));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -55,7 +55,7 @@ class AvatarManagerTest extends \Test\TestCase {
|
|||
|
||||
public function testGetAvatarValidUser() {
|
||||
$this->userManager->expects($this->once())
|
||||
->method('userExists')
|
||||
->method('get')
|
||||
->with('validUser')
|
||||
->willReturn(true);
|
||||
|
||||
|
|
|
@ -16,13 +16,18 @@ class AvatarTest extends \Test\TestCase {
|
|||
/** @var \OC\Avatar */
|
||||
private $avatar;
|
||||
|
||||
/** @var \OC\User\User | PHPUnit_Framework_MockObject_MockObject $user */
|
||||
private $user;
|
||||
|
||||
public function setUp() {
|
||||
parent::setUp();
|
||||
|
||||
$this->folder = $this->getMock('\OCP\Files\Folder');
|
||||
/** @var \OCP\IL10N | PHPUnit_Framework_MockObject_MockObject $l */
|
||||
$l = $this->getMock('\OCP\IL10N');
|
||||
$l->method('t')->will($this->returnArgument(0));
|
||||
$this->avatar = new \OC\Avatar($this->folder, $l);
|
||||
$this->user = $this->getMockBuilder('\OC\User\User')->disableOriginalConstructor()->getMock();
|
||||
$this->avatar = new \OC\Avatar($this->folder, $l, $this->user);
|
||||
}
|
||||
|
||||
public function testGetNoAvatar() {
|
||||
|
@ -158,6 +163,9 @@ class AvatarTest extends \Test\TestCase {
|
|||
->method('putContent')
|
||||
->with($image->data());
|
||||
|
||||
// One on remove and once on setting the new avatar
|
||||
$this->user->expects($this->exactly(2))->method('triggerChange');
|
||||
|
||||
$this->avatar->set($image->data());
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue