31
31
32
32
namespace OCA \Circles \Db ;
33
33
34
+ use JsonException ;
34
35
use OCA \Circles \Exceptions \RequestBuilderException ;
35
36
use OCA \Circles \Exceptions \ShareWrapperNotFoundException ;
36
37
use OCA \Circles \Model \FederatedUser ;
37
38
use OCA \Circles \Model \Membership ;
38
39
use OCA \Circles \Model \Probes \CircleProbe ;
39
40
use OCA \Circles \Model \ShareWrapper ;
41
+ use OCP \Files \Folder ;
40
42
use OCP \Files \NotFoundException ;
41
43
use OCP \Share \Exceptions \IllegalIDChangeException ;
44
+ use OCP \Share \IAttributes ;
42
45
use OCP \Share \IShare ;
43
- use OCP \Files \Folder ;
44
46
45
47
/**
46
48
* Class ShareWrapperRequest
@@ -62,18 +64,18 @@ public function save(IShare $share, int $parentId = 0): int {
62
64
63
65
$ qb = $ this ->getShareInsertSql ();
64
66
$ 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() ' ));
77
79
78
80
if ($ parentId > 0 ) {
79
81
$ qb ->setValue ('parent ' , $ qb ->createNamedParameter ($ parentId ));
@@ -95,12 +97,15 @@ public function save(IShare $share, int $parentId = 0): int {
95
97
*/
96
98
public function update (ShareWrapper $ shareWrapper ): void {
97
99
$ qb = $ this ->getShareUpdateSql ();
100
+ $ shareAttributes = $ this ->formatShareAttributes ($ shareWrapper ->getAttributes ());
101
+
98
102
$ 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 ));
104
109
105
110
$ qb ->limitToId ((int )$ shareWrapper ->getId ());
106
111
@@ -486,4 +491,30 @@ private function deleteSharesAndChild(array $ids): void {
486
491
487
492
$ qb ->execute ();
488
493
}
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
+ }
489
520
}
0 commit comments