(part of bug 6100) Set the directionality based on user language instead of content...
[lhc/web/wiklou.git] / includes / EditPage.php
index 48a28e8..e979c61 100644 (file)
@@ -57,6 +57,7 @@ class EditPage {
        var $isCssJsSubpage = false;
        var $isCssSubpage = false;
        var $isJsSubpage = false;
+       var $isWrongCaseCssJsPage = false;
        var $isNew = false; // new page or new section
        var $deletedSinceEdit;
        var $formtype;
@@ -74,7 +75,12 @@ class EditPage {
        var $autoSumm = '';
        var $hookError = '';
        #var $mPreviewTemplates;
+
+       /**
+        * @var ParserOutput
+        */
        var $mParserOutput;
+
        var $mBaseRevision = false;
        var $mShowSummaryField = true;
 
@@ -95,6 +101,7 @@ class EditPage {
        public $editFormTextBottom;
        public $editFormTextAfterContent;
        public $previewTextAfterContent;
+       public $mPreloadText;
 
        /* $didSave should be set to true whenever an article was succesfully altered. */
        public $didSave = false;
@@ -104,7 +111,7 @@ class EditPage {
 
        /**
         * @todo document
-        * @param $article
+        * @param $article Article
         */
        function __construct( $article ) {
                $this->mArticle =& $article;
@@ -123,6 +130,9 @@ class EditPage {
                $this->mPreloadText = "";
        }
 
+       /**
+        * @return Article
+        */
        function getArticle() {
                return $this->mArticle;
        }
@@ -154,6 +164,8 @@ class EditPage {
 
        /**
         * Fetch initial editing page content.
+        *
+        * @param $def_text string
         * @returns mixed string on success, $def_text for invalid sections
         * @private
         */
@@ -246,7 +258,11 @@ class EditPage {
                return $text;
        }
 
-       /** Use this method before edit() to preload some text into the edit box */
+       /**
+        * Use this method before edit() to preload some text into the edit box
+        *
+        * @param $text string
+        */
        public function setPreloadedText( $text ) {
                $this->mPreloadText = $text;
        }
@@ -287,7 +303,7 @@ class EditPage {
                return '';
        }
 
-       /*
+       /**
         * Check if a page was deleted while the user was editing it, before submit.
         * Note that we rely on the logging table, which hasn't been always there,
         * but that doesn't matter, because this only applies to brand new
@@ -316,6 +332,8 @@ class EditPage {
        /**
         * Checks whether the user entered a skin name in uppercase,
         * e.g. "User:Example/Monobook.css" instead of "monobook.css"
+        *
+        * @return bool
         */
        protected function isWrongCaseCssJsPage() {
                if( $this->mTitle->isCssJsSubpage() ) {
@@ -481,6 +499,9 @@ class EditPage {
                wfProfileOut( __METHOD__ );
        }
 
+       /**
+        * @return array
+        */
        protected function getEditPermissionErrors() {
                global $wgUser;
                $permErrors = $this->mTitle->getUserPermissionsErrors( 'edit', $wgUser );
@@ -574,7 +595,7 @@ class EditPage {
 
        /**
         * @todo document
-        * @param $request
+        * @param $request WebRequest
         */
        function importFormData( &$request ) {
                global $wgLang, $wgUser;
@@ -705,7 +726,7 @@ class EditPage {
                $this->bot = $request->getBool( 'bot', true );
                $this->nosummary = $request->getBool( 'nosummary' );
 
-               // FIXME: unused variable?
+               // @todo FIXME: Unused variable?
                $this->oldid = $request->getInt( 'oldid' );
 
                $this->live = $request->getCheck( 'live' );
@@ -831,7 +852,11 @@ class EditPage {
 
        /**
         * Attempt submission (no UI)
-        * @return one of the constants describing the result
+        *
+        * @param $result
+        * @param $bot bool
+        *
+        * @return int one of the constants describing the result
         */
        function internalAttemptSave( &$result, $bot = false ) {
                global $wgFilterCallback, $wgUser, $wgParser;
@@ -1103,7 +1128,7 @@ class EditPage {
                                $hasmatch = preg_match( "/^ *([=]{1,6})(.*?)(\\1) *\\n/i", $this->textbox1, $matches );
                                # we can't deal with anchors, includes, html etc in the header for now,
                                # headline would need to be parsed to improve this
-                               if ( $hasmatch and strlen( $matches[2] ) > 0 ) {
+                               if ( $hasmatch && strlen( $matches[2] ) > 0 ) {
                                        $sectionanchor = $wgParser->guessLegacySectionNameFromWikiText( $matches[2] );
                                }
                        }
@@ -1151,13 +1176,14 @@ class EditPage {
         * Commit the change of watch status
         */
        protected function commitWatch() {
+               global $wgUser;
                if ( $this->watchthis xor $this->mTitle->userIsWatching() ) {
                        $dbw = wfGetDB( DB_MASTER );
                        $dbw->begin();
                        if ( $this->watchthis ) {
-                               Action::factory( 'watch', $this->mArticle )->execute();
+                               WatchAction::doWatch( $this->mTitle, $wgUser );
                        } else {
-                               Action::factory( 'watch', $this->mArticle )->execute();
+                               WatchAction::doUnwatch( $this->mTitle, $wgUser );
                        }
                        $dbw->commit();
                }
@@ -1167,6 +1193,11 @@ class EditPage {
         * Check if no edits were made by other users since
         * the time a user started editing the page. Limit to
         * 50 revisions for the sake of performance.
+        *
+        * @param $id int
+        * @param $edittime string
+        *
+        * @return bool
         */
        protected function userWasLastToEdit( $id, $edittime ) {
                if( !$id ) return false;
@@ -1189,7 +1220,10 @@ class EditPage {
 
        /**
         * Check given input text against $wgSpamRegex, and return the text of the first match.
-        * @return mixed -- matching string or false
+        *
+        * @param $text string
+        *
+        * @return string|false matching string or false
         */
        public static function matchSpamRegex( $text ) {
                global $wgSpamRegex;
@@ -1200,7 +1234,10 @@ class EditPage {
 
        /**
         * Check given input text against $wgSpamRegex, and return the text of the first match.
-        * @return mixed -- matching string or false
+        *
+        * @parma $text string
+        *
+        * @return string|false  matching string or false
         */
        public static function matchSummarySpamRegex( $text ) {
                global $wgSummarySpamRegex;
@@ -1208,6 +1245,11 @@ class EditPage {
                return self::matchSpamRegexInternal( $text, $regexes );
        }
 
+       /**
+        * @param $text string
+        * @param $regexes array
+        * @return bool|string
+        */
        protected static function matchSpamRegexInternal( $text, $regexes ) {
                foreach( $regexes as $regex ) {
                        $matches = array();
@@ -1221,7 +1263,7 @@ class EditPage {
        /**
         * Initialise form fields in the object
         * Called on the first invocation, e.g. when a user clicks an edit link
-        * @returns bool -- if the requested section is valid
+        * @return bool -- if the requested section is valid
         */
        function initialiseForm() {
                global $wgUser;
@@ -1239,8 +1281,12 @@ class EditPage {
                        # Already watched
                        $this->watchthis = true;
                }
-               if ( $wgUser->getOption( 'minordefault' ) && !$this->isNew ) $this->minoredit = true;
-               if ( $this->textbox1 === false ) return false;
+               if ( $wgUser->getOption( 'minordefault' ) && !$this->isNew ) {
+                       $this->minoredit = true;
+               }
+               if ( $this->textbox1 === false ) {
+                       return false;
+               }
                wfProxyCheck();
                return true;
        }
@@ -1580,10 +1626,10 @@ HTML
         * inferred by the id given to the input. You can remove them both by
         * passing array( 'id' => false ) to $userInputAttrs.
         *
-        * @param $summary The value of the summary input
-        * @param $labelText The html to place inside the label
-        * @param $inputAttrs An array of attrs to use on the input
-        * @param $spanLabelAttrs An array of attrs to use on the span inside the label
+        * @param $summary string The value of the summary input
+        * @param $labelText string The html to place inside the label
+        * @param $inputAttrs array of attrs to use on the input
+        * @param $spanLabelAttrs array of attrs to use on the span inside the label
         *
         * @return array An array in the format array( $label, $input )
         */
@@ -1626,11 +1672,13 @@ HTML
                # Add a class if 'missingsummary' is triggered to allow styling of the summary line
                $summaryClass = $this->missingSummary ? 'mw-summarymissed' : 'mw-summary';
                if ( $isSubjectPreview ) {
-                       if ( $this->nosummary )
+                       if ( $this->nosummary ) {
                                return;
+                       }
                } else {
-                       if ( !$this->mShowSummaryField )
+                       if ( !$this->mShowSummaryField ) {
                                return;
+                       }
                }
                $summary = $wgContLang->recodeForEdit( $summary );
                $labelText = wfMsgExt( $isSubjectPreview ? 'subject' : 'summary', 'parseinline' );
@@ -1723,6 +1771,10 @@ HTML
                                # Then it must be protected based on static groups (regular)
                                $classes[] = 'mw-textarea-protected';
                        }
+                       # Is the title cascade-protected?
+                       if ( $this->mTitle->isCascadeProtected() ) {
+                               $classes[] = 'mw-textarea-cprotected';
+                       }
                }
                $attribs = array( 'tabindex' => 1 );
                if ( is_array($customAttribs) )
@@ -1740,7 +1792,7 @@ HTML
        }
 
        protected function showTextbox2() {
-               $this->showTextbox( $this->textbox2, 'wpTextbox2', array( 'tabindex' => 6 ) );
+               $this->showTextbox( $this->textbox2, 'wpTextbox2', array( 'tabindex' => 6, 'readonly' ) );
        }
 
        protected function showTextbox( $content, $name, $customAttribs = array() ) {
@@ -1878,7 +1930,7 @@ HTML
                $wgOut->addHTML( "</div><!-- editButtons -->\n</div><!-- editOptions -->\n" );
        }
 
-       /*
+       /**
         * Show an edit conflict. textbox1 is already shown in showEditForm().
         * If you want to use another entry point to this function, be careful.
         */
@@ -2042,10 +2094,15 @@ HTML
                return $previewhead . $previewHTML . $this->previewTextAfterContent;
        }
 
+       /**
+        * @return Array
+        */
        function getTemplates() {
                if ( $this->preview || $this->section != '' ) {
                        $templates = array();
-                       if ( !isset( $this->mParserOutput ) ) return $templates;
+                       if ( !isset( $this->mParserOutput ) ) {
+                               return $templates;
+                       }
                        foreach( $this->mParserOutput->getTemplates() as $ns => $template) {
                                foreach( array_keys( $template ) as $dbk ) {
                                        $templates[] = Title::makeTitle($ns, $dbk);
@@ -2181,6 +2238,10 @@ HTML
        /**
         * @private
         * @todo document
+        *
+        * @parma $editText string
+        *
+        * @return bool
         */
        function mergeChangesInto( &$editText ){
                wfProfileIn( __METHOD__ );
@@ -2549,7 +2610,9 @@ HTML
                echo $s;
        }
 
-
+       /**
+        * @return string
+        */
        public function getCancelLink() {
                global $wgUser;
 
@@ -2613,6 +2676,11 @@ HTML
                        : $text;
        }
 
+       /**
+        * @param $request WebRequest
+        * @param $text string
+        * @return string
+        */
        function safeUnicodeText( $request, $text ) {
                $text = rtrim( $text );
                return $request->getBool( 'safemode' )
@@ -2805,7 +2873,7 @@ HTML
 
                        case self::AS_NO_CREATE_PERMISSION:
                                $this->noCreatePermission();
-                               return;
+                               return false;
 
                        case self::AS_BLANK_ARTICLE:
                                $wgOut->redirect( $this->getContextTitle()->getFullURL() );
@@ -2817,6 +2885,9 @@ HTML
                }
        }
 
+       /**
+        * @return Revision
+        */
        function getBaseRevision() {
                if ( !$this->mBaseRevision ) {
                        $db = wfGetDB( DB_MASTER );