MediaWiki REL1_34
TextConflictHelper.php
Go to the documentation of this file.
1<?php
25namespace MediaWiki\EditPage;
26
27use Content;
29use Html;
31use OutputPage;
32use Title;
33
41
45 protected $title;
46
50 public $contentModel = null;
51
55 public $contentFormat = null;
56
60 protected $out;
61
65 protected $stats;
66
70 protected $submitLabel;
71
75 protected $yourtext = '';
76
80 protected $storedversion = '';
81
90 ) {
91 $this->title = $title;
92 $this->out = $out;
93 $this->stats = $stats;
94 $this->submitLabel = $submitLabel;
95 $this->contentModel = $title->getContentModel();
96 $this->contentFormat = ContentHandler::getForModelID( $this->contentModel )->getDefaultFormat();
97 }
98
104 $this->yourtext = $yourtext;
105 $this->storedversion = $storedversion;
106 }
107
111 public function setContentModel( $contentModel ) {
112 $this->contentModel = $contentModel;
113 }
114
118 public function setContentFormat( $contentFormat ) {
119 $this->contentFormat = $contentFormat;
120 }
121
125 public function incrementConflictStats() {
126 $this->stats->increment( 'edit.failures.conflict' );
127 // Only include 'standard' namespaces to avoid creating unknown numbers of statsd metrics
128 if (
129 $this->title->getNamespace() >= NS_MAIN &&
130 $this->title->getNamespace() <= NS_CATEGORY_TALK
131 ) {
132 $this->stats->increment(
133 'edit.failures.conflict.byNamespaceId.' . $this->title->getNamespace()
134 );
135 }
136 }
137
141 public function incrementResolvedStats() {
142 $this->stats->increment( 'edit.failures.conflict.resolved' );
143 // Only include 'standard' namespaces to avoid creating unknown numbers of statsd metrics
144 if (
145 $this->title->getNamespace() >= NS_MAIN &&
146 $this->title->getNamespace() <= NS_CATEGORY_TALK
147 ) {
148 $this->stats->increment(
149 'edit.failures.conflict.resolved.byNamespaceId.' . $this->title->getNamespace()
150 );
151 }
152 }
153
157 public function getExplainHeader() {
158 return Html::rawElement(
159 'div',
160 [ 'class' => 'mw-explainconflict' ],
161 $this->out->msg( 'explainconflict', $this->out->msg( $this->submitLabel )->text() )->parse()
162 );
163 }
164
170 public function getEditConflictMainTextBox( array $customAttribs = [] ) {
171 $builder = new TextboxBuilder();
172 $classes = $builder->getTextboxProtectionCSSClasses( $this->title );
173
174 $attribs = [ 'tabindex' => 1 ];
175 $attribs += $customAttribs;
176
177 $attribs = $builder->mergeClassesIntoAttributes( $classes, $attribs );
178
179 $attribs = $builder->buildTextboxAttribs(
180 'wpTextbox1',
181 $attribs,
182 $this->out->getUser(),
183 $this->title
184 );
185
186 $this->out->addHTML(
187 Html::textarea( 'wpTextbox1', $builder->addNewLineAtEnd( $this->storedversion ), $attribs )
188 );
189 }
190
198 return '';
199 }
200
207 public function getEditFormHtmlAfterContent() {
208 return '';
209 }
210
216 $this->out->wrapWikiMsg( '<h2>$1</h2>', "yourdiff" );
217
218 $yourContent = $this->toEditContent( $this->yourtext );
219 $storedContent = $this->toEditContent( $this->storedversion );
220 $handler = ContentHandler::getForModelID( $this->contentModel );
221 $diffEngine = $handler->createDifferenceEngine( $this->out );
222
223 $diffEngine->setContent( $yourContent, $storedContent );
224 $diffEngine->showDiff(
225 $this->out->msg( 'yourtext' )->parse(),
226 $this->out->msg( 'storedversion' )->text()
227 );
228
229 $this->out->wrapWikiMsg( '<h2>$1</h2>', "yourtext" );
230
231 $builder = new TextboxBuilder();
232 $attribs = $builder->buildTextboxAttribs(
233 'wpTextbox2',
234 [ 'tabindex' => 6, 'readonly' ],
235 $this->out->getUser(),
236 $this->title
237 );
238
239 $this->out->addHTML(
240 Html::textarea( 'wpTextbox2', $builder->addNewLineAtEnd( $this->yourtext ), $attribs )
241 );
242 }
243
248 private function toEditContent( $text ) {
250 $text,
251 $this->title,
252 $this->contentModel,
253 $this->contentFormat
254 );
255 }
256}
A content handler knows how do deal with a specific type of content on a wiki page.
static makeContent( $text, Title $title=null, $modelId=null, $format=null)
Convenience function for creating a Content object from a given textual representation.
static getForModelID( $modelId)
Returns the ContentHandler singleton for the given model ID.
This class is a collection of static functions that serve two purposes:
Definition Html.php:49
Helper for displaying edit conflicts in text content models to users.
getEditFormHtmlAfterContent()
Content to go in the edit form after textbox1.
getEditConflictMainTextBox(array $customAttribs=[])
HTML to build the textbox1 on edit conflicts.
incrementConflictStats()
Record a user encountering an edit conflict.
showEditFormTextAfterFooters()
Content to go in the edit form after the footers (templates on this page, hidden categories,...
incrementResolvedStats()
Record when a user has resolved an edit conflict.
__construct(Title $title, OutputPage $out, IBufferingStatsdDataFactory $stats, $submitLabel)
setTextboxes( $yourtext, $storedversion)
string $submitLabel
Message key for submit button's label.
getEditFormHtmlBeforeContent()
Content to go in the edit form before textbox1.
Helps EditPage build textboxes.
This is one of the Core classes and should be read at least once by any new developers.
Represents a title within MediaWiki.
Definition Title.php:42
getContentModel( $flags=0)
Get the page's content model id, see the CONTENT_MODEL_XXX constants.
Definition Title.php:1049
const NS_MAIN
Definition Defines.php:69
const NS_CATEGORY_TALK
Definition Defines.php:84
Base interface for content objects.
Definition Content.php:34
MediaWiki adaptation of StatsdDataFactory that provides buffering functionality.