Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 41
0.00% covered (danger)
0.00%
0 / 10
CRAP
0.00% covered (danger)
0.00%
0 / 1
ChangeTagsLogItem
0.00% covered (danger)
0.00%
0 / 40
0.00% covered (danger)
0.00%
0 / 10
132
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 getIdField
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 getTimestampField
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 getAuthorIdField
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 getAuthorNameField
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 getAuthorActorField
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 canView
0.00% covered (danger)
0.00%
0 / 3
0.00% covered (danger)
0.00%
0 / 1
2
 canViewContent
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 getTags
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 getHTML
0.00% covered (danger)
0.00%
0 / 29
0.00% covered (danger)
0.00%
0 / 1
6
1<?php
2/**
3 * @license GPL-2.0-or-later
4 * @file
5 */
6
7namespace MediaWiki\ChangeTags;
8
9use MediaWiki\Html\Html;
10use MediaWiki\Logging\LogEventsList;
11use MediaWiki\Logging\LogFormatter;
12use MediaWiki\Logging\LogPage;
13use MediaWiki\MediaWikiServices;
14use MediaWiki\RevisionList\RevisionItemBase;
15use MediaWiki\RevisionList\RevisionListBase;
16use MediaWiki\SpecialPage\SpecialPage;
17use MediaWiki\Title\Title;
18
19/**
20 * Item class for a logging table row with its associated change tags.
21 *
22 * @todo Abstract out a base class for this and RevDelLogItem, similar to the
23 * RevisionItem class but specifically for log items.
24 *
25 * @since 1.25
26 * @ingroup ChangeTags
27 */
28class ChangeTagsLogItem extends RevisionItemBase {
29
30    /** @inheritDoc */
31    public function __construct(
32        RevisionListBase $list,
33        $row,
34        private readonly ChangeTagsFormatter $changeTagsFormatter,
35    ) {
36        parent::__construct( $list, $row );
37    }
38
39    /** @inheritDoc */
40    public function getIdField() {
41        return 'log_id';
42    }
43
44    /** @inheritDoc */
45    public function getTimestampField() {
46        return 'log_timestamp';
47    }
48
49    /** @inheritDoc */
50    public function getAuthorIdField() {
51        return 'log_user';
52    }
53
54    /** @inheritDoc */
55    public function getAuthorNameField() {
56        return 'log_user_text';
57    }
58
59    /** @inheritDoc */
60    public function getAuthorActorField() {
61        return 'log_actor';
62    }
63
64    /** @inheritDoc */
65    public function canView() {
66        return LogEventsList::userCan(
67            $this->row, LogPage::DELETED_RESTRICTED, $this->list->getAuthority()
68        );
69    }
70
71    /** @inheritDoc */
72    public function canViewContent() {
73        return true; // none
74    }
75
76    /**
77     * @return string Comma-separated list of tags
78     */
79    public function getTags() {
80        return $this->row->ts_tags;
81    }
82
83    /**
84     * @return string A HTML <li> element representing this revision, showing
85     * change tags and everything
86     */
87    public function getHTML() {
88        $date = htmlspecialchars( $this->list->getLanguage()->userTimeAndDate(
89            $this->row->log_timestamp, $this->list->getUser() ) );
90        $title = Title::makeTitle( $this->row->log_namespace, $this->row->log_title );
91        $services = MediaWikiServices::getInstance();
92        $formatter = $services->getLogFormatterFactory()->newFromRow( $this->row );
93        $formatter->setContext( $this->list->getContext() );
94        $formatter->setAudience( LogFormatter::FOR_THIS_USER );
95
96        // Log link for this page
97        $loglink = $services->getLinkRenderer()->makeLink(
98            SpecialPage::getTitleFor( 'Log' ),
99            $this->list->msg( 'log' )->text(),
100            [],
101            [ 'page' => $title->getPrefixedText() ]
102        );
103        $loglink = $this->list->msg( 'parentheses' )->rawParams( $loglink )->escaped();
104        // User links and action text
105        $action = $formatter->getActionText();
106
107        $dir = $this->list->getLanguage()->getDir();
108        $comment = Html::rawElement( 'bdi', [ 'dir' => $dir ], $formatter->getComment() );
109
110        $content = "$loglink $date $action $comment";
111        $attribs = [];
112        $tags = $this->getTags();
113        if ( $tags ) {
114            [ $tagSummary, $classes ] = $this->changeTagsFormatter->formatTagsAsSummaryList(
115                $tags,
116                $this->list->getContext(),
117                $this->list->getAuthority()
118            );
119            $content .= " $tagSummary";
120            $attribs['class'] = $classes;
121        }
122        return Html::rawElement( 'li', $attribs, $content );
123    }
124}
125
126/** @deprecated class alias since 1.44 */
127class_alias( ChangeTagsLogItem::class, 'ChangeTagsLogItem' );