mirror of
https://code.mensbeam.com/MensBeam/Arsse.git
synced 2024-12-22 21:22:40 +00:00
Add Database::articleCategoriesGet()
This method retrieves author-supplied categories for articles, used in TTRSS
This commit is contained in:
parent
e729cedeca
commit
faf00d63ba
2 changed files with 51 additions and 0 deletions
|
@ -1162,6 +1162,20 @@ class Database {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function articleCategoriesGet(string $user, $id): array {
|
||||||
|
if (!Arsse::$user->authorize($user, __FUNCTION__)) {
|
||||||
|
throw new User\ExceptionAuthz("notAuthorized", ["action" => __FUNCTION__, "user" => $user]);
|
||||||
|
}
|
||||||
|
$id = $this->articleValidateId($user, $id)['article'];
|
||||||
|
$out = $this->db->prepare("SELECT name from arsse_categories where article is ? order by name", "int")->run($id)->getAll();
|
||||||
|
if (!$out) {
|
||||||
|
return $out;
|
||||||
|
} else {
|
||||||
|
// flatten the result
|
||||||
|
return array_column($out, "name");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public function articleCleanup(): bool {
|
public function articleCleanup(): bool {
|
||||||
$query = $this->db->prepare(
|
$query = $this->db->prepare(
|
||||||
"WITH target_feed(id,subs) as (".
|
"WITH target_feed(id,subs) as (".
|
||||||
|
|
|
@ -215,6 +215,18 @@ trait SeriesArticle {
|
||||||
[1, 2,0,0,'2010-01-01 00:00:00','Some Note'],
|
[1, 2,0,0,'2010-01-01 00:00:00','Some Note'],
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
'arsse_categories' => [ // author-supplied categories
|
||||||
|
'columns' => [
|
||||||
|
'article' => "int",
|
||||||
|
'name' => "str",
|
||||||
|
],
|
||||||
|
'rows' => [
|
||||||
|
[19,"Fascinating"],
|
||||||
|
[19,"Logical"],
|
||||||
|
[20,"Interesting"],
|
||||||
|
[20,"Logical"],
|
||||||
|
],
|
||||||
|
],
|
||||||
'arsse_labels' => [
|
'arsse_labels' => [
|
||||||
'columns' => [
|
'columns' => [
|
||||||
'id' => "int",
|
'id' => "int",
|
||||||
|
@ -907,9 +919,34 @@ trait SeriesArticle {
|
||||||
$this->assertEquals([], Arsse::$db->articleLabelsGet("john.doe@example.com", 2, true));
|
$this->assertEquals([], Arsse::$db->articleLabelsGet("john.doe@example.com", 2, true));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testListTheLabelsOfAMissingArticle() {
|
||||||
|
$this->assertException("subjectMissing", "Db", "ExceptionInput");
|
||||||
|
Arsse::$db->articleLabelsGet($this->user, 101);
|
||||||
|
}
|
||||||
|
|
||||||
public function testListTheLabelsOfAnArticleWithoutAuthority() {
|
public function testListTheLabelsOfAnArticleWithoutAuthority() {
|
||||||
Phake::when(Arsse::$user)->authorize->thenReturn(false);
|
Phake::when(Arsse::$user)->authorize->thenReturn(false);
|
||||||
$this->assertException("notAuthorized", "User", "ExceptionAuthz");
|
$this->assertException("notAuthorized", "User", "ExceptionAuthz");
|
||||||
Arsse::$db->articleLabelsGet("john.doe@example.com", 1);
|
Arsse::$db->articleLabelsGet("john.doe@example.com", 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testListTheCategoriesOfAnArticle() {
|
||||||
|
$exp = ["Fascinating", "Logical"];
|
||||||
|
$this->assertSame($exp, Arsse::$db->articleCategoriesGet($this->user, 19));
|
||||||
|
$exp = ["Interesting", "Logical"];
|
||||||
|
$this->assertSame($exp, Arsse::$db->articleCategoriesGet($this->user, 20));
|
||||||
|
$exp = [];
|
||||||
|
$this->assertSame($exp, Arsse::$db->articleCategoriesGet($this->user, 4));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testListTheCategoriesOfAMissingArticle() {
|
||||||
|
$this->assertException("subjectMissing", "Db", "ExceptionInput");
|
||||||
|
Arsse::$db->articleCategoriesGet($this->user, 101);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testListTheCategoriesOfAnArticleWithoutAuthority() {
|
||||||
|
Phake::when(Arsse::$user)->authorize->thenReturn(false);
|
||||||
|
$this->assertException("notAuthorized", "User", "ExceptionAuthz");
|
||||||
|
Arsse::$db->articleCategoriesGet($this->user, 19);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue