File: CommentBatch.php

package info (click to toggle)
mediawiki 1%3A1.43.3%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 417,464 kB
  • sloc: php: 1,062,949; javascript: 664,290; sql: 9,714; python: 5,458; xml: 3,489; sh: 1,131; makefile: 64
file content (194 lines) | stat: -rw-r--r-- 5,193 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
<?php

namespace MediaWiki\CommentFormatter;

use MediaWiki\Linker\LinkTarget;
use Traversable;

/**
 * This class provides a fluent interface for formatting a batch of comments.
 *
 * @since 1.38
 */
class CommentBatch {
	/** @var CommentFormatter */
	private $formatter;
	/** @var iterable<CommentItem>|Traversable */
	private $comments;
	/** @var bool|null */
	private $useBlock;
	/** @var bool|null */
	private $useParentheses;
	/** @var LinkTarget|null */
	private $selfLinkTarget;
	/** @var bool|null */
	private $samePage;
	/** @var string|false|null */
	private $wikiId;
	/** @var bool|null */
	private $enableSectionLinks;

	/**
	 * @internal Use CommentFormatter::createBatch()
	 *
	 * @param CommentFormatter $formatter
	 */
	public function __construct( CommentFormatter $formatter ) {
		$this->formatter = $formatter;
	}

	/**
	 * Set the comments to be formatted. This can be an array of CommentItem
	 * objects, or it can be an iterator which generates CommentItem objects.
	 *
	 * Theoretically iterable should imply Traversable, but PHPStorm gives an
	 * error when RowCommentIterator is passed as iterable<CommentItem>.
	 *
	 * @param iterable<CommentItem>|Traversable $comments
	 * @return $this
	 */
	public function comments( $comments ) {
		$this->comments = $comments;
		return $this;
	}

	/**
	 * Specify the comments to be formatted as an array of strings. This is a
	 * simplified wrapper for comments() which does not allow you to set options
	 * on a per-comment basis.
	 *
	 * $strings must be an array -- use comments() if you want to use an iterator.
	 *
	 * @param string[] $strings
	 * @return $this
	 */
	public function strings( array $strings ) {
		$this->comments = new StringCommentIterator( $strings );
		return $this;
	}

	/**
	 * Wrap each comment in standard punctuation and formatting if it's
	 * non-empty. Empty comments remain empty. This causes the batch to work
	 * like the old Linker::commentBlock().
	 *
	 * If this function is not called, the option is false.
	 *
	 * @param bool $useBlock
	 * @return $this
	 */
	public function useBlock( $useBlock = true ) {
		$this->useBlock = $useBlock;
		return $this;
	}

	/**
	 * Wrap each comment with parentheses. This has no effect if the useBlock
	 * option is not enabled.
	 *
	 * Unlike the legacy Linker::commentBlock(), this option defaults to false
	 * if this method is not called, since that better preserves the fluent
	 * style.
	 *
	 * @param bool $useParentheses
	 * @return $this
	 */
	public function useParentheses( $useParentheses = true ) {
		$this->useParentheses = $useParentheses;
		return $this;
	}

	/**
	 * Set the title to be used for self links in the comments. If there is no
	 * title specified either here or in the item, fragment links are not
	 * expanded.
	 *
	 * @param LinkTarget $selfLinkTarget
	 * @return $this
	 */
	public function selfLinkTarget( LinkTarget $selfLinkTarget ) {
		$this->selfLinkTarget = $selfLinkTarget;
		return $this;
	}

	/**
	 * Set the option to enable/disable section links formatted as C-style
	 * comments, as used in revision comments to indicate the section which
	 * was edited.
	 *
	 * If the method is not called, the option is true. Setting this to false
	 * approximately emulates Linker::formatLinksInComment() except that HTML
	 * in the input is escaped.
	 *
	 * @param bool $enable
	 * @return $this
	 */
	public function enableSectionLinks( $enable ) {
		$this->enableSectionLinks = $enable;
		return $this;
	}

	/**
	 * Disable section links formatted as C-style comments, as used in revision
	 * comments to indicate the section which was edited. Calling this
	 * approximately emulates Linker::formatLinksInComment() except that HTML
	 * in the input is escaped.
	 *
	 * @return $this
	 */
	public function disableSectionLinks() {
		$this->enableSectionLinks = false;
		return $this;
	}

	/**
	 * Set the same-page option. If this is true, section links and fragment-
	 * only wikilinks are rendered with an href that is a fragment-only URL.
	 * If it is false (the default), such links go to the self link title.
	 *
	 * This can also be set per-item using CommentItem::samePage().
	 *
	 * This is equivalent to $local in the old Linker methods.
	 *
	 * @param bool $samePage
	 * @return $this
	 */
	public function samePage( $samePage = true ) {
		$this->samePage = $samePage;
		return $this;
	}

	/**
	 * ID of the wiki to link to (if not the local wiki), as used by WikiMap.
	 * This is used to render comments which are loaded from a foreign wiki.
	 * This only affects links which are syntactically internal -- it has no
	 * effect on interwiki links.
	 *
	 * This can also be set per-item using CommentItem::wikiId().
	 *
	 * @param string|false|null $wikiId
	 * @return $this
	 */
	public function wikiId( $wikiId ) {
		$this->wikiId = $wikiId;
		return $this;
	}

	/**
	 * Format the comments and produce an array of HTML fragments.
	 *
	 * @return string[]
	 */
	public function execute() {
		return $this->formatter->formatItemsInternal(
			$this->comments,
			$this->selfLinkTarget,
			$this->samePage,
			$this->wikiId,
			$this->enableSectionLinks,
			$this->useBlock,
			$this->useParentheses
		);
	}

}