$wgOut->addHTML( Html::openElement(
'form',
[
- // Keep mw-editform-ooui class for backwards-compatibility temporarily
- 'class' => 'mw-editform mw-editform-ooui',
+ 'class' => 'mw-editform',
'id' => self::EDITFORM_ID,
'name' => self::EDITFORM_ID,
'method' => 'post',
if ( $this->wasDeletedSinceLastEdit() && 'save' == $this->formtype ) {
$username = $this->lastDelete->user_name;
- $comment = $this->lastDelete->log_comment;
+ $comment = CommentStore::newKey( 'log_comment' )->getComment( $this->lastDelete )->text;
// It is better to not parse the comment at all than to have templates expanded in the middle
// TODO: can the checkLabel be moved outside of the div so that wrapWikiMsg could be used?
];
}
+ /**
+ * Standard summary input and label (wgSummary), abstracted so EditPage
+ * subclasses may reorganize the form.
+ * Note that you do not need to worry about the label's for=, it will be
+ * inferred by the id given to the input. You can remove them both by
+ * passing [ 'id' => false ] to $userInputAttrs.
+ *
+ * @deprecated since 1.30 Use getSummaryInputWidget() instead
+ * @param string $summary The value of the summary input
+ * @param string $labelText The html to place inside the label
+ * @param array $inputAttrs Array of attrs to use on the input
+ * @param array $spanLabelAttrs Array of attrs to use on the span inside the label
+ * @return array An array in the format [ $label, $input ]
+ */
+ public function getSummaryInput( $summary = "", $labelText = null,
+ $inputAttrs = null, $spanLabelAttrs = null
+ ) {
+ wfDeprecated( __METHOD__, '1.30' );
+ $inputAttrs = $this->getSummaryInputAttributes( $inputAttrs );
+ $inputAttrs += Linker::tooltipAndAccesskeyAttribs( 'summary' );
+
+ $spanLabelAttrs = ( is_array( $spanLabelAttrs ) ? $spanLabelAttrs : [] ) + [
+ 'class' => $this->missingSummary ? 'mw-summarymissed' : 'mw-summary',
+ 'id' => "wpSummaryLabel"
+ ];
+
+ $label = null;
+ if ( $labelText ) {
+ $label = Xml::tags(
+ 'label',
+ $inputAttrs['id'] ? [ 'for' => $inputAttrs['id'] ] : null,
+ $labelText
+ );
+ $label = Xml::tags( 'span', $spanLabelAttrs, $label );
+ }
+
+ $input = Html::input( 'wpSummary', $summary, 'text', $inputAttrs );
+
+ return [ $label, $input ];
+ }
+
/**
* Builds a standard summary input with a label.
*
+ * @deprecated since 1.30 Use getSummaryInputWidget() instead
* @param string $summary The value of the summary input
* @param string $labelText The html to place inside the label
* @param array $inputAttrs Array of attrs to use on the input
* @return OOUI\FieldLayout OOUI FieldLayout with Label and Input
*/
function getSummaryInputOOUI( $summary = "", $labelText = null, $inputAttrs = null ) {
+ wfDeprecated( __METHOD__, '1.30' );
+ $this->getSummaryInputWidget( $summary, $labelText, $inputAttrs );
+ }
+
+ /**
+ * Builds a standard summary input with a label.
+ *
+ * @param string $summary The value of the summary input
+ * @param string $labelText The html to place inside the label
+ * @param array $inputAttrs Array of attrs to use on the input
+ *
+ * @return OOUI\FieldLayout OOUI FieldLayout with Label and Input
+ */
+ function getSummaryInputWidget( $summary = "", $labelText = null, $inputAttrs = null ) {
$inputAttrs = OOUI\Element::configFromHtmlAttributes(
$this->getSummaryInputAttributes( $inputAttrs )
);
}
$labelText = $this->context->msg( $isSubjectPreview ? 'subject' : 'summary' )->parse();
- $wgOut->addHTML( $this->getSummaryInputOOUI(
+ $wgOut->addHTML( $this->getSummaryInputWidget(
$summary,
$labelText,
[ 'class' => $summaryClass ]
$wgOut->addHTML( Html::hidden( 'wpStarttime', $this->starttime ) );
$wgOut->addHTML( Html::hidden( 'wpEdittime', $this->edittime ) );
$wgOut->addHTML( Html::hidden( 'editRevId', $this->editRevId ) );
- $wgOut->addHTML( Html::hidden( 'wpScrolltop', $this->scrolltop ) );
+ $wgOut->addHTML( Html::hidden( 'wpScrolltop', $this->scrolltop, [ 'id' => 'wpScrolltop' ] ) );
if ( !$this->checkUnicodeCompliantBrowser() ) {
$wgOut->addHTML( Html::hidden( 'safemode', '1' ) );
$wgOut->addHTML( $this->getSummaryPreview( false, $this->summary ) );
}
- $checkboxes = $this->getCheckboxesOOUI(
+ $checkboxes = $this->getCheckboxesWidget(
$tabindex,
[ 'minor' => $this->minoredit, 'watch' => $this->watchthis ]
);
*/
protected function getLastDelete() {
$dbr = wfGetDB( DB_REPLICA );
+ $commentQuery = CommentStore::newKey( 'log_comment' )->getJoin();
$data = $dbr->selectRow(
- [ 'logging', 'user' ],
+ [ 'logging', 'user' ] + $commentQuery['tables'],
[
'log_type',
'log_action',
'log_user',
'log_namespace',
'log_title',
- 'log_comment',
'log_params',
'log_deleted',
'user_name'
- ], [
+ ] + $commentQuery['fields'], [
'log_namespace' => $this->mTitle->getNamespace(),
'log_title' => $this->mTitle->getDBkey(),
'log_type' => 'delete',
'user_id=log_user'
],
__METHOD__,
- [ 'LIMIT' => 1, 'ORDER BY' => 'log_timestamp DESC' ]
+ [ 'LIMIT' => 1, 'ORDER BY' => 'log_timestamp DESC' ],
+ [
+ 'user' => [ 'JOIN', 'user_id=log_user' ],
+ ] + $commentQuery['joins']
);
// Quick paranoid permission checks...
if ( is_object( $data ) ) {
}
if ( $data->log_deleted & LogPage::DELETED_COMMENT ) {
- $data->log_comment = $this->context->msg( 'rev-deleted-comment' )->escaped();
+ $data->log_comment_text = $this->context->msg( 'rev-deleted-comment' )->escaped();
+ $data->log_comment_data = null;
}
}
* where bool indicates the checked status of the checkbox
* @return array
*/
- protected function getCheckboxesDefinition( $checked ) {
+ public function getCheckboxesDefinition( $checked ) {
global $wgUser;
$checkboxes = [];
* Returns an array of html code of the following checkboxes old style:
* minor and watch
*
+ * @deprecated since 1.30 Use getCheckboxesWidget() or getCheckboxesDefinition() instead
* @param int &$tabindex Current tabindex
* @param array $checked See getCheckboxesDefinition()
* @return array
}
/**
- * Returns an array of html code of the following checkboxes:
- * minor and watch
+ * Returns an array of checkboxes for the edit form, including 'minor' and 'watch' checkboxes and
+ * any other added by extensions.
*
+ * @deprecated since 1.30 Use getCheckboxesWidget() or getCheckboxesDefinition() instead
* @param int &$tabindex Current tabindex
* @param array $checked Array of checkbox => bool, where bool indicates the checked
* status of the checkbox
*
- * @return array
+ * @return array Associative array of string keys to OOUI\FieldLayout instances
*/
public function getCheckboxesOOUI( &$tabindex, $checked ) {
+ return $this->getCheckboxesWidget( $tabindex, $checked );
+ }
+
+ /**
+ * Returns an array of checkboxes for the edit form, including 'minor' and 'watch' checkboxes and
+ * any other added by extensions.
+ *
+ * @param int &$tabindex Current tabindex
+ * @param array $checked Array of checkbox => bool, where bool indicates the checked
+ * status of the checkbox
+ *
+ * @return array Associative array of string keys to OOUI\FieldLayout instances
+ */
+ public function getCheckboxesWidget( &$tabindex, $checked ) {
$checkboxes = [];
$checkboxesDef = $this->getCheckboxesDefinition( $checked );
- $origTabindex = $tabindex;
-
foreach ( $checkboxesDef as $name => $options ) {
$legacyName = isset( $options['legacy-name'] ) ? $options['legacy-name'] : $name;
if ( isset( $options['title-message'] ) ) {
$title = $this->context->msg( $options['title-message'] )->text();
}
- if ( isset( $options['label-id'] ) ) {
- $labelAttribs['id'] = $options['label-id'];
- }
$checkboxes[ $legacyName ] = new OOUI\FieldLayout(
new OOUI\CheckboxInputWidget( [
// Backwards-compatibility hack to run the EditPageBeforeEditChecks hook. It's important,
// people have used it for the weirdest things completely unrelated to checkboxes...
// And if we're gonna run it, might as well allow its legacy checkboxes to be shown.
- $legacyCheckboxes = $this->getCheckboxes( $origTabindex, $checked );
+ $legacyCheckboxes = [];
+ if ( !$this->isNew ) {
+ $legacyCheckboxes['minor'] = '';
+ }
+ $legacyCheckboxes['watch'] = '';
+ // Copy new-style checkboxes into an old-style structure
+ foreach ( $checkboxes as $name => $oouiLayout ) {
+ $legacyCheckboxes[$name] = (string)$oouiLayout;
+ }
+ // Avoid PHP 7.1 warning of passing $this by reference
+ $ep = $this;
+ Hooks::run( 'EditPageBeforeEditChecks', [ &$ep, &$legacyCheckboxes, &$tabindex ], '1.29' );
+ // Copy back any additional old-style checkboxes into the new-style structure
foreach ( $legacyCheckboxes as $name => $html ) {
if ( $html && !isset( $checkboxes[$name] ) ) {
$checkboxes[$name] = new OOUI\Widget( [ 'content' => new OOUI\HtmlSnippet( $html ) ] );