* (bug 3984) Searching in logs by title%
authorRaimond Spekking <raymond@users.mediawiki.org>
Tue, 13 Mar 2007 21:48:36 +0000 (21:48 +0000)
committerRaimond Spekking <raymond@users.mediawiki.org>
Tue, 13 Mar 2007 21:48:36 +0000 (21:48 +0000)
RELEASE-NOTES
includes/SpecialLog.php
languages/messages/MessagesDe.php
languages/messages/MessagesEn.php
maintenance/language/messages.inc

index c29fa0d..a2d92e3 100644 (file)
@@ -267,6 +267,7 @@ lighter making things easier to read.
 * Make Special:Listusers caseinsensitive for first letter
 * Default tidy.conf has been moved from extensions module into includes.
 * Ignore lonely '''''
+* (bug 3984) Searching in logs by title%
 
 
 == Languages updated ==
index c1b103d..33cbbe2 100644 (file)
@@ -66,7 +66,7 @@ class LogReader {
 
                $this->limitType( $request->getVal( 'type' ) );
                $this->limitUser( $request->getText( 'user' ) );
-               $this->limitTitle( $request->getText( 'page' ) );
+               $this->limitTitle( $request->getText( 'page' ) , $request->getBool( 'pattern' ) );
                $this->limitTime( $request->getVal( 'from' ), '>=' );
                $this->limitTime( $request->getVal( 'until' ), '<=' );
 
@@ -116,15 +116,21 @@ class LogReader {
         * @param string $page Title name as text
         * @private
         */
-       function limitTitle( $page ) {
+       function limitTitle( $page , $pattern ) {
                $title = Title::newFromText( $page );
                if( empty( $page ) || is_null( $title )  ) {
                        return false;
                }
                $this->title =& $title;
-               $safetitle = $this->db->strencode( $title->getDBkey() );
+               $this->pattern = $pattern;
                $ns = $title->getNamespace();
-               $this->whereClauses[] = "log_namespace=$ns AND log_title='$safetitle'";
+               if ( $pattern ) {
+                       $safetitle = $this->db->escapeLike( $title->getDBkey() ); // use escapeLike to avoid expensive search patterns like 't%st%'
+                       $this->whereClauses[] = "log_namespace=$ns AND log_title LIKE '$safetitle%'";
+               } else {
+                       $safetitle = $this->db->strencode( $title->getDBkey() );
+                       $this->whereClauses[] = "log_namespace=$ns AND log_title = '$safetitle'";
+               }
        }
 
        /**
@@ -187,6 +193,13 @@ class LogReader {
                return $this->user;
        }
 
+       /**
+        * @return boolean The checkbox, if titles should be searched by a pattern too
+        */
+       function queryPattern() {
+               return $this->pattern;
+       }
+
        /**
         * @return string The text of the title that this LogReader has been limited to.
         */
@@ -227,9 +240,13 @@ class LogViewer {
                $this->showHeader( $wgOut );
                $this->showOptions( $wgOut );
                $result = $this->getLogRows();
-               $this->showPrevNext( $wgOut );
-               $this->doShowList( $wgOut, $result );
-               $this->showPrevNext( $wgOut );
+               if ( $this->numResults > 0 ) {
+                       $this->showPrevNext( $wgOut );
+                       $this->doShowList( $wgOut, $result );
+                       $this->showPrevNext( $wgOut );
+               } else {
+                       $this->showError( $wgOut );
+               }
        }
 
        /**
@@ -278,20 +295,20 @@ class LogViewer {
 
        function doShowList( &$out, $result ) {
                // Rewind result pointer and go through it again, making the HTML
-               if ($this->numResults > 0) {
-                       $html = "\n<ul>\n";
-                       $result->seek( 0 );
-                       while( $s = $result->fetchObject() ) {
-                               $html .= $this->logLine( $s );
-                       }
-                       $html .= "\n</ul>\n";
-                       $out->addHTML( $html );
-               } else {
-                       $out->addWikiText( wfMsg( 'logempty' ) );
+               $html = "\n<ul>\n";
+               $result->seek( 0 );
+               while( $s = $result->fetchObject() ) {
+                       $html .= $this->logLine( $s );
                }
+               $html .= "\n</ul>\n";
+               $out->addHTML( $html );
                $result->free();
        }
 
+       function showError( &$out ) {
+               $out->addWikiText( wfMsg( 'logempty' ) );
+       }
+
        /**
         * @param Object $s a single row from the result set
         * @return string Formatted HTML list item
@@ -372,12 +389,15 @@ class LogViewer {
                $title = SpecialPage::getTitleFor( 'Log' );
                $special = htmlspecialchars( $title->getPrefixedDBkey() );
                $out->addHTML( "<form action=\"$action\" method=\"get\">\n" .
+                       '<fieldset>' .
+                       Xml::element( 'legend', array(), wfMsg( 'log' ) ) .
                        Xml::hidden( 'title', $special ) . "\n" .
                        $this->getTypeMenu() . "\n" .
                        $this->getUserInput() . "\n" .
                        $this->getTitleInput() . "\n" .
+                       $this->getTitlePattern() . "\n" .
                        Xml::submitButton( wfMsg( 'allpagessubmit' ) ) . "\n" .
-                       "</form>" );
+                       "</fieldset></form>" );
        }
 
        /**
@@ -427,6 +447,15 @@ class LogViewer {
                return Xml::inputLabel( wfMsg( 'speciallogtitlelabel' ), 'page', 'page', 20, $title );
        }
 
+       /**
+        * @return boolean Checkbox
+        * @private
+        */
+       function getTitlePattern() {
+               $pattern = $this->reader->queryPattern();
+               return Xml::checkLabel( wfMsg( 'title-pattern' ), 'pattern', 'pattern', $pattern );
+       }
+
        /**
         * @param OutputPage &$out where to send output
         * @private
@@ -437,6 +466,7 @@ class LogViewer {
                $pieces[] = 'type=' . urlencode( $this->reader->queryType() );
                $pieces[] = 'user=' . urlencode( $this->reader->queryUser() );
                $pieces[] = 'page=' . urlencode( $this->reader->queryTitle() );
+               $pieces[] = 'pattern=' . urlencode( $this->reader->queryPattern() );
                $bits = implode( '&', $pieces );
                list( $limit, $offset ) = $wgRequest->getLimitOffset();
 
index 4c26a18..0cb83cc 100644 (file)
@@ -880,7 +880,7 @@ Nicht selektierte Gruppen werden nicht geändert. Eine Selektion kann mit '''Str
 'grouppage-bureaucrat' => '{{ns:project}}:Bürokraten',
 
 # User rights log
