@@ -283,39 +283,62 @@ private function applyBoardPermission($share, $permissions, $userId) {
283283 * @inheritDoc
284284 */
285285 public function update (IShare $ share ) {
286- $ qb = $ this ->dbConnection ->getQueryBuilder ();
287- $ qb ->update ('share ' )
288- ->where ($ qb ->expr ()->eq ('id ' , $ qb ->createNamedParameter ($ share ->getId ())))
289- ->set ('uid_owner ' , $ qb ->createNamedParameter ($ share ->getShareOwner ()))
290- ->set ('uid_initiator ' , $ qb ->createNamedParameter ($ share ->getSharedBy ()))
291- ->set ('permissions ' , $ qb ->createNamedParameter ($ share ->getPermissions ()))
292- ->set ('item_source ' , $ qb ->createNamedParameter ($ share ->getNode ()->getId ()))
293- ->set ('file_source ' , $ qb ->createNamedParameter ($ share ->getNode ()->getId ()))
294- ->set ('expiration ' , $ qb ->createNamedParameter ($ share ->getExpirationDate (), IQueryBuilder::PARAM_DATE ))
295- ->execute ();
286+ $ this ->dbConnection ->beginTransaction ();
287+ try {
288+ $ qb = $ this ->dbConnection ->getQueryBuilder ();
289+ $ qb ->update ('share ' )
290+ ->where ($ qb ->expr ()->eq ('id ' , $ qb ->createNamedParameter ($ share ->getId ())))
291+ ->set ('uid_owner ' , $ qb ->createNamedParameter ($ share ->getShareOwner ()))
292+ ->set ('uid_initiator ' , $ qb ->createNamedParameter ($ share ->getSharedBy ()))
293+ ->set ('permissions ' , $ qb ->createNamedParameter ($ share ->getPermissions ()))
294+ ->set ('item_source ' , $ qb ->createNamedParameter ($ share ->getNode ()->getId ()))
295+ ->set ('file_source ' , $ qb ->createNamedParameter ($ share ->getNode ()->getId ()))
296+ ->set ('expiration ' , $ qb ->createNamedParameter ($ share ->getExpirationDate (), IQueryBuilder::PARAM_DATE ));
297+
298+ $ shareAttributes = $ this ->formatShareAttributes ($ share ->getAttributes ());
299+ if ($ shareAttributes !== null ) {
300+ $ qb ->set ('attributes ' , $ qb ->createNamedParameter ($ shareAttributes ));
301+ }
296302
297- /*
298- * Update all user defined group shares
299- */
300- $ qb = $ this ->dbConnection ->getQueryBuilder ();
301- $ qb ->update ('share ' )
302- ->where ($ qb ->expr ()->eq ('parent ' , $ qb ->createNamedParameter ($ share ->getId ())))
303- ->set ('uid_owner ' , $ qb ->createNamedParameter ($ share ->getShareOwner ()))
304- ->set ('uid_initiator ' , $ qb ->createNamedParameter ($ share ->getSharedBy ()))
305- ->set ('item_source ' , $ qb ->createNamedParameter ($ share ->getNode ()->getId ()))
306- ->set ('file_source ' , $ qb ->createNamedParameter ($ share ->getNode ()->getId ()))
307- ->set ('expiration ' , $ qb ->createNamedParameter ($ share ->getExpirationDate (), IQueryBuilder::PARAM_DATE ))
308- ->execute ();
303+ $ qb ->executeStatement ();
309304
310- /*
311- * Now update the permissions for all children that have not set it to 0
312- */
313- $ qb = $ this ->dbConnection ->getQueryBuilder ();
314- $ qb ->update ('share ' )
315- ->where ($ qb ->expr ()->eq ('parent ' , $ qb ->createNamedParameter ($ share ->getId ())))
316- ->andWhere ($ qb ->expr ()->neq ('permissions ' , $ qb ->createNamedParameter (0 )))
317- ->set ('permissions ' , $ qb ->createNamedParameter ($ share ->getPermissions ()))
318- ->execute ();
305+ /*
306+ * Update all user defined group shares
307+ */
308+ $ qb = $ this ->dbConnection ->getQueryBuilder ();
309+ $ qb ->update ('share ' )
310+ ->where ($ qb ->expr ()->eq ('parent ' , $ qb ->createNamedParameter ($ share ->getId ())))
311+ ->set ('uid_owner ' , $ qb ->createNamedParameter ($ share ->getShareOwner ()))
312+ ->set ('uid_initiator ' , $ qb ->createNamedParameter ($ share ->getSharedBy ()))
313+ ->set ('item_source ' , $ qb ->createNamedParameter ($ share ->getNode ()->getId ()))
314+ ->set ('file_source ' , $ qb ->createNamedParameter ($ share ->getNode ()->getId ()))
315+ ->set ('expiration ' , $ qb ->createNamedParameter ($ share ->getExpirationDate (), IQueryBuilder::PARAM_DATE ));
316+
317+ if ($ shareAttributes !== null ) {
318+ $ qb ->set ('attributes ' , $ qb ->createNamedParameter ($ shareAttributes ));
319+ }
320+
321+ $ qb ->executeStatement ();
322+
323+ /*
324+ * Now update the permissions for all children that have not set it to 0
325+ */
326+ $ qb = $ this ->dbConnection ->getQueryBuilder ();
327+ $ qb ->update ('share ' )
328+ ->where ($ qb ->expr ()->eq ('parent ' , $ qb ->createNamedParameter ($ share ->getId ())))
329+ ->andWhere ($ qb ->expr ()->neq ('permissions ' , $ qb ->createNamedParameter (0 )))
330+ ->set ('permissions ' , $ qb ->createNamedParameter ($ share ->getPermissions ()));
331+
332+ if ($ shareAttributes !== null ) {
333+ $ qb ->set ('attributes ' , $ qb ->createNamedParameter ($ shareAttributes ));
334+ }
335+
336+ $ qb ->executeStatement ();
337+ } catch (\Exception $ e ) {
338+ $ this ->dbConnection ->rollBack ();
339+ throw $ e ;
340+ }
341+ $ this ->dbConnection ->commit ();
319342
320343 return $ share ;
321344 }
@@ -1043,22 +1066,22 @@ public function getAllShares(): iterable {
10431066 }
10441067
10451068 protected function updateShareAttributes (IShare $ share , ?string $ data ): IShare {
1046- if ($ data !== null && $ data !== '' ) {
1047- $ attributes = $ share ->getAttributes () ?? $ share ->newAttributes ();
1048- $ compressedAttributes = \json_decode ($ data , true );
1049- if ($ compressedAttributes === false || $ compressedAttributes === null ) {
1050- return $ share ;
1051- }
1052- foreach ($ compressedAttributes as $ compressedAttribute ) {
1053- $ attributes ->setAttribute (
1054- $ compressedAttribute [0 ],
1055- $ compressedAttribute [1 ],
1056- $ compressedAttribute [2 ]
1057- );
1058- }
1059- $ share ->setAttributes ($ attributes );
1069+ if ($ data === null || $ data === '' ) {
1070+ return $ share ;
10601071 }
1061-
1072+ $ attributes = $ share ->getAttributes () ?? $ share ->newAttributes ();
1073+ $ compressedAttributes = \json_decode ($ data , true );
1074+ if ($ compressedAttributes === false || $ compressedAttributes === null ) {
1075+ return $ share ;
1076+ }
1077+ foreach ($ compressedAttributes as $ compressedAttribute ) {
1078+ $ attributes ->setAttribute (
1079+ $ compressedAttribute [0 ],
1080+ $ compressedAttribute [1 ],
1081+ $ compressedAttribute [2 ]
1082+ );
1083+ }
1084+ $ share ->setAttributes ($ attributes );
10621085 return $ share ;
10631086 }
10641087
0 commit comments