77
88namespace OCA \Deck \Service ;
99
10- use OC \Federation \CloudIdManager ;
1110use OCA \Deck \Db \Acl ;
1211use OCA \Deck \Db \Assignment ;
1312use OCA \Deck \Db \Board ;
@@ -56,10 +55,10 @@ public function getExternalStacksFromRemote(Board $localBoard):DataResponse {
5655 return new DataResponse ($ this ->LocalizeRemoteStacks ($ ocs , $ localBoard ));
5756 }
5857
59- public function localizeRemoteUser (Board $ localBoard , array $ user ): array | User | FederatedUser | null {
58+ public function localizeRemoteUser (Board $ localBoard , array $ user ): array | User | FederatedUser | null {
6059 // skip invalid users
6160 if (!$ user ['uid ' ]) {
62- return null ;;
61+ return null ;
6362 }
6463 // if it's already a valid cloud id the user originates from a third instance and we pass it as is
6564 if ($ this ->cloudIdManager ->isValidCloudId ($ user ['uid ' ])) {
@@ -81,7 +80,7 @@ public function localizeRemoteUser(Board $localBoard, array $user): array | User
8180 public function LocalizeRemoteStacks (array $ stacks , Board $ localBoard ) {
8281 foreach ($ stacks as $ i => $ stack ) {
8382 $ stack ['boardId ' ] = $ localBoard ->getId ();
84- foreach ($ stack ['cards ' ] as $ j => $ card ) {
83+ foreach ($ stack ['cards ' ] as $ j => $ card ) {
8584 $ stack ['cards ' ][$ j ]['assignedUsers ' ] = array_map (function ($ assignment ) use ($ localBoard ) {
8685 $ assignment ['participant ' ] = $ this ->localizeRemoteUser ($ localBoard , $ assignment ['participant ' ]);
8786 return $ assignment ;
@@ -234,6 +233,32 @@ public function assignUserOnRemote(Board $localBoard, int $cardId, string $userI
234233 return $ result ;
235234 }
236235
236+ public function unAssignUserOnRemote (Board $ localBoard , int $ cardId , string $ userId , int $ type = 0 ): array {
237+ $ this ->configService ->ensureFederationEnabled ();
238+
239+ $ ownerCloudId = $ this ->cloudIdManager ->resolveCloudId ($ localBoard ->getOwner ());
240+
241+ if ($ this ->cloudIdManager ->isValidCloudId ($ userId )) {
242+ $ cloudId = $ this ->cloudIdManager ->resolveCloudId ($ userId );
243+ // assignee's origin is the same as the board owner's origin: send as local user
244+ if ($ cloudId ->getRemote () === $ ownerCloudId ->getRemote ()) {
245+ $ userId = $ cloudId ->getUser ();
246+ $ type = Assignment::TYPE_USER ;
247+ }
248+ } else {
249+ // local user for us = remote user for remote
250+ $ userId = $ this ->cloudIdManager ->getCloudId ($ userId , null )->getId ();
251+ $ type = Assignment::TYPE_REMOTE ;
252+ }
253+ $ shareToken = $ localBoard ->getShareToken ();
254+ $ url = $ ownerCloudId ->getRemote () . '/ocs/v2.php/apps/deck/api/v1.0/cards/ ' . $ cardId . '/unassign ' ;
255+ $ resp = $ this ->proxy ->put ($ ownerCloudId ->getId (), $ shareToken , $ url , [
256+ 'userId ' => $ userId ,
257+ 'type ' => $ type ,
258+ 'boardId ' => $ localBoard ->getExternalId (),
259+ ]);
260+ return $ this ->proxy ->getOcsData ($ resp );
261+ }
237262
238263 public function createStackOnRemote (
239264 Board $ localBoard ,
0 commit comments