-'rightslog'      => 'Benutzerrechte-Logbuch',
+'rightslog'      => 'Rechte-Logbuch',
 'rightslogtext'  => 'Dies ist das Logbuch der Änderungen der Benutzerrechte.',
 'rightslogentry' => 'änderte die Gruppenzugehörigkeit für „[[$1]]“ von „$2“ auf „$3“.',
 'rightsnone'     => '(-)',
@@ -1178,9 +1178,17 @@ Davon {{PLURAL:$2|hat|haben}} '''$2''' (=$4%) $5-Rechte.",
 'isbn'               => 'ISBN',
 'alphaindexline'     => '$1 bis $2',
 'version'            => 'Version',
-'log'                => 'Logbücher',
-'alllogstext'        => 'Kombinierte Anzeige der Datei-, Lösch-, Seitenschutz-, Benutzersperr- und Rechte-Logbücher.<br />Sie können die Anzeige durch die Auswahl des Logbuchtyps, des Benutzers oder des Seitentitels einschränken.',
-'logempty'           => 'Keine passenden Einträge.',
+
+# Special:Logs
+'specialloguserlabel'  => 'Benutzer:',
+'speciallogtitlelabel' => 'Titel:',
+'log'                  => 'Logbücher',
+'alllogstext'          => "Dies ist die kombinierte Anzeige aller in {{SITENAME}} geführten Logbücher.
+Die Ausgabe kann durch die Auswahl des Logbuchtyps, des Benutzers oder des Seitentitels eingeschränkt werden.
+
+Durch Markieren von „{{int:title-pattern}}“ wird nach Titeln gesucht, die mit diesem Begriff anfangen und beliebig enden. Es können keine Platzhalter ''(Wildcards)'' benutzt werden",
+'logempty'             => 'Keine passenden Einträge.',
+'title-pattern'        => 'Titel beginnt mit …',
 
 # Special:Allpages
 'nextpage'          => 'Nächste Seite ($1)',
