Skip to content

Commit fcae61d

Browse files
committed
feat: delete stacks on remote shares
Signed-off-by: grnd-alt <[email protected]>
1 parent f721f5e commit fcae61d

File tree

7 files changed

+35
-5
lines changed

7 files changed

+35
-5
lines changed

appinfo/routes.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,7 @@
139139
['name' => 'new_card#create', 'url' => '/api/v{apiVersion}/cards', 'verb' => 'POST'],
140140

141141
['name' => 'new_stack#create', 'url' => '/api/v{apiVersion}/stacks', 'verb' => 'POST'],
142+
['name' => 'new_stack#delete', 'url' => '/api/v{apiVersion}/stacks/{stackId}/{boardId}', 'verb' => 'DELETE', 'defaults' => ['boardId' => null]],
142143

143144
['name' => 'Config#get', 'url' => '/api/v{apiVersion}/config', 'verb' => 'GET'],
144145
['name' => 'Config#setValue', 'url' => '/api/v{apiVersion}/config/{key}', 'verb' => 'POST'],

lib/Controller/NewStackController.php

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,4 +38,21 @@ public function create(string $title, int $boardId, int $order = 0) {
3838
return new DataResponse($stack);
3939
};
4040
}
41+
42+
#[NoAdminRequired]
43+
#[PublicPage]
44+
#[NoCSRFRequired]
45+
#[RequestHeader(name: 'x-nextcloud-federation', description: 'Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request', indirect: true)]
46+
public function delete(int $stackId, ?int $boardId = null) {
47+
if ($boardId) {
48+
$board = $this->boardService->find($boardId, false);
49+
if ($board->getExternalId()) {
50+
$result = $this->externalBoardService->deleteStackOnRemote($board, $stackId);
51+
return new DataResponse($result);
52+
}
53+
}
54+
$result = $this->stackService->delete($stackId);
55+
return new DataResponse($result);
56+
}
57+
4158
}

lib/Federation/DeckFederationProxy.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,9 @@ public function get(string $cloudId, string $shareToken, string $url, array $par
108108
public function post(string $cloudId, string $shareToken, string $url, array $params = []):IResponse {
109109
return $this->request("post", $cloudId, $shareToken, $url, $params);
110110
}
111+
public function delete(string $cloudId, string $shareToken, string $url, array $params = []):IResponse {
112+
return $this->request("delete", $cloudId, $shareToken, $url, $params);
113+
}
111114
public function getOCSData(IResponse $response, array $allowedStatusCodes = [Http::STATUS_OK]): array {
112115
if (!in_array($response->getStatusCode(), $allowedStatusCodes, true)) {
113116
$this->logUnexpectedStatusCode(__METHOD__, $response->getStatusCode());

lib/Service/ExternalBoardService.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,4 +96,13 @@ public function createStackOnRemote(
9696
$stack = $this->proxy->getOcsData($resp);
9797
return $this->localizeRemoteStacks([$stack], $localBoard)[0];
9898
}
99+
100+
public function deleteStackOnRemote(Board $localBoard, int $stackId): array {
101+
$shareToken = $localBoard->getShareToken();
102+
$participantCloudId = $this->cloudIdManager->getCloudId($this->userId, null);
103+
$ownerCloudId = $this->cloudIdManager->resolveCloudId($localBoard->getOwner());
104+
$url = $ownerCloudId->getRemote() . "/ocs/v2.php/apps/deck/api/v1.0/stacks/" . $stackId;
105+
$resp = $this->proxy->delete($participantCloudId->getId(), $shareToken, $url, []);
106+
return $this->proxy->getOcsData($resp);
107+
}
99108
}

lib/Service/StackService.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,7 @@ public function delete(int $id): Stack {
225225
$stack = $this->stackMapper->update($stack);
226226

227227
$this->activityManager->triggerEvent(
228-
ActivityManager::DECK_OBJECT_BOARD, $stack, ActivityManager::SUBJECT_STACK_DELETE
228+
ActivityManager::DECK_OBJECT_BOARD, $stack, ActivityManager::SUBJECT_STACK_DELETE, [], $this->permissionService->getUserId()
229229
);
230230
$this->changeHelper->boardChanged($stack->getBoardId());
231231
$this->eventDispatcher->dispatchTyped(new BoardUpdatedEvent($stack->getBoardId()));

src/services/StackApi.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -97,11 +97,11 @@ export class StackApi {
9797
})
9898
}
9999

100-
deleteStack(stackId) {
101-
return axios.delete(this.url(`/stacks/${stackId}`))
100+
deleteStack(stackId, boardId) {
101+
return axios.delete(this.ocsUrl(`/stacks/${stackId}/${boardId}`))
102102
.then(
103103
(response) => {
104-
return Promise.resolve(response.data)
104+
return Promise.resolve(response.data.ocs.data)
105105
},
106106
(err) => {
107107
return Promise.reject(err)

src/store/stack.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ export default {
101101
})
102102
},
103103
deleteStack({ commit }, stack) {
104-
apiClient.deleteStack(stack.id)
104+
apiClient.deleteStack(stack.id, stack.boardId)
105105
.then((stack) => {
106106
commit('deleteStack', stack)
107107
commit('moveStackToTrash', stack)

0 commit comments

Comments
 (0)