r83932 MediaWiki - Code Review archive

Repository:MediaWiki
Revision:r83931‎ | r83932 | r83933 >
Date:17:59, 14 March 2011
Author:catrope
Status:ok
Tags:
Comment:
1.17wmf1: MFT r78990, r79844, r81548, r82022, r82193, r83061, r83067, r83583, r83610, r83716, r83764, r83787, r83813, r83866. Just copied ApiQueryUsers.php from trunk because the conflicts drove me crazy
Modified paths:
  • /branches/wmf/1.17wmf1/RELEASE-NOTES (modified) (history)
  • /branches/wmf/1.17wmf1/extensions/CentralAuth/SpecialCentralAuth.php (modified) (history)
  • /branches/wmf/1.17wmf1/extensions/CodeReview/backend/CodeRevision.php (modified) (history)
  • /branches/wmf/1.17wmf1/extensions/CodeReview/codereview.css (modified) (history)
  • /branches/wmf/1.17wmf1/extensions/Collection/Collection.suggest.php (modified) (history)
  • /branches/wmf/1.17wmf1/includes/DefaultSettings.php (modified) (history)
  • /branches/wmf/1.17wmf1/includes/Sanitizer.php (modified) (history)
  • /branches/wmf/1.17wmf1/includes/Title.php (modified) (history)
  • /branches/wmf/1.17wmf1/includes/api/ApiQueryUsers.php (modified) (history)
  • /branches/wmf/1.17wmf1/languages/messages/MessagesOr.php (modified) (history)
  • /branches/wmf/1.17wmf1/resources/mediawiki.action/mediawiki.action.edit.js (modified) (history)
  • /branches/wmf/1.17wmf1/resources/mediawiki.util/mediawiki.util.test.js (modified) (history)
  • /branches/wmf/1.17wmf1/resources/mediawiki/mediawiki.js (modified) (history)
  • /branches/wmf/1.17wmf1/resources/mediawiki/mediawiki.log.js (modified) (history)
  • /branches/wmf/1.17wmf1/skins/common/search.css (modified) (history)

Diff [purge]

