Merge pull request #11595 from owncloud/make_get_display_name_more_robust

strip whitespace from the beginning and end of the display name
This commit is contained in:
blizzz 2014-10-16 11:33:12 +02:00
commit 756f64d728
2 changed files with 58 additions and 2 deletions

View File

@ -89,8 +89,17 @@ class User implements IUser {
*/
public function getDisplayName() {
if (!isset($this->displayName)) {
$displayName = '';
if ($this->backend and $this->backend->implementsActions(OC_USER_BACKEND_GET_DISPLAYNAME)) {
$this->displayName = $this->backend->getDisplayName($this->uid);
// get display name and strip whitespace from the beginning and end of it
$backendDisplayName = $this->backend->getDisplayName($this->uid);
if (is_string($backendDisplayName)) {
$displayName = trim($backendDisplayName);
}
}
if (!empty($displayName)) {
$this->displayName = $displayName;
} else {
$this->displayName = $this->uid;
}
@ -105,7 +114,8 @@ class User implements IUser {
* @return bool
*/
public function setDisplayName($displayName) {
if ($this->canChangeDisplayName()) {
$displayName = trim($displayName);
if ($this->canChangeDisplayName() && !empty($displayName)) {
$this->displayName = $displayName;
$result = $this->backend->setDisplayName($this->uid, $displayName);
return $result !== false;

View File

@ -32,6 +32,28 @@ class User extends \PHPUnit_Framework_TestCase {
$this->assertEquals('Foo', $user->getDisplayName());
}
/**
* if the display name contain whitespaces only, we expect the uid as result
*/
public function testDisplayNameEmpty() {
/**
* @var \OC_User_Backend | \PHPUnit_Framework_MockObject_MockObject $backend
*/
$backend = $this->getMock('\OC_User_Backend');
$backend->expects($this->once())
->method('getDisplayName')
->with($this->equalTo('foo'))
->will($this->returnValue(' '));
$backend->expects($this->any())
->method('implementsActions')
->with($this->equalTo(\OC_USER_BACKEND_GET_DISPLAYNAME))
->will($this->returnValue(true));
$user = new \OC\User\User('foo', $backend);
$this->assertEquals('foo', $user->getDisplayName());
}
public function testDisplayNameNotSupported() {
/**
* @var \OC_User_Backend | \PHPUnit_Framework_MockObject_MockObject $backend
@ -305,6 +327,30 @@ class User extends \PHPUnit_Framework_TestCase {
$this->assertEquals('Foo',$user->getDisplayName());
}
/**
* don't allow display names containing whitespaces only
*/
public function testSetDisplayNameEmpty() {
/**
* @var \OC_User_Backend | \PHPUnit_Framework_MockObject_MockObject $backend
*/
$backend = $this->getMock('\OC_User_Database');
$backend->expects($this->any())
->method('implementsActions')
->will($this->returnCallback(function ($actions) {
if ($actions === \OC_USER_BACKEND_SET_DISPLAYNAME) {
return true;
} else {
return false;
}
}));
$user = new \OC\User\User('foo', $backend);
$this->assertFalse($user->setDisplayName(' '));
$this->assertEquals('foo',$user->getDisplayName());
}
public function testSetDisplayNameNotSupported() {
/**
* @var \OC_User_Backend | \PHPUnit_Framework_MockObject_MockObject $backend