Commit graph

1140 commits

Author SHA1 Message Date
Bryan Davis
28a7ce420b Use MWLogger logging for legacy logging methods
Send wfDebug, wfDebugLog, wfLogDBError and wfLogDBError log messages to
the new MWLogger PSR-3 logger subsystem. Compatibility with the historic
logging operations of wfLogDBError are provided by MWLoggerLegacyLogger
and the MWLoggerLegacySpi logger factory.

Requires the MWLogger system introduced in I5c82299 and the Composer
managed libraries from Ie667944.

Change-Id: I1e5596d590144fbfdfd5f18bc42cf1ef0dbcac12
2014-10-29 11:55:08 -07:00
jenkins-bot
752df151c6 Merge "Make $wgMWLoggerDefaultSpi more expressive" 2014-10-27 17:08:04 +00:00
Bryan Davis
51b37035b3 Make $wgMWLoggerDefaultSpi more expressive
Allow $wgMWLoggerDefaultSpi to specify a more expressive object creation
by introducing a new ObjectFactory class which can process an array of
instructions to call either an object constructor or a factory method
with an array of arguments. This allows removal of the
$wgMWLoggerMonologSpiConfig global variable in favor of configuration
using $wgMWLoggerDefaultSpi.

New classes introduced:
; ObjectFactory
: Construct objects from configuration instructions.

Change-Id: If56cce5dcb1ad5712e238d6e2dab809a351f79be
2014-10-25 16:00:06 -06:00
Bryan Davis
982143bf4f Remove invalid CacheHelper entry from wgAutoloadLocalClasses
There were 2 CacheHelper keys in the array. Remove the one that pointed
to a non-existent file.

Change-Id: Ifb418fe8742b5515b500a6662b10efccd8273195
2014-10-21 21:46:38 -06:00
umherirrender
52f5634ba0 Migrate merge log to new log system
This allows use of gender on Special:Log
Old message is kept for use in irc,
a test is added to ensure a unchanged irc message.

Change-Id: I0557a0d2751540cf0d7967333ffd767b934011c6
2014-10-21 16:49:06 +00:00
jenkins-bot
cf93d76c03 Merge "Remove hitcounters and associated code" 2014-10-20 21:12:54 +00:00
Chad Horohoe
90d90dad6e Remove hitcounters and associated code
The hitcounter implementation in MediaWiki is flawed
and needs removal. For proper metrics, it is suggested to use
something like Piwik or Google Analytics.

RFC: https://www.mediawiki.org/wiki/Requests_for_comment/Removing_hit_counters_from_MediaWiki_core
Change-Id: I0e5006a7e8a09c800f8fa4effa9399e8afdd7a57
2014-10-20 13:01:55 -07:00
jenkins-bot
8aa43d083f Merge "Add a PSR-3 based logging interface" 2014-10-16 23:39:22 +00:00
Florianschmidtwelzow
317345b0df SpecialNewpages: Prepare for mw-ui
Use HTMLForm instead of self-built table structure, to be
prepared for use with MediaWiki UI.

Bug: 71446
Change-Id: I5c03dc543b910aab27a26a5a223341be50893cf3
2014-10-15 23:25:11 +02:00
Bryan Davis
9b35801650 Add a PSR-3 based logging interface
The MWLogger class is actually a thin wrapper around any PSR-3
LoggerInterface implementation. Named MWLogger instances can be obtained
from the MWLogger::getInstance() static method. MWLogger expects a class
implementing the MWLoggerSpi interface to act as a factory for new
MWLogger instances. A concrete MWLoggerSpi implementation using the
Monolog library is also provided.

New classes introduced:
; MWLogger
: PSR-3 compatible logger that wraps any \Psr\Log\LoggerInterface
  implementation
; MWLoggerSpi
: Service provider interface for MWLogger factories
; MWLoggerNullSpi
: MWLoggerSpi for creating instances that discard all log events
; MWLoggerMonologSpi
: MWLoggerSpi for creating instances backed by the monolog logging library
; MWLoggerMonologHandler
: Monolog handler that replicates the udp2log and file logging
  functionality of wfErrorLog()
; MWLoggerMonologProcessor
: Monolog log processer that adds host:wfHostname() and wiki:wfWikiID()
  to all records

New globals introduced:
; $wgMWLoggerDefaultSpi
: Default service provider interface to use with MWLogger
; $wgMWLoggerMonologSpiConfig
: Configuration for MWLoggerMonologSpi describing how to configure the
  Monolog logger instances.

