Commit graph

90 commits

Author SHA1 Message Date
Kunal Mehta
d7c90f73b0 registration: Don't store 'requires' info as an attribute
We don't need this information at runtime since it only gets checked during
uncached loads of extensions. Also we're trying to shrink the information
we store in the cache (c.f. T187154).

Change-Id: I78d69a944079d346d6b69a4dd1ddb71879f996d0
2019-12-12 11:21:32 -08:00
Timo Tijhof
34bff221ba mediawiki.messagePoster: Introduce 'MessagePosterModule' extension attribute
This allows extensions to add additional files or dependencies to
the 'mediawiki.messagePoster' module bundle.

Bug: T235315
Change-Id: I17c34cbb26e786328d3d99beb0c0fa65e15ea084
2019-10-17 18:00:10 +00:00
Matthias Mullie
095a8e5d8a Registration: Allow relative paths in config arrays, not just strings
The previous code to allow relative paths (via "path": true) was
limited to only string values, which led to needing a non-static
registration callback function.

Bug: T231855
Change-Id: I4e82f38627f2f0d50d8b05a8c02b5a35342f6526
2019-10-08 10:20:04 -07:00
Bartosz Dziewoński
77f4bab8b7 Allow skins/extensions to define custom OOUI themes
This change follows I39cc2a735d9625c87bf4ede6f5fb0ec441d47dcc.

docs/extension.schema.v1.json
docs/extension.schema.v2.json
includes/registration/ExtensionProcessor.php
* The new extension attribute 'OOUIThemePaths' can be used to define
  custom OOUI themes. See I9187a63e509b601b8558ea82850fa828e5c8cc0a
  for an example usage.

includes/resourceloader/ResourceLoaderOOUIModule.php
* Add support for 'OOUIThemePaths'.
* Defining 'images' is now optional. I figure custom themes are
  unlikely to have or need them.
* Use ResourceLoaderFilePath objects to allow skin-/extension-defined
  OOUI module files to use skin/extension's base paths.
  This was previously used to support $wgResourceModuleSkinStyles,
  but only for 'skinStyles' - now ResourceLoaderFileModule needs
  to also handle it for 'skinScripts', and ResourceLoaderImageModule
  for 'images').

includes/resourceloader/ResourceLoaderFilePath.php
* Add getters for local/remote base paths, for when we need to
  construct a new ResourceLoaderFilePath based on existing one.

includes/resourceloader/ResourceLoaderFileModule.php
includes/resourceloader/ResourceLoaderImageModule.php
includes/resourceloader/ResourceLoaderOOUIImageModule.php
* Add or improve handling of ResourceLoaderFilePaths:
  * Replace `(array)` casts with explicit array wrapping, to avoid
    casting objects into associative arrays.
  * Use getLocalPath() instead of string concatenation.

tests/phpunit/includes/resourceloader/ResourceLoaderFileModuleTest.php
tests/phpunit/includes/resourceloader/ResourceLoaderImageModuleTest.php
* Some basic checks for the above.

Bug: T100896
Change-Id: I74362f0fc215b26f1f104ce7bdbbac1e106736ad
2019-07-10 22:08:14 +02:00
Tim Starling
3f0056a252 REST API initial commit
Add some of the basic REST API class hierarchies:

* EntryPoint
* Router
* Request
* Response
* Handler

The actual entry point file rest.php has been moved to a separate
commit, so this is just an unused library and service.

Bug: T221177
Change-Id: Ifca6bcb8a304e8e8b7f52b79c607bdcebf805cd1
2019-06-12 10:22:28 +10:00
Kunal Mehta
1aa819513b registration: Add development requirements to extension.json
Extensions can specify development dependencies in extension.json under
the "dev-requires" key. It's identical to the "requires" field.

Any requirement that is needed to pass tests, including but not limited
to, PHPUnit, QUnit, structure, phan, should be documented in this new
field. The main intention is that CI will ensure that all of these
dependencies are satisfied before running tests.

At standard runtime, the development requirements will be ignored by
MediaWiki, since it only checks for real requirements. Scripts can
manually check development requirements by calling
ExtensionRegistry::setCheckDevRequires( true ) before trying to load
things.

