3131
3232namespace OCA \Circles \Db ;
3333
34+ use JsonException ;
3435use OCA \Circles \Exceptions \RequestBuilderException ;
3536use OCA \Circles \Exceptions \ShareWrapperNotFoundException ;
3637use OCA \Circles \Model \FederatedUser ;
3738use OCA \Circles \Model \Membership ;
3839use OCA \Circles \Model \Probes \CircleProbe ;
3940use OCA \Circles \Model \ShareWrapper ;
41+ use OCP \Files \Folder ;
4042use OCP \Files \NotFoundException ;
4143use OCP \Share \Exceptions \IllegalIDChangeException ;
44+ use OCP \Share \IAttributes ;
4245use OCP \Share \IShare ;
43- use OCP \Files \Folder ;
4446
4547/**
4648 * Class ShareWrapperRequest
@@ -62,18 +64,18 @@ public function save(IShare $share, int $parentId = 0): int {
6264
6365 $ qb = $ this ->getShareInsertSql ();
6466 $ qb ->setValue ('share_type ' , $ qb ->createNamedParameter ($ share ->getShareType ()))
65- ->setValue ('item_type ' , $ qb ->createNamedParameter ($ share ->getNodeType ()))
66- ->setValue ('item_source ' , $ qb ->createNamedParameter ($ share ->getNodeId ()))
67- ->setValue ('file_source ' , $ qb ->createNamedParameter ($ share ->getNodeId ()))
68- ->setValue ('file_target ' , $ qb ->createNamedParameter ($ share ->getTarget ()))
69- ->setValue ('share_with ' , $ qb ->createNamedParameter ($ share ->getSharedWith ()))
70- ->setValue ('uid_owner ' , $ qb ->createNamedParameter ($ share ->getShareOwner ()))
71- ->setValue ('uid_initiator ' , $ qb ->createNamedParameter ($ share ->getSharedBy ()))
72- ->setValue ('accepted ' , $ qb ->createNamedParameter (IShare::STATUS_ACCEPTED ))
73- ->setValue ('password ' , $ qb ->createNamedParameter ($ password ))
74- ->setValue ('permissions ' , $ qb ->createNamedParameter ($ share ->getPermissions ()))
75- ->setValue ('token ' , $ qb ->createNamedParameter ($ share ->getToken ()))
76- ->setValue ('stime ' , $ qb ->createFunction ('UNIX_TIMESTAMP() ' ));
67+ ->setValue ('item_type ' , $ qb ->createNamedParameter ($ share ->getNodeType ()))
68+ ->setValue ('item_source ' , $ qb ->createNamedParameter ($ share ->getNodeId ()))
69+ ->setValue ('file_source ' , $ qb ->createNamedParameter ($ share ->getNodeId ()))
70+ ->setValue ('file_target ' , $ qb ->createNamedParameter ($ share ->getTarget ()))
71+ ->setValue ('share_with ' , $ qb ->createNamedParameter ($ share ->getSharedWith ()))
72+ ->setValue ('uid_owner ' , $ qb ->createNamedParameter ($ share ->getShareOwner ()))
73+ ->setValue ('uid_initiator ' , $ qb ->createNamedParameter ($ share ->getSharedBy ()))
74+ ->setValue ('accepted ' , $ qb ->createNamedParameter (IShare::STATUS_ACCEPTED ))
75+ ->setValue ('password ' , $ qb ->createNamedParameter ($ password ))
76+ ->setValue ('permissions ' , $ qb ->createNamedParameter ($ share ->getPermissions ()))
77+ ->setValue ('token ' , $ qb ->createNamedParameter ($ share ->getToken ()))
78+ ->setValue ('stime ' , $ qb ->createFunction ('UNIX_TIMESTAMP() ' ));
7779
7880 if ($ parentId > 0 ) {
7981 $ qb ->setValue ('parent ' , $ qb ->createNamedParameter ($ parentId ));
@@ -95,12 +97,15 @@ public function save(IShare $share, int $parentId = 0): int {
9597 */
9698 public function update (ShareWrapper $ shareWrapper ): void {
9799 $ qb = $ this ->getShareUpdateSql ();
100+ $ shareAttributes = $ this ->formatShareAttributes ($ shareWrapper ->getAttributes ());
101+
98102 $ qb ->set ('file_target ' , $ qb ->createNamedParameter ($ shareWrapper ->getFileTarget ()))
99- ->set ('share_with ' , $ qb ->createNamedParameter ($ shareWrapper ->getSharedWith ()))
100- ->set ('uid_owner ' , $ qb ->createNamedParameter ($ shareWrapper ->getShareOwner ()))
101- ->set ('uid_initiator ' , $ qb ->createNamedParameter ($ shareWrapper ->getSharedBy ()))
102- ->set ('accepted ' , $ qb ->createNamedParameter (IShare::STATUS_ACCEPTED ))
103- ->set ('permissions ' , $ qb ->createNamedParameter ($ shareWrapper ->getPermissions ()));
103+ ->set ('share_with ' , $ qb ->createNamedParameter ($ shareWrapper ->getSharedWith ()))
104+ ->set ('uid_owner ' , $ qb ->createNamedParameter ($ shareWrapper ->getShareOwner ()))
105+ ->set ('uid_initiator ' , $ qb ->createNamedParameter ($ shareWrapper ->getSharedBy ()))
106+ ->set ('accepted ' , $ qb ->createNamedParameter (IShare::STATUS_ACCEPTED ))
107+ ->set ('permissions ' , $ qb ->createNamedParameter ($ shareWrapper ->getPermissions ()))
108+ ->set ('attributes ' , $ qb ->createNamedParameter ($ shareAttributes ));
104109
105110 $ qb ->limitToId ((int )$ shareWrapper ->getId ());
106111
@@ -486,4 +491,30 @@ private function deleteSharesAndChild(array $ids): void {
486491
487492 $ qb ->execute ();
488493 }
494+
495+
496+ /**
497+ * Format IAttributes to database format (JSON string)
498+ * based on OC\Share20\DefaultShareProvider::formatShareAttributes();
499+ */
500+ private function formatShareAttributes (?IAttributes $ attributes ): ?string {
501+ if (empty ($ attributes ?->toArray())) {
502+ return null ;
503+ }
504+
505+ $ compressedAttributes = [];
506+ foreach ($ attributes ->toArray () as $ attribute ) {
507+ $ compressedAttributes [] = [
508+ $ attribute ['scope ' ],
509+ $ attribute ['key ' ],
510+ $ attribute ['enabled ' ]
511+ ];
512+ }
513+
514+ try {
515+ return json_encode ($ compressedAttributes , JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE | JSON_THROW_ON_ERROR );
516+ } catch (JsonException $ e ) {
517+ return null ;
518+ }
519+ }
489520}
0 commit comments