This change relies on the Composer managed Psr\Log and Monolog libraries
introduced in Ie667944.

Change-Id: I5c822995a181a38c844f4a13cb172297827e0031
2014-10-14 00:20:32 +00:00
jenkins-bot
2e65d68c73 Merge "API: HTMLize and internationalize the help, add Special:ApiHelp" 2014-10-13 22:19:47 +00:00
Brad Jorsch
df457f3809 API: HTMLize and internationalize the help, add Special:ApiHelp
The existing API help, formatted as basically a plain-text document
embedded in XML and with a little bolding and a few links
syntax-highlighted in after the fact, works ok for experienced programmers
but isn't at all newbie-friendly. Further, all the help is hard-coded in
English, which isn't very friendly to non-English speakers.

So let's rewrite it. The help text is now obtained from i18n messages
and output in HTML, with the default display consisting of help for a
single module with links to help for other modules. This, of course,
necessitates deprecating many of the existing help-related methods and
hooks and replacing them with new ones, but backwards compatibility is
maintained for almost everything.

At the same time, action=paraminfo also needs to support the
'description' and other help-related fields being output in wikitext or
HTML, and I11cb063d (to access all modules via the 'modules' parameter
instead of having 'modules', 'formatmodules', 'querymodules', and so on)
is folded in.

And we also add Special:ApiHelp. When directly accessed, it simply
redirects to api.php with appropriate parameters. But it's also
transcludable to allow up-to-date API help text to be included within
the on-wiki documentation.

Note this patch doesn't actually add i18n messages for any API modules
besides ApiMain and ApiHelp. That will come in a followup patch, but for
the moment the backwards-compatibility code handles them nicely.

