Signed-off-by: Joas Schilling <coding@schilljs.com>tags/v18.0.0beta1
@@ -40,6 +40,7 @@ return [ | |||
['root' => '/cloud', 'name' => 'Groups#getSubAdminsOfGroup', 'url' => '/groups/{groupId}/subadmins', 'verb' => 'GET', 'requirements' => ['groupId' => '.+']], | |||
['root' => '/cloud', 'name' => 'Groups#addGroup', 'url' => '/groups', 'verb' => 'POST'], | |||
['root' => '/cloud', 'name' => 'Groups#getGroup', 'url' => '/groups/{groupId}', 'verb' => 'GET', 'requirements' => ['groupId' => '.+']], | |||
['root' => '/cloud', 'name' => 'Groups#updateGroup', 'url' => '/groups/{groupId}', 'verb' => 'PUT', 'requirements' => ['groupId' => '.+']], | |||
['root' => '/cloud', 'name' => 'Groups#deleteGroup', 'url' => '/groups/{groupId}', 'verb' => 'DELETE', 'requirements' => ['groupId' => '.+']], | |||
// Users |
@@ -129,7 +129,7 @@ class GroupsController extends AUserData { | |||
* | |||
* @param string $groupId | |||
* @return DataResponse | |||
* @throws OCSException | |||
* @throws OCSException | |||
* | |||
* @deprecated 14 Use getGroupUsers | |||
*/ | |||
@@ -248,6 +248,28 @@ class GroupsController extends AUserData { | |||
return new DataResponse(); | |||
} | |||
/** | |||
* @PasswordConfirmationRequired | |||
* | |||
* @param string $groupId | |||
* @param string $key | |||
* @param string $value | |||
* @return DataResponse | |||
* @throws OCSException | |||
*/ | |||
public function updateGroup(string $groupId, string $key, string $value): DataResponse { | |||
if ($key === 'displayname') { | |||
$group = $this->groupManager->get($groupId); | |||
if ($group->setDisplayName($value)) { | |||
return new DataResponse(); | |||
} | |||
throw new OCSException('Not supported by backend', 101); | |||
} else { | |||
throw new OCSException('', \OCP\API::RESPOND_UNAUTHORISED); | |||
} | |||
} | |||
/** | |||
* @PasswordConfirmationRequired | |||
* |
@@ -28,6 +28,7 @@ use OC\Core\Command\Base; | |||
use OCP\IGroupManager; | |||
use Symfony\Component\Console\Input\InputArgument; | |||
use Symfony\Component\Console\Input\InputInterface; | |||
use Symfony\Component\Console\Input\InputOption; | |||
use Symfony\Component\Console\Output\OutputInterface; | |||
class Add extends Base { | |||
@@ -49,7 +50,13 @@ class Add extends Base { | |||
->addArgument( | |||
'groupid', | |||
InputArgument::REQUIRED, | |||
'Group name' | |||
'Group id' | |||
) | |||
->addOption( | |||
'display-name', | |||
null, | |||
InputOption::VALUE_REQUIRED, | |||
'Group name used in the web UI (can contain any characters)' | |||
); | |||
} | |||
@@ -62,6 +69,10 @@ class Add extends Base { | |||
} else { | |||
$group = $this->groupManager->createGroup($gid); | |||
$output->writeln('Created group "' . $group->getGID() . '"'); | |||
if ($input->hasOption('display-name')) { | |||
$group->setDisplayName($input->getOption('display-name')); | |||
} | |||
} | |||
} | |||
} |
@@ -52,6 +52,7 @@ use OCP\Group\Backend\IDeleteGroupBackend; | |||
use OCP\Group\Backend\IGetDisplayNameBackend; | |||
use OCP\Group\Backend\IGroupDetailsBackend; | |||
use OCP\Group\Backend\IRemoveFromGroupBackend; | |||
use OCP\Group\Backend\ISetDisplayNameBackend; | |||
use OCP\IDBConnection; | |||
/** | |||
@@ -65,7 +66,8 @@ class Database extends ABackend | |||
IDeleteGroupBackend, | |||
IGetDisplayNameBackend, | |||
IGroupDetailsBackend, | |||
IRemoveFromGroupBackend { | |||
IRemoveFromGroupBackend, | |||
ISetDisplayNameBackend { | |||
/** @var string[] */ | |||
private $groupCache = []; | |||
@@ -450,4 +452,24 @@ class Database extends ABackend | |||
return []; | |||
} | |||
/** | |||
* @param string $gid | |||
* @param string $displayName | |||
* @return bool | |||
* @since 18.0.0 | |||
*/ | |||
public function setDisplayName(string $gid, string $displayName): bool { | |||
if (!$this->groupExists($gid)) { | |||
return false; | |||
} | |||
$query = $this->dbConn->getQueryBuilder(); | |||
$query->update('groups') | |||
->set('displayname', $query->createNamedParameter($displayName)) | |||
->where($query->expr()->eq('gid', $query->createNamedParameter($gid))); | |||
$query->execute(); | |||
return true; | |||
} | |||
} |
@@ -33,6 +33,7 @@ namespace OC\Group; | |||
use OCP\Group\Backend\IGetDisplayNameBackend; | |||
use OCP\Group\Backend\IHideFromCollaborationBackend; | |||
use OC\Hooks\PublicEmitter; | |||
use OCP\Group\Backend\ISetDisplayNameBackend; | |||
use OCP\GroupInterface; | |||
use OCP\IGroup; | |||
use OCP\IUser; | |||
@@ -101,6 +102,20 @@ class Group implements IGroup { | |||
return $this->displayName; | |||
} | |||
public function setDisplayName(string $displayName): bool { | |||
$displayName = trim($displayName); | |||
if ($displayName !== '') { | |||
foreach ($this->backends as $backend) { | |||
if (($backend instanceof ISetDisplayNameBackend) | |||
&& $backend->setDisplayName($this->gid, $displayName)) { | |||
$this->displayName = $displayName; | |||
return true; | |||
} | |||
} | |||
} | |||
return false; | |||
} | |||
/** | |||
* get all users in the group | |||
* |
@@ -0,0 +1,38 @@ | |||
<?php | |||
declare(strict_types=1); | |||
/** | |||
* @copyright Copyright (c) 2019 Joas Schilling <coding@schilljs.com> | |||
* | |||
* @license GNU AGPL version 3 or any later version | |||
* | |||
* This program is free software: you can redistribute it and/or modify | |||
* it under the terms of the GNU Affero General Public License as | |||
* published by the Free Software Foundation, either version 3 of the | |||
* License, or (at your option) any later version. | |||
* | |||
* This program 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 program. If not, see <http://www.gnu.org/licenses/>. | |||
* | |||
*/ | |||
namespace OCP\Group\Backend; | |||
/** | |||
* @since 18.0.0 | |||
*/ | |||
interface ISetDisplayNameBackend { | |||
/** | |||
* @param string $gid | |||
* @param string $displayName | |||
* @return bool | |||
* @since 18.0.0 | |||
*/ | |||
public function setDisplayName(string $gid, string $displayName): bool; | |||
} |
@@ -47,6 +47,15 @@ interface IGroup { | |||
*/ | |||
public function getDisplayName(); | |||
/** | |||
* Set the group display name | |||
* | |||
* @param string $displayName | |||
* @return bool | |||
* @since 18.0.0 | |||
*/ | |||
public function setDisplayName(string $displayName): bool; | |||
/** | |||
* get all users in the group | |||
* |