Constants::PERMISSION_READ,
'write' => Constants::PERMISSION_UPDATE | Constants::PERMISSION_CREATE,
'share' => Constants::PERMISSION_SHARE,
'delete' => Constants::PERMISSION_DELETE,
];
public function __construct(
FolderManager $folderManager,
IRootFolder $rootFolder,
MountProvider $mountProvider,
FolderStorageManager $folderStorageManager,
private readonly IGroupManager $groupManager,
) {
parent::__construct($folderManager, $rootFolder, $mountProvider, $folderStorageManager);
}
protected function configure(): void {
$this
->setName('groupfolders:group')
->setDescription('Edit the groups that have access to a Team folder')
->addArgument('folder_id', InputArgument::REQUIRED, 'Id of the folder to configure')
->addArgument('group', InputArgument::REQUIRED, 'The group to configure')
->addArgument('permissions', InputArgument::OPTIONAL | InputArgument::IS_ARRAY, 'The permissions to set for the group as a white space separated list (ex: read write). Leave empty for read only')
->addOption('delete', 'd', InputOption::VALUE_NONE, 'Remove access for the group');
parent::configure();
}
protected function execute(InputInterface $input, OutputInterface $output): int {
$folder = $this->getFolder($input, $output);
if ($folder === null) {
return -1;
}
$groupString = $input->getArgument('group');
$group = $this->groupManager->get($groupString);
if ($input->getOption('delete')) {
$this->folderManager->removeApplicableGroup($folder->id, $groupString);
return 0;
} elseif ($group || $this->folderManager->isACircle($groupString)) {
$permissionsString = $input->getArgument('permissions');
$permissions = $this->getNewPermissions($permissionsString);
if ($permissions) {
if (!isset($folder->groups[$groupString])) {
$this->folderManager->addApplicableGroup($folder->id, $groupString);
}
$this->folderManager->setGroupPermissions($folder->id, $groupString, $permissions);
return 0;
}
$output->writeln('Unable to parse permissions input: ' . implode(' ', $permissionsString) . '');
return -1;
}
$output->writeln('group/team not found: ' . $groupString . '');
return -1;
}
private function getNewPermissions(array $input): int {
$permissions = 1;
$values = self::PERMISSION_VALUES;
foreach ($input as $permissionsString) {
if (isset($values[$permissionsString])) {
$permissions |= self::PERMISSION_VALUES[$permissionsString];
} else {
return 0;
}
}
return $permissions;
}
}