MediaWiki  1.34.0
TextConflictHelper.php
Go to the documentation of this file.
1 <?php
25 namespace MediaWiki\EditPage;
26 
27 use Content;
28 use ContentHandler;
29 use Html;
31 use OutputPage;
32 use 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 
103  public function setTextboxes( $yourtext, $storedversion ) {
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(),
184  );
185 
186  $this->out->addHTML(
187  Html::textarea( 'wpTextbox1', $builder->addNewLineAtEnd( $this->storedversion ), $attribs )
188  );
189  }
190 
197  public function getEditFormHtmlBeforeContent() {
198  return '';
199  }
200 
207  public function getEditFormHtmlAfterContent() {
208  return '';
209  }
210 
215  public function showEditFormTextAfterFooters() {
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(),
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 }
MediaWiki\EditPage\TextConflictHelper\getExplainHeader
getExplainHeader()
Definition: TextConflictHelper.php:157
MediaWiki\EditPage\TextConflictHelper\$contentModel
null string $contentModel
Definition: TextConflictHelper.php:50
ContentHandler
A content handler knows how do deal with a specific type of content on a wiki page.
Definition: ContentHandler.php:55
ContentHandler\getForModelID
static getForModelID( $modelId)
Returns the ContentHandler singleton for the given model ID.
Definition: ContentHandler.php:254
MediaWiki\EditPage\TextConflictHelper\$storedversion
string $storedversion
Definition: TextConflictHelper.php:80
MediaWiki\EditPage\TextConflictHelper\$title
Title $title
Definition: TextConflictHelper.php:45
MediaWiki\EditPage\TextboxBuilder
Helps EditPage build textboxes.
Definition: TextboxBuilder.php:37
MediaWiki\EditPage\TextConflictHelper\$out
OutputPage $out
Definition: TextConflictHelper.php:60
MediaWiki\EditPage\TextConflictHelper\showEditFormTextAfterFooters
showEditFormTextAfterFooters()
Content to go in the edit form after the footers (templates on this page, hidden categories,...
Definition: TextConflictHelper.php:215
MediaWiki\EditPage\TextConflictHelper\setContentFormat
setContentFormat( $contentFormat)
Definition: TextConflictHelper.php:118
NS_MAIN
const NS_MAIN
Definition: Defines.php:60
MediaWiki\EditPage\TextConflictHelper\toEditContent
toEditContent( $text)
Definition: TextConflictHelper.php:248
ContentHandler\makeContent
static makeContent( $text, Title $title=null, $modelId=null, $format=null)
Convenience function for creating a Content object from a given textual representation.
Definition: ContentHandler.php:135
MediaWiki\EditPage\TextConflictHelper\setTextboxes
setTextboxes( $yourtext, $storedversion)
Definition: TextConflictHelper.php:103
MediaWiki\EditPage\TextConflictHelper
Helper for displaying edit conflicts in text content models to users.
Definition: TextConflictHelper.php:40
MediaWiki\EditPage\TextConflictHelper\$yourtext
string $yourtext
Definition: TextConflictHelper.php:75
MediaWiki\EditPage\TextConflictHelper\getEditFormHtmlAfterContent
getEditFormHtmlAfterContent()
Content to go in the edit form after textbox1.
Definition: TextConflictHelper.php:207
Title\getContentModel
getContentModel( $flags=0)
Get the page's content model id, see the CONTENT_MODEL_XXX constants.
Definition: Title.php:1049
MediaWiki\EditPage\TextConflictHelper\incrementConflictStats
incrementConflictStats()
Record a user encountering an edit conflict.
Definition: TextConflictHelper.php:125
MediaWiki\EditPage\TextConflictHelper\setContentModel
setContentModel( $contentModel)
Definition: TextConflictHelper.php:111
MediaWiki\EditPage\TextConflictHelper\$submitLabel
string $submitLabel
Message key for submit button's label.
Definition: TextConflictHelper.php:70
Content
Base interface for content objects.
Definition: Content.php:34
IBufferingStatsdDataFactory
MediaWiki adaptation of StatsdDataFactory that provides buffering functionality.
Definition: IBufferingStatsdDataFactory.php:11
MediaWiki\EditPage\TextConflictHelper\$contentFormat
null string $contentFormat
Definition: TextConflictHelper.php:55
Title
Represents a title within MediaWiki.
Definition: Title.php:42
MediaWiki\EditPage\TextConflictHelper\getEditFormHtmlBeforeContent
getEditFormHtmlBeforeContent()
Content to go in the edit form before textbox1.
Definition: TextConflictHelper.php:197
MediaWiki\EditPage\TextConflictHelper\__construct
__construct(Title $title, OutputPage $out, IBufferingStatsdDataFactory $stats, $submitLabel)
Definition: TextConflictHelper.php:88
MediaWiki\EditPage\TextConflictHelper\incrementResolvedStats
incrementResolvedStats()
Record when a user has resolved an edit conflict.
Definition: TextConflictHelper.php:141
MediaWiki\EditPage\TextConflictHelper\getEditConflictMainTextBox
getEditConflictMainTextBox(array $customAttribs=[])
HTML to build the textbox1 on edit conflicts.
Definition: TextConflictHelper.php:170
NS_CATEGORY_TALK
const NS_CATEGORY_TALK
Definition: Defines.php:75
MediaWiki\EditPage\TextConflictHelper\$stats
IBufferingStatsdDataFactory $stats
Definition: TextConflictHelper.php:65
MediaWiki\EditPage
Definition: TextboxBuilder.php:25