r28791 MediaWiki - Code Review archive

Repository:MediaWiki
Revision:r28790‎ | r28791 | r28792 >
Date:09:47, 23 December 2007
Author:vasilievvv
Status:old
Tags:
Comment:
Validate MediaWiki:TitleBlacklist and delete it from cache before saving
Modified paths:
  • /trunk/extensions/TitleBlacklist/TitleBlacklist.hooks.php (modified) (history)
  • /trunk/extensions/TitleBlacklist/TitleBlacklist.i18n.php (modified) (history)
  • /trunk/extensions/TitleBlacklist/TitleBlacklist.list.php (modified) (history)
  • /trunk/extensions/TitleBlacklist/TitleBlacklist.php (modified) (history)

Diff [purge]

Index: trunk/extensions/TitleBlacklist/TitleBlacklist.php
@@ -19,7 +19,7 @@
2020 // Sources of TitleBlacklist
2121 define( 'TBLSRC_MSG', 0 ); //For internal usage
2222 define( 'TBLSRC_LOCALPAGE', 1 ); //Local wiki page
23 -define( 'TBLSRC_URL', 2 ); //Load blacklist from URL
 23+define( 'TBLSRC_URL', 2 ); //Load blacklist from URL
2424 define( 'TBLSRC_FILE', 3 ); //Load from file
2525 $wgTitleBlacklistSources = array();
2626
@@ -52,4 +52,5 @@
5353 $wgHooks['getUserPermissionsErrors'][] = 'TitleBlacklistHooks::userCan';
5454 $wgHooks['AbortMove'][] = 'TitleBlacklistHooks::abortMove';
5555 $wgHooks['UploadVerification'][] = 'TitleBlacklistHooks::verifyUpload';
 56+ $wgHooks['EditFilter'][] = 'TitleBlacklistHooks::validateBlacklist';
5657 }
\ No newline at end of file
Index: trunk/extensions/TitleBlacklist/TitleBlacklist.hooks.php
@@ -57,4 +57,28 @@
5858 }
5959 return true;
6060 }
 61+
 62+ public static function validateBlacklist( $editor, $text, $section, $error ) {
 63+ global $wgTitleBlacklist;
 64+ $title = $editor->mTitle;
 65+ if( $title->getNamespace() != NS_MEDIAWIKI && $title->getDbKey() != 'Titleblacklist' )
 66+ return true;
 67+
 68+ $bl = $wgTitleBlacklist->parseBlacklist( $text );
 69+ $ok = $wgTitleBlacklist->validate( $bl );
 70+ if( count( $ok ) == 0 ) {
 71+ $wgTitleBlacklist->invalidate();
 72+ return true;
 73+ }
 74+
 75+ $errmsg = wfMsgExt( 'titleblacklist-invalid', array( 'parsemag' ), count( $ok ) );
 76+ $errlines = '* <tt>' . implode( "</tt>\n* <tt>", array_map( 'wfEscapeWikiText', $ok ) ) . '</tt>';
 77+ $error = '<div class="errorbox">' .
 78+ $errmsg .
 79+ "\n" .
 80+ $errlines .
 81+ "</div>\n" .
 82+ "<br clear='all' />\n";
 83+ return true;
 84+ }
6185 }
\ No newline at end of file
Index: trunk/extensions/TitleBlacklist/TitleBlacklist.list.php
@@ -22,6 +22,7 @@
2323 $this->mBlacklist = $cachedBlacklist;
2424 return;
2525 }
 26+
2627 $sources = $wgTitleBlacklistSources;
2728 $sources[] = array( 'type' => TBLSRC_MSG );
2829 $this->mBlacklist = array();
@@ -108,7 +109,7 @@
109110 public function getHttp( $url ) {
110111 global $messageMemc, $wgDBname, $wgTitleBlacklistCaching;
111112 $key = "title_blacklist_source:" . md5( $url );
112 - $warnkey = "{$wgDBname}:titleblacklistwarning:";
 113+ $warnkey = "{$wgDBname}:titleblacklistwarning:" . md5( $url );
113114 $result = $messageMemc->get( $key );
114115 $warn = $messageMemc->get( $warnkey );
115116 if ( !is_string( $result ) || ( !$warn && !mt_rand( 0, $wgTitleBlacklistCaching['warningchance'] ) ) ) {
@@ -118,6 +119,23 @@
119120 }
120121 return $result;
121122 }
 123+
 124+ public function invalidate() {
 125+ global $wgMemc, $wgDBname;
 126+ $wgMemc->delete( "{$wgDBname}:title_blacklist_entries" );
 127+ }
 128+
 129+ public function validate( $blacklist ) {
 130+ $badEntries = array();
 131+ foreach( $blacklist as $e ) {
 132+ wfSuppressWarnings();
 133+ $regex = $e->getRegex();
 134+ if( preg_match( "/{$regex}/u", '' ) === false )
 135+ $badEntries[] = $e->getRaw();
 136+ wfRestoreWarnings();
 137+ }
 138+ return $badEntries;
 139+ }
