Commit graph

62 commits

Author SHA1 Message Date
umherirrender
70f3afd548 Remove unneeded empty lines at begin of if/else/foreach body
An if body must not begin with an empty line

Change-Id: I62b058be337fcc85a120fcd3dadce564db59a271
2015-06-19 20:05:45 +02:00
Ori Livneh
87dfc20b1e Add StatsD metric logging
This patch adds a metric data service object to the IContextSource interface,
with full support for StatsD meters, gauges, counters and timing metrics, via
the liuggio/statsd-php-client, which this patch also introduces.

Usage example:

    $stats = $context->getStats();
    $stats->increment( 'resourceloader.cache.hits' );
    $stats->timing( 'resourceloader.cache.rtt', $rtt );

The metrics are flushed to a StatsD server, which may be specified via the
'StatsdServer' configuration key. If no such configuration key exists, the
metrics are discarded.

The StatsD client supplants MediaWiki's StatCounter class. wfIncrStats()
will continue to work, but it will delegate to the StatsD data object.

Change-Id: Ie10db1c154d225971398e189737de7c560bf0f90
2015-03-09 16:57:14 -07:00
Aaron Schulz
0d84b20a7c Added clarifying comments to IContextSource
* Also removed some duplicated comments

Change-Id: I2c967d0f3219f3533378ecd5f9fccc40c8f9b219
2015-03-07 13:39:07 -08:00
Aaron Schulz
f6ffc47b4d Clarified RequestContext doc comment
Change-Id: Ibb2a30634b192f4bc77e0b6b1afebc65b2ed3ec9
2015-03-02 21:38:45 +00:00
Aaron Schulz
4ff8136807 Removed remaining profile calls
Change-Id: I31c81c78715048004fc8fca0f27d09c1fa71c118
2015-01-08 02:49:33 -08:00
Brad Jorsch
87070fc674 API: Avoid unstubbing User for language pref when not needed
It's fairly common that the API doesn't need to load the user
preferences, except to implement the unfortunate default uselang=user.

So let's move the handling of uselang=user to
RequestContext::getLanguage(), and have the API just assume that its
parent context will eventually fall back to that for uselang=user.

Bug: T85635
Change-Id: I947348d87b31808d331055dac6feb0cc2e1dd15d
2015-01-05 11:59:48 -05:00
Reedy
4d9143c7f5 Add lots of @throws
Change-Id: I09d0c13070f966fcf23d2638d8fc1328279a5995
2014-12-24 13:49:20 +00:00
Kunal Mehta
0a7815967b Check hasTitle() in RequestContext::setWikiPage()
Calling getTitle() right away can lead to reading from
$wgTitle, so check with hasTitle() first.

This avoids a globaltitlefail in ApiEditPage.

Change-Id: I749cc33dd4f1fd6bc7598be34f37e591d822c3f2
2014-12-12 11:41:22 -08:00
Kunal Mehta
18d952dbcb Add more context to globaltitlefail logs
Currently stuff like:
 MessageCache::parse called by Message::toString/Message::parseText/MessageCache::parse with no title set.

is showing up in the logs, and is totally useless.

Change-Id: I0ac3ca906c5a67e19974e3434d0e929e6b27fbb2
2014-12-12 11:04:33 -08:00
Aaron Schulz
e369f66d00 Replace wfRunHooks calls with direct Hooks::run calls
* This avoids the overhead of an extra function call

Change-Id: I8ee996f237fd111873ab51965bded3d91e61e4dd
2014-12-10 12:26:59 -08:00
Chad Horohoe
95e6efc4d4 Improved/additional logging for $wgTitle abuses
Change-Id: I6599aa8abe30c1888ab5df023a0d4bf346315400
2014-11-10 11:04:43 -08:00
Aaron Schulz
f9ee99b2fa Loosened the CLI restriction in RequestContext::importScopedSession()
* Jobs can be run via HTTP runners rather than just CLI ones.
  The old check breaks jobs run on HHVM fcgi runners for example.
* Always check the validity of the IP for sanity.

Change-Id: I1d03c2ab6628b2d124bc7b9f6936788dea22e3e4
2014-10-01 23:05:23 +00:00
umherirrender
010cdb4360 Avoid [GlobalTitleFail] spam
MediaWiki::getTitle is checking, if a title is set on the context, but
that needs to call RequestContext::getTitle, which gives a warning, when
no title is set:

