diff --git a/lib/Controller/Api1Controller.php b/lib/Controller/Api1Controller.php index 92f3fdc8a..f0c9adbe5 100644 --- a/lib/Controller/Api1Controller.php +++ b/lib/Controller/Api1Controller.php @@ -770,6 +770,7 @@ public function indexViewColumns(int $viewId): DataResponse { * @param bool|null $usergroupMultipleItems Can select multiple users or/and groups, if column is usergroup * @param bool|null $usergroupSelectUsers Can select users, if column type is usergroup * @param bool|null $usergroupSelectGroups Can select groups, if column type is usergroup + * @param bool|null $usergroupSelectTeams Can select teams, if column type is usergroup * @param bool|null $usergroupShowUserStatus Whether to show the user's status, if column type is usergroup * @param int[]|null $selectedViewIds View IDs where this column should be added to be presented * @@ -807,6 +808,7 @@ public function createColumn( ?bool $usergroupMultipleItems = null, ?bool $usergroupSelectUsers = null, ?bool $usergroupSelectGroups = null, + ?bool $usergroupSelectTeams = null, ?bool $usergroupShowUserStatus = null, ?array $selectedViewIds = [] @@ -842,6 +844,7 @@ public function createColumn( $usergroupMultipleItems, $usergroupSelectUsers, $usergroupSelectGroups, + $usergroupSelectTeams, $usergroupShowUserStatus, $selectedViewIds @@ -889,6 +892,7 @@ public function createColumn( * @param bool|null $usergroupMultipleItems Can select multiple users or/and groups, if column is usergroup * @param bool|null $usergroupSelectUsers Can select users, if column type is usergroup * @param bool|null $usergroupSelectGroups Can select groups, if column type is usergroup + * @param bool|null $usergroupSelectTeams Can select teams, if column type is usergroup * @param bool|null $usergroupShowUserStatus Whether to show the user's status, if column type is usergroup * * @return DataResponse|DataResponse @@ -922,6 +926,7 @@ public function updateColumn( ?bool $usergroupMultipleItems, ?bool $usergroupSelectUsers, ?bool $usergroupSelectGroups, + ?bool $usergroupSelectTeams, ?bool $usergroupShowUserStatus, ): DataResponse { @@ -955,6 +960,7 @@ public function updateColumn( $usergroupMultipleItems, $usergroupSelectUsers, $usergroupSelectGroups, + $usergroupSelectTeams, $usergroupShowUserStatus, ); return new DataResponse($item->jsonSerialize()); @@ -1488,6 +1494,7 @@ public function createTableShare(int $tableId, string $receiver, string $receive * @param bool|null $usergroupMultipleItems Can select multiple users or/and groups, if column is usergroup * @param bool|null $usergroupSelectUsers Can select users, if column type is usergroup * @param bool|null $usergroupSelectGroups Can select groups, if column type is usergroup + * @param bool|null $usergroupSelectTeams Can select teams, if column type is usergroup * @param bool|null $usergroupShowUserStatus Whether to show the user's status, if column type is usergroup * @param int[]|null $selectedViewIds View IDs where this column should be added to be presented * @@ -1525,6 +1532,7 @@ public function createTableColumn( ?bool $usergroupMultipleItems = null, ?bool $usergroupSelectUsers = null, ?bool $usergroupSelectGroups = null, + ?bool $usergroupSelectTeams = null, ?bool $usergroupShowUserStatus = null, ?array $selectedViewIds = [] ): DataResponse { @@ -1559,6 +1567,7 @@ public function createTableColumn( $usergroupMultipleItems, $usergroupSelectUsers, $usergroupSelectGroups, + $usergroupSelectTeams, $usergroupShowUserStatus, $selectedViewIds diff --git a/lib/Controller/ApiColumnsController.php b/lib/Controller/ApiColumnsController.php index 85fda2615..9d14fd865 100644 --- a/lib/Controller/ApiColumnsController.php +++ b/lib/Controller/ApiColumnsController.php @@ -342,6 +342,7 @@ public function createDatetimeColumn(int $baseNodeId, string $title, ?string $da * @param boolean $usergroupMultipleItems Whether you can select multiple users or/and groups * @param boolean $usergroupSelectUsers Whether you can select users * @param boolean $usergroupSelectGroups Whether you can select groups + * @param boolean $usergroupSelectTeams Whether you can select teams * @param boolean $showUserStatus Whether to show the user's status * @param string|null $description Description * @param int[]|null $selectedViewIds View IDs where this columns should be added @@ -356,7 +357,7 @@ public function createDatetimeColumn(int $baseNodeId, string $title, ?string $da * @throws NotFoundError * @throws PermissionError */ - public function createUsergroupColumn(int $baseNodeId, string $title, ?string $usergroupDefault, bool $usergroupMultipleItems = null, bool $usergroupSelectUsers = null, bool $usergroupSelectGroups = null, bool $showUserStatus = null, string $description = null, ?array $selectedViewIds = [], bool $mandatory = false, string $baseNodeType = 'table'): DataResponse { + public function createUsergroupColumn(int $baseNodeId, string $title, ?string $usergroupDefault, bool $usergroupMultipleItems = null, bool $usergroupSelectUsers = null, bool $usergroupSelectGroups = null, bool $usergroupSelectTeams = null, bool $showUserStatus = null, string $description = null, ?array $selectedViewIds = [], bool $mandatory = false, string $baseNodeType = 'table'): DataResponse { $tableId = $baseNodeType === 'table' ? $baseNodeId : null; $viewId = $baseNodeType === 'view' ? $baseNodeId : null; $column = $this->service->create( @@ -384,6 +385,7 @@ public function createUsergroupColumn(int $baseNodeId, string $title, ?string $u $usergroupMultipleItems, $usergroupSelectUsers, $usergroupSelectGroups, + $usergroupSelectTeams, $showUserStatus, $selectedViewIds ); diff --git a/lib/Controller/ApiTablesController.php b/lib/Controller/ApiTablesController.php index 2d6ab5fc6..b6b42fc30 100644 --- a/lib/Controller/ApiTablesController.php +++ b/lib/Controller/ApiTablesController.php @@ -167,6 +167,7 @@ public function createFromScheme(string $title, string $emoji, string $descripti $column['usergroupMultipleItems'], $column['usergroupSelectUsers'], $column['usergroupSelectGroups'], + $column['usergroupSelectTeams'], $column['showUserStatus'], [], diff --git a/lib/Controller/ColumnController.php b/lib/Controller/ColumnController.php index d533f9c88..2d0f612c7 100644 --- a/lib/Controller/ColumnController.php +++ b/lib/Controller/ColumnController.php @@ -102,6 +102,7 @@ public function create( ?bool $usergroupMultipleItems, ?bool $usergroupSelectUsers, ?bool $usergroupSelectGroups, + ?bool $usergroupSelectTeams, ?bool $showUserStatus, ?array $selectedViewIds @@ -135,6 +136,7 @@ public function create( $usergroupMultipleItems, $usergroupSelectUsers, $usergroupSelectGroups, + $usergroupSelectTeams, $showUserStatus, $selectedViewIds) { @@ -168,6 +170,7 @@ public function create( $usergroupMultipleItems, $usergroupSelectUsers, $usergroupSelectGroups, + $usergroupSelectTeams, $showUserStatus, $selectedViewIds); @@ -206,6 +209,7 @@ public function update( ?bool $usergroupMultipleItems, ?bool $usergroupSelectUsers, ?bool $usergroupSelectGroups, + ?bool $usergroupSelectTeams, ?bool $showUserStatus ): DataResponse { return $this->handleError(function () use ( @@ -237,6 +241,7 @@ public function update( $usergroupMultipleItems, $usergroupSelectUsers, $usergroupSelectGroups, + $usergroupSelectTeams, $showUserStatus ) { return $this->service->update( @@ -269,6 +274,7 @@ public function update( $usergroupMultipleItems, $usergroupSelectUsers, $usergroupSelectGroups, + $usergroupSelectTeams, $showUserStatus ); }); diff --git a/lib/Db/Column.php b/lib/Db/Column.php index 3c7a04f2d..6c4a1396f 100644 --- a/lib/Db/Column.php +++ b/lib/Db/Column.php @@ -73,6 +73,8 @@ * @method setUsergroupSelectUsers(?bool $usergroupSelectUsers) * @method getUsergroupSelectGroups(): bool * @method setUsergroupSelectGroups(?bool $usergroupSelectGroups) + * @method getUsergroupSelectTeams(): bool + * @method setUsergroupSelectTeams(?bool $usergroupSelectTeams) * @method getShowUserStatus(): bool * @method setShowUserStatus(?bool $showUserStatus) */ @@ -129,6 +131,7 @@ class Column extends Entity implements JsonSerializable { protected ?bool $usergroupMultipleItems = null; protected ?bool $usergroupSelectUsers = null; protected ?bool $usergroupSelectGroups = null; + protected ?bool $usergroupSelectTeams = null; protected ?bool $showUserStatus = null; public function __construct() { @@ -149,6 +152,7 @@ public function __construct() { $this->addType('usergroupMultipleItems', 'boolean'); $this->addType('usergroupSelectUsers', 'boolean'); $this->addType('usergroupSelectGroups', 'boolean'); + $this->addType('usergroupSelectTeams', 'boolean'); $this->addType('showUserStatus', 'boolean'); } @@ -224,6 +228,7 @@ public function jsonSerialize(): array { 'usergroupMultipleItems' => $this->usergroupMultipleItems, 'usergroupSelectUsers' => $this->usergroupSelectUsers, 'usergroupSelectGroups' => $this->usergroupSelectGroups, + 'usergroupSelectTeams' => $this->usergroupSelectTeams, 'showUserStatus' => $this->showUserStatus, ]; } diff --git a/lib/Migration/Version000000Date20210921000000.php b/lib/Migration/Version000000Date20210921000000.php index a8f03734c..71935daaf 100644 --- a/lib/Migration/Version000000Date20210921000000.php +++ b/lib/Migration/Version000000Date20210921000000.php @@ -181,6 +181,10 @@ public function changeSchema(IOutput $output, Closure $schemaClosure, array $opt 'notnull' => false, 'default' => 0, ]); + $table->addColumn('usergroup_select_teams', Types::BOOLEAN, [ + 'notnull' => false, + 'default' => 0, + ]); $table->addColumn('show_user_status', Types::BOOLEAN, [ 'notnull' => false, 'default' => 0, diff --git a/lib/Migration/Version000800Date20240712000000.php b/lib/Migration/Version000800Date20240712000000.php index 726d7929e..677903849 100644 --- a/lib/Migration/Version000800Date20240712000000.php +++ b/lib/Migration/Version000800Date20240712000000.php @@ -77,6 +77,12 @@ private function haveUserGroupColumnDefinitionFields(ISchemaWrapper $schema) { 'default' => 0, ]); } + if (!$table->hasColumn('usergroup_select_teams')) { + $table->addColumn('usergroup_select_teams', Types::BOOLEAN, [ + 'notnull' => false, + 'default' => 0, + ]); + } if (!$table->hasColumn('show_user_status')) { $table->addColumn('show_user_status', Types::BOOLEAN, [ 'notnull' => false, diff --git a/lib/Migration/Version000800Date20240828000000.php b/lib/Migration/Version000800Date20240828000000.php new file mode 100644 index 000000000..96ac21abc --- /dev/null +++ b/lib/Migration/Version000800Date20240828000000.php @@ -0,0 +1,45 @@ +hasTable('tables_columns')) { + if ($schema->hasTable('tables_row_cells_usergroup')) { + $table = $schema->getTable('tables_columns'); + if (!$table->hasColumn('usergroup_select_teams')) { + $table->addColumn('usergroup_select_teams', Types::BOOLEAN, [ + 'notnull' => false, + 'default' => 0, + ]); + } + } + return $schema; + } + return null; + } +} diff --git a/lib/ResponseDefinitions.php b/lib/ResponseDefinitions.php index 5e3826d02..f605e0cde 100644 --- a/lib/ResponseDefinitions.php +++ b/lib/ResponseDefinitions.php @@ -127,6 +127,7 @@ * usergroupMultipleItems: bool, * usergroupSelectUsers: bool, * usergroupSelectGroups: bool, + * usergroupSelectTeams: bool, * showUserStatus: bool, * } * diff --git a/lib/Service/ColumnService.php b/lib/Service/ColumnService.php index 7d80e6de2..bcbf4e1cf 100644 --- a/lib/Service/ColumnService.php +++ b/lib/Service/ColumnService.php @@ -163,6 +163,7 @@ public function find(int $id, ?string $userId = null): Column { * @param bool|null $usergroupMultipleItems * @param bool|null $usergroupSelectUsers * @param bool|null $usergroupSelectGroups + * @param bool|null $usergroupSelectTeams * @param bool|null $showUserStatus * @param array $selectedViewIds * @return Column @@ -200,6 +201,7 @@ public function create( ?bool $usergroupMultipleItems, ?bool $usergroupSelectUsers, ?bool $usergroupSelectGroups, + ?bool $usergroupSelectTeams, ?bool $showUserStatus, array $selectedViewIds = [] @@ -288,6 +290,7 @@ public function create( $item->setUsergroupMultipleItems($usergroupMultipleItems); $item->setUsergroupSelectUsers($usergroupSelectUsers); $item->setUsergroupSelectGroups($usergroupSelectGroups); + $item->setUsergroupSelectTeams($usergroupSelectTeams); $item->setShowUserStatus($showUserStatus); try { @@ -343,6 +346,7 @@ public function create( * @param bool|null $usergroupMultipleItems * @param bool|null $usergroupSelectUsers * @param bool|null $usergroupSelectGroups + * @param bool|null $usergroupSelectTeams * @param bool|null $showUserStatus * @return Column * @throws InternalError @@ -377,6 +381,7 @@ public function update( ?bool $usergroupMultipleItems, ?bool $usergroupSelectUsers, ?bool $usergroupSelectGroups, + ?bool $usergroupSelectTeams, ?bool $showUserStatus, ):Column { try { @@ -431,6 +436,7 @@ public function update( $item->setUsergroupMultipleItems($usergroupMultipleItems); $item->setUsergroupSelectUsers($usergroupSelectUsers); $item->setUsergroupSelectGroups($usergroupSelectGroups); + $item->setUsergroupSelectTeams($usergroupSelectTeams); $item->setShowUserStatus($showUserStatus); $this->updateMetadata($item, $userId); diff --git a/lib/Service/ImportService.php b/lib/Service/ImportService.php index f83a09b37..ca2a64820 100644 --- a/lib/Service/ImportService.php +++ b/lib/Service/ImportService.php @@ -440,6 +440,7 @@ private function getColumns(Row $firstRow, Row $secondRow): void { $this->columnsConfig[$index]['usergroupMultipleItems'] ?? null, $this->columnsConfig[$index]['usergroupSelectUsers'] ?? null, $this->columnsConfig[$index]['usergroupSelectGroups'] ?? null, + $this->columnsConfig[$index]['usergroupSelectTeams'] ?? null, $this->columnsConfig[$index]['showUserStatus'] ?? null, $this->columnsConfig[$index]['selectedViewIds'] ?? [] ); diff --git a/lib/Service/TableTemplateService.php b/lib/Service/TableTemplateService.php index 81aebb76d..51b2f1382 100644 --- a/lib/Service/TableTemplateService.php +++ b/lib/Service/TableTemplateService.php @@ -870,6 +870,9 @@ private function createColumn(int $tableId, array $parameters): ?Column { // usergroupSelectGroups (isset($parameters['usergroupSelectGroups'])) ? $parameters['usergroupSelectGroups'] : null, + // usergroupSelectTeams + (isset($parameters['usergroupSelectTeams'])) ? $parameters['usergroupSelectTeams'] : null, + // showUserStatus (isset($parameters['showUserStatus'])) ? $parameters['showUserStatus'] : null, diff --git a/openapi.json b/openapi.json index 7e27390a1..754199a93 100644 --- a/openapi.json +++ b/openapi.json @@ -95,6 +95,7 @@ "usergroupMultipleItems", "usergroupSelectUsers", "usergroupSelectGroups", + "usergroupSelectTeams", "showUserStatus" ], "properties": { @@ -190,6 +191,9 @@ "usergroupSelectGroups": { "type": "boolean" }, + "usergroupSelectTeams": { + "type": "boolean" + }, "showUserStatus": { "type": "boolean" } @@ -2745,6 +2749,24 @@ "basic_auth": [] } ], + "requestBody": { + "required": false, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "viewId": { + "type": "integer", + "format": "int64", + "nullable": true, + "description": "View ID" + } + } + } + } + } + }, "parameters": [ { "name": "tableId", @@ -2755,16 +2777,6 @@ "type": "integer", "format": "int64" } - }, - { - "name": "viewId", - "in": "query", - "description": "View ID", - "schema": { - "type": "integer", - "format": "int64", - "nullable": true - } } ], "responses": { @@ -2978,6 +2990,11 @@ "nullable": true, "description": "Can select groups, if column type is usergroup" }, + "usergroupSelectTeams": { + "type": "boolean", + "nullable": true, + "description": "Can select teams, if column type is usergroup" + }, "usergroupShowUserStatus": { "type": "boolean", "nullable": true, @@ -3327,6 +3344,11 @@ "nullable": true, "description": "Can select groups, if column type is usergroup" }, + "usergroupSelectTeams": { + "type": "boolean", + "nullable": true, + "description": "Can select teams, if column type is usergroup" + }, "usergroupShowUserStatus": { "type": "boolean", "nullable": true, @@ -3541,6 +3563,11 @@ "nullable": true, "description": "Can select groups, if column type is usergroup" }, + "usergroupSelectTeams": { + "type": "boolean", + "nullable": true, + "description": "Can select teams, if column type is usergroup" + }, "usergroupShowUserStatus": { "type": "boolean", "nullable": true, @@ -3787,6 +3814,30 @@ "basic_auth": [] } ], + "requestBody": { + "required": false, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "limit": { + "type": "integer", + "format": "int64", + "nullable": true, + "description": "Limit" + }, + "offset": { + "type": "integer", + "format": "int64", + "nullable": true, + "description": "Offset" + } + } + } + } + } + }, "parameters": [ { "name": "tableId", @@ -3797,26 +3848,6 @@ "type": "integer", "format": "int64" } - }, - { - "name": "limit", - "in": "query", - "description": "Limit", - "schema": { - "type": "integer", - "format": "int64", - "nullable": true - } - }, - { - "name": "offset", - "in": "query", - "description": "Offset", - "schema": { - "type": "integer", - "format": "int64", - "nullable": true - } } ], "responses": { @@ -3902,6 +3933,30 @@ "basic_auth": [] } ], + "requestBody": { + "required": false, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "limit": { + "type": "integer", + "format": "int64", + "nullable": true, + "description": "Limit" + }, + "offset": { + "type": "integer", + "format": "int64", + "nullable": true, + "description": "Offset" + } + } + } + } + } + }, "parameters": [ { "name": "tableId", @@ -3912,26 +3967,6 @@ "type": "integer", "format": "int64" } - }, - { - "name": "limit", - "in": "query", - "description": "Limit", - "schema": { - "type": "integer", - "format": "int64", - "nullable": true - } - }, - { - "name": "offset", - "in": "query", - "description": "Offset", - "schema": { - "type": "integer", - "format": "int64", - "nullable": true - } } ], "responses": { @@ -4118,6 +4153,30 @@ "basic_auth": [] } ], + "requestBody": { + "required": false, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "limit": { + "type": "integer", + "format": "int64", + "nullable": true, + "description": "Limit" + }, + "offset": { + "type": "integer", + "format": "int64", + "nullable": true, + "description": "Offset" + } + } + } + } + } + }, "parameters": [ { "name": "viewId", @@ -4128,26 +4187,6 @@ "type": "integer", "format": "int64" } - }, - { - "name": "limit", - "in": "query", - "description": "Limit", - "schema": { - "type": "integer", - "format": "int64", - "nullable": true - } - }, - { - "name": "offset", - "in": "query", - "description": "Offset", - "schema": { - "type": "integer", - "format": "int64", - "nullable": true - } } ], "responses": { @@ -7895,6 +7934,10 @@ "type": "boolean", "description": "Whether you can select groups" }, + "usergroupSelectTeams": { + "type": "boolean", + "description": "Whether you can select teams" + }, "showUserStatus": { "type": "boolean", "description": "Whether to show the user's status" diff --git a/src/modules/modals/CreateColumn.vue b/src/modules/modals/CreateColumn.vue index 2c5a46c13..e3b0c6d0e 100644 --- a/src/modules/modals/CreateColumn.vue +++ b/src/modules/modals/CreateColumn.vue @@ -181,6 +181,7 @@ export default { usergroupMultipleItems: false, usergroupSelectUsers: true, usergroupSelectGroups: false, + usergroupSelectTeams: false, showUserStatus: false, }, textAppAvailable: !!window.OCA?.Text?.createEditor, @@ -334,6 +335,7 @@ export default { data.usergroupMultipleItems = this.column.usergroupMultipleItems data.usergroupSelectUsers = this.column.usergroupSelectUsers data.usergroupSelectGroups = this.column.usergroupSelectGroups + data.usergroupSelectTeams = this.column.usergroupSelectTeams data.showUserStatus = this.column.showUserStatus } else if (this.column.type === 'number') { data.numberDefault = this.column.numberDefault @@ -387,6 +389,7 @@ export default { usergroupMultipleItems: false, usergroupSelectUsers: true, usergroupSelectGroups: false, + usergroupSelectTeams: false, showUserStatus: false, } if (mainForm) { diff --git a/src/shared/components/ncTable/mixins/columnsTypes/usergroup.js b/src/shared/components/ncTable/mixins/columnsTypes/usergroup.js index aa075756a..3cd565dc8 100644 --- a/src/shared/components/ncTable/mixins/columnsTypes/usergroup.js +++ b/src/shared/components/ncTable/mixins/columnsTypes/usergroup.js @@ -14,6 +14,7 @@ export default class UsergroupColumn extends AbstractUsergroupColumn { this.usergroupMultipleItems = data.usergroupMultipleItems this.usergroupSelectUsers = data.usergroupSelectUsers this.usergroupSelectGroups = data.usergroupSelectGroups + this.usergroupSelectTeams = data.usergroupSelectTeams } getValueString(valueObject) { diff --git a/src/shared/components/ncTable/partials/TableCellUsergroup.vue b/src/shared/components/ncTable/partials/TableCellUsergroup.vue index e225b7fd6..c107556fd 100644 --- a/src/shared/components/ncTable/partials/TableCellUsergroup.vue +++ b/src/shared/components/ncTable/partials/TableCellUsergroup.vue @@ -6,7 +6,7 @@
- +
diff --git a/src/shared/components/ncTable/partials/columnTypePartials/forms/UsergroupForm.vue b/src/shared/components/ncTable/partials/columnTypePartials/forms/UsergroupForm.vue index 0de615f27..003f44057 100644 --- a/src/shared/components/ncTable/partials/columnTypePartials/forms/UsergroupForm.vue +++ b/src/shared/components/ncTable/partials/columnTypePartials/forms/UsergroupForm.vue @@ -6,17 +6,15 @@
- - {{ t('tables', 'Users') }} - - - {{ t('tables', 'Groups') }} - - - {{ t('tables', 'Users and groups') }} + + {{ t('tables', selectOptions[key]) }}
@@ -27,7 +25,7 @@