mediawiki-extensions-Discus.../includes/ThreadItem/ThreadItemTrait.php

39 lines
1.4 KiB
PHP
Raw Normal View History

<?php
namespace MediaWiki\Extension\DiscussionTools\ThreadItem;
trait ThreadItemTrait {
// phpcs:disable Squiz.WhiteSpace, MediaWiki.Commenting
// Required ThreadItem methods (listed for Phan)
abstract public function getId(): string;
abstract public function getType(): string;
abstract public function getReplies(): array;
abstract public function getLevel(): int;
// phpcs:enable
/**
* @param bool $deep Whether to include full serialized comments in the replies key
* @param callable|null $callback Function to call on the returned serialized array, which
* will be passed into the serialized replies as well if $deep is used
* @return array JSON-serializable array
*/
public function jsonSerialize( bool $deep = false, ?callable $callback = null ): array {
// The output of this method can end up in the HTTP cache (Varnish). Avoid changing it;
// and when doing so, ensure that frontend code can handle both the old and new outputs.
// See ThreadItem.static.newFromJSON in JS.
$array = [
'type' => $this->getType(),
'level' => $this->getLevel(),
'id' => $this->getId(),
'replies' => array_map( static function ( ThreadItem $comment ) use ( $deep, $callback ) {
return $deep ? $comment->jsonSerialize( $deep, $callback ) : $comment->getId();
}, $this->getReplies() )
];
if ( $callback ) {
$callback( $array, $this );
}
return $array;
}
}