Switch some HTMLForms in special pages to OOUI
[lhc/web/wiklou.git] / includes / EditPage.php
index e88baaf..3600fb2 100644 (file)
@@ -167,6 +167,12 @@ class EditPage {
         */
        const AS_PARSE_ERROR = 240;
 
+       /**
+        * Status: when changing the content model is disallowed due to
+        * $wgContentHandlerUseDB being false
+        */
+       const AS_CANNOT_USE_CUSTOM_MODEL = 241;
+
        /**
         * HTML id and name for the beginning of the edit form.
         */
@@ -1037,7 +1043,6 @@ class EditPage {
                                $undo = $wgRequest->getInt( 'undo' );
 
                                if ( $undo > 0 && $undoafter > 0 ) {
-
                                        $undorev = Revision::newFromId( $undo );
                                        $oldrev = Revision::newFromId( $undoafter );
 
@@ -1046,8 +1051,8 @@ class EditPage {
                                        # Otherwise, $content will be left as-is.
                                        if ( !is_null( $undorev ) && !is_null( $oldrev ) &&
                                                !$undorev->isDeleted( Revision::DELETED_TEXT ) &&
-                                               !$oldrev->isDeleted( Revision::DELETED_TEXT ) ) {
-
+                                               !$oldrev->isDeleted( Revision::DELETED_TEXT )
+                                       ) {
                                                $content = $this->mArticle->getUndoContent( $undorev, $oldrev );
 
                                                if ( $content === false ) {
@@ -1242,9 +1247,9 @@ class EditPage {
 
                        if ( !$converted ) {
                                //TODO: somehow show a warning to the user!
-                               wfDebug( "Attempt to preload incompatible content: "
-                                               . "can't convert " . $content->getModel()
-                                               . " to " . $handler->getModelID() );
+                               wfDebug( "Attempt to preload incompatible content: " .
+                                       "can't convert " . $content->getModel() .
+                                       " to " . $handler->getModelID() );
 
                                return $handler->makeEmptyContent();
                        }
@@ -1362,6 +1367,7 @@ class EditPage {
                        case self::AS_HOOK_ERROR:
                                return false;
 
+                       case self::AS_CANNOT_USE_CUSTOM_MODEL:
                        case self::AS_PARSE_ERROR:
                                $wgOut->addWikiText( '<div class="error">' . $status->getWikiText() . '</div>' );
                                return true;
@@ -1544,6 +1550,7 @@ class EditPage {
         */
        function internalAttemptSave( &$result, $bot = false ) {
                global $wgUser, $wgRequest, $wgParser, $wgMaxArticleSize;
+               global $wgContentHandlerUseDB;
 
                $status = Status::newGood();
 
@@ -1664,11 +1671,15 @@ class EditPage {
                        }
                }
 
-               if ( $this->contentModel !== $this->mTitle->getContentModel()
-                       && !$wgUser->isAllowed( 'editcontentmodel' )
-               ) {
-                       $status->setResult( false, self::AS_NO_CHANGE_CONTENT_MODEL );
-                       return $status;
+               if ( $this->contentModel !== $this->mTitle->getContentModel() ) {
+                       if ( !$wgContentHandlerUseDB ) {
+                               $status->fatal( 'editpage-cannot-use-custom-model' );
+                               $status->value = self::AS_CANNOT_USE_CUSTOM_MODEL;
+                               return $status;
+                       } elseif ( !$wgUser->isAllowed( 'editcontentmodel' ) ) {
+                               $status->setResult( false, self::AS_NO_CHANGE_CONTENT_MODEL );
+                               return $status;
+                       }
                }
 
                if ( $this->changeTags ) {
@@ -3464,6 +3475,8 @@ HTML
                global $wgOut, $wgUser, $wgRawHtml, $wgLang;
                global $wgAllowUserCss, $wgAllowUserJs;
 
+               $stats = $wgOut->getContext()->getStats();
+
                if ( $wgRawHtml && !$this->mTokenOk ) {
                        // Could be an offsite preview attempt. This is very unsafe if
                        // HTML is enabled, as it could be an attack.
@@ -3475,6 +3488,7 @@ HTML
                                $parsedNote = $wgOut->parse( "<div class='previewnote'>" .
                                        wfMessage( 'session_fail_preview_html' )->text() . "</div>", true, /* interface */true );
                        }
+                       $stats->increment( 'edit.failures.session_loss' );
                        return $parsedNote;
                }
 
@@ -3498,11 +3512,16 @@ HTML
                        if ( $this->mTriedSave && !$this->mTokenOk ) {
                                if ( $this->mTokenOkExceptSuffix ) {
                                        $note = wfMessage( 'token_suffix_mismatch' )->plain();
+                                       $stats->increment( 'edit.failures.bad_token' );
                                } else {
                                        $note = wfMessage( 'session_fail_preview' )->plain();
+                                       $stats->increment( 'edit.failures.session_loss' );
                                }
                        } elseif ( $this->incompleteForm ) {
                                $note = wfMessage( 'edit_form_incomplete' )->plain();
+                               if ( $this->mTriedSave ) {
+                                       $stats->increment( 'edit.failures.incomplete_form' );
+                               }
                        } else {
                                $note = wfMessage( 'previewnote' )->plain() . ' ' . $continueEditing;
                        }