Enable user backends to provide avatar images
This commit is contained in:
parent
54f0deff2a
commit
8ccac86c98
7 changed files with 137 additions and 7 deletions
|
@ -412,6 +412,22 @@ class OC_User {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Check whether user can change his avatar
|
||||
* @param string $uid The username
|
||||
* @return bool
|
||||
*
|
||||
* Check whether a specified user can change his avatar
|
||||
*/
|
||||
public static function canUserChangeAvatar($uid) {
|
||||
$user = self::getManager()->get($uid);
|
||||
if ($user) {
|
||||
return $user->canChangeAvatar();
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Check whether user can change his password
|
||||
* @param string $uid The username
|
||||
|
|
|
@ -31,13 +31,13 @@ define('OC_USER_BACKEND_NOT_IMPLEMENTED', -501);
|
|||
/**
|
||||
* actions that user backends can define
|
||||
*/
|
||||
define('OC_USER_BACKEND_CREATE_USER', 0x000001);
|
||||
define('OC_USER_BACKEND_SET_PASSWORD', 0x000010);
|
||||
define('OC_USER_BACKEND_CHECK_PASSWORD', 0x000100);
|
||||
define('OC_USER_BACKEND_GET_HOME', 0x001000);
|
||||
define('OC_USER_BACKEND_GET_DISPLAYNAME', 0x010000);
|
||||
define('OC_USER_BACKEND_SET_DISPLAYNAME', 0x100000);
|
||||
|
||||
define('OC_USER_BACKEND_CREATE_USER', 0x0000001);
|
||||
define('OC_USER_BACKEND_SET_PASSWORD', 0x0000010);
|
||||
define('OC_USER_BACKEND_CHECK_PASSWORD', 0x0000100);
|
||||
define('OC_USER_BACKEND_GET_HOME', 0x0001000);
|
||||
define('OC_USER_BACKEND_GET_DISPLAYNAME', 0x0010000);
|
||||
define('OC_USER_BACKEND_SET_DISPLAYNAME', 0x0100000);
|
||||
define('OC_USER_BACKEND_PROVIDE_AVATAR', 0x1000000);
|
||||
|
||||
/**
|
||||
* Abstract base class for user management. Provides methods for querying backend
|
||||
|
@ -54,6 +54,7 @@ abstract class OC_User_Backend implements OC_User_Interface {
|
|||
OC_USER_BACKEND_GET_HOME => 'getHome',
|
||||
OC_USER_BACKEND_GET_DISPLAYNAME => 'getDisplayName',
|
||||
OC_USER_BACKEND_SET_DISPLAYNAME => 'setDisplayName',
|
||||
OC_USER_BACKEND_PROVIDE_AVATAR => 'canChangeAvatar',
|
||||
);
|
||||
|
||||
/**
|
||||
|
|
|
@ -139,6 +139,18 @@ class User {
|
|||
return \OC_Config::getValue("datadirectory", \OC::$SERVERROOT . "/data") . '/' . $this->uid; //TODO switch to Config object once implemented
|
||||
}
|
||||
|
||||
/**
|
||||
* check if the backend allows the user to change his avatar on Personal page
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function canChangeAvatar() {
|
||||
if($this->backend->implementsActions(\OC_USER_BACKEND_PROVIDE_AVATAR)) {
|
||||
return $this->backend->canChangeAvatar($this->uid);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* check if the backend supports changing passwords
|
||||
*
|
||||
|
|
|
@ -90,6 +90,7 @@ $tmpl->assign('displayNameChangeSupported', OC_User::canUserChangeDisplayName(OC
|
|||
$tmpl->assign('displayName', OC_User::getDisplayName());
|
||||
$tmpl->assign('enableDecryptAll' , $enableDecryptAll);
|
||||
$tmpl->assign('enableAvatars', \OC_Config::getValue('enable_avatars', true));
|
||||
$tmpl->assign('avatarChangeSupported', OC_User::canUserChangeAvatar(OC_User::getUser()));
|
||||
|
||||
$forms=OC_App::getForms('personal');
|
||||
$tmpl->assign('forms', array());
|
||||
|
|
|
@ -87,11 +87,15 @@ if($_['passwordChangeSupported']) {
|
|||
<div id="displayavatar">
|
||||
<div class="avatardiv"></div><br>
|
||||
<div class="warning hidden"></div>
|
||||
<?php if ($_['avatarChangeSupported']): ?>
|
||||
<div class="inlineblock button" id="uploadavatarbutton"><?php p($l->t('Upload new')); ?></div>
|
||||
<input type="file" class="hidden" name="files[]" id="uploadavatar">
|
||||
<div class="inlineblock button" id="selectavatar"><?php p($l->t('Select new from Files')); ?></div>
|
||||
<div class="inlineblock button" id="removeavatar"><?php p($l->t('Remove image')); ?></div><br>
|
||||
<?php p($l->t('Either png or jpg. Ideally square but you will be able to crop it.')); ?>
|
||||
<?php else: ?>
|
||||
<?php p($l->t('Your avatar is provided by your original account.')); ?>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<div id="cropper" class="hidden">
|
||||
<div class="inlineblock button" id="abortcropperbutton"><?php p($l->t('Abort')); ?></div>
|
||||
|
|
27
tests/lib/user/avataruserdummy.php
Normal file
27
tests/lib/user/avataruserdummy.php
Normal file
|
@ -0,0 +1,27 @@
|
|||
<?php
|
||||
/**
|
||||
* ownCloud
|
||||
*
|
||||
* @author Arthur Schiwon
|
||||
* @copyright 2013 Arthur Schiwon blizzz@owncloud.com
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 3 of the License, or any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
class Avatar_User_Dummy extends \OC_User_Dummy {
|
||||
public function canChangeAvatar($uid) {
|
||||
return true;
|
||||
}
|
||||
}
|
|
@ -87,6 +87,75 @@ class User extends \PHPUnit_Framework_TestCase {
|
|||
$this->assertFalse($user->setPassword('bar',''));
|
||||
}
|
||||
|
||||
public function testChangeAvatarSupportedYes() {
|
||||
/**
|
||||
* @var \OC_User_Backend | \PHPUnit_Framework_MockObject_MockObject $backend
|
||||
*/
|
||||
require_once 'avataruserdummy.php';
|
||||
$backend = $this->getMock('Avatar_User_Dummy');
|
||||
$backend->expects($this->once())
|
||||
->method('canChangeAvatar')
|
||||
->with($this->equalTo('foo'))
|
||||
->will($this->returnValue(true));
|
||||
|
||||
$backend->expects($this->any())
|
||||
->method('implementsActions')
|
||||
->will($this->returnCallback(function ($actions) {
|
||||
if ($actions === \OC_USER_BACKEND_PROVIDE_AVATAR) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}));
|
||||
|
||||
$user = new \OC\User\User('foo', $backend);
|
||||
$this->assertTrue($user->canChangeAvatar());
|
||||
}
|
||||
|
||||
public function testChangeAvatarSupportedNo() {
|
||||
/**
|
||||
* @var \OC_User_Backend | \PHPUnit_Framework_MockObject_MockObject $backend
|
||||
*/
|
||||
require_once 'avataruserdummy.php';
|
||||
$backend = $this->getMock('Avatar_User_Dummy');
|
||||
$backend->expects($this->once())
|
||||
->method('canChangeAvatar')
|
||||
->with($this->equalTo('foo'))
|
||||
->will($this->returnValue(false));
|
||||
|
||||
$backend->expects($this->any())
|
||||
->method('implementsActions')
|
||||
->will($this->returnCallback(function ($actions) {
|
||||
if ($actions === \OC_USER_BACKEND_PROVIDE_AVATAR) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}));
|
||||
|
||||
$user = new \OC\User\User('foo', $backend);
|
||||
$this->assertFalse($user->canChangeAvatar());
|
||||
}
|
||||
|
||||
public function testChangeAvatarNotSupported() {
|
||||
/**
|
||||
* @var \OC_User_Backend | \PHPUnit_Framework_MockObject_MockObject $backend
|
||||
*/
|
||||
require_once 'avataruserdummy.php';
|
||||
$backend = $this->getMock('Avatar_User_Dummy');
|
||||
$backend->expects($this->never())
|
||||
->method('canChangeAvatar');
|
||||
|
||||
$backend->expects($this->any())
|
||||
->method('implementsActions')
|
||||
->will($this->returnCallback(function ($actions) {
|
||||
return false;
|
||||
}));
|
||||
|
||||
$user = new \OC\User\User('foo', $backend);
|
||||
$this->assertTrue($user->canChangeAvatar());
|
||||
}
|
||||
|
||||
public function testDelete() {
|
||||
/**
|
||||
* @var \OC_User_Backend | \PHPUnit_Framework_MockObject_MockObject $backend
|
||||
|
|
Loading…
Reference in a new issue