@@ -813,34 +813,6 @@ private function list(ShareAccessContext $accessContext, ?string $filterShareID,
813813 }
814814 }
815815
816- foreach (array_keys ($ shares ) as $ id ) {
817- foreach ($ registryPropertyTypes as $ propertyTypeClass => $ propertyType ) {
818- if (
819- !isset ($ shares [$ id ]['properties ' ][$ propertyTypeClass ])
820- && isset ($ shareSourceTypeClasses [$ id ], $ shareRecipientTypeClasses [$ id ])
821- && array_intersect ($ registryPropertyTypeCompatibleSourceTypeClasses [$ propertyTypeClass ], array_keys ($ shareSourceTypeClasses [$ id ])) !== []
822- && array_intersect ($ registryPropertyTypeCompatibleRecipientTypeClasses [$ propertyTypeClass ], array_keys ($ shareRecipientTypeClasses [$ id ])) !== []) {
823- $ value = $ propertyType ->getDefaultValue ();
824-
825- $ timestamp = $ this ->manager ->generateTimestamp ();
826- $ this ->setLastUpdated ([(string )$ id ], $ timestamp );
827-
828- $ qb = $ this ->connection ->getQueryBuilder ();
829- $ qb
830- ->insert ('sharing_share_properties ' )
831- ->values ([
832- 'share_id ' => $ qb ->createNamedParameter ($ id ),
833- 'property_class ' => $ qb ->createNamedParameter ($ propertyTypeClass ),
834- 'property_value ' => $ qb ->createNamedParameter ($ propertyType instanceof ISharePropertyTypeModifyValue ? $ propertyType ->modifyValueOnSave (null , $ value ) : $ value ),
835- ])
836- ->executeStatement ();
837-
838- $ shares [$ id ]['properties ' ][$ propertyTypeClass ] = new ShareProperty ($ propertyTypeClass , $ value );
839- $ shares [$ id ]['last_updated ' ] = $ timestamp ;
840- }
841- }
842- }
843-
844816 $ registrySourceTypePermissionTypeClasses = $ this ->registry ->getSourceTypePermissionTypeClasses ();
845817 $ registryGenericPermissionTypeClasses = $ this ->registry ->getGenericPermissionTypeClasses ();
846818
@@ -891,33 +863,6 @@ private function list(ShareAccessContext $accessContext, ?string $filterShareID,
891863 }
892864 }
893865
894- $ permissionTypes = $ this ->registry ->getPermissionTypes ();
895-
896- foreach (array_keys ($ shares ) as $ id ) {
897- foreach (array_keys ($ shareCompatiblePermissionTypeClasses [$ id ]) as $ permissionTypeClass ) {
898- $ permissionType = $ permissionTypes [$ permissionTypeClass ];
899- if (!isset ($ shares [$ id ]['permissions ' ][$ permissionTypeClass ])) {
900- $ enabled = $ permissionType ->isEnabledByDefault ();
901-
902- $ timestamp = $ this ->manager ->generateTimestamp ();
903- $ this ->setLastUpdated ([(string )$ id ], $ timestamp );
904-
905- $ qb = $ this ->connection ->getQueryBuilder ();
906- $ qb
907- ->insert ('sharing_share_permissions ' )
908- ->values ([
909- 'share_id ' => $ qb ->createNamedParameter ($ id ),
910- 'permission_class ' => $ qb ->createNamedParameter ($ permissionTypeClass ),
911- 'permission_enabled ' => $ qb ->createNamedParameter ($ enabled , IQueryBuilder::PARAM_BOOL ),
912- ])
913- ->executeStatement ();
914-
915- $ shares [$ id ]['permissions ' ][$ permissionTypeClass ] = new SharePermission ($ permissionTypeClass , $ enabled );
916- $ shares [$ id ]['last_updated ' ] = $ timestamp ;
917- }
918- }
919- }
920-
921866 $ shares = array_map (static fn (array $ share ): Share => new Share (
922867 $ share ['id ' ],
923868 $ share ['owner ' ],
@@ -948,6 +893,84 @@ private function list(ShareAccessContext $accessContext, ?string $filterShareID,
948893 }
949894 }
950895
896+ foreach (array_keys ($ shares ) as $ id ) {
897+ foreach ($ registryPropertyTypes as $ propertyTypeClass => $ propertyType ) {
898+ $ share = $ shares [$ id ];
899+ if (
900+ !isset ($ share ->properties [$ propertyTypeClass ])
901+ && isset ($ shareSourceTypeClasses [$ id ], $ shareRecipientTypeClasses [$ id ])
902+ && array_intersect ($ registryPropertyTypeCompatibleSourceTypeClasses [$ propertyTypeClass ], array_keys ($ shareSourceTypeClasses [$ id ])) !== []
903+ && array_intersect ($ registryPropertyTypeCompatibleRecipientTypeClasses [$ propertyTypeClass ], array_keys ($ shareRecipientTypeClasses [$ id ])) !== []) {
904+ $ value = $ propertyType ->getDefaultValue ($ share );
905+
906+ $ timestamp = $ this ->manager ->generateTimestamp ();
907+ $ this ->setLastUpdated ([(string )$ id ], $ timestamp );
908+
909+ $ qb = $ this ->connection ->getQueryBuilder ();
910+ $ qb
911+ ->insert ('sharing_share_properties ' )
912+ ->values ([
913+ 'share_id ' => $ qb ->createNamedParameter ($ id ),
914+ 'property_class ' => $ qb ->createNamedParameter ($ propertyTypeClass ),
915+ 'property_value ' => $ qb ->createNamedParameter ($ propertyType instanceof ISharePropertyTypeModifyValue ? $ propertyType ->modifyValueOnSave (null , $ value ) : $ value ),
916+ ])
917+ ->executeStatement ();
918+
919+ $ properties = $ share ->properties ;
920+ $ properties [$ propertyTypeClass ] = new ShareProperty ($ propertyTypeClass , $ value );
921+
922+ $ shares [$ id ] = new Share (
923+ $ share ->id ,
924+ $ share ->owner ,
925+ $ timestamp ,
926+ $ share ->state ,
927+ $ share ->sources ,
928+ $ share ->recipients ,
929+ $ properties ,
930+ $ share ->permissions ,
931+ );
932+ }
933+ }
934+ }
935+
936+ $ permissionTypes = $ this ->registry ->getPermissionTypes ();
937+ foreach (array_keys ($ shares ) as $ id ) {
938+ foreach (array_keys ($ shareCompatiblePermissionTypeClasses [$ id ]) as $ permissionTypeClass ) {
939+ $ share = $ shares [$ id ];
940+ if (!isset ($ share ->permissions [$ permissionTypeClass ])) {
941+ $ permissionType = $ permissionTypes [$ permissionTypeClass ];
942+ $ enabled = $ permissionType ->isEnabledByDefault ();
943+
944+ $ timestamp = $ this ->manager ->generateTimestamp ();
945+ $ this ->setLastUpdated ([(string )$ id ], $ timestamp );
946+
947+ $ qb = $ this ->connection ->getQueryBuilder ();
948+ $ qb
949+ ->insert ('sharing_share_permissions ' )
950+ ->values ([
951+ 'share_id ' => $ qb ->createNamedParameter ($ id ),
952+ 'permission_class ' => $ qb ->createNamedParameter ($ permissionTypeClass ),
953+ 'permission_enabled ' => $ qb ->createNamedParameter ($ enabled , IQueryBuilder::PARAM_BOOL ),
954+ ])
955+ ->executeStatement ();
956+
957+ $ permissions = $ share ->permissions ;
958+ $ permissions [$ permissionTypeClass ] = new SharePermission ($ permissionTypeClass , $ enabled );
959+
960+ $ shares [$ id ] = new Share (
961+ $ share ->id ,
962+ $ share ->owner ,
963+ $ timestamp ,
964+ $ share ->state ,
965+ $ share ->sources ,
966+ $ share ->recipients ,
967+ $ share ->properties ,
968+ $ permissions ,
969+ );
970+ }
971+ }
972+ }
973+
951974 return array_values ($ shares );
952975 }
953976}
0 commit comments