Revert "jquery.textSelection: Remove hardcoded checks for removed WikiEditor iframe...
[lhc/web/wiklou.git] / includes / Wiki.php
index 6cf718c..aed1f65 100644 (file)
@@ -34,7 +34,7 @@ class MediaWiki {
        private $context;
 
        /**
-        * @param $x null|WebRequest
+        * @param null|WebRequest $x
         * @return WebRequest
         */
        public function request( WebRequest $x = null ) {
@@ -44,7 +44,7 @@ class MediaWiki {
        }
 
        /**
-        * @param $x null|OutputPage
+        * @param null|OutputPage $x
         * @return OutputPage
         */
        public function output( OutputPage $x = null ) {
@@ -67,7 +67,7 @@ class MediaWiki {
        /**
         * Parse the request to get the Title object
         *
-        * @return Title object to be $wgTitle
+        * @return Title Title object to be $wgTitle
         */
        private function parseTitle() {
                global $wgContLang;
@@ -142,7 +142,7 @@ class MediaWiki {
        /**
         * Returns the name of the action that will be executed.
         *
-        * @return string: action
+        * @return string Action
         */
        public function getAction() {
                static $action = null;
@@ -311,7 +311,7 @@ class MediaWiki {
         * Initialize the main Article object for "standard" actions (view, etc)
         * Create an Article object for the page, following redirects if needed.
         *
-        * @return mixed an Article, or a string to redirect to another URL
+        * @return mixed An Article, or a string to redirect to another URL
         */
        private function initializeArticle() {
                global $wgDisableHardRedirects;
@@ -393,8 +393,8 @@ class MediaWiki {
        /**
         * Perform one of the "standard" actions
         *
-        * @param $page Page
-        * @param $requestTitle The original title, before any redirects were applied
+        * @param Page $page
+        * @param Title $requestTitle The original title, before any redirects were applied
         */
        private function performAction( Page $page, Title $requestTitle ) {
                global $wgUseSquid, $wgSquidMaxage;
@@ -444,7 +444,15 @@ class MediaWiki {
        public function run() {
                try {
                        $this->checkMaxLag();
-                       $this->main();
+                       try {
+                               $this->main();
+                       } catch ( ErrorPageError $e ) {
+                               // Bug 62091: while exceptions are convenient to bubble up GUI errors,
+                               // they are not internal application faults. As with normal requests, this
+                               // should commit, print the output, do deferred updates, jobs, and profiling.
+                               wfGetLBFactory()->commitMasterChanges();
+                               $e->report(); // display the GUI error
+                       }
                        if ( function_exists( 'fastcgi_finish_request' ) ) {
                                fastcgi_finish_request();
                        }
@@ -534,7 +542,7 @@ class MediaWiki {
                        $request->getProtocol() == 'http'
                ) {
                        $oldUrl = $request->getFullRequestURL();
-                       $redirUrl = str_replace( 'http://', 'https://', $oldUrl );
+                       $redirUrl = preg_replace( '#^http://#', 'https://', $oldUrl );
 
                        if ( $request->wasPosted() ) {
                                // This is weird and we'd hope it almost never happens. This
@@ -624,7 +632,7 @@ class MediaWiki {
         * the socket once it's done.
         */
        protected function triggerJobs() {
-               global $wgJobRunRate, $wgServer;
+               global $wgJobRunRate, $wgServer, $wgRunJobsAsync;
 
                if ( $wgJobRunRate <= 0 || wfReadOnly() ) {
                        return;
@@ -644,6 +652,22 @@ class MediaWiki {
                        $n = intval( $wgJobRunRate );
                }
 
+               if ( !$wgRunJobsAsync ) {
+                       // If running jobs asynchronously has been disabled, run the job here
+                       // while the user waits
+                       SpecialRunJobs::executeJobs( $n );
+                       return;
+               }
+
+               try {
+                       if ( !JobQueueGroup::singleton()->queuesHaveJobs( JobQueueGroup::TYPE_DEFAULT ) ) {
+                               return; // do not send request if there are probably no jobs
+                       }
+               } catch ( JobQueueError $e ) {
+                       MWExceptionHandler::logException( $e );
+                       return; // do not make the site unavailable
+               }
+
                $query = array( 'title' => 'Special:RunJobs',
                        'tasks' => 'jobs', 'maxjobs' => $n, 'sigexpiry' => time() + 5 );
                $query['signature'] = SpecialRunJobs::getQuerySignature( $query );