setName('tag:files:add')
->setDescription('Add a system-tag to a file or folder')
->addArgument('target', InputArgument::REQUIRED, 'file id or path')
->addArgument('tags', InputArgument::REQUIRED, 'Name of the tag(s) to add, comma separated')
->addArgument('access', InputArgument::REQUIRED, 'access level of the tag (public, restricted or invisible)');
}
public function execute(InputInterface $input, OutputInterface $output): int {
$targetInput = $input->getArgument('target');
$tagsInput = $input->getArgument('tags');
if ($tagsInput === '') {
$output->writeln('`tags` can\'t be empty');
return 3;
}
$tagNameArray = explode(',', $tagsInput);
$access = $input->getArgument('access');
switch ($access) {
case 'public':
$userVisible = true;
$userAssignable = true;
break;
case 'restricted':
$userVisible = true;
$userAssignable = false;
break;
case 'invisible':
$userVisible = false;
$userAssignable = false;
break;
default:
$output->writeln('`access` property is invalid');
return 1;
}
$targetNode = $this->fileUtils->getNode($targetInput);
if (! $targetNode) {
$output->writeln("file $targetInput not found");
return 1;
}
foreach ($tagNameArray as $tagName) {
try {
$tag = $this->systemTagManager->createTag($tagName, $userVisible, $userAssignable);
$output->writeln("$access tag named $tagName created.");
} catch (TagAlreadyExistsException $e) {
$tag = $this->systemTagManager->getTag($tagName, $userVisible, $userAssignable);
}
$this->systemTagObjectMapper->assignTags((string)$targetNode->getId(), 'files', $tag->getId());
$output->writeln("$access tag named $tagName added.");
}
return 0;
}
}