From 4688b5ea9d12b10bbe00f158cc88352b026fa26e Mon Sep 17 00:00:00 2001 From: Raimond Spekking Date: Tue, 13 Mar 2007 21:48:36 +0000 Subject: [PATCH] * (bug 3984) Searching in logs by title% --- RELEASE-NOTES | 1 + includes/SpecialLog.php | 66 ++++++++++++++++++++++--------- languages/messages/MessagesDe.php | 20 ++++++---- languages/messages/MessagesEn.php | 16 ++++---- maintenance/language/messages.inc | 11 +++--- 5 files changed, 75 insertions(+), 39 deletions(-) diff --git a/RELEASE-NOTES b/RELEASE-NOTES index c29fa0db5a..a2d92e3f9d 100644 --- a/RELEASE-NOTES +++ b/RELEASE-NOTES @@ -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 == diff --git a/includes/SpecialLog.php b/includes/SpecialLog.php index c1b103ddab..33cbbe274e 100644 --- a/includes/SpecialLog.php +++ b/includes/SpecialLog.php @@ -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\n"; - $out->addHTML( $html ); - } else { - $out->addWikiText( wfMsg( 'logempty' ) ); + $html = "\n\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( "
\n" . + '
' . + 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" . - "" ); + "
" ); } /** @@ -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(); diff --git a/languages/messages/MessagesDe.php b/languages/messages/MessagesDe.php index 4c26a1863d..0cb83cce95 100644 --- a/languages/messages/MessagesDe.php +++ b/languages/messages/MessagesDe.php @@ -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.
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 diff --git a/languages/messages/MessagesEn.php b/languages/messages/MessagesEn.php index 5828904908..1a3e4ffa29 100644 --- a/languages/messages/MessagesEn.php +++ b/languages/messages/MessagesEn.php @@ -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 …', # 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 diff --git a/maintenance/language/messages.inc b/maintenance/language/messages.inc index 4d9e392123..c6ba09e883 100644 --- a/maintenance/language/messages.inc +++ b/maintenance/language/messages.inc @@ -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', -- 2.20.1