diff --git a/appinfo/info.xml b/appinfo/info.xml
index 25e00d2..8beb18f 100644
--- a/appinfo/info.xml
+++ b/appinfo/info.xml
@@ -19,5 +19,6 @@
OCA\GroupfolderTags\Command\Tag
+ OCA\GroupfolderTags\Command\GetTag
-
\ No newline at end of file
+
diff --git a/lib/Command/GetTag.php b/lib/Command/GetTag.php
new file mode 100644
index 0000000..1817457
--- /dev/null
+++ b/lib/Command/GetTag.php
@@ -0,0 +1,52 @@
+setName('groupfolder-tags:get')
+ ->setDescription('Get single tag value by Groupfolder ID and key. Omit key to get all tags.')
+ ->addArgument('folder_id', InputArgument::REQUIRED, 'Groupfolder ID of the tag')
+ ->addArgument('key', InputArgument::OPTIONAL, 'Key of the tag');
+ }
+
+ protected function execute(InputInterface $input, OutputInterface $output): int {
+ $groupFolderId = $input->getArgument('folder_id');
+ $tagKey = $input->getArgument('key');
+
+ if (!$this->getFolder($input, $output)) {
+ return 1;
+ }
+
+ try {
+ $tags = $this->service->findByGroupFolderAndKey($groupFolderId, $tagKey);
+
+ if (empty($tags)) {
+ $output->writeln("Could not find tag for Groupfolder");
+ return 1;
+ }
+
+ if (isset($tagKey)) {
+ /** @var Tag $tag */
+ $tag = current($tags);
+ $output->writeln($tag->getTagValue());
+ return 0;
+ }
+
+ foreach ($tags as $tag) {
+ $output->writeln(json_encode($tag));
+ }
+ return 0;
+ } catch (Exception $e) {
+ $output->writeln("Exception \"{$e->getMessage()}\" at {$e->getFile()} line {$e->getLine()}");
+ return 1;
+ }
+ }
+}
diff --git a/lib/Db/Tag.php b/lib/Db/Tag.php
index 729c597..998c527 100644
--- a/lib/Db/Tag.php
+++ b/lib/Db/Tag.php
@@ -17,6 +17,15 @@ class Tag extends Entity implements JsonSerializable {
$this->addType('lastUpdatedTimestamp','integer');
}
+ /**
+ * @return mixed
+ */
+ public function getTagValue() {
+ return $this->tagValue;
+ }
+
+
+
public function jsonSerialize(): array {
return [
'groupFolderId' => $this->groupFolderId,
@@ -25,4 +34,4 @@ class Tag extends Entity implements JsonSerializable {
'lastUpdatedTimestamp' => $this->lastUpdatedTimestamp,
];
}
-}
\ No newline at end of file
+}
diff --git a/lib/Db/TagMapper.php b/lib/Db/TagMapper.php
index 7b0604e..ae8fcb4 100644
--- a/lib/Db/TagMapper.php
+++ b/lib/Db/TagMapper.php
@@ -5,6 +5,7 @@ namespace OCA\GroupfolderTags\Db;
use OCP\AppFramework\Db\DoesNotExistException;
use OCP\AppFramework\Db\Entity;
use OCP\AppFramework\Db\QBMapper;
+use OCP\DB\Exception;
use OCP\DB\QueryBuilder\IQueryBuilder;
use OCP\IDBConnection;
@@ -30,7 +31,7 @@ class TagMapper extends QBMapper {
->from(self::TABLENAME)
->where($qb->expr()->eq('group_folder_id', $qb->createNamedParameter($groupFolderId, IQueryBuilder::PARAM_INT)))
->andWhere($qb->expr()->eq('tag_key', $qb->createNamedParameter($tagKey)));
-
+
return $this->findEntity($qb);
}
@@ -51,7 +52,7 @@ class TagMapper extends QBMapper {
->leftJoin('t', self::GROUP_FOLDERS_TABLENAME, 'g', $qb->expr()->andX(
$qb->expr()->eq('t.group_folder_id', 'g.id'),
));
-
+
return $this->findOneQuery($qb);
}
@@ -70,7 +71,24 @@ class TagMapper extends QBMapper {
if(isset($tagValue)) {
$qb->andWhere($qb->expr()->eq('tag_value', $qb->createNamedParameter($tagValue)));
}
-
+
return $this->findEntities($qb);
}
-}
\ No newline at end of file
+
+ /**
+ * @return Tag[]
+ * @throws Exception
+ */
+ public function findByGroupFolderAndKey(string $groupFolderId, ?string $tagKey): array {
+ $qb = $this->db->getQueryBuilder();
+ $qb->select('*')
+ ->from(self::TABLENAME)
+ ->where($qb->expr()->eq('group_folder_id', $qb->createNamedParameter($groupFolderId, IQueryBuilder::PARAM_INT)));
+
+ if(isset($tagKey)) {
+ $qb->andWhere($qb->expr()->eq('tag_key', $qb->createNamedParameter($tagKey)));
+ }
+
+ return $this->findEntities($qb);
+ }
+}
diff --git a/lib/Service/TagService.php b/lib/Service/TagService.php
index 1127b90..4f36f7f 100644
--- a/lib/Service/TagService.php
+++ b/lib/Service/TagService.php
@@ -70,4 +70,12 @@ class TagService {
$this->handleException($e);
}
}
-}
\ No newline at end of file
+
+ /**
+ * @return Tag[]
+ * @throws \OCP\DB\Exception
+ */
+ public function findByGroupFolderAndKey(int $groupFolderId, ?string $key): array {
+ return $this->mapper->findByGroupFolderAndKey($groupFolderId, $key);
+ }
+}