If both "requires" and "dev-requires" are present, MediaWiki will merge
the two together, so the environment will need to satisfy both before
proceeding.

Bug: T193824
Change-Id: I9b2936666ee3c96f5c976c7a17f11c437c2c7f48
2019-05-22 01:59:33 -07:00
Derick Alangi
6e20fadc21 registration: Remove wrong @return PHPDoc comments
$this->attributes is an array class property that gets set by the
method extractInfo(). This method really doesn't return an array
though in a sense $this->attributes gets set which can be used but
it's not returned.

Change-Id: I54e8065c63f81016425c7dd40ce87e1eb8ba0830
2019-03-25 14:17:47 +01:00
Timo Tijhof
d1666a89ff resourceloader: Support TestModules registration via extension.json
Bug: T126091
Change-Id: I27ecebe27d7aaebe6d1317bc5eaea9cca368b45d
2019-02-05 15:27:37 -08:00
Gergő Tisza
265cb893cb Add $wgReauthenticateTime to extension.json
Change-Id: I9722c065d522e18b6bf488c721f48ee7b7b9e494
2018-11-15 15:41:50 -08:00
Fomafix
43244db9a2 Use PHP 7 '??' operator instead of if-then-else
Change-Id: If9d4be5d88c8927f63cbb84dfc8181baf62ea3eb
2018-10-21 21:46:46 +02:00
Gergő Tisza
2ed7bdc46d
Require editsitecss/editsitejs for editing raw messages
Bug: T45646
Change-Id: Ib16db04e499ad28216ee08b8cccccf3f141e2bad
2018-08-26 23:56:06 +02:00
Timo Tijhof
ca510f742f resourceloader: Remove $wgResourceLoaderLESSVars support
The use of global variables was deprecated in favour of
ResourceLoaderModule::getLessVars() on a per-module basis.

Also moved testLessFileCompilation case to the appropiate file as it
covers ResourceLoaderFileModule.php, not ResourceLoader.php.

Bug: T140804
Depends-On: Ib1b2808df2384473bfac47f53a5d25d7c9bbca2b
Depends-On: I96047f69d01c4736306df2719267e6347daf556f
Change-Id: If708087c85c80355c7e78f1768529b5f2e16ed07
2018-08-14 18:57:45 +00:00
Florian Schmidt
488796a9c4 registration: Expose config array to ExtensionRegistry
Currently, the ExtensionProcessor processes the config array of the
extension and just sets the value as a global. In this way, however,
the metadata of the configs (description, public, ...) aren't available.

This change exposes the configurations in the extracted data as the
config key.

Bug: T155908
Change-Id: Ie41e6ecb8d08a5b20b56eb2281af1dfdd808b2c4
2018-07-19 15:59:15 +02:00
Bartosz Dziewoński
485f66f174 Use PHP 7 '??' operator instead of '?:' with 'isset()' where convenient
Find: /isset\(\s*([^()]+?)\s*\)\s*\?\s*\1\s*:\s*/
Replace with: '\1 ?? '

(Everywhere except includes/PHPVersionCheck.php)
(Then, manually fix some line length and indentation issues)

Then manually reviewed the replacements for cases where confusing
operator precedence would result in incorrect results
(fixing those in I478db046a1cc162c6767003ce45c9b56270f3372).

Change-Id: I33b421c8cb11cdd4ce896488c9ff5313f03a38cf
2018-05-30 18:06:13 -07:00
Kunal Mehta
5490b1270a registration: Improve duplicate config setting exception
We don't keep track of what set a specific global, so at least mention
the name of the extension that is setting a duplicate for easier
debugging.

Also, fix the case where if the first extension to be loaded was setting
a core setting, it would not throw an exception since config was being
processed before the rest of extension.json. Now we process config after
all core settings, going only before attributes.

Bug: T194319
Change-Id: I4fd96e7d167cf0652ee3e8e66167c86f2b91b992
2018-05-15 10:32:22 -07:00
Kunal Mehta
d3b580977d registration: Simplify extracting path based globals
The code for ParserTestFiles and ServiceWiringFiles was identical, so
unify it into one function. For most extensions, this should save two
unnecessary function calls as a bonus.

