mwstake / mediawiki-component-contentprovisioner
提供将内容导入MediaWiki的类和服务
Requires
- composer/installers: ~1.0|~2
- mwstake/mediawiki-componentloader: ~1
Requires (Dev)
- mediawiki/mediawiki-codesniffer: 39.0.0
- mediawiki/minus-x: 1.1.1
- php-parallel-lint/php-console-highlighter: 1.0.0
- php-parallel-lint/php-parallel-lint: 1.3.2
- phpunit/phpunit: ^8.5
README
MediaWiki内容提供程序
提供一种机制,允许在 "maintenance/update.php" 期间导入一些任意信息。
此代码旨在在MediaWiki应用程序上下文中执行。没有打算独立使用。
在MediaWiki扩展中使用
MediaWiki 1.35
- 将
"mwstake/mediawiki-component-contentprovisioner": "~1"添加到您的composer.json文件的require部分。
MediaWiki 1.39
- 将
"mwstake/mediawiki-component-contentprovisioner": "~2"添加到您的composer.json文件的require部分。
需要显式初始化。这可以通过以下方式实现:
- 要么在您的
extension.json/skin.json中添加"callback": "mwsInitComponents" - 要么在您的扩展/skins自定义
callback方法中调用mwsInitComponents();
另请参阅 mwstake/mediawiki-componentloader.
注册要提供的内容
最初,内容提供程序需要 "manifest" 文件来获取要导入的数据。需要具有以下结构的JSON文件:
{
"Some_page": {
"lang": "de",
"target_title": "Some_page",
"content_path": "/pages/Main/Some_page.wiki",
"sha1": "<hash_of_the_content>",
"old_sha1": []
},
"Template:Some_template": {
"lang": "en",
"target_title": "Template:Some_template",
"content_path": "/pages/Template/Some_template.wiki",
"sha1": "<hash_of_the_content>",
"old_sha1": []
}
}
在这里,"old_sha1" 键包含先前内容版本的散列。对于已经存在的wiki页面,需要它们来识别它们是否只是过时或被用户添加/更改。
这些文件应以这种方式注册在特定扩展的 "extension.json" 中
{
"attributes": {
"MWStakeContentProvisioner": {
"ContentManifests": {
"DefaultContentProvisioner": [
"extensions/SomeExtension/path/to/manifest.json"
]
}
}
}
}
添加到 "DefaultContentProvisioner" 键的manifest将被默认内容提供程序处理。该内容提供程序仅导入manifest提供的相应wiki页面。
所有注册的文件将在下一次更新期间通过 "maintenance/update.php" 处理。
自定义内容提供程序
扩展可以在它们自己的内容提供程序中实现自己的导入逻辑。为此,需要有一个实现 "\MWStake\MediaWiki\Component\ContentProvisioner\IContentProvisioner" 接口的类。
注册自定义内容提供程序
要执行 "update.php",自定义内容提供程序必须以这种方式注册(ObjectFactory规范)
{
"attributes": {
"MWStakeContentProvisioner": {
"ContentProvisioners": {
"ArbitraryContentProvisionerKey": {
"class": "\\MediaWiki\\Path\\To\\ArbitraryProvisioner",
"args": [
"ManifestsKey"
],
"services": [
"ArbitraryService",
"SomeOtherService"
]
}
}
}
}
}
在这里 "ArbitraryContentProvisionerKey" 是一个键,它仅用于识别内容提供程序。它主要用于日志记录。"ManifestsKey" 是一个键,它将帮助识别应由特定内容提供程序处理的manifest。
注册要导入的自定义内容
默认情况下,自定义manifest文件,它将由自定义内容提供程序处理,必须以这种方式注册:
{
"attributes": {
"MWStakeContentProvisioner": {
"ContentManifests": {
"ManifestsKey": [
"extensions/SomeExtension/path1/to/manifest1.json",
"extensions/SomeExtension/path2/to/manifest2.json"
]
}
}
}
}
在这里 "ManifestsKey" 必须与传递给该内容提供程序的第一个参数相同的值。
跳过内容提供程序
如果某些内容提供程序需要禁用,可以通过 $mwsgContentProvisionerSkip 全局变量来完成。假设有一个以这种方式注册的自定义内容提供程序:
{
"attributes": {
"MWStakeContentProvisioner": {
"ContentProvisioners": {
"ArbitraryContentProvisionerKey": {
"class": "\\MediaWiki\\Path\\To\\ArbitraryProvisioner",
"args": [
"ManifestsKey"
],
"services": [
"ArbitraryService",
"SomeOtherService"
]
}
}
}
}
}
然后可以通过这种方式将其禁用:
$mwsgContentProvisionerSkip[] = 'ArbitraryContentProvisionerKey';
如果需要禁用默认内容提供程序,看起来类似:
$mwsgContentProvisionerSkip[] = 'DefaultContentProvisioner';