@@ -1809,10 +1817,6 @@ Variants for Chinese language
 'variantname-kk-cn' => 'kk-cn',
 'variantname-kk'    => 'kk',
 
-# Labels for User: and Title: on Special:Log pages
-'specialloguserlabel'  => 'Benutzer:',
-'speciallogtitlelabel' => 'Titel:',
-
 'passwordtooshort' => 'Das Passwort ist zu kurz. Es muss mindestens $1 Zeichen lang sein.',
 
 # Metadata
index 5828904..1a3e4ff 100644 (file)
@@ -1575,11 +1575,15 @@ further information about books you are looking for:',
 'pubmedurl' =>  'http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&db=pubmed&dopt=Abstract&list_uids=$1',
 'alphaindexline' => "$1 to $2",
 'version'              => 'Version',
-'log'          => 'Logs',
-'alllogstext'  => 'Combined display of upload, deletion, protection, blocking, and sysop logs.
-You can narrow down the view by selecting a log type, the user name, or the affected page.',
-'logempty' => 'No matching items in log.',
 
+# Special:Logs
+'specialloguserlabel'  => 'Benutzer:',
+'speciallogtitlelabel' => 'Titel:',
+'log'                  => 'Logs',
+'alllogstext'          => 'Combined display of all available logs of {{SITENAME}}.
+You can narrow down the view by selecting a log type, the user name, or the affected page.',
+'logempty'             => 'No matching items in log.',
+'title-pattern'        => 'Title starts with \85',
 
 # Special:Allpages
 'nextpage'          => 'Next page ($1)',
@@ -2327,10 +2331,6 @@ All transwiki import actions are logged at the [[Special:Log/import|import log]]
 'variantname-kk-cn' => 'kk-cn',
 'variantname-kk' => 'kk',
 
-# labels for User: and Title: on Special:Log pages
-'specialloguserlabel' => 'User:',
-'speciallogtitlelabel' => 'Title:',
-
 'passwordtooshort' => 'Your password is too short. It must have at least $1 characters.',
 
 # Metadata
index 4d9e392..c6ba09e 100644 (file)
@@ -976,9 +976,14 @@ $wgMessageStructure = array(
                'pubmedurl',
                'alphaindexline',
                'version',
+       ),
+       'logpages' => array(
                'log',
                'alllogstext',
                'logempty',
+               'specialloguserlabel',
+               'speciallogtitlelabel',
+               'title-pattern',
        ),
        'allpages' => array(
                'nextpage',
@@ -1597,10 +1602,6 @@ $wgMessageStructure = array(
                'variantname-kk-cn',
                'variantname-kk',
        ),
-       'specialloglabels' => array(
-               'specialloguserlabel',
-               'speciallogtitlelabel',
-       ),
        'passwordtooshort' => array(
                'passwordtooshort',
        ),
@@ -2099,6 +2100,7 @@ XHTML id names.",
        'specialpages'        => 'Miscellaneous special pages',
        'booksources'         => 'Book sources',
        'specialpages2'       => '',
+       'logpages'            => 'Special:Logs',
        'allpages'            => 'Special:Allpages',
        'listusers'           => 'Special:Listusers',
        'emailuser'           => 'E-mail user',
@@ -2142,7 +2144,6 @@ To disable showing a particular link, set it to 'disable', e.g.
 Variants for Chinese language",
        'variantname-sr'      => 'Variants for Serbian language',
        'variantname-kk'      => 'Variants for Kazakh language',
-       'specialloglabels'    => 'Labels for User: and Title: on Special:Log pages',
        'passwordtooshort'    => '',
        'media-info'          => 'Media information',
        'metadata'            => 'Metadata',