While we're messing with the documentation, we may as well add the
"internal" flag requested in bug 62905 (although the 'includeinternal'
parameter it also requests doesn't make much sense anymore) and a
"deprecated" flag that's needed by several modules now.

Bug: 30936
Bug: 38126
Bug: 42343
Bug: 45641
Bug: 62905
Bug: 63211
Change-Id: Ib14c00df06d85c2f6364d83b2b10ce34c7f513cc
2014-10-10 10:46:39 -04:00
aude
ec6ee905b5 Move TimestampException to exception directory
Change-Id: Id3829cbd155636839a272dc7e28e45bee7b87e8b
2014-10-06 11:03:54 +02:00
tholam
c24ef26d68 Set site logo in mediawiki.skinning.interface module instead of inline styles
Requires skins use the 'mw-wiki-logo' class on the logo element for the styles
to apply and to load the 'mediawiki.skinning.interface' module (or implement
their own skin module that uses the ResourceLoaderSkinModule class).

This is backwards compatible with skins using inline styles as the class only
applies when used.

Bug: 56257
Change-Id: I4e6db89a688843ac24539f8fd1b408c0d04881b3
2014-09-26 21:09:22 +00:00
jenkins-bot
e6e6861881 Merge "Add ability to pre-render thumbnails at upload time" 2014-09-25 15:40:07 +00:00
jenkins-bot
b022afc009 Merge "Split SkinTemplate.php per-class" 2014-09-24 15:59:08 +00:00
jenkins-bot
596e959d23 Merge "Add API output skin" 2014-09-24 15:20:41 +00:00
Brad Jorsch
55071b5bd9 Add API output skin
The API output for help and 'fm' formats will soon have need of
including ResourceLoader modules on an otherwise-bare page. The easiest
way to do this is to use OutputPage, but that requires a skin. So let's
add a skin that outputs a basic page without any navigation elements or
other chrome (that may be added later, but that can wait for Design to
decide they want to design it).

Change-Id: Ifa95fae5acaa3cfbf2ca58a15f8d0c51d84b455a
2014-09-24 11:07:57 -04:00
Bartosz Dziewoński
a3bf1f610e Split SkinTemplate.php per-class
Change-Id: Id964cdc3bd362d696628d62cd34615aa1fa6b014
2014-09-24 11:54:26 +02:00
Bartosz Dziewoński
bf1168b8cd Fix CSSJanus flipping in LESS mixins and remove broken custom LESS functions
Custom LESS functions are problematic for us for a number of reasons,
as outlined by Timo on bug 67368. We should get rid of them.

The only use case was implementing CSSMin data: URI embedding in LESS,
which used to be impossible due to lessc not preserving comments (bug
54673). However, thanks to new syntax added in f3779e06 we can insert
the annotations in such a way that the compiler won't mess with them.
The same technique is used in OOjs UI since 584ed144.

The LESS-function-based embedding implementation also meant that we
were unable to flip images for RTL (bug 66091 and friends: bug 66773,
bug 68326). The annotation one doesn't have this limitation.

Bug: 67368
Bug: 66091
Bug: 66773
Bug: 68326
Change-Id: I3062346ed63272a1c22b5df27b4cc1de2a699d9a
2014-09-20 20:28:22 +00:00
jenkins-bot
30646afb36 Merge "Add Special:MediaStatistics page for file type stats" 2014-09-19 08:03:42 +00:00
Brad Jorsch
8e938814c4 API: Add prop modules for backlinks
With the success of prop=redirects, let's create prop=linkshere,
prop=transcludedin, and prop=fileusage.

Let's also add a miser-mode-sensitive 'namespace' parameter to
prop=redirects, since the other three have a 'namespace' parameter using
the new *_from_namespace fields.

Change-Id: Ib650db9988a553771582eed0c183d0cae4b71252
2014-09-18 17:04:42 -04:00
Brian Wolff
e632eba946 Add Special:MediaStatistics page for file type stats
There used to be a bot on commons that did this, but it broke, and
this seems like the sort of thing that should be built in to
MediaWiki anyhow.

In order to do this, it abuses the querycache table somewhat
(Storing non-titles things in the title column).

Also changes the link on Special:Statistics for number of
uploads to link to new page. It seemed appropriate to link
to more detailed statistics instead of to Special:ListFiles.

Change-Id: I9ab768584b02a32b450d5f3981ff775ee07fecfa
2014-09-18 14:28:57 -03:00
jenkins-bot
c4ed6d1898 Merge "Add MultiConfig for fallback logic" 2014-09-18 13:13:39 +00:00
Kunal Mehta
412c4668f1 Add MultiConfig for fallback logic
This change adds MultiConfig and HashConfig classes,
but does not actually use them anywhere. In a future
change, we can convert DefaultSettings.php into
a HashConfig instance and use MultiConfig as the
'main' config instance.

Bug: 69418
Change-Id: I0ef2fbb86d5c27602d70240219ee08be31e2d09b
2014-09-17 15:55:04 -07:00
jenkins-bot
53e8f804e7 Merge "Start moving page move logic out of Title" 2014-09-16 22:51:37 +00:00
jenkins-bot
96efe0bc66 Merge "Revamp classic edit toolbar not to hardcode paths in HTML" 2014-09-16 12:51:21 +00:00
jenkins-bot
ed7ae208a4 Merge "Split BitmapHandler into two classes." 2014-09-16 08:27:49 +00:00
Yuri Astrakhan
3a28ee5acb CSS/JSON/JavaScript ContentHandler refactoring
* All content handlers that deal with code/data tend to have
English as their page language & pageview language, so moved common
code to the abstract CodeContentHandler class.

* Renamed JSONContent & JSONContentHandler into JsonContent*

Change-Id: I46819a0572ef5becc211d0d82471ff7102edaa3c
2014-09-15 08:24:15 +00:00
Kunal Mehta
77698193f9 Start moving page move logic out of Title
This moves most of the Title::moveTo() function into a new MovePage
class, and the entirety of the Title::moveToInternal() function.

No actual code was changed except for requiring a User object in
function arguments instead of relying up on $wgUser, and changes
to "$this" as necessary.

Change-Id: I5479fa8f3920a51ddf789d55edae7dd0d9b24382
2014-09-14 19:29:53 -07:00
Brian Wolff
757a70ae0a Split BitmapHandler into two classes.
BitmapHandler has a lot of generic-ish functionality that could
be re-usable by extension classes (Such as how it organizes
$scalerParams array, or various image magick escaping methods).
However it's combined with a lot of very format specific things,
such as the shell-out call to image magick.

Try to separate out the more generic stuff into
TransformationalImageHandler. In order to do this, I also made
canRotate, autoRotateEnabled, and getScalerType non-static. No
extensions in our repo appeared to be using these methods, and they
don't really make sense to be static (imo).

In particular, I think code duplication can be reduced in
PagedTiffHandler by extending this new class. See comments
on I1b9a77a4a56eeb65.

Change-Id: Id3a8b25a598942572cb5791a95e86054d7784961
2014-09-14 22:10:37 +00:00
Kunal Mehta
bf8810d6bc Split UserMailer.php into includes/mail/
Change-Id: Ic435bbdbb690028a5d34e8176522fcf4aa44fa92
2014-09-14 19:03:03 +00:00
Bartosz Dziewoński
285c52039b Revamp classic edit toolbar not to hardcode paths in HTML
Also, try out a way to have per-module LESS variables defined in PHP.
This might come in handy in the future… Maybe for skin theme support?

(I recommend reviewing the file changes in the order below. :D)

includes/resourceloader/ResourceLoaderFileModule.php
  * Pass the context (ResourceLoaderContext) deeper down via
    readStyleFiles() and readStyleFile(). We need it to compile the
    .less files for the right language.
  * Extract LESS compiler creation to getLessCompiler().
  * Allow passing a LESS compiler instance to compileLessFile(), rather
    than getting one after the method is called.

  All of the changes are backwards-compatible.

includes/resourceloader/ResourceLoaderEditToolbarModule.php
  * New module to support getting the language data and passing it to
    LESS variables.

  It might be a good idea to factor out a reusable class for a LESS
  module with additional variables, but that would require more
  attention to design than I gave it.

resources/src/mediawiki.action/mediawiki.action.edit.toolbar/mediawiki.action.edit.toolbar.less
  * Glue code to use the language data defined by the module above and
    put it in final CSS.

includes/EditPage.php
  * Do not hardcode image URLs in output HTML, as they are provided in
    CSS now. This gets rid of some usage of globals.

  In fact, we should be able to finally move the inline JavaScript
  calls out of getEditToolbar(), but I'm already introducing too many
  changes for one patch. That can be done later.

languages/Language.php
  * Add getImageFiles() to complement existing getImageFile() method.
    Misleadingly named, it returns paths for images for the toolbar
    only (and no other ones at all).

skins/common/ → resources/src/mediawiki.action/mediawiki.action.edit.toolbar/
  * Moved all of the button images to new location.

  Also, boring cleanup that was harder before because we treated the
  paths as public API:
  * Placed default ones in en/ subdirectory.
  * Renamed cyrl/ to ru/.
  * Renamed ksh/button_S_italic.png → ksh/button_italic.png.

languages/messages/
  * Adjusting paths and filenames for the changes above.

resources/src/mediawiki.action/mediawiki.action.edit.css
resources/src/mediawiki.action/mediawiki.action.edit.js
  * Added styles and updated the script to make it possible to have
    non-<img> elements as toolbar buttons.
  * Consolidated styles that were already required, but defined
    somewhere else:
    * `cursor: pointer;` (from shared.css)
    * `vertical-align: middle;` (from commonElements.css)

Bug: 69277
Change-Id: I39d8ed4258c7da0fe4fe4c665cdb26c86420769c
2014-09-13 23:16:23 +02:00
Gilles Dubuc
623d778902 Add ability to pre-render thumbnails at upload time
This introduces an option that allows one to define a list of
thumbnail sizes to be rendered by async jobs at upload time.

Change-Id: Ida193699738c79aca333fa78b8b536d14a410841
Mingle: https://wikimedia.mingle.thoughtworks.com/projects/multimedia/cards/301
2014-09-12 09:20:41 +02:00
Kunal Mehta
9382608922 Move Config::set() to MutableConfig::set()
Introduces a new interface for Config types
that are mutable. Not all Config instances
should be mutable, like MultiConfig.

Change-Id: I56e193cbbf72b7afdf551f60ea635fc347e14b3e
2014-09-11 08:26:43 -07:00
jenkins-bot
4dd56b2268 Merge "API: created a new api to flag messages as read" 2014-09-08 15:20:30 +00:00
Petr Bena
2077a43b5a API: created a new api to flag messages as read
New api is called "ClearHasMsg" and does nothing but erase a new message
flag from currently logged in user.

This is useful for tools that can read the new messages using some api, or some
other way (loading the text using different session, preload the text using a
buffer where it's unrevealed later if user actually did read it, or closed the
application before), so it can be useful in situations when you need to flag new
messages as read in a different time than that when you actually read them.

Bug: 64238
Change-Id: Ife575711c32bb8e3bcac789de4a6b37e1888d032
2014-09-06 21:26:40 +00:00
Aaron Schulz
b1d215726e Removed LCStoreAccel class
* Since individual message keys can expire, this can cause broken
  messages when such a key is needed (the message is treated as if
  it did not exist). The base class clearly documents a need for
  more atomicity (only top level keys can fall it separately).

Change-Id: I992bba77a0afdeeeade8be013708277b79f22314
2014-09-05 13:33:10 -07:00
Aaron Schulz
a9ba7d45f4 Added BloomCache classes
* Implemented a version of BloomCache using Redis
* Added a BloomCheckTitleHasLogs handler class for avoiding
  slow logging table queries when large amounts of 404 pages
  are viewed (by various web crawlers at the moment).

bug: 67439
Change-Id: I26e5034755e3a7208a45991b1cf2f12467679cc1
2014-09-03 17:43:21 +00:00
Chad Horohoe
a7ab193d45 Category finder style cleanups
* Renamed class to CategoryFinder (camel case)
* Removed pointless empty constructor
* Swapped wfProfileIn/Out for ProfileSection
* Renamed scan_next_layer() to scanNextLayer() because underscores
  are ugly (no public callers)
* Made scanNextLayer() and check() private, no callers outside class
* Explicitly made run() and seed() public
* Removed ugly underscores from seed() parameter
* More useful variable name in single caller

Change-Id: Iaffea7634c7b17ed5324b3b5c9b938c1a1348555
2014-08-29 11:52:42 -07:00
Brad Jorsch
2bb0768d3c API: Organize classes
* Group methods in ApiBase by function
* ApiBase::validateLimit and ApiBase::validateTimestamp are now
  protected; there are no callers in any extensions in Gerrit
* Group methods in ApiQueryBase by function
* Move ApiFormatFeedWrapper out of ApiFormatBase.php
* Deprecate some methods in ApiQueryBase that seem useless and are
  unused in core or any extensions in Gerrit

Change-Id: I32092f13906b6826d2137401724c21ccefa6f670
2014-08-27 16:39:24 -04:00
Brad Jorsch
f637ad308f Add HTMLAutoCompleteSelectField
This is much like the one OAuth has in
Special:OAuthConsumerRegistration/propose, except it stores the
autocompletion options in a data property rather than a global and uses
jquery.suggestions rather than jquery.ui.autocomplete.

Change-Id: I42473cea75f3706cc0125167f9191275ca6cb3b0
2014-08-26 15:14:23 -04:00
jenkins-bot
c1ad8bd3a7 Merge "API: Overhaul token handling" 2014-08-26 19:09:21 +00:00
Brad Jorsch
fdddf94570 API: Overhaul token handling
The current token handling is a mess. This simplifies things greatly:
* *All* tokens are obtained from action=query&meta=tokens, rather than
  being spread over action=tokens, action=query&prop=info,
  action=query&prop=revisions, action=query&prop=recentchanges, and
  action=query&prop=users. All these old methods are deprecated.
* Similarly, there is only one hook to register new token types. All old
  hooks are deprecated.
* All tokens are cacheable.
* Most token types are dropped in favor of a 'csrf' token. They already
  were returning the same token anyway.
* All token-using modules will document the required token type in a
  standard manner in action=help and are documented in machine-readable
  fashion in action=paraminfo.

Note this will require updates to all extensions using tokens.

Change-Id: I2793a3f2dd64a4bebb0b4d065e09af1e9f63fb89
2014-08-26 14:53:45 -04:00
Bartosz Dziewoński
7d04663398 Split includes/Pager.php
Change-Id: I67fcffca4e3de081a895deb1a285a5545940ece9
2014-08-23 14:25:02 +02:00
umherirrender
fbba43358e Split RevisionDeleteAbstracts.php to separate files
Same as I244a66fe19c089df4bcabcf745536d99b2103bc4

Change-Id: I90cea070a8e24d82f0675f122c79326988351e08
2014-08-20 19:08:33 +02:00
jenkins-bot
a15fe7dd93 Merge "Turn HTMLBlockedUsersItemSelect into HTMLSelectLimitField" 2014-08-15 21:40:32 +00:00
withoutaname
e53c6dbd8d actions: Move SubmitAction class out of EditAction.php
Straight move, except for the slight change in the comparison operator
for session_id().

Change-Id: I9404f48ee75ff3d3655f2f5b75a05d66f334b80d
2014-08-12 22:26:54 +00:00
Kunal Mehta
eb37e9d1ff Introduce SkinFactory
Modeled similar to ConfigFactory, this lets skins
register themselves via a callback, allowing for
proper dependency injection.

Loading via $wgValidSkinNames is still supported,
but considered "legacy", not deprecated though.

Skin::newFromKey is now deprecated (and had only
one caller in an extension, which I'll update
afterwards).

Change-Id: I1960483f87c2ef55c994545239b728fa376f17f4
2014-08-09 21:40:54 +01:00
Tom Arrow
9ae72401fa Split SkinFallback and SkinfallbackTemplate
Change-Id: I55c866c08d4f442021c43068efe64be871afb96b
2014-08-09 12:17:08 +00:00