mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-08-29 02:53:50 +00:00
Add sharing functionality for SavedExport with users/groups
Introduced support for sharing SavedExport entities with individual users or groups. Added new collections, methods for adding/removing/viewing shares, and a migration to create relevant join tables in the database. This enhances collaboration by enabling flexible access control.
This commit is contained in:
@@ -15,6 +15,9 @@ use Chill\MainBundle\Doctrine\Model\TrackCreationInterface;
|
||||
use Chill\MainBundle\Doctrine\Model\TrackCreationTrait;
|
||||
use Chill\MainBundle\Doctrine\Model\TrackUpdateInterface;
|
||||
use Chill\MainBundle\Doctrine\Model\TrackUpdateTrait;
|
||||
use Doctrine\Common\Collections\ArrayCollection;
|
||||
use Doctrine\Common\Collections\Collection;
|
||||
use Doctrine\Common\Collections\ReadableCollection;
|
||||
use Doctrine\ORM\Mapping as ORM;
|
||||
use Ramsey\Uuid\Uuid;
|
||||
use Ramsey\Uuid\UuidInterface;
|
||||
@@ -50,9 +53,25 @@ class SavedExport implements TrackCreationInterface, TrackUpdateInterface
|
||||
#[ORM\ManyToOne(targetEntity: User::class)]
|
||||
private User $user;
|
||||
|
||||
/**
|
||||
* @var Collection<int, User>
|
||||
*/
|
||||
#[ORM\ManyToMany(targetEntity: User::class)]
|
||||
#[ORM\JoinTable(name: 'chill_main_saved_export_users')]
|
||||
private Collection $sharedWithUsers;
|
||||
|
||||
/**
|
||||
* @var Collection<int, UserGroup>
|
||||
*/
|
||||
#[ORM\ManyToMany(targetEntity: UserGroup::class)]
|
||||
#[ORM\JoinTable(name: 'chill_main_saved_export_usergroups')]
|
||||
private Collection $sharedWithGroups;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->id = Uuid::uuid4();
|
||||
$this->sharedWithUsers = new ArrayCollection();
|
||||
$this->sharedWithGroups = new ArrayCollection();
|
||||
}
|
||||
|
||||
public function getDescription(): string
|
||||
@@ -119,4 +138,63 @@ class SavedExport implements TrackCreationInterface, TrackUpdateInterface
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function addShare(User|UserGroup $shareUser): SavedExport
|
||||
{
|
||||
if ($shareUser instanceof User) {
|
||||
if (!$this->sharedWithUsers->contains($shareUser)) {
|
||||
$this->sharedWithUsers->add($shareUser);
|
||||
}
|
||||
} else {
|
||||
if (!$this->sharedWithGroups->contains($shareUser)) {
|
||||
$this->sharedWithGroups->add($shareUser);
|
||||
}
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function removeShare(User|UserGroup $shareUser): SavedExport
|
||||
{
|
||||
if ($shareUser instanceof User) {
|
||||
$this->sharedWithUsers->removeElement($shareUser);
|
||||
} else {
|
||||
$this->sharedWithGroups->removeElement($shareUser);
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return ReadableCollection<int, User|UserGroup>
|
||||
*/
|
||||
public function getShare(): ReadableCollection
|
||||
{
|
||||
return new ArrayCollection([
|
||||
...$this->sharedWithUsers->toArray(),
|
||||
...$this->sharedWithGroups->toArray(),
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Determines if the user is shared with either directly or through a group.
|
||||
*
|
||||
* @param User $user the user to check
|
||||
*
|
||||
* @return bool returns true if the user is shared with directly or via group, otherwise false
|
||||
*/
|
||||
public function isSharedWithUser(User $user): bool
|
||||
{
|
||||
if ($this->sharedWithUsers->contains($user)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
foreach ($this->sharedWithGroups as $group) {
|
||||
if ($group->contains($user)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user