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; } }