RequestContext::getTitle called by MediaWiki::getTitle with no title
set.

Adding a RequestContext::hasTitle function to check the title and avoid
the warning. Was added in I72c5c3fb75c9ceff02390c91b3735f2da90845de.

Change-Id: I4d8f8ef799cd91f0d2affe881019583ac77a31b7
2014-09-26 19:58:02 +02:00
Alexandre Emsenhuber
09149f2ea4 Add missing space to log message
Follow-up I72c5c3fb75 (6fc2e603).

Change-Id: I9375da8542b3c2fb33cf0b692ab38722445081bc
2014-09-23 12:18:57 +02:00
Chad Horohoe
6fc2e60319 Begin logging RequestContexts relying on global title
Change-Id: I72c5c3fb75c9ceff02390c91b3735f2da90845de
2014-09-22 15:25:19 -07:00
umherirrender
b0cfcd0fcb Add missing @return and @param to doc blocks
Change-Id: I9d99ba1968ed8f97624d957754c8847dfe1b41da
2014-08-27 21:57:45 +02:00
Bartosz Dziewoński
9e5443abc3 No space within the ?: operator
This style is a lot more common in our code.

Change-Id: I7f2fb3716c24c4a95a4c6c4a732b0226c315f242
2014-08-25 17:40:51 +02:00
jenkins-bot
d98adbae49 Merge "Use config instead of globals for ImageGallery" 2014-08-22 23:53:13 +00:00
umherirrender
a5ed2df445 Use config instead of globals for ImageGallery
Have to pass a context to the constructor to acutally use it for
settings.

Also adds a RequestContext::getMainAndWarn to get a default warning,
when using the main request, but it would be better to pass one.

Change-Id: I1628a1790c45d44aa4239701486b8b1b7c59a0e6
2014-08-22 22:36:59 +02:00
aude
513ff7975d Rename variable in RequestContext, $t => $title
Change-Id: Id416816f1c291fea9b7b97b41290b5078936705b
2014-08-18 12:51:40 +02:00
Kunal Mehta
fa46ef3f0c Normalize key before creating a Skin object
Bug: 69566
Change-Id: Id0af543cf206f47a3577019313597388ebc63b6a
2014-08-14 13:53:18 -07: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
Kunal Mehta
d6e7c6b3f1 RequestContext: Use Config instead of globals
Change-Id: Id6107d0446f5143e60885d002bc8df80a7dc7c10
2014-08-08 10:25:03 +01:00
withoutaname
8c2d4fa8e2 Make if checks in RequestContext.php more concise
Change-Id: Ieb1eaeb595fc77ba926ba6ff96140dff44ba840f
2014-07-21 23:50:23 +00:00
Kunal Mehta
78a8351111 Properly check whether a user exists
User::newFromId() will never return false. We have to actually
load from the database to see whether the user still exists.

Change-Id: Id9329635717e6a4f1f34d0b2b665bb790685d2fa
2014-07-13 22:03:00 -07:00
withoutaname
a395db765b Enforce type hinting for setTitle() in IContextSource subclasses
Change-Id: Iecd8535b04072823a6f4efe33697148f4d20118e
2014-07-13 01:05:39 +00:00
Max Semenik
859aa19359 Reset RequestContext between tests
Its state can change when people do something with objects it returns or
when they alter globals like $wgRequest. By resetting this singleton, we
ensure that no such change will propagate outside of a test.

Change-Id: I7e8598716d810a09c17f80a05deecab617b62346
2014-06-27 10:59:47 -07:00
daniel
9636d44448 Guard recursion flag against exceptions.
To avoid misleading errors in case of failed initialization,
flags used to protected against recursion need to be reset
in case of an exception being thrown.

Change-Id: Ifbc1db4b827012177fcfd271981179ebb2329b52
2014-06-24 15:55:39 +02:00
withoutaname
1be828aa6c Removed setLang() too from IContextSource subclasses
getLang() has been removed by e45e0b1a6.

Change-Id: I813f96b78211fbbe5b2e93488fcf1c28878b8d5a
2014-06-22 19:54:14 +00:00
withoutaname
e45e0b1a66 Removed getLang() from IContextSource and subclasses
Change-Id: I94c3df814c06c54c071f371101882dcc71c99417
2014-06-20 11:36:59 -07:00
jenkins-bot
5aec437d5e Merge "Make abstract Config class truly implementation-agnostic" 2014-05-27 01:43:39 +00:00
Kunal Mehta
8977e56a6b Make abstract Config class truly implementation-agnostic
Follow up to I13baec0b6 ("Config: Add Config and GlobalConfig classes"):