122140 }
123141
124142 class TitleBlacklistEntry {
@@ -137,7 +155,10 @@
138156 if( $user->isAllowed( 'tboverride' ) ) {
139157 return true;
140158 }
141 - if( preg_match( "/^{$this->mRegex}$/s" . ( isset( $this->mParams['casesensitive'] ) ? '' : 'i' ), $title->getFullText() ) ) {
 159+ wfSuppressWarnings();
 160+ $match = preg_match( "/^{$this->mRegex}$/s" . ( isset( $this->mParams['casesensitive'] ) ? '' : 'i' ), $title->getFullText() );
 161+ wfRestoreWarnings();
 162+ if( $match ) {
142163 if( isset( $this->mParams['autoconfirmed'] ) && $user->isAllowed( 'autoconfirmed' ) ) {
143164 return true;
144165 }
Index: trunk/extensions/TitleBlacklist/TitleBlacklist.i18n.php
@@ -21,6 +21,7 @@
2222 'titleblacklist-forbidden-upload' => "
2323 '''A file named \"\$2\" cannot be uploaded''' <br />
2424 It matches the following blacklist entry: '''''\$1'''''",
 25+ 'titleblacklist-invalid' => 'The following {{PLURAL:$1|line|lines}} in the title blacklist {{PLURAL:$1|is|are}} invalid; please correct {{PLURAL:$1|it|them}} before saving:',
2526 ),
2627
2728 'ar' => array(
@@ -138,11 +139,34 @@
139140 'oc' => array(
140141 'titleblacklist' => "# Aquò es un títol mes en lista negra
141142 # Cada títol qu'indica aicí lo còde regex es interdich a la creacion e a l'edicion
142 -# Utilizatz « \" » per escriure de comentaris",
 143+# Utilizatz « # » per escriure de comentaris",
143144 'titleblacklist-forbidden-edit' => "<div align=\"center\" style=\"border: 1px solid #f88; padding: 0.5em; margin-bottom: 3px; font-size: 95%; width: auto;\"> '''La pagina intitolada « \$2 » pòt pas èsser creada.''' <br /> Dins la lista negra, correspond a l'expression racionala : '''''\$1''''' </div>",
144145 'titleblacklist-forbidden-move' => "<span class=\"error\"> '''La page intitolada « \$2 » pòt pas èsser deplaçada a « \$3 ».''' <br /> Dins la lista negra, correspond a l'expression racionala : '''''\$1''''' </span>",
145146 'titleblacklist-forbidden-upload' => "'''Un fichièr nomenat « $2 » pòt pas èsser telecargat.''' <br /> Dins la lista negra, correspond a l'expression racionala : '''''$1'''''",
146147 ),
 148+/** Russian (Русский)
 149+ * @author VasilievVV
 150+ */
 151+'ru' => array(
 152+ 'titleblacklist' =>
 153+"# Это список запрещённый названий
 154+# Любая статья, название которой попадает под этот список, не может быть создана
 155+# Используйте « # » для комментариев
 156+",
 157+ 'titleblacklist-forbidden-edit' => "
 158+<div align=\"center\" style=\"border: 1px solid #f88; padding: 0.5em; margin-bottom: 3px; font-size: 95%; width: auto;\">
 159+'''Страница с названием \"\$2\" не может быть создана''' <br />
 160+Она попадает под следующую запись списка запрещенных названий: '''''\$1'''''
 161+</div>",
 162+ 'titleblacklist-forbidden-move' => "<span class=\"error\">
 163+'''Страница с названием \"\$2\" не может быть перемещена''' <br />
 164+Она попадает под следующую запись списка запрещенных названий: '''''\$1'''''
 165+</span>",
 166+ 'titleblacklist-forbidden-upload' => "
 167+'''Файл с названием \"\$2\" не может быть загружен''' <br />
 168+Он попадает под следующую запись списка запрещенных названий: '''''\$1'''''",
 169+ 'titleblacklist-invalid' => '{{PLURAL:$1|Следующая строка|Следующие строки}} в списке запрещенный названий {{PLURAL:$1|не является правильным регулярным выражением|не являются правильными регулярными выражениями}}. Пожалуйста, исправьте {{PLURAL:$1|её|их}} перед сохранением:',
 170+ ),
147171
148172 );
149173

Status & tagging log