Change-Id: If5ed189f97b7d3b9cd7b550f3ad2e90abe30005d
2018-02-09 22:33:10 -08:00
Yifei He
b3840b25b3 Avoid using array_map in ExtensionRegistry and ExtensionProcessor for simple operations
Bug: T182645
Change-Id: Ia98b1d798b1f93ca30686c009d479668616229ae
2017-12-14 15:51:33 +00:00
jenkins-bot
5fa4cdf860 Merge "registration: Only allow one extension to set a specific config setting" 2017-10-24 17:52:23 +00:00
Kunal Mehta
72d92f6fe3 registration: Fix caching of load_composer_autoloader
Move the file_exists() check out of the extension processor and into the
extension registry so that it is evaluated at run time instead of during
caching. The prior way is problematic since we don't invalidate the
cache if the existence of the file were to change.

Bug: T176534
Change-Id: I98e4ffdfac9f98397a103966824519afe1375356
2017-09-22 22:20:16 -07:00
Florianschmidtwelzow
29a5fc72e3 registration: Only allow one extension to set a specific config setting
ExtensionProcessor would previously just blindly overwrite duplicate
config settings, which ends up depending upon load order.

It's relatively hard to debug since it is silently overwritten. This now
throws exceptions in case of duplicate config settings.

This will also have some side-effects of catching people putting things
like "ResourceModules" in their "config" section when it should be a
top-level item.

Bug: T152929
Depends-On: I4c5eaf87657f5dc07787480a2f1a56a1db8c714f
Change-Id: Ieeb26011e42c741041d2c3252238ca0823b99eb4
2017-08-28 15:03:47 +00:00
Thcipriani
236456777b Revert "registration: Only allow one extension to set a specific config setting"
Breaks mergeMessageFileList which means scap can't run in beta.

This reverts commit 50d7546057.

Change-Id: Idb65f1098abce28d49ebbcc8254c0976b6861c59
2017-08-22 20:40:15 +00:00
Florian Schmidt
50d7546057 registration: Only allow one extension to set a specific config setting
ExtensionProcessor would previously just blindly overwrite duplicate
config settings, which ends up depending upon load order.

It's relatively hard to debug since it is silently overwritten. This now
throws exceptions in case of duplicate config settings.

This will also have some side-effects of catching people putting things
like "ResourceModules" in their "config" section when it should be a
top-level item.

Bug: T152929
Change-Id: Iaef32efab397e82ff70ddca8ac79c545c5b7d2bb
2017-08-22 02:45:24 -07:00
Umherirrender
be42e09aa8 build: Prepare for mediawiki/mediawiki-codesniffer to 0.9.0
The used phpcs has a bug, so the version 0.9.0 could not be enforced at the moment.
Will be fixed in next version, see T167168

