(bug 17283) Remove double URL escaping in show/hide links for log entries and Revisio...
[lhc/web/wiklou.git] / includes / LogEventsList.php
index 528bd3a..1bf4ec0 100644 (file)
@@ -68,13 +68,15 @@ class LogEventsList {
         * @param $filter Boolean
         */
        public function showOptions( $type = '', $user = '', $page = '', $pattern = '', $year = '', 
-                       $month = '', $filter = null ) 
+                       $month = '', $filter = null, $tagFilter='' ) 
        {
                global $wgScript, $wgMiserMode;
                $action = htmlspecialchars( $wgScript );
                $title = SpecialPage::getTitleFor( 'Log' );
                $special = htmlspecialchars( $title->getPrefixedDBkey() );
 
+               $tagSelector = ChangeTags::buildTagFilterSelector( $tagFilter );
+
                $this->out->addHTML( "<form action=\"$action\" method=\"get\"><fieldset>" .
                        Xml::element( 'legend', array(), wfMsg( 'log' ) ) .
                        Xml::hidden( 'title', $special ) . "\n" .
@@ -83,7 +85,8 @@ class LogEventsList {
                        $this->getTitleInput( $page ) . "\n" .
                        ( !$wgMiserMode ? ($this->getTitlePattern( $pattern )."\n") : "" ) .
                        "<p>" . $this->getDateMenu( $year, $month ) . "\n" .
-                       ( $filter ? "</p><p>".$this->getFilterLinks( $type, $filter )."\n" : "" ) .
+                       ( $tagSelector ? Xml::tags( 'p', null, implode( '&nbsp;', $tagSelector ) ) :'' ). "\n" .
+                       ( $filter ? "</p><p>".$this->getFilterLinks( $type, $filter )."\n" : "" ) . "\n" .
                        Xml::submitButton( wfMsg( 'allpagessubmit' ) ) . "</p>\n" .
                        "</fieldset></form>"
                );
@@ -230,6 +233,7 @@ class LogEventsList {
                global $wgLang, $wgUser, $wgContLang;
 
                $title = Title::makeTitle( $row->log_namespace, $row->log_title );
+               $classes = array( "mw-logline-{$row->log_type}" );
                $time = $wgLang->timeanddate( wfTimestamp(TS_MW, $row->log_timestamp), true );
                // User links
                if( self::isDeleted($row,LogPage::DELETED_USER) ) {
@@ -357,12 +361,16 @@ class LogEventsList {
                                $this->skin, $paramArray, true );
                }
 
+               // Any tags...
+               list($tagDisplay, $newClasses) = ChangeTags::formatSummaryRow( $row->ts_tags, 'logevent' );
+               $classes = array_merge( $classes, $newClasses );
+
                if( $revert != '' ) {
                        $revert = '<span class="mw-logevent-actionlink">' . $revert . '</span>';
                }
 
-               return Xml::tags( 'li', array( "class" => "mw-logline-$row->log_type" ),
-                       $del . $time . ' ' . $userLink . ' ' . $action . ' ' . $comment . ' ' . $revert );
+               return Xml::tags( 'li', array( "class" => implode( ' ', $classes ) ),
+                       $del . $time . ' ' . $userLink . ' ' . $action . ' ' . $comment . ' ' . $revert . " $tagDisplay" ) . "\n";
        }
 
        /**
@@ -373,19 +381,18 @@ class LogEventsList {
                $revdel = SpecialPage::getTitleFor( 'Revisiondelete' );
                // If event was hidden from sysops
                if( !self::userCan( $row, LogPage::DELETED_RESTRICTED ) ) {
-                       $del = $this->message['rev-delundel'];
+                       $del = Xml::tags( 'span', array( 'class'=>'mw-revdelundel-link' ), '('.$this->message['rev-delundel'].')' );
                } else if( $row->log_type == 'suppress' ) {
                        // No one should be hiding from the oversight log
-                       $del = $this->message['rev-delundel'];
+                       $del = Xml::tags( 'span', array( 'class'=>'mw-revdelundel-link' ), '('.$this->message['rev-delundel'].')' );
                } else {
                        $target = SpecialPage::getTitleFor( 'Log', $row->log_type );
-                       $del = $this->skin->makeKnownLinkObj( $revdel, $this->message['rev-delundel'],
-                               'target=' . $target->getPrefixedUrl() . '&logid='.$row->log_id );
-                       // Bolden oversighted content
-                       if( self::isDeleted( $row, LogPage::DELETED_RESTRICTED ) )
-                               $del = "<strong>$del</strong>";
+                       $query = array( 'target' => $target->getPrefixedDBkey(),
+                               'logid' => $row->log_id
+                       );
+                       $del = $this->skin->revDeleteLink( $query, self::isDeleted( $row, LogPage::DELETED_RESTRICTED ) );
                }
-               return "<tt>(<small>$del</small>)</tt>";
+               return $del;
        }
 
        /**
@@ -509,7 +516,7 @@ class LogPager extends ReverseChronologicalPager {
         * @param $month Integer
         */
        public function __construct( $list, $type = '', $user = '', $title = '', $pattern = '', 
-               $conds = array(), $year = false, $month = false ) 
+               $conds = array(), $year = false, $month = false, $tagFilter = '' ) 
        {
                parent::__construct();
                $this->mConds = $conds;
@@ -520,6 +527,7 @@ class LogPager extends ReverseChronologicalPager {
                $this->limitUser( $user );
                $this->limitTitle( $title, $pattern );
                $this->getDateCond( $year, $month );
+               $this->mTagFilter = $tagFilter;
        }
 
        public function getDefaultQuery() {
@@ -644,13 +652,18 @@ class LogPager extends ReverseChronologicalPager {
                } else {
                        $index = array( 'USE INDEX' => array( 'logging' => 'times' ) );
                }
-               return array(
+               $info = array(
                        'tables' => array( 'logging', 'user' ),
                        'fields' => array( 'log_type', 'log_action', 'log_user', 'log_namespace', 'log_title', 'log_params',
                                'log_comment', 'log_id', 'log_deleted', 'log_timestamp', 'user_name', 'user_editcount' ),
                        'conds' => $this->mConds,
-                       'options' => $index
+                       'options' => $index,
+                       'join_conds' => array( 'user' => array( 'INNER JOIN', 'user_id=log_user' ) ),
                );
+
+               ChangeTags::modifyDisplayQuery( $info['tables'], $info['fields'], $info['conds'], $info['join_conds'], $this->mTagFilter );
+
+               return $info;
        }
 
        function getIndexField() {
@@ -701,6 +714,10 @@ class LogPager extends ReverseChronologicalPager {
        public function getMonth() {
                return $this->mMonth;
        }
+
+       public function getTagFilter() {
+               return $this->mTagFilter;
+       }
 }
 
 /**
@@ -722,6 +739,7 @@ class LogReader {
                $pattern = $request->getBool( 'pattern' );
                $year = $request->getIntOrNull( 'year' );
                $month = $request->getIntOrNull( 'month' );
+               $tagFilter = $request->getVal( 'tagfilter' );
                # Don't let the user get stuck with a certain date
                $skip = $request->getText( 'offset' ) || $request->getText( 'dir' ) == 'prev';
                if( $skip ) {
@@ -730,7 +748,7 @@ class LogReader {
                }
                # Use new list class to output results
                $loglist = new LogEventsList( $wgUser->getSkin(), $wgOut, 0 );
-               $this->pager = new LogPager( $loglist, $type, $user, $title, $pattern, $year, $month );
+               $this->pager = new LogPager( $loglist, $type, $user, $title, $pattern, $year, $month, $tagFilter );
        }
 
        /**