mediawiki-extensions-Discus.../includes/ThreadItemFormatter.php
Bartosz Dziewoński 52ae0f3152 Special:TopicSubscriptions: Use permalinks when available
When permalink data is available, display a permalink using
the current page title, instead of a plain link to the section
at the time of subscription.

Consolidate and clean up some existing permalink code.

Bug: T306373
Change-Id: Ie2f63cbfdbfa703530205201dfcfb0e5ad053b35
2024-04-04 13:44:06 +00:00

59 lines
1.5 KiB
PHP

<?php
namespace MediaWiki\Extension\DiscussionTools;
use MediaWiki\Extension\DiscussionTools\ThreadItem\DatabaseThreadItem;
use MediaWiki\Linker\LinkRenderer;
use MediaWiki\Title\TitleValue;
use MessageLocalizer;
/**
* Displays links to comments and headings represented as ThreadItems.
*/
class ThreadItemFormatter {
private LinkRenderer $linkRenderer;
public function __construct(
LinkRenderer $linkRenderer
) {
$this->linkRenderer = $linkRenderer;
}
/**
* Make a link to a thread item on the page.
*/
public function makeLink( DatabaseThreadItem $item, ?string $text = null ): string {
$title = TitleValue::newFromPage( $item->getPage() )->createFragmentTarget( $item->getId() );
$query = [];
if ( !$item->getRevision()->isCurrent() ) {
$query['oldid'] = $item->getRevision()->getId();
}
$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).
*/
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 );
}
}