Config:
* Rather than returning Status objects, Config::set will now throw an exception
  if an error is encountered
* Config::factory was moved into it's own ConfigFactory class.
* Since there are no more functions in it, Config was turned into an interface.

GlobalConfig:
* Remove $prefix args from Config::set and ::get. The idea of having an
  abstract Config class is to abstract some notion of configuration data from
  the particular way in which it is currently implemented (global variables).
  So the abstract base class has no business dealing with variable name
  prefixes.
** Instead GlobalVarConfig's implementations of get and set call getWithPrefix
   and setWithPrefix internally, which are now protected
* Rename GlobalConfig to GlobalVarConfig, which makes it clearer that it isn't
  referring to the scope of the configuration value, but to the scope of the
  variable name which provides it.

ConfigFactory:
* ConfigFactory is where Config objects are registered, and later constructed.
* Config objects are registered with a given name, and a callback factory function.
  This allows for implementations to construct the object with the parameters they want,
  and avoids the overhead of needing an entire class.
** The name 'main' is the default object returned by RequestContext::getConfig(),
   and is intended to be used by core.
* This is a singleton class, the main instance can be obtained with:
  ConfigFactory::getDefaultInstance()

In addition to the above:
* $wgConfigClass was removed, and $wgConfigRegistry was introduced, which
  stores a name => callback. The name is to be what the Config instance is
  registered with, and the callback should return an implementation of Config.
* Tests were written for the new ConfigFactory, and GlobalVarConfig's tests
  were improved.

Co-Authored-By: Ori Livneh <ori@wikimedia.org>
Co-Authored-By: Chad Horohoe <chadh@wikimedia.org>
Co-Authored-By: Mattflaschen <mflaschen@wikimedia.org>
Co-Authored-By: Parent5446 <tylerromeo@gmail.com>
Co-Authored-By: Reedy <reedy@wikimedia.org>
Co-Authored-By: Daniel Kinzler <daniel.kinzler@wikimedia.de>
Change-Id: I5a5857fcfa07598ba4ce9ae5bbb4ce54a567d31e
2014-05-26 02:59:57 -07:00
Marius Hoch
e2fbfb2f3b Document that IContextSource::getTitle can return null
That can happen if wgTitle is null.

Change-Id: I3d8aab232d408e75afb8be82ca714bf5c4fe2427
2014-04-24 19:53:20 +02:00
umherirrender
9c614ac02d Fixed some @params documentation
Swapped some "$var type" to "type $var" or added missing types
before the $var. Changed some other types to match the more common
spelling. Makes beginning of some text in captial.

Change-Id: I8c9f30128b46086064326708a4878228ba459447
2014-04-14 19:52:18 +00:00
Siebrand Mazeland
f077c4b1d6 Update formatting
Change-Id: I18aff576262479c9bb1c56eb8e1d1aaae200e4b1
2014-02-06 09:27:05 +01:00
Kunal Mehta
fbfe789b98 Config: Add Config and GlobalConfig classes
Allows configuration options to be fetched from context.

Only one implementation, GlobalConfig, is provided, which
simply returns $GLOBALS[$name]. There can be more classes
in the future, possibly a database-based one. For convinience
the "wg" prefix is automatically added.

Ironically, this adds the $wgConfigClass global variable
which is used to determine which implementation of Config
to use by default.

The ContextSource getConfig and setConfig methods were introduced
in I23194d1ba (1.23), but have no uses in Gerrit, so they can safely
be re-purposed.

Change-Id: I13baec0b6d4ea7badf20b9c5f9b40846348838e4
2014-01-27 21:10:30 -08:00
jenkins-bot
57d3f41876 Merge "Begin exposing SiteConfiguration via site contexts" 2013-12-09 12:28:51 +00:00
Siebrand Mazeland
1cdc4ef09b Update formatting and documentation in includes/context/
Change-Id: I8bfdbe8f6d9c325063678e24a9d604f18eb83fc3
2013-11-20 05:25:22 +00:00
Chad Horohoe
101a2a160b Begin exposing SiteConfiguration via site contexts
First step of providing configuration without relying on globals.

You can use this in your code now as follows:
 $myvar = $context->getConfig()->get( 'wgMyVar' )