Changed:
- Remove duplicate newline at end of file
- Add space between function and ( for closures
- and -> &&, or -> ||

Change-Id: I4172fb08861729bccd55aecbd07e029e2638d311
2017-06-26 17:14:31 +00:00
jenkins-bot
9e8355c87d Merge "Allow namespaces defined in extension.json to be overwritten locally." 2017-05-21 08:02:22 +00:00
Kunal Mehta
fdb7e94104 registration: Move attributes out of the top level
This moves attributes out of the top level, and namespaces them under
each extension. If the extension that it belongs to is not installed,
the attribute is not exported and dropped.

The full name of the attribute is the name of the extension plus the
name of the attribute key. This enforces the recommendation that the
attribute name start with the extension's name.

Add test coverage for attributes under manifest_version 1 and 2.

Bug: T133627
Depends-On: I5a148763f68989c8da313a4fb1d0213658ee4495
Depends-On: I5a148763f68989c8da313a4fb1d0213658ee4459
Change-Id: I8613a027c56e2c9d2c6a83ca14749eb1c8fc23be
2017-05-15 20:09:50 -07:00
daniel
e4fc1ffec3 Allow namespaces defined in extension.json to be overwritten locally.
This allows extension namespaces to be assigned a custom ID, e.g. in case
the namespace pre-defined by the extension is already taken on the local
wiki.

This is done by defining the respective namespace constant in
LocalSettings.php.

Bug: T160462
Change-Id: If648d6e218847e6632d643ea724cd3da3945db70
2017-05-11 12:16:24 +02:00
Florian Schmidt
5f11f7818c registration: Generalize CoreVersionChecker to VersionChecker
This allows us to put other requirements more easily into extension
registration, such as skins and/or extensions.

Bug: T117277
Change-Id: I3ec1b28b6af380621585cd61b38e5ebb8be9f9c7
2016-12-14 19:18:09 +01:00
Kunal Mehta
b54acaf847 registration: Provide credits information to callbacks
Registration callbacks now provide basic credits information (name,
path, type, authors, license-name, version, etc.) as the first argument.
The main use case right now for this is to support extension VERSION
constants for backwards-compatibility.

In addition, callbacks now run *after* attributes are exposed, so
callbacks could use data from them if they wanted to.

Bug: T151136
Change-Id: Ic5965dd4e259e1f46222ac92b8e78750e67b51d6
2016-12-04 02:15:01 +00:00
Reedy
ad86dda42f registration: Set "FileExtensions" to $GLOBALS
Change-Id: Ie52004d25ebc06c81cd7d8d7de60479ff365ccea
2016-11-17 23:24:42 +00:00
Reedy
34e549ff61 registration: Support setting $wgPasswordPolicy in extension.json
Bug: T149597
Change-Id: I56c0b8932fcd42ec9b748529daa32a998fb19bf8
2016-11-17 22:46:32 +00:00
Reedy
154b4383fe Alphasort lists
Change-Id: Ibcc3541d5bd97eeda3b43a3f9acc2e90644b36b9
2016-11-09 21:29:18 +00:00
Yuri Astrakhan
25fd321ac2 registration: Fix ignoring 'merge_strategy' key in manifest_version 2
Bug: T148493
Change-Id: Ibd88c4dc98f36d7d8336691884bbaa9a4864da83
2016-10-18 06:47:50 +00:00
Kunal Mehta
64692bfd36 registration: Support 'ServiceWiringFiles' in extension.json
Change-Id: Ib413a14cb8e21207264fa1c45d84550b3eab7a4e
2016-08-25 23:08:28 -07:00
Kunal Mehta
93aed1e7eb registration: Support conditionally registered namespaces
Some extensions (e.g. EventLogging) conditionally register a namespace
depending upon the wiki's configuration using the CanonicalNamespaces
hook. Since the "namespaces" key automatically registers the namespace,
we need an option to not register it and let the extension take care of
that manually using the hook.

All of the other namespace related settings are safe to unconditionally
set since they won't do anything if the namespace doesn't actually
exist.

Bug: T141604
Change-Id: Ie8c217fdc8bd783b30f98210309ea56fef39c0da
2016-07-29 01:09:24 -07:00
Kunal Mehta
9ffc40235b registration: Support config setings that are relative paths
Add support for configuration settings that are relative paths to the
extension directory. The most common use-case for this is where the
extension ships a generic default file, but sysadmins or packagers may
want to override it. Setting `"path": true` on the config definition
will make the value be interpreted as a relative path.

And add tests!

Bug: T100956
Change-Id: Ia87ced25b35be7a314ee2937e0ccc63f9acc5bb5
2016-07-24 14:49:57 +00:00
Kunal Mehta
d68ea7ce6d registration: Fix merge_strategy in manifest_version 2
merge_strategy is set in $data, which is the definition of the config
setting, not the default value of it ($value).

Change-Id: I12ee95892b2c157bb0beb97cf2cd5ef920b7d52e
2016-07-24 11:47:40 +00:00
jenkins-bot
41269d28db Merge "registration: Convert "config" into an object with metadata" 2016-07-14 13:12:27 +00:00
Kunal Mehta
83ec5909d4 registration: Convert "config" into an object with metadata
To add extra metadata for "config" options without constantly adding
hacky underscore prefixed keys, convert "config" items into an object,
where the value is under a "value" key.

"_merge_strategy" is now just "merge_strategy", but still has the
underscore prefix for the cache structure, to avoid changing it.

Since this is a fully breaking change, it only applies to files with
manifest_version: 2 set. A conversion script has been added to assist
with automated conversion.

Bug: T133626
Change-Id: Id1071fc0647892438e5cd0e3ee621fbdaaa64014
2016-07-13 14:58:00 -07:00
jenkins-bot
fe922d470f Merge "registration: Remove broken ResourceLoaderLESSImportPaths support" 2016-07-06 02:23:46 +00:00
Kunal Mehta
0625f4e161 registration: Remove broken ResourceLoaderLESSImportPaths support
It never worked to begin with since it did not prefix paths, and the
documentation for it says it should not be used by extensions, so
let's stop pretending it works.

Bug: T108271
Change-Id: I665d4439d14406038f2ac767ee5ec6eb5b67fca6
2016-07-02 14:38:05 -07:00
jenkins-bot
771d4b49bc Merge "registration: Support Change/RemoveCredentialsBlacklist in extension.json" 2016-06-24 14:34:06 +00:00
Gergő Tisza
b86dd2dafe registration: Support Change/RemoveCredentialsBlacklist in extension.json
Change-Id: I4d796a46d99daa8841fcdcbe76dddf9db46af9ed
2016-06-24 13:25:19 +00:00
Kunal Mehta
78a7c5745a registration: Add support for $wgGrantPermissions & $wgGrantPermissionGroups
Change-Id: If336aa351ee5dc4dc07f63cfac2a5d236e501718
2016-06-20 20:45:51 +00:00
Brad Jorsch
d245bd25ae Add AuthManager
This implements the AuthManager class and its needed interfaces and
subclasses, and integrates them into the backend portion of MediaWiki.
Integration with frontend portions of MediaWiki (e.g. ApiLogin,
Special:Login) is left for a followup.

Bug: T91699
Bug: T71589
Bug: T111299
Co-Authored-By: Gergő Tisza <gtisza@wikimedia.org>
Change-Id: If89d24838e326fe25fe867d02181eebcfbb0e196
2016-05-16 15:11:02 +00:00
Gergő Tisza
055ec8817e registration: Handle $wgSessionProviders in ExtensionProcessor
See https://www.mediawiki.org/wiki/Manual:$wgSessionProviders

Change-Id: Ic9daf9898a0c044d1e2611ca0276d7904a3372ce
2016-05-12 19:09:34 +00:00
Florian
5d2df74a46 registration: Fix mode of files (755 -> 644)
Follows up 7c4d73183c.

Change-Id: I779534561ccb38b4c0f2ca5771dcb0aa810f930a
2016-05-06 18:26:07 +00:00
Florian
7c4d73183c registration: Allow string value for Hooks
Instead of forcing an object even for single-hook-listeners, allow
string values, too (one hook listener for one hook, only). Also:
use it as default for the conversion script, if only one listener
is added to a hook (which is usually the case). This leads into a
much cleaner output of the Hooks section of extension.json.

Bug: T133628
Change-Id: Ie9e54f0931c41706eb8d82d00256698992ec41cc
2016-05-03 13:23:07 -07:00
Glaisher
2093748e07 registration: Allow ActionFilteredLogs to be modified by extensions
Needed by Ibe628d9d08352

Change-Id: I7788fedc934b7c93facead796af30c89c335a513
2016-04-24 23:10:44 -07:00
Kunal Mehta
79a86afccf registration: Improve error message for non-array attributes
Change-Id: I7cbf7353ebbbbbbf36500f86164e3b32d7723cca
2016-03-12 19:03:29 +00:00
Timo Tijhof
04362aa613 registration: Avoid double slashes in localBasePath
Noticed it in APC usage for ResourceLoader that various keys from
FileContentsHasher contain double slashes. All from extensions that
use the `"localBasePath": ""` trick in extension.json (e.g. Citoid).

Change-Id: I5bac1e2e05e063aa7ff251ce7ffaa965a3451db9
2016-02-18 10:25:02 -08:00