Index: branches/wmf/1.17wmf1/skins/common/search.css
@@ -9,6 +9,6 @@
1010 *
1111 * This will only affect IE 7 and lower
1212 */
13 -html > body .searchresult {
14 - display: inline;
 13+.searchresult {
 14+ display: inline !ie;
1515 }
Index: branches/wmf/1.17wmf1/extensions/Collection/Collection.suggest.php
@@ -131,6 +131,7 @@
132132 */
133133
134134 private static function unban( $article ) {
 135+ if (!isset($_SESSION['wsCollectionSuggestBan']) return;
135136 $bans = $_SESSION['wsCollectionSuggestBan'];
136137 $newbans = array();
137138 foreach ( $bans as $ban ) {
Index: branches/wmf/1.17wmf1/extensions/CodeReview/codereview.css
@@ -132,7 +132,7 @@
133133 }
134134
135135 .mw-codereview-diff .meta {
136 - color: darkcyan;
 136+ color: #008b8b;
137137 }
138138
139139 .mw-wordcloud-size-1, .mw-wordcloud-size-2,
Property changes on: branches/wmf/1.17wmf1/extensions/CodeReview/codereview.css
___________________________________________________________________
Added: svn:mergeinfo
140140 Merged /branches/sqlite/extensions/CodeReview/codereview.css:r58211-58321
141141 Merged /trunk/phase3/extensions/CodeReview/codereview.css:r79828,79830,79848,79853,79950-79951,79954,79989,80006-80007,80013,80016,80080,80083,80124,80128,80238,81833,83212,83590
142142 Merged /trunk/extensions/CodeReview/modules/ext.codereview.css:r81548
143143 Merged /branches/new-installer/phase3/extensions/CodeReview/codereview.css:r43664-66004
144144 Merged /branches/wmf-deployment/extensions/CodeReview/codereview.css:r60970
145145 Merged /branches/REL1_15/phase3/extensions/CodeReview/codereview.css:r51646
146146 Merged /branches/wmf/1.16wmf4/extensions/CodeReview/codereview.css:r67177,69199,76243,77266
Index: branches/wmf/1.17wmf1/extensions/CodeReview/backend/CodeRevision.php
@@ -422,13 +422,13 @@
423423 }
424424
425425 public function previewComment( $text, $review, $parent = null ) {
426 - $data = $this->commentData( $text, $review, $parent );
 426+ $data = $this->commentData( rtrim( $text ), $review, $parent );
427427 $data['cc_id'] = null;
428428 return CodeComment::newFromData( $this, $data );
429429 }
430430
431431 public function saveComment( $text, $review, $parent = null ) {
432 - $text = trim( $text );
 432+ $text = rtrim( $text );
433433 if ( !strlen( $text ) ) {
434434 return 0;
435435 }
@@ -870,7 +870,9 @@
871871 protected function tagData( $tags ) {
872872 $data = array();
873873 foreach ( $tags as $tag ) {
874 - if ( $tag == '' ) continue;
 874+ if ( $tag == '' ) {
 875+ continue;
 876+ }
875877 $data[] = array(
876878 'ct_repo_id' => $this->mRepoId,
877879 'ct_rev_id' => $this->mId,
@@ -880,15 +882,13 @@
881883 }
882884
883885 public function normalizeTag( $tag ) {
884 - global $wgContLang;
885 - $lower = $wgContLang->lc( $tag );
886 -
887886 $title = Title::newFromText( $tag );
888 - if ( $title && $lower === $wgContLang->lc( $title->getPrefixedText() ) ) {
889 - return $lower;
890 - } else {
891 - return false;
 887+ if ( $title ) {
 888+ global $wgContLang;
 889+ return $wgContLang->lc( $title->getDbKey() );
892890 }
 891+
 892+ return false;
893893 }
894894
895895 public function isValidTag( $tag ) {
Index: branches/wmf/1.17wmf1/extensions/CentralAuth/SpecialCentralAuth.php
@@ -10,7 +10,7 @@
1111 function execute( $subpage ) {
1212 global $wgOut;
1313 global $wgExtensionAssetsPath, $wgCentralAuthStyleVersion;
14 - global $wgUser, $wgRequest;
 14+ global $wgUser, $wgRequest, $wgContLang;
1515 $this->setHeaders();
1616
1717 $this->mCanUnmerge = $wgUser->isAllowed( 'centralauth-unmerge' );
@@ -28,6 +28,8 @@
2929 trim(
3030 str_replace( '_', ' ',
3131 $wgRequest->getText( 'target', $subpage ) ) );
 32+
 33+ $this->mUserName = $wgContLang->ucfirst( $this->mUserName );
3234
3335 $this->mPosted = $wgRequest->wasPosted();
3436 $this->mMethod = $wgRequest->getVal( 'wpMethod' );
Index: branches/wmf/1.17wmf1/includes/Sanitizer.php
@@ -1107,7 +1107,8 @@
11081108 * for XML and XHTML specifically. Any stray bits will be
11091109 * &-escaped to result in a valid text fragment.
11101110 *
1111 - * a. any named char refs must be known in XHTML
 1111+ * a. named char refs can only be < > & ", others are
 1112+ * numericized (this way we're well-formed even without a DTD)
11121113 * b. any numeric char refs must be legal chars, not invalid or forbidden
11131114 * c. use &#x, not &#X
11141115 * d. fix or reject non-valid attributes
@@ -1146,9 +1147,10 @@
11471148
11481149 /**
11491150 * If the named entity is defined in the HTML 4.0/XHTML 1.0 DTD,
1150 - * return the named entity reference as is. If the entity is a
1151 - * MediaWiki-specific alias, returns the HTML equivalent. Otherwise,
1152 - * returns HTML-escaped text of pseudo-entity source (eg &foo;)
 1151+ * return the equivalent numeric entity reference (except for the core <
 1152+ * > & "). If the entity is a MediaWiki-specific alias, returns
 1153+ * the HTML equivalent. Otherwise, returns HTML-escaped text of
 1154+ * pseudo-entity source (eg &foo;)
11531155 *
11541156 * @param $name String
11551157 * @return String
@@ -1157,8 +1159,11 @@
11581160 global $wgHtmlEntities, $wgHtmlEntityAliases;
11591161 if ( isset( $wgHtmlEntityAliases[$name] ) ) {
11601162 return "&{$wgHtmlEntityAliases[$name]};";
1161 - } elseif( isset( $wgHtmlEntities[$name] ) ) {
 1163+ } elseif ( in_array( $name,
 1164+ array( 'lt', 'gt', 'amp', 'quot' ) ) ) {
11621165 return "&$name;";
 1166+ } elseif ( isset( $wgHtmlEntities[$name] ) ) {
 1167+ return "&#{$wgHtmlEntities[$name]};";
11631168 } else {
11641169 return "&$name;";
11651170 }
Index: branches/wmf/1.17wmf1/includes/api/ApiQueryUsers.php
@@ -1,10 +1,10 @@
22 <?php
33 /**
4 - * API for MediaWiki 1.8+
54 *
 5+ *
66 * Created on July 30, 2007
77 *
8 - * Copyright © 2007 Roan Kattouw <Firstname>.<Lastname>@home.nl
 8+ * Copyright © 2007 Roan Kattouw <Firstname>.<Lastname>@gmail.com
99 *
1010 * This program is free software; you can redistribute it and/or modify
1111 * it under the terms of the GNU General Public License as published by
@@ -34,7 +34,7 @@
3535 *
3636 * @ingroup API
3737 */
38 - class ApiQueryUsers extends ApiQueryBase {
 38+class ApiQueryUsers extends ApiQueryBase {
3939
4040 private $tokenFunctions, $prop;
4141
@@ -66,6 +66,11 @@
6767 return $this->tokenFunctions;
6868 }
6969
 70+ /**
 71+ * @static
 72+ * @param $user User
 73+ * @return String
 74+ */
7075 public static function getUserrightsToken( $user ) {
7176 global $wgUser;
7277 // Since the permissions check for userrights is non-trivial,
@@ -104,14 +109,16 @@
105110 }
106111 }
107112
 113+ $result = $this->getResult();
 114+
108115 if ( count( $goodNames ) ) {
109 - $this->addTables( 'user', 'u1' );
110 - $this->addFields( 'u1.*' );
111 - $this->addWhereFld( 'u1.user_name', $goodNames );
 116+ $this->addTables( 'user' );
 117+ $this->addFields( '*' );
 118+ $this->addWhereFld( 'user_name', $goodNames );
112119
113 - if ( isset( $this->prop['groups'] ) ) {
 120+ if ( isset( $this->prop['groups'] ) || isset( $this->prop['rights'] ) ) {
114121 $this->addTables( 'user_groups' );
115 - $this->addJoinConds( array( 'user_groups' => array( 'LEFT JOIN', 'ug_user=u1.user_id' ) ) );
 122+ $this->addJoinConds( array( 'user_groups' => array( 'LEFT JOIN', 'ug_user=user_id' ) ) );
116123 $this->addFields( 'ug_group' );
117124 }
118125
@@ -119,9 +126,12 @@
120127
121128 $data = array();
122129 $res = $this->select( __METHOD__ );
 130+
123131 foreach ( $res as $row ) {
124132 $user = User::newFromRow( $row );
125133 $name = $user->getName();
 134+
 135+ $data[$name]['userid'] = $user->getId();
126136 $data[$name]['name'] = $name;
127137
128138 if ( isset( $this->prop['editcount'] ) ) {
@@ -132,19 +142,26 @@
133143 $data[$name]['registration'] = wfTimestampOrNull( TS_ISO_8601, $user->getRegistration() );
134144 }
135145
136 - if ( isset( $this->prop['groups'] ) && !is_null( $row->ug_group ) ) {
137 - // This row contains only one group, others will be added from other rows
138 - $data[$name]['groups'][] = $row->ug_group;
 146+ if ( isset( $this->prop['groups'] ) ) {
 147+ if ( !isset( $data[$name]['groups'] ) ) {
 148+ $data[$name]['groups'] = self::getAutoGroups( $user );
 149+ }
 150+
 151+ if ( !is_null( $row->ug_group ) ) {
 152+ // This row contains only one group, others will be added from other rows
 153+ $data[$name]['groups'][] = $row->ug_group;
 154+ }
139155 }
140156
141 - if ( isset( $this->prop['rights'] ) && !is_null( $row->ug_group ) ) {
 157+ if ( isset( $this->prop['rights'] ) ) {
142158 if ( !isset( $data[$name]['rights'] ) ) {
143159 $data[$name]['rights'] = User::getGroupPermissions( User::getImplicitGroups() );
144160 }
145161
146 - $data[$name]['rights'] = array_unique( array_merge( $data[$name]['rights'],
147 - User::getGroupPermissions( array( $row->ug_group ) ) ) );
148 - $result->setIndexedTagName( $data[$name]['rights'], 'r' );
 162+ if ( !is_null( $row->ug_group ) ) {
 163+ $data[$name]['rights'] = array_unique( array_merge( $data[$name]['rights'],
 164+ User::getGroupPermissions( array( $row->ug_group ) ) ) );
 165+ }
149166 }
150167 if ( $row->ipb_deleted ) {
151168 $data[$name]['hidden'] = '';
@@ -180,6 +197,7 @@
181198 }
182199 }
183200 }
 201+
184202 // Second pass: add result data to $retval
185203 foreach ( $goodNames as $u ) {
186204 if ( !isset( $data[$u] ) ) {
@@ -207,13 +225,13 @@
208226 }
209227 } else {
210228 if ( isset( $this->prop['groups'] ) && isset( $data[$u]['groups'] ) ) {
211 - $autolist = ApiQueryUsers::getAutoGroups( User::newFromName( $u ) );
212 -
213 - $data[$u]['groups'] = array_merge( $autolist, $data[$u]['groups'] );
214 -
215 - $this->getResult()->setIndexedTagName( $data[$u]['groups'], 'g' );
 229+ $result->setIndexedTagName( $data[$u]['groups'], 'g' );
216230 }
 231+ if ( isset( $this->prop['rights'] ) && isset( $data[$u]['rights'] ) ) {
 232+ $result->setIndexedTagName( $data[$u]['rights'], 'r' );
 233+ }
217234 }
 235+
218236 $fit = $result->addValue( array( 'query', $this->getModuleName() ),
219237 null, $data[$u] );
220238 if ( !$fit ) {
@@ -223,11 +241,12 @@
224242 }
225243 $done[] = $u;
226244 }
227 - return $this->getResult()->setIndexedTagName_internal( array( 'query', $this->getModuleName() ), 'user' );
 245+ return $result->setIndexedTagName_internal( array( 'query', $this->getModuleName() ), 'user' );
228246 }
229247
230248 /**
231249 * Gets all the groups that a user is automatically a member of
 250+ * @param $user User
232251 * @return array
233252 */
234253 public static function getAutoGroups( $user ) {
@@ -256,6 +275,7 @@
257276 ApiBase::PARAM_TYPE => array(
258277 'blockinfo',
259278 'groups',
 279+ 'rights',
260280 'editcount',
261281 'registration',
262282 'emailable',
Index: branches/wmf/1.17wmf1/includes/Title.php
@@ -3098,19 +3098,26 @@
30993099
31003100 // Refresh the sortkey for this row. Be careful to avoid resetting
31013101 // cl_timestamp, which may disturb time-based lists on some sites.
3102 - $prefix = $dbw->selectField(
 3102+ $prefixes = $dbw->select(
31033103 'categorylinks',
3104 - 'cl_sortkey_prefix',
 3104+ array( 'cl_sortkey_prefix', 'cl_to' ),
31053105 array( 'cl_from' => $pageid ),
31063106 __METHOD__
31073107 );
3108 - $dbw->update( 'categorylinks',
3109 - array(
3110 - 'cl_sortkey' => Collation::singleton()->getSortKey(
3111 - $nt->getCategorySortkey( $prefix ) ),
3112 - 'cl_timestamp=cl_timestamp' ),
3113 - array( 'cl_from' => $pageid ),
3114 - __METHOD__ );
 3108+ foreach ( $prefixes as $prefixRow ) {
 3109+ $prefix = $prefixRow->cl_sortkey_prefix;
 3110+ $catTo = $prefixRow->cl_to;
 3111+ $dbw->update( 'categorylinks',
 3112+ array(
 3113+ 'cl_sortkey' => Collation::singleton()->getSortKey(
 3114+ $nt->getCategorySortkey( $prefix ) ),
 3115+ 'cl_timestamp=cl_timestamp' ),
 3116+ array(
 3117+ 'cl_from' => $pageid,
 3118+ 'cl_to' => $catTo ),
 3119+ __METHOD__
 3120+ );
 3121+ }
31153122
31163123 if ( $protected ) {
31173124 # Protect the redirect title as the title used to be...
Property changes on: branches/wmf/1.17wmf1/includes/Title.php
___________________________________________________________________
Modified: svn:mergeinfo
31183125 Merged /trunk/phase3/includes/Title.php:r78990,79844,81548,82022,82193,83061,83067,83583,83610,83716,83764,83787,83813,83866
Index: branches/wmf/1.17wmf1/includes/DefaultSettings.php
@@ -2299,11 +2299,11 @@
23002300 * not, use only HTML 4-compatible IDs. This option is for testing -- when the
23012301 * functionality is ready, it will be on by default with no option.
23022302 *
2303 - * Currently this appears to work fine in Chrome 4 and 5, Firefox 3.5 and 3.6, IE6
2304 - * and 8, and Opera 10.50, but it fails in Opera 10.10: Unicode IDs don't seem
2305 - * to work as anchors. So not quite ready for general use yet.
 2303+ * Currently this appears to work fine in all browsers, but it's disabled by
 2304+ * default because it normalizes id's a bit too aggressively, breaking preexisting
 2305+ * content (particularly Cite). See bug 27733, bug 27694, bug 27474.
23062306 */
2307 -$wgExperimentalHtmlIds = true;
 2307+$wgExperimentalHtmlIds = false;
23082308
23092309 /**
23102310 * Abstract list of footer icons for skins in place of old copyrightico and poweredbyico code
Property changes on: branches/wmf/1.17wmf1/includes/DefaultSettings.php
___________________________________________________________________
Modified: svn:mergeinfo
23112311 Merged /trunk/phase3/includes/DefaultSettings.php:r78990,79844,81548,82022,82193,83061,83067,83583,83610,83716,83764,83787,83813,83866
Index: branches/wmf/1.17wmf1/languages/messages/MessagesOr.php
@@ -24,6 +24,30 @@
2525 '9' => '୯', # &#x0b6f;
2626 );
2727
 28+/** namespace translations from translatewiki.net
 29+ * @author Shijualex
 30+ * @author Psubhashish
 31+ */
 32+$namespaceNames = array(
 33+ NS_MEDIA => 'ମାଧ୍ୟମ',
 34+ NS_SPECIAL => 'ବିଶେଷ',
 35+ NS_TALK => 'ଆଲୋଚନା',
 36+ NS_USER => 'ବ୍ୟବହାରକାରି',
 37+ NS_USER_TALK => 'ବ୍ୟବହାରକାରିଁକ_ଆଲୋଚନା',
 38+ NS_PROJECT_TALK => 'ଉଇକିପିଡ଼ିଆ_ଆଲୋଚନା',
 39+ NS_FILE => 'ଫାଇଲ',
 40+ NS_FILE_TALK => 'ଫାଇଲ_ଆଲୋଚନା',
 41+ NS_MEDIAWIKI => 'ମିଡ଼ିଆଉଇକି',
 42+ NS_MEDIAWIKI_TALK => 'ମିଡ଼ିଆଉଇକି_ଆଲୋଚନା',
 43+ NS_TEMPLATE => 'ଟେଁପଲେଟ',
 44+ NS_TEMPLATE_TALK => 'ଟେଁପଲେଟ_ଆଲୋଚନା',
 45+ NS_HELP => 'ସାହାଯ୍ୟ',
 46+ NS_HELP_TALK => 'ସାହାଯ୍ୟ_ଆଲୋଚନା',
 47+ NS_CATEGORY => 'ବିଭାଗ',
 48+ NS_CATEGORY_TALK => 'ବିଭାଗିୟ_ଆଲୋଚନା',
 49+);
 50+
 51+
2852 $messages = array(
2953 'mytalk' => 'ମୋ କଥା',
3054 'navigation' => 'ଦିଗ୍ଦର୍ଶକ',
Index: branches/wmf/1.17wmf1/RELEASE-NOTES
@@ -608,6 +608,9 @@
609609 file is a multi-page file
610610 * (bug 10268) Added linktodiffs parameter on action=feedwatchlist
611611 * (bug 26219) Show API limits for multi values in description
 612+* (bug 28010) Passing a non existant user to list=users gives internal error
 613+* (bug 27549) action=query&list=users&usprop=groups doesn't show implicit
 614+ groups if a user doesn't have explicit groups
612615
613616 === Languages updated in 1.17 ===
614617
Property changes on: branches/wmf/1.17wmf1/RELEASE-NOTES
___________________________________________________________________
Modified: svn:mergeinfo
615618 Merged /trunk/phase3/RELEASE-NOTES:r78990,79844,81548,82022,82193,83061,83067,83583,83610,83716,83764,83787,83813,83866
Index: branches/wmf/1.17wmf1/resources/mediawiki.action/mediawiki.action.edit.js
@@ -11,7 +11,13 @@
1212 // JQuery should also normalize e.which to be consistent cross-browser,
1313 // however the same check is still needed regardless of jQuery.
1414
15 - if ( e.which === 0 || e.charCode === 0 || e.ctrlKey || e.altKey || e.metaKey ) {
 15+ // Note: At the moment, for some older opera versions (~< 10.5)
 16+ // some special keys won't be recognized (aka left arrow key).
 17+ // Backspace will be, so not big issue.
 18+
 19+ if ( e.which === 0 || e.charCode === 0 || e.which === 8 ||
 20+ e.ctrlKey || e.altKey || e.metaKey )
 21+ {
1622 return true; //a special key (backspace, etc) so don't interfere.
1723 }
1824
Index: branches/wmf/1.17wmf1/resources/mediawiki.util/mediawiki.util.test.js
@@ -169,4 +169,4 @@
170170
171171 mw.test.init();
172172
173 -} )(jQuery, mediaWiki);
\ No newline at end of file
 173+} )(jQuery, mediaWiki);
Index: branches/wmf/1.17wmf1/resources/mediawiki/mediawiki.js
@@ -14,7 +14,7 @@
1515 return str.substr( 0, 1 ).toUpperCase() + str.substr( 1, str.length );
1616 },
1717 escapeRE : function( str ) {
18 - return str.replace ( /([\\{}()\|.?*+-^$\[\]])/g, "\\$1" );
 18+ return str.replace ( /([\\{}()|.?*+\-^$\[\]])/g, "\\$1" );
1919 },
2020 isEmpty : function( v ) {
2121 var key;
Property changes on: branches/wmf/1.17wmf1/resources/mediawiki/mediawiki.js
___________________________________________________________________
Modified: svn:mergeinfo
2222 Merged /trunk/phase3/resources/mediawiki/mediawiki.js:r78990,79844,81548,82022,82193,83061,83067,83583,83610,83716,83764,83787,83813,83866
Index: branches/wmf/1.17wmf1/resources/mediawiki/mediawiki.log.js
@@ -35,7 +35,7 @@
3636 if ( !$log.length ) {
3737 $log = $( '<div id="mw-log-console"></div>' )
3838 .css( {
39 - 'position': 'absolute',
 39+ 'position': 'fixed',
4040 'overflow': 'auto',
4141 'z-index': 500,
4242 'bottom': '0px',

Past revisions this follows-up on

RevisionCommit summaryAuthorDate
r78990Giving #mw-log-console position 'fixed' instead of 'absolute' (to have it sta...krinkle03:42, 25 December 2010
r79844Don't trim comments, rtrim them....reedy21:55, 7 January 2011
r81548bug #27096 -- swap darkcyan for actual hex code in codereview css. It makes o...brion00:44, 5 February 2011
r82022ufirst the username to make sure that http://meta.wikimedia.org/wiki/Special:...raymond18:20, 12 February 2011
r82193* (bug 18523) Tags with spaces don't work...reedy21:34, 15 February 2011
r83061Disable $wgExperimentalHtmlIds again by default...simetrical01:35, 2 March 2011
r83067(follow-up r80554) If person typed max amount in edit summary, backspace didn...bawolff03:57, 2 March 2011
r83583Fix r74388: CSS for IE7 and below was put in a selector that only applies it ...catrope12:30, 9 March 2011
r83610Escape minus in $.escapeRE...krinkle21:50, 9 March 2011
r83716Normalize named entities to numeric...simetrical20:50, 11 March 2011
r83764check if session key is setjojo16:35, 12 March 2011
r83787* (bug 28010) Passing a non existant user to list=users gives internal error...reedy22:23, 12 March 2011
r83813bug 27948: namespace translations for Odia (from translatewiki.net)hashar10:36, 13 March 2011
r83866(bug 28020) Moving pages causes the cl_sortkey thats appropriate for one of t...bawolff02:19, 14 March 2011

Status & tagging log