Change-Id: I23194d1ba747a9e0d925154ae065cbd612b4f591
2013-10-25 14:19:04 -07:00
Brad Jorsch
fc684345b1 Allow $context->setTitle( null )
If something is messing around with $wgTitle before MediaWiki::main()
sets $wgTitle in the first place, it needs to be able to reset it back
to null to avoid a problem like bug 53498. And to do that properly, it
also needs to be able to clear the title in the RequestContext.

Bug: 55435
Change-Id: I6c763b70bbffa0762ca52e61acf7dc200da4075f
2013-10-07 15:01:01 -04:00
Brian Wolff
4ccdde83dc Have Chunked upload jobs bail if cannot associate with session.
Also add docs about how suhosin.session.encrypt tends to break
this (I was thinking about throwing an exception if the setting was
on in RequestContext::importScopedSession, but the docs seem to
indicate that you can tweak how the session is encrypted, so it
sounds like somebody could set up their php so everything worked).

Bug: 48371
Change-Id: I5a471c1f941fce046451fbb9abce1c830185cabb
2013-07-07 23:30:39 -03:00
Timo Tijhof
176c5354bb docs: Consistently use "since" phrasing in @deprecated
Most have it already:
https://doc.wikimedia.org/mediawiki-core/master/php/html/deprecated.html

Ran a find/replace on "@deprecated \d" to fix the odd ones.

Change-Id: I5217aaf75264a0036b5426cd8536116b4bb8f535
2013-05-15 00:56:57 +00:00
umherirrender
ee31d37821 Fixed spacing in context/installer/media/templates/upload folder
Added spaces before if, foreach
Added some braces for one line statements

Change-Id: I9761be9fa47adc3554852a97b19792b4648466ad
2013-04-21 06:22:06 +00:00
Aaron Schulz
f31a0463aa Fixed importScopedSession() and moved exportUserSession() to RequestContext.
* Renamed WebRequest::exportUserSession -> RequestContext::exportSession.
  Updated the only callers of this new function.
* Init the user with User::newFromId() instead of relying on the session
  (which breaks when things like CentralAuth are enabled).
* Made RequestContext::exportSession() include the user ID.
* Removed now-redundant user ID checks in upload jobs.
* Added unit tests for the session import function.

Change-Id: I543e6766f7a8a828ea5d270328c3bc7738c6fe94
2013-03-15 12:49:54 -07:00
Aaron Schulz
fbf34d84ab [Upload] Moved async upload stuff to the job queue.
* (bug 44080) Also carry-over the IP and HTTP header info.
* This adds a RequestContext::importScopedSession() function.

Change-Id: Ie9c0a4d78fb719569c8149b9cc8a5430f0ac5673
2013-02-15 15:00:35 -08:00
Tim Starling
4d15d53259 Weaken the recursion guard on RequestContext::getLanguage()
Just log and soldier on, since for some reason we are seeing a lot of
these exceptions at the moment, with multiple root causes. Based on Matt
Walker's I49dbc2d7. Updates Idc11b547. See bug 44754.

Change-Id: I2e8c062741c1b2ec2acd68dc76d3fb6efb113571
2013-02-08 16:38:41 +11:00
Niklas Laxström
c014e6b060 (bug 44010) Pass context to UserGetLanguageObject
Only way to avoid messing with wrong request contexts.
Had to add recursion guard too.

Change-Id: Idc11b54752450321e01d92004e08fc95fb6170e6
2013-01-18 10:56:27 +01:00
Siebrand Mazeland
f741f6c092 Update doc comments and code formatting.
Change-Id: I1896d7b1ab5d11d3a609fd97db7c503ad6c590e5
2013-01-11 16:56:04 +01:00
Daniel Friesen
0b6b78d13a It should not be possible for a RequestContext's WikiPage and Title to be different.
Looks like someone messed with RequestContext when I wasn't looking at it.
WikiPage is a representation of the Title. It should not be possible for wikipage
to point to a different title than the context's title.

Fix this issue by unsetting WikiPage when setting title and updating title when
setting wikipage.

Change-Id: I40471b12d08763cb1b47b8382f96d8db94b4f319
2012-10-24 08:17:27 -07:00
umherirrender
85d8ee1f87 Remove a bunch of trailing spaces and unneeded newlines
Change-Id: I00f369641320acd7f087427ef031f3ee7efa0997
2012-10-10 20:14:40 +02:00