* Two callers of wfArrayMerge() were bugs, both assuming strange and complex behaviour in wfArrayMerge() which has never been present or documented.
* Introduced wfMergeErrorArrays() to remove duplicates from merged error arrays, e.g. from getUserPermissionsErrors().
* Rewrote the remaining callers of wfArrayMerge() to use array plus. It makes the code clearer, assuming the reader knows more about basic PHP operators than GlobalFunctions.php. Considering the two bugs discussed above, this seems like a fair assumption. If you don't know PHP, you shouldn't be writing MediaWiki code.
There's no link to the full log; the last entry may not always be very clear. It's also pretty long and technical, filled with crap like:
23:49, 19 October 2008 WikiSysop (Talk | contribs) changed protection level for "Main Page" [edit=autoconfirmed] (indefinite) [move=autoconfirmed] (indefinite) (hist)
It would probably be more user-friendly to show the comment describing the purpose of the protection... which of course might not have anything to do with the last log entry (which might be "changing expiration date" or something).
Backing out for now...
Use of:
$action_desc[0] = strtolower($action_desc[0]);
is horrible wrong for a few reasons:
1) The first-byte match fails for all non-ASCII characters -- use lcfirst()!
2) System strtolower() or lcfirst() may not work for UTF-8 or lang-specific issues properly; use $wgLang->lcfirst()
3) You shouldn't be forcing things to lowercase here anyway, you can't know it's correct gramattically.
This whole message output should be redone cleanly; either all the rights info messages should be designed to work in an inline list sentence, or they should be formatted as stand-alone text strings using a <ul> or something.
* Moved SkinTemplate::addStyle() and related stuff to OutputPage so that it can be used non-SkinTemplate skins and avoid duplication with the actual OutputPage::addStyle() (the two functions have the same format).
* Non-SkinTemplate skins now also load their CSS with <link> tags instead of @import.
* Moved SkinTemplate::setupUserCss() to Skin.
* Merged action=raw&gen=(js|css) for SkinTemplate and non-SkinTemplate skins, renamed functions to Skin::generateUserJs() and Skin::generateUserStyleSheet() and dropped a lot of cascading call which is a bit incomprehensible.
* Remove some code duplication
* Fix some errors and plural failures in OutputPage::permissionRequired()
* Make the badaccess messages consistently wikitext now; in last rev they were output in different ways in each usage
* Should be a bit cleaner, and remove those ugly ugly switch() statements.
* Two messages are all that's needed here. Badaccess-group0, a generic "Permission denied" when no group is allowed access; and badaccess-groups which takes two parameters of $1 (groups required for access) and $2 (number of group matches, used for {{PLURAL:}}ing the message).
As was pointed out, it's probably better anyway that the vandal noindex a page and have nothing turn up in searches if the search engine arrives at that exact time, than to have the vandal replace the page with "ARTICLE SUBJECT IS A POOPY-HEAD" and have that turn up in searches if the search engine arrives at that exact time. :) At any rate, this should solve the issue.
* Currently __INDEX__ will override __NOINDEX__ regardless of their relative positions, due to the way things are written. Instead, the last one on the page should win. This should be pretty easy to fix.
* __INDEX__ and __NOINDEX__ override $wgArticleRobotPolicies. This is almost certainly incorrect, but it's not totally obvious how to fix it, because of the way the code is structured. Probably not a big deal, but should probably be fixed at some point.
* Anyone can add and remove the magic words, and there's no config option to disable them. It's not obvious whether this is okay or not. It would be a one-line change to OutputPage.php to have a config option to ignore the magic words, maybe per-namespace or who knows what.
* Instead of saying 'do that' in a permissions error, actually list what the action is (drawn from the right-$1 messages). This isn't perfect - it says you don't have permission to edit pages when
you can't edit a single page, but it's better than 'do that'.
* Refactor out some code from various block files into Block::formatExpiry and Block::parseExpiryInput.
* Don't display 'you cannot edit special pages' when you're trying to execute, or create an account, or something like that.
* New AbortAutoblock hook (for use in TorBlock extension), which allows extensions to cancel autoblocks.
Doxygen documentation update:
* Changed alls @addtogroup to @ingroup. @addtogroup adds the comment to the group description, but doesn't add the file, class, function, ... to the group like @ingroup does. See for example http://svn.wikimedia.org/doc/group__SpecialPage.html where it's impossible to see related files, classes, ... that should belong to that group.
* Added @file to file description, it seems that it should be explicitely decalred for file descriptions, otherwise doxygen will think that the comment document the first class, variabled, function, ... that is in that file.
* Removed some empty comments
* Removed some ?>
Added following groups:
* ExternalStorage
* JobQueue
* MaintenanceLanguage
One more thing: there are still a lot of warnings when generating the doc.