*/
private $enableApiEditOverride = false;
+ /**
+ * @var IContextSource
+ */
+ protected $context;
+
/**
* @param Article $article
*/
$this->mArticle = $article;
$this->page = $article->getPage(); // model object
$this->mTitle = $article->getTitle();
+ $this->context = $article->getContext();
$this->contentModel = $this->mTitle->getContentModel();
return $this->mArticle;
}
+ /**
+ * @since 1.28
+ * @return IContextSource
+ */
+ public function getContext() {
+ return $this->context;
+ }
+
/**
* @since 1.19
* @return Title
/**
* Attempt submission
- * @param array $resultDetails See docs for $result in internalAttemptSave
+ * @param array|bool $resultDetails See docs for $result in internalAttemptSave
* @throws UserBlockedError|ReadOnlyError|ThrottledError|PermissionsError
* @return Status The resulting status object.
*/
$status->value = self::AS_READ_ONLY_PAGE;
return $status;
}
- if ( $wgUser->pingLimiter() || $wgUser->pingLimiter( 'linkpurge', 0 ) ) {
+ if ( $wgUser->pingLimiter() || $wgUser->pingLimiter( 'linkpurge', 0 )
+ || ( $changingContentModel && $wgUser->pingLimiter( 'editcontentmodel' ) )
+ ) {
$status->fatal( 'actionthrottledtext' );
$status->value = self::AS_RATE_LIMITED;
return $status;
}
if ( !$this->isSupportedContentModel( $content->getModel() ) ) {
- throw new MWException( 'This content model is not supported: '
- . ContentHandler::getLocalizedName( $content->getModel() ) );
+ throw new MWException( 'This content model is not supported: ' . $content->getModel() );
}
return $content->serialize( $this->contentFormat );
* content.
*
* @param string|null|bool $text Text to unserialize
- * @return Content The content object created from $text. If $text was false
+ * @return Content|bool|null The content object created from $text. If $text was false
* or null, false resp. null will be returned instead.
*
* @throws MWException If unserializing the text results in a Content
$this->contentModel, $this->contentFormat );
if ( !$this->isSupportedContentModel( $content->getModel() ) ) {
- throw new MWException( 'This content model is not supported: '
- . ContentHandler::getLocalizedName( $content->getModel() ) );
+ throw new MWException( 'This content model is not supported: ' . $content->getModel() );
}
return $content;
* @return bool|stdClass
*/
protected function getLastDelete() {
- $dbr = wfGetDB( DB_SLAVE );
+ $dbr = wfGetDB( DB_REPLICA );
$data = $dbr->selectRow(
[ 'logging', 'user' ],
[
* Parse the page for a preview. Subclasses may override this class, in order
* to parse with different options, or to otherwise modify the preview HTML.
*
- * @param Content @content The page content
- * @return Associative array with keys:
+ * @param Content $content The page content
+ * @return array with keys:
* - parserOutput: The ParserOutput object
* - html: The HTML to be displayed
*/
public function getEditButtons( &$tabindex ) {
$buttons = [];
- $buttonLabelKey = $this->isNew ? 'savearticle' : 'savechanges';
+ $labelAsPublish =
+ $this->mArticle->getContext()->getConfig()->get( 'EditSubmitButtonLabelPublish' );
+
+ // Can't use $this->isNew as that's also true if we're adding a new section to an extant page
+ if ( $labelAsPublish ) {
+ $buttonLabelKey = !$this->mTitle->exists() ? 'publishpage' : 'publishchanges';
+ } else {
+ $buttonLabelKey = !$this->mTitle->exists() ? 'savearticle' : 'savechanges';
+ }
$buttonLabel = wfMessage( $buttonLabelKey )->text();
$attribs = [
'id' => 'wpSave',