forked from grumpydevelop/federator
extended factory and constructing from json
renaming to not mix total count with paging
This commit is contained in:
parent
207d876254
commit
474631dff2
9 changed files with 82 additions and 22 deletions
|
@ -87,7 +87,7 @@ class Followers implements \Federator\Api\FedUsers\FedUsersInterface
|
|||
// Pagination navigation
|
||||
$lastPage = max(0, ceil($totalItems / $pageSize) - 1);
|
||||
|
||||
if ($page === "" || $followers->count() == 0) {
|
||||
if ($page === "" || $followers->getCount() == 0) {
|
||||
$followers->setFirst($baseUrl . '?page=0');
|
||||
$followers->setLast($baseUrl . '?page=' . $lastPage);
|
||||
}
|
||||
|
|
|
@ -87,7 +87,7 @@ class Following implements \Federator\Api\FedUsers\FedUsersInterface
|
|||
// Pagination navigation
|
||||
$lastPage = max(0, ceil($totalItems / $pageSize) - 1);
|
||||
|
||||
if ($page === "" || $following->count() == 0) {
|
||||
if ($page === "" || $following->getCount() == 0) {
|
||||
$following->setFirst($baseUrl . '?page=0');
|
||||
$following->setLast($baseUrl . '?page=' . $lastPage);
|
||||
}
|
||||
|
|
|
@ -48,7 +48,20 @@ class Collection extends APObject
|
|||
*/
|
||||
public function fromJson($json)
|
||||
{
|
||||
return parent::fromJson($json);
|
||||
$success = parent::fromJson($json);
|
||||
if (!$success) {
|
||||
return false;
|
||||
}
|
||||
if (array_key_exists('totalItems', $json)) {
|
||||
$this->totalItems = $json['totalItems'];
|
||||
}
|
||||
if (array_key_exists('first', $json)) {
|
||||
$this->first = $json['first'];
|
||||
}
|
||||
if (array_key_exists('last', $json)) {
|
||||
$this->last = $json['last'];
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -61,11 +74,16 @@ class Collection extends APObject
|
|||
$this->totalItems = $totalItems;
|
||||
}
|
||||
|
||||
public function count(): int
|
||||
public function getTotalItems(): int
|
||||
{
|
||||
return $this->totalItems;
|
||||
}
|
||||
|
||||
public function getFirst(): string
|
||||
{
|
||||
return $this->first;
|
||||
}
|
||||
|
||||
public function setFirst(string $url): void
|
||||
{
|
||||
$this->first = $url;
|
||||
|
|
|
@ -25,7 +25,7 @@ class Followers extends OrderedCollectionPage
|
|||
public function setItems(&$items)
|
||||
{
|
||||
// Optionally: type check that all $items are Activity objects
|
||||
$this->items = $items;
|
||||
$this->orderedItems = $items;
|
||||
$this->totalItems = sizeof($items);
|
||||
}
|
||||
|
||||
|
|
|
@ -25,7 +25,7 @@ class Following extends OrderedCollectionPage
|
|||
public function setItems(&$items)
|
||||
{
|
||||
// Optionally: type check that all $items are Activity objects
|
||||
$this->items = $items;
|
||||
$this->orderedItems = $items;
|
||||
$this->totalItems = sizeof($items);
|
||||
}
|
||||
|
||||
|
|
|
@ -15,7 +15,7 @@ class OrderedCollection extends Collection
|
|||
*
|
||||
* @var APObject[]|string[]
|
||||
*/
|
||||
protected $items = [];
|
||||
protected $orderedItems = [];
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
|
@ -32,8 +32,8 @@ class OrderedCollection extends Collection
|
|||
{
|
||||
$return = parent::toObject();
|
||||
$return['type'] = 'OrderedCollection';
|
||||
if ($this->totalItems > 0) {
|
||||
foreach ($this->items as $item) {
|
||||
if (sizeof($this->orderedItems) > 0) {
|
||||
foreach ($this->orderedItems as $item) {
|
||||
if (is_string($item)) {
|
||||
$return['orderedItems'][] = $item;
|
||||
} elseif (is_object($item)) {
|
||||
|
@ -52,7 +52,20 @@ class OrderedCollection extends Collection
|
|||
*/
|
||||
public function fromJson($json)
|
||||
{
|
||||
return parent::fromJson($json);
|
||||
$success = parent::fromJson($json);
|
||||
if (!$success) {
|
||||
return false;
|
||||
}
|
||||
if (array_key_exists('orderedItems', $json)) {
|
||||
foreach ($json['orderedItems'] as $item) {
|
||||
$obj = \Federator\Data\ActivityPub\Factory::newActivityFromJson($item);
|
||||
if ($obj !== false) {
|
||||
$this->orderedItems[] = $obj;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -61,8 +74,7 @@ class OrderedCollection extends Collection
|
|||
*/
|
||||
public function append(&$item): void
|
||||
{
|
||||
$this->items[] = $item;
|
||||
$this->totalItems = sizeof($this->items);
|
||||
$this->orderedItems[] = $item;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -73,18 +85,22 @@ class OrderedCollection extends Collection
|
|||
public function get(int $index)
|
||||
{
|
||||
if ($index >= 0) {
|
||||
if ($index >= $this->totalItems) {
|
||||
if ($index >= sizeof($this->orderedItems)) {
|
||||
return false;
|
||||
}
|
||||
return $this->items[$index];
|
||||
return $this->orderedItems[$index];
|
||||
} else {
|
||||
if ($this->totalItems + $index < 0) {
|
||||
if (sizeof($this->orderedItems) + $index < 0) {
|
||||
return false;
|
||||
}
|
||||
return $this->items[$this->totalItems + $index];
|
||||
return $this->orderedItems[sizeof($this->orderedItems) + $index];
|
||||
}
|
||||
}
|
||||
|
||||
public function getCount(): int
|
||||
{
|
||||
return sizeof($this->orderedItems);
|
||||
}
|
||||
/**
|
||||
* set items
|
||||
*
|
||||
|
@ -93,7 +109,6 @@ class OrderedCollection extends Collection
|
|||
*/
|
||||
public function setItems(&$items)
|
||||
{
|
||||
$this->items = $items;
|
||||
$this->totalItems = sizeof($items);
|
||||
$this->orderedItems = $items;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -51,7 +51,29 @@ class OrderedCollectionPage extends OrderedCollection
|
|||
*/
|
||||
public function fromJson($json)
|
||||
{
|
||||
return parent::fromJson($json);
|
||||
$success = parent::fromJson($json);
|
||||
if (!$success) {
|
||||
return false;
|
||||
}
|
||||
if (array_key_exists('next', $json)) {
|
||||
$this->next = $json['next'];
|
||||
}
|
||||
if (array_key_exists('prev', $json)) {
|
||||
$this->prev = $json['prev'];
|
||||
}
|
||||
if (array_key_exists('partOf', $json)) {
|
||||
$this->partOf = $json['partOf'];
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* get next url
|
||||
* @return string next URL
|
||||
*/
|
||||
public function getNext()
|
||||
{
|
||||
return $this->next;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -35,8 +35,7 @@ class Outbox extends OrderedCollectionPage
|
|||
public function setItems(&$items)
|
||||
{
|
||||
// Optionally: type check that all $items are Activity objects
|
||||
$this->items = $items;
|
||||
$this->totalItems = sizeof($items);
|
||||
$this->orderedItems = $items;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -16,7 +16,7 @@ class Factory
|
|||
|
||||
/**
|
||||
* create object tree from json
|
||||
* @param array<string, mixed> $json input json
|
||||
* @param array<string, mixed>|mixed $json input json
|
||||
* @return Common\APObject|null object or false on error
|
||||
*/
|
||||
public static function newFromJson($json, string $jsonstring)
|
||||
|
@ -67,6 +67,12 @@ class Factory
|
|||
case 'Inbox':
|
||||
$return = new Common\Inbox();
|
||||
break;
|
||||
case 'OrderedCollection':
|
||||
$return = new Common\OrderedCollection();
|
||||
break;
|
||||
case 'OrderedCollectionPage':
|
||||
$return = new Common\OrderedCollectionPage();
|
||||
break;
|
||||
case 'Tombstone':
|
||||
$return = new Common\APObject("Tombstone");
|
||||
break;
|
||||
|
|
Loading…
Add table
Reference in a new issue