Merge "Align search result CSS with Wikimedia UI color palette"
[lhc/web/wiklou.git] / includes / specials / SpecialBrokenRedirects.php
index 701f75f..b730ecd 100644 (file)
@@ -49,46 +49,46 @@ class BrokenRedirectsPage extends QueryPage {
        }
 
        public function getQueryInfo() {
-               $dbr = wfGetDB( DB_SLAVE );
+               $dbr = wfGetDB( DB_REPLICA );
 
-               return array(
-                       'tables' => array(
+               return [
+                       'tables' => [
                                'redirect',
                                'p1' => 'page',
                                'p2' => 'page',
-                       ),
-                       'fields' => array(
+                       ],
+                       'fields' => [
                                'namespace' => 'p1.page_namespace',
                                'title' => 'p1.page_title',
                                'value' => 'p1.page_title',
                                'rd_namespace',
                                'rd_title',
-                       ),
-                       'conds' => array(
+                       ],
+                       'conds' => [
                                // Exclude pages that don't exist locally as wiki pages,
                                // but aren't "broken" either.
                                // Special pages and interwiki links
                                'rd_namespace >= 0',
                                'rd_interwiki IS NULL OR rd_interwiki = ' . $dbr->addQuotes( '' ),
                                'p2.page_namespace IS NULL',
-                       ),
-                       'join_conds' => array(
-                               'p1' => array( 'JOIN', array(
+                       ],
+                       'join_conds' => [
+                               'p1' => [ 'JOIN', [
                                        'rd_from=p1.page_id',
-                               ) ),
-                               'p2' => array( 'LEFT JOIN', array(
+                               ] ],
+                               'p2' => [ 'LEFT JOIN', [
                                        'rd_namespace=p2.page_namespace',
                                        'rd_title=p2.page_title'
-                               ) ),
-                       ),
-               );
+                               ] ],
+                       ],
+               ];
        }
 
        /**
         * @return array
         */
        function getOrderFields() {
-               return array( 'rd_namespace', 'rd_title', 'rd_from' );
+               return [ 'rd_namespace', 'rd_title', 'rd_from' ];
        }
 
        /**
@@ -109,51 +109,66 @@ class BrokenRedirectsPage extends QueryPage {
                        }
                }
 
+               $linkRenderer = $this->getLinkRenderer();
                // $toObj may very easily be false if the $result list is cached
                if ( !is_object( $toObj ) ) {
-                       return '<del>' . Linker::link( $fromObj ) . '</del>';
+                       return '<del>' . $linkRenderer->makeLink( $fromObj ) . '</del>';
                }
 
-               $from = Linker::linkKnown(
+               $from = $linkRenderer->makeKnownLink(
                        $fromObj,
                        null,
-                       array(),
-                       array( 'redirect' => 'no' )
-               );
-               $links = array();
-               $links[] = Linker::linkKnown(
-                       $fromObj,
-                       $this->msg( 'brokenredirects-edit' )->escaped(),
-                       array(),
-                       array( 'action' => 'edit' )
-               );
-               $to = Linker::link(
-                       $toObj,
-                       null,
-                       array(),
-                       array(),
-                       array( 'broken' )
+                       [],
+                       [ 'redirect' => 'no' ]
                );
+               $links = [];
+               // if the page is editable, add an edit link
+               if (
+                       // check user permissions
+                       $this->getUser()->isAllowed( 'edit' ) &&
+                       // check, if the content model is editable through action=edit
+                       ContentHandler::getForTitle( $fromObj )->supportsDirectEditing()
+               ) {
+                       $links[] = $linkRenderer->makeKnownLink(
+                               $fromObj,
+                               $this->msg( 'brokenredirects-edit' )->text(),
+                               [],
+                               [ 'action' => 'edit' ]
+                       );
+               }
+               $to = $linkRenderer->makeBrokenLink( $toObj );
                $arr = $this->getLanguage()->getArrow();
 
                $out = $from . $this->msg( 'word-separator' )->escaped();
 
                if ( $this->getUser()->isAllowed( 'delete' ) ) {
-                       $links[] = Linker::linkKnown(
+                       $links[] = $linkRenderer->makeKnownLink(
                                $fromObj,
-                               $this->msg( 'brokenredirects-delete' )->escaped(),
-                               array(),
-                               array( 'action' => 'delete' )
+                               $this->msg( 'brokenredirects-delete' )->text(),
+                               [],
+                               [ 'action' => 'delete' ]
                        );
                }
 
-               $out .= $this->msg( 'parentheses' )->rawParams( $this->getLanguage()
-                       ->pipeList( $links ) )->escaped();
+               if ( $links ) {
+                       $out .= $this->msg( 'parentheses' )->rawParams( $this->getLanguage()
+                               ->pipeList( $links ) )->escaped();
+               }
                $out .= " {$arr} {$to}";
 
                return $out;
        }
 
+       /**
+        * Cache page content model for performance
+        *
+        * @param IDatabase $db
+        * @param ResultWrapper $res
+        */
+       function preprocessResults( $db, $res ) {
+               $this->executeLBFromResultWrapper( $res );
+       }
+
        protected function getGroupName() {
                return 'maintenance';
        }