mediawiki-extensions-Discus.../includes/ThreadItemFormatter.php
Bartosz Dziewoński 0024a94ba7 Store permalink data, implement Special:FindComment/GoToComment
Depends-On: I90656cc74bb1cb1f2f3c82ad51cfb164cb8a4a4b
Bug: T296801
Change-Id: I84187b303aa10a242c872088403f808df3d1f940
2022-08-11 01:19:47 +02:00

77 lines
1.9 KiB
PHP

<?php
namespace MediaWiki\Extension\DiscussionTools;
use MediaWiki\Extension\DiscussionTools\ThreadItem\DatabaseThreadItem;
use MediaWiki\Linker\LinkRenderer;
use MessageLocalizer;
use TitleFormatter;
use TitleValue;
/**
* Displays links to comments and headings represented as ThreadItems.
*/
class ThreadItemFormatter {
/** @var TitleFormatter */
private $titleFormatter;
/** @var LinkRenderer */
private $linkRenderer;
/**
* @param TitleFormatter $titleFormatter
* @param LinkRenderer $linkRenderer
*/
public function __construct(
TitleFormatter $titleFormatter,
LinkRenderer $linkRenderer
) {
$this->titleFormatter = $titleFormatter;
$this->linkRenderer = $linkRenderer;
}
/**
* Make a link to a thread item on the page.
*
* @param DatabaseThreadItem $item
* @return string
*/
public function makeLink( DatabaseThreadItem $item ): string {
$title = TitleValue::newFromPage( $item->getPage() )->createFragmentTarget( $item->getId() );
$query = [];
if ( !$item->getRevision()->isCurrent() ) {
$query['oldid'] = $item->getRevision()->getId();
}
$text = $this->titleFormatter->getPrefixedText( $title );
$link = $this->linkRenderer->makeLink( $title, $text, [], $query );
return $link;
}
/**
* Make a link to a thread item on the page, with additional information (used on special pages).
*
* @param DatabaseThreadItem $item
* @param MessageLocalizer $context
* @return string
*/
public function formatLine( DatabaseThreadItem $item, MessageLocalizer $context ): string {
$contents = [];
$contents[] = $this->makeLink( $item );
if ( !$item->getRevision()->isCurrent() ) {
$contents[] = $context->msg( 'discussiontools-findcomment-results-notcurrent' )->escaped();
}
if ( is_string( $item->getTranscludedFrom() ) ) {
$contents[] = $context->msg( 'discussiontools-findcomment-results-transcluded' )->escaped();
}
return implode( $context->msg( 'word-separator' )->escaped(), $contents );
}
}