5050use OCP \Files \IRootFolder ;
5151use OCP \Files \Node ;
5252use OCP \Files \NotFoundException ;
53+ use OCP \IGroup ;
54+ use OCP \IGroupManager ;
5355use OCP \IL10N ;
5456use OCP \IURLGenerator ;
57+ use OCP \IUser ;
5558use OCP \IUserManager ;
5659use OCP \Share \Exceptions \AlreadySharedException ;
5760use OCP \Share \Exceptions \IllegalIDChangeException ;
5861use OCP \Share \Exceptions \ShareNotFound ;
5962use OCP \Share \IPartialShareProvider ;
6063use OCP \Share \IShare ;
6164use OCP \Share \IShareProvider ;
65+ use OCP \Share \IShareProviderGetUsers ;
6266use Psr \Log \LoggerInterface ;
6367
6468/**
6569 * Class ShareByCircleProvider
6670 *
6771 * @package OCA\Circles
6872 */
69- class ShareByCircleProvider implements IShareProvider, IPartialShareProvider {
73+ class ShareByCircleProvider implements IShareProvider, IPartialShareProvider, IShareProviderGetUsers {
7074 use TArrayTools;
7175 use TStringTools;
7276 use TNCLogger;
@@ -85,6 +89,7 @@ public function __construct(
8589 private FederatedEventService $ federatedEventService ,
8690 private CircleService $ circleService ,
8791 private EventService $ eventService ,
92+ private readonly IGroupManager $ groupManager ,
8893 ) {
8994 }
9095
@@ -845,4 +850,19 @@ public function getAllShares(): iterable {
845850 // $cursor->closeCursor();
846851 return [];
847852 }
853+
854+ public function getUsersForShare (IShare $ share ): iterable {
855+ $ members = $ this ->shareWrapperService ->getShareById ((int )$ share ->getId ())->getCircle ()->getInheritedMembers ();
856+ foreach ($ members as $ member ) {
857+ if ($ member ->getUserType () === Member::TYPE_USER ) {
858+ /** @var IUser $user */
859+ $ user = $ this ->userManager ->get ($ member ->getUserId ());
860+ yield $ user ;
861+ } elseif ($ member ->getUserType () === Member::TYPE_GROUP ) {
862+ /** @var IGroup $group */
863+ $ group = $ this ->groupManager ->get ($ member ->getUserId ());
864+ yield from $ group ->getUsers ();
865+ }
866+ }
867+ }
848868}
0 commit comments