summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarco Nassabain <marco.nassabain@hotmail.com>2021-03-16 22:03:50 +0100
committerSean Molenaar <SMillerDev@users.noreply.github.com>2021-03-17 08:58:42 +0100
commit7e0aab358c07a9999b511e0e91e6501dc6b04461 (patch)
treec4f2e6ebe2747c91508eb9a6821e4b88025cada3
parent29b55ae03031d1a8a48ccd225b31aab8bde3a79b (diff)
🎨 Item: store categories as json & add helper fns
+ added setter/getters that work with arrays to simplify use case Signed-off-by: Marco Nassabain <marco.nassabain@hotmail.com>
-rw-r--r--lib/Db/Item.php34
-rwxr-xr-xlib/Fetcher/FeedFetcher.php4
-rw-r--r--lib/Migration/Version150302Date20210312231251.php2
3 files changed, 27 insertions, 13 deletions
diff --git a/lib/Db/Item.php b/lib/Db/Item.php
index 86a484315..fe2cd6ac5 100644
--- a/lib/Db/Item.php
+++ b/lib/Db/Item.php
@@ -64,7 +64,7 @@ class Item extends Entity implements IAPI, \JsonSerializable
/** @var bool */
protected $starred = false;
/** @var string|null */
- protected $categories;
+ protected $categoriesJson;
public function __construct()
{
@@ -87,7 +87,7 @@ class Item extends Entity implements IAPI, \JsonSerializable
$this->addType('fingerprint', 'string');
$this->addType('unread', 'boolean');
$this->addType('starred', 'boolean');
- $this->addType('categories', 'string');
+ $this->addType('categoriesJson', 'string');
}
/**
@@ -131,7 +131,7 @@ class Item extends Entity implements IAPI, \JsonSerializable
html_entity_decode(strip_tags($this->getBody())) .
html_entity_decode($this->getAuthor()) .
html_entity_decode($this->getTitle()) .
- html_entity_decode($this->getCategories()) .
+ html_entity_decode($this->getCategoriesJson()) .
$this->getUrl(),
'UTF-8'
)
@@ -282,9 +282,17 @@ class Item extends Entity implements IAPI, \JsonSerializable
/**
* @return null|string
*/
- public function getCategories(): ?string
+ public function getCategoriesJson(): ?string
{
- return $this->categories;
+ return $this->categoriesJson;
+ }
+
+ /**
+ * @return null|array
+ */
+ public function getCategories(): ?array
+ {
+ return json_decode($this->getCategoriesJson());
}
/**
@@ -518,16 +526,24 @@ class Item extends Entity implements IAPI, \JsonSerializable
return $this;
}
- public function setCategories(string $categories = null): self
+ public function setCategoriesJson(string $categoriesJson = null): self
{
- if ($this->categories !== $categories) {
- $this->categories = $categories;
- $this->markFieldUpdated('categories');
+ if ($this->categoriesJson !== $categoriesJson) {
+ $this->categoriesJson = $categoriesJson;
+ $this->markFieldUpdated('categoriesJson');
}
return $this;
}
+ public function setCategories(array $categories = null): self
+ {
+ $categoriesJson = !empty($categories) ? json_encode($categories) : null;
+ $this->setCategoriesJson($categoriesJson);
+
+ return $this;
+ }
+
public function toAPI(): array
{
return [
diff --git a/lib/Fetcher/FeedFetcher.php b/lib/Fetcher/FeedFetcher.php
index 7840c8cfd..01cb20853 100755
--- a/lib/Fetcher/FeedFetcher.php
+++ b/lib/Fetcher/FeedFetcher.php
@@ -260,9 +260,7 @@ class FeedFetcher implements IFeedFetcher
foreach ($parsedItem->getCategories() as $category) {
$categories[] = $this->decodeTwice($category->getLabel());
}
- if (count($categories) > 0) {
- $item->setCategories(implode(',', $categories));
- }
+ $item->setCategories($categories);
// Use description from feed if body is not provided (by a scraper)
if ($body === null) {
diff --git a/lib/Migration/Version150302Date20210312231251.php b/lib/Migration/Version150302Date20210312231251.php
index 70595239e..80f058ba2 100644
--- a/lib/Migration/Version150302Date20210312231251.php
+++ b/lib/Migration/Version150302Date20210312231251.php
@@ -34,7 +34,7 @@ class Version150302Date20210312231251 extends SimpleMigrationStep {
if ($schema->hasTable('news_items')) {
$table = $schema->getTable('news_items');
- $table->addColumn('categories', 'text', [
+ $table->addColumn('categories_json', 'json', [
'notnull' => false
]);
}