mirror of
https://code.mensbeam.com/MensBeam/Arsse.git
synced 2024-12-22 21:22:40 +00:00
Add context options for multiple tags, labels, etc
This commit is contained in:
parent
5d994f3dad
commit
ba32ad2f17
2 changed files with 84 additions and 9 deletions
|
@ -11,16 +11,23 @@ use JKingWeb\Arsse\Misc\Date;
|
|||
|
||||
class ExclusionContext {
|
||||
public $folder;
|
||||
public $folders;
|
||||
public $folderShallow;
|
||||
public $foldersShallow;
|
||||
public $tag;
|
||||
public $tags;
|
||||
public $tagName;
|
||||
public $tagNames;
|
||||
public $subscription;
|
||||
public $subscriptions;
|
||||
public $edition;
|
||||
public $article;
|
||||
public $editions;
|
||||
public $article;
|
||||
public $articles;
|
||||
public $label;
|
||||
public $labels;
|
||||
public $labelName;
|
||||
public $labelNames;
|
||||
public $annotationTerms;
|
||||
public $searchTerms;
|
||||
public $titleTerms;
|
||||
|
@ -70,16 +77,18 @@ class ExclusionContext {
|
|||
}
|
||||
}
|
||||
|
||||
protected function cleanIdArray(array $spec): array {
|
||||
protected function cleanIdArray(array $spec, bool $allowZero = false): array {
|
||||
$spec = array_values($spec);
|
||||
for ($a = 0; $a < sizeof($spec); $a++) {
|
||||
if (ValueInfo::id($spec[$a])) {
|
||||
if (ValueInfo::id($spec[$a], $allowZero)) {
|
||||
$spec[$a] = (int) $spec[$a];
|
||||
} else {
|
||||
$spec[$a] = 0;
|
||||
$spec[$a] = null;
|
||||
}
|
||||
}
|
||||
return array_values(array_unique(array_filter($spec)));
|
||||
return array_values(array_unique(array_filter($spec, function ($v) {
|
||||
return !is_null($v);
|
||||
})));
|
||||
}
|
||||
|
||||
protected function cleanStringArray(array $spec): array {
|
||||
|
@ -99,22 +108,57 @@ class ExclusionContext {
|
|||
return $this->act(__FUNCTION__, func_num_args(), $spec);
|
||||
}
|
||||
|
||||
public function folders(array $spec = null) {
|
||||
if (isset($spec)) {
|
||||
$spec = $this->cleanIdArray($spec, true);
|
||||
}
|
||||
return $this->act(__FUNCTION__, func_num_args(), $spec);
|
||||
}
|
||||
|
||||
public function folderShallow(int $spec = null) {
|
||||
return $this->act(__FUNCTION__, func_num_args(), $spec);
|
||||
}
|
||||
|
||||
public function foldersShallow(array $spec = null) {
|
||||
if (isset($spec)) {
|
||||
$spec = $this->cleanIdArray($spec, true);
|
||||
}
|
||||
return $this->act(__FUNCTION__, func_num_args(), $spec);
|
||||
}
|
||||
|
||||
public function tag(int $spec = null) {
|
||||
return $this->act(__FUNCTION__, func_num_args(), $spec);
|
||||
}
|
||||
|
||||
public function tags(array $spec = null) {
|
||||
if (isset($spec)) {
|
||||
$spec = $this->cleanIdArray($spec);
|
||||
}
|
||||
return $this->act(__FUNCTION__, func_num_args(), $spec);
|
||||
}
|
||||
|
||||
public function tagName(string $spec = null) {
|
||||
return $this->act(__FUNCTION__, func_num_args(), $spec);
|
||||
}
|
||||
|
||||
public function tagNames(array $spec = null) {
|
||||
if (isset($spec)) {
|
||||
$spec = $this->cleanStringArray($spec);
|
||||
}
|
||||
return $this->act(__FUNCTION__, func_num_args(), $spec);
|
||||
}
|
||||
|
||||
public function subscription(int $spec = null) {
|
||||
return $this->act(__FUNCTION__, func_num_args(), $spec);
|
||||
}
|
||||
|
||||
public function subscriptions(array $spec = null) {
|
||||
if (isset($spec)) {
|
||||
$spec = $this->cleanIdArray($spec);
|
||||
}
|
||||
return $this->act(__FUNCTION__, func_num_args(), $spec);
|
||||
}
|
||||
|
||||
public function edition(int $spec = null) {
|
||||
return $this->act(__FUNCTION__, func_num_args(), $spec);
|
||||
}
|
||||
|
@ -141,10 +185,24 @@ class ExclusionContext {
|
|||
return $this->act(__FUNCTION__, func_num_args(), $spec);
|
||||
}
|
||||
|
||||
public function labels(array $spec = null) {
|
||||
if (isset($spec)) {
|
||||
$spec = $this->cleanIdArray($spec);
|
||||
}
|
||||
return $this->act(__FUNCTION__, func_num_args(), $spec);
|
||||
}
|
||||
|
||||
public function labelName(string $spec = null) {
|
||||
return $this->act(__FUNCTION__, func_num_args(), $spec);
|
||||
}
|
||||
|
||||
public function labelNames(array $spec = null) {
|
||||
if (isset($spec)) {
|
||||
$spec = $this->cleanStringArray($spec);
|
||||
}
|
||||
return $this->act(__FUNCTION__, func_num_args(), $spec);
|
||||
}
|
||||
|
||||
public function annotationTerms(array $spec = null) {
|
||||
if (isset($spec)) {
|
||||
$spec = $this->cleanStringArray($spec);
|
||||
|
|
|
@ -29,10 +29,15 @@ class TestContext extends \JKingWeb\Arsse\Test\AbstractTest {
|
|||
'limit' => 10,
|
||||
'offset' => 5,
|
||||
'folder' => 42,
|
||||
'folders' => [12,22],
|
||||
'folderShallow' => 42,
|
||||
'foldersShallow' => [0,1],
|
||||
'tag' => 44,
|
||||
'tags' => [44, 2112],
|
||||
'tagName' => "XLIV",
|
||||
'tagNames' => ["XLIV", "MMCXII"],
|
||||
'subscription' => 2112,
|
||||
'subscriptions' => [44, 2112],
|
||||
'article' => 255,
|
||||
'edition' => 65535,
|
||||
'latestArticle' => 47,
|
||||
|
@ -48,7 +53,9 @@ class TestContext extends \JKingWeb\Arsse\Test\AbstractTest {
|
|||
'editions' => [1,2],
|
||||
'articles' => [1,2],
|
||||
'label' => 2112,
|
||||
'labels' => [2112, 1984],
|
||||
'labelName' => "Rush",
|
||||
'labelNames' => ["Rush", "Orwell"],
|
||||
'labelled' => true,
|
||||
'annotated' => true,
|
||||
'searchTerms' => ["foo", "bar"],
|
||||
|
@ -79,9 +86,19 @@ class TestContext extends \JKingWeb\Arsse\Test\AbstractTest {
|
|||
}
|
||||
|
||||
public function testCleanIdArrayValues() {
|
||||
$methods = ["articles", "editions"];
|
||||
$in = [1, "2", 3.5, 3.0, "ook", 0, -20, true, false, null, new \DateTime(), -1.0];
|
||||
$out = [1,2, 3];
|
||||
$methods = ["articles", "editions", "tags", "labels", "subscriptions"];
|
||||
$in = [1, "2", 3.5, 4.0, 4, "ook", 0, -20, true, false, null, new \DateTime(), -1.0];
|
||||
$out = [1, 2, 4];
|
||||
$c = new Context;
|
||||
foreach ($methods as $method) {
|
||||
$this->assertSame($out, $c->$method($in)->$method, "Context method $method did not return the expected results");
|
||||
}
|
||||
}
|
||||
|
||||
public function testCleanFolderIdArrayValues() {
|
||||
$methods = ["folders", "foldersShallow"];
|
||||
$in = [1, "2", 3.5, 4.0, 4, "ook", 0, -20, true, false, null, new \DateTime(), -1.0];
|
||||
$out = [1, 2, 4, 0];
|
||||
$c = new Context;
|
||||
foreach ($methods as $method) {
|
||||
$this->assertSame($out, $c->$method($in)->$method, "Context method $method did not return the expected results");
|
||||
|
@ -89,7 +106,7 @@ class TestContext extends \JKingWeb\Arsse\Test\AbstractTest {
|
|||
}
|
||||
|
||||
public function testCleanStringArrayValues() {
|
||||
$methods = ["searchTerms", "annotationTerms", "titleTerms", "authorTerms"];
|
||||
$methods = ["searchTerms", "annotationTerms", "titleTerms", "authorTerms", "tagNames", "labelNames"];
|
||||
$now = new \DateTime;
|
||||
$in = [1, 3.0, "ook", 0, true, false, null, $now, ""];
|
||||
$out = ["1", "3", "ook", "0", valueInfo::normalize($now, ValueInfo::T_STRING)];
|
||||
|
|
Loading